From decwrl!elroy.jpl.nasa.gov!jarthur!uunet!zephyr.ens.tek.com!tekred!saab!billr Sat Mar 3 16:24:59 PST 1990 Article 807 of comp.sources.games: Path: decwrl!elroy.jpl.nasa.gov!jarthur!uunet!zephyr.ens.tek.com!tekred!saab!billr From: billr@saab.CNA.TEK.COM (Bill Randle) Newsgroups: comp.sources.games Subject: v08i089: mgt - My Go Teacher program to read Smart-GO files, Part02/05 Message-ID: <5193@tekred.CNA.TEK.COM> Date: 20 Feb 90 19:32:40 GMT Sender: news@tekred.CNA.TEK.COM Lines: 3175 Approved: billr@saab.CNA.TEK.COM Submitted-by: Jeff Boscole Posting-number: Volume 8, Issue 89 Archive-name: mgt/Part02 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'build.c' <<'END_OF_FILE' X X/* X X "mgt" Copyright 1990 Shodan X All Rights Reserved. X Program by Greg Hale X XPermission to use, copy, modify, and distribute this software and its Xdocumentation for any purpose and without fee is hereby granted, Xprovided that this entire comment and copyright notice appear in all Xcopies and that both that copyright notice and this permission notice Xappear in supporting documentation. No representations are made about Xthe suitability of this software for any purpose. It is provided "as Xis" without express or implied warranty. X XPlease send copies of extensions to: X Xhale@scam.berkeley.edu X128.32.138.4 scam.berkeley.edu sting sting.Berkeley.EDU X XDonations for the 'From My Go Teacher' series may be sent to: X Shodan X P.O. Box 4456 X Berkeley, CA 94704 X (415) 849-9475 X X*/ X X#include "mgt.h" X#include "var.h" X#include "file.h" X Xint lastMoveX, lastMoveY, moveNum, lastTurn; X XFUNCTION void clearLast() X{ X lastMoveX = lastMoveY = -1; X moveNum = 0; X} X XFUNCTION void highlightLast() X{ X (*io->highlightLast)(lastMoveX,lastMoveY,moveNum,lastTurn); X} X XFUNCTION void doPlace(p,b,t,ismove) Xproperty *p; XpBoard b; Xpiece t; Xboolean ismove; X{ X int i,j; X for (i=boardsize; i--;) X for (j=boardsize; j--;) X if (getCoord(i,j,(coordList *)p->d)) { X placeStone(b,i,j,t); X } X if (p->t == t_Black || p->t == t_White) X moveNum++; X} X XFUNCTION void doProps(p,b) Xproperty *p; XpBoard b; X{ X while (p) { X switch(p->t) { X case t_White: X BUG("t_White "); X doPlace(p,b,P_WHITE,true); break; X case t_Black: X BUG("t_Black "); X doPlace(p,b,P_BLACK,true); break; X case t_AddWhite: X BUG("t_AddWhite "); X doPlace(p,b,P_WHITE,false); break; X case t_AddBlack: X BUG("t_AddBlack "); X doPlace(p,b,P_BLACK,false); break; X case t_AddEmpty: X BUG("t_AddEmpty "); X doPlace(p,b,P_NOTHING,false); break; X case t_Comment: X case t_Letter: X default: X BUG("default "); X } X p = p->next; X } X} X XsetLastMovePos(p) Xproperty *p; X{ X int i,j; X lastTurn = p->t == t_White ? 1 : 0; X for (i=boardsize; i--;) X for (j=boardsize; j--;) X if (getCoord(i,j,p->d)) { X lastMoveX = i; X lastMoveY = j; X } X} X XFUNCTION void doPropComment(n) Xnodep n; X{ X property *p; X X if (p = getprop(n,t_Comment)) X (*io->displayComment)((char *)p->d); X X if (p= getprop(n,t_Black)) X setLastMovePos(p); X else if (p= getprop(n,t_White)) X setLastMovePos(p); X} X XFUNCTION void buildTree0(n,b) Xnodep n; XpBoard b; X{ X BUG("parent >"); X if (n) { X buildTree0(n->parent,b); X BUG("\nprops:"); X doProps(n->p,b); X } X} X X X XFUNCTION void buildTree(n,b) Xnodep n; XpBoard b; X{ X boardClear(b); X (*io->clearComment)(); X BUG("buildTree:\n"); X clearLast(); X buildTree0(n,b); X doPropComment(n); X} X X XFUNCTION void updateBoard(dst,new) XpBoard dst,new; /* update dst to look like new */ X{ X int i,j; X X BUG("UpdateBoard\n"); X for (i=boardsize; i--;) X for (j=boardsize; j--;) { X if (boardGet(new,i,j) != boardGet(dst,i,j)) { X (*io->setPiece)(dst,i,j,boardGet(new,i,j)); X } X } X} END_OF_FILE if test 2959 -ne `wc -c <'build.c'`; then echo shar: \"'build.c'\" unpacked with wrong size! fi # end of 'build.c' fi if test -f 'doit.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'doit.c'\" else echo shar: Extracting \"'doit.c'\" \(4166 characters\) sed "s/^X//" >'doit.c' <<'END_OF_FILE' X X/* X X "mgt" Copyright 1990 Shodan X All Rights Reserved. X Program by Greg Hale X XPermission to use, copy, modify, and distribute this software and its Xdocumentation for any purpose and without fee is hereby granted, Xprovided that this entire comment and copyright notice appear in all Xcopies and that both that copyright notice and this permission notice Xappear in supporting documentation. No representations are made about Xthe suitability of this software for any purpose. It is provided "as Xis" without express or implied warranty. X XPlease send copies of extensions to: X Xhale@scam.berkeley.edu X128.32.138.4 scam.berkeley.edu sting sting.Berkeley.EDU X XDonations for the 'From My Go Teacher' series may be sent to: X Shodan X P.O. Box 4456 X Berkeley, CA 94704 X (415) 849-9475 X X*/ X X#include X#include "file.h" X#include "mgt.h" X#include "var.h" X X XFUNCTION nodep search(n,bSearch) Xnodep n; Xboolean bSearch; X{ X nodep s; X if (!n || n->nodeNum == searchNodeNum) X return n; X s = search(child(n,false),false); X if (s && s->nodeNum == searchNodeNum) X return bSearch ? search(child(n,bSearch),bSearch) : s; X s = search(nextSibling(n,false),false); X if (s && s->nodeNum == searchNodeNum) X return bSearch ? search(nextSibling(n,bSearch),bSearch) : s; X return n; X} X XFUNCTION void step(n,b) Xnodep n; XpBoard b; X{ X board temp; X X buildTree(n,&temp); X updateBoard(b,&temp); X (*io->drawTree)(n); X (*io->refreshIO)(); X highlightLast(); X} X XFUNCTION void stepDown(n,b) Xnodep n; XpBoard b; X{ X doProps(n->p,b); X (*io->drawTree)(n); X (*io->refreshIO)(); X highlightLast(); X} X XFUNCTION void doit() X{ X int quitflg; X nodep root,curnode; X board theBoard; X X X quitflg = 0; X X root = parse(); X if (!root) X root = newNode(); X initDepth(); X curnode = root; X X boardClear(&theBoard); X (*io->clearBoard)(&theBoard); X updateDepth(); X (*io->refreshIO)(); X step(curnode,&theBoard); X (*io->notifyMessage)("mgt V1.0 by Greg Hale"); X X while (!quitflg) { X nodep tNode; X command c; X do { X c = (command)(*io->idle)(curnode); X if ((int)c >= (int)C_CHOSECHILD && (int)c < (int)C_NEXTCMD) { X nodep new; X new = nthChild(curnode,(int)c-(int)C_CHOSECHILD,false); X if (new) { X curnode = nthChild(curnode,(int)c-(int)C_CHOSECHILD,true); X step(curnode,&theBoard); X } X } else switch(c) { X case C_NOTHING: X break; X case C_DOWN: X BUG("\ncommand: DOWN\n"); X curnode = treeDown(curnode,true); X stepDown(curnode,&theBoard); X break; X case C_UP: X BUG("\ncommand: UP\n"); X curnode = treeUp(curnode,true); X step(curnode,&theBoard); X break; X case C_WALKDOWN: X BUG("\ncommand: WALKDOWN\n"); X curnode = treeNext(curnode,true); X step(curnode,&theBoard); X break; X case C_WALKUP: X BUG("\ncommand: WALKUP\n"); X curnode = treeLast(curnode,true); X step(curnode,&theBoard); X break; X case C_SEARCHCOMMENT: X tNode = curnode; X do { X curnode = treeNext(curnode,true); X } while (curnode != tNode && !getprop(curnode,t_Comment)); X step(curnode,&theBoard); X break; X case C_SEARCHBACKCOMMENT: X tNode = curnode; X do { X curnode = treeNext(curnode,true); X } while (curnode != tNode && !getprop(curnode,t_Comment)); X step(curnode,&theBoard); X break; X X case C_UPFORK: X while (curnode->parent) { X curnode = treeUp(curnode,true); X if (treeCountSiblings(curnode)>1) X break; X } X step(curnode,&theBoard); X break; X case C_DOWNFORK: X while (curnode->child) { X curnode = treeDown(curnode,true); X if (treeCountSiblings(curnode)>1) X break; X } X step(curnode,&theBoard); X break; X case C_END: X while (curnode->child) { X curnode = treeDown(curnode,true); X } X step(curnode,&theBoard); X break; X case C_BEGINNING: X initDepth(); X curnode = root; X step(curnode,&theBoard); X break; X case C_GOTO: X initDepth(); X (*io->notifyMessage)("Searching..."); X curnode = search(root,true); X step(curnode, &theBoard); X (*io->notifyClear)(); X break; X case C_QUIT: X quitflg++; X break; X } X updateDepth(); X } while (c != C_NOTHING); X } X} END_OF_FILE if test 4166 -ne `wc -c <'doit.c'`; then echo shar: \"'doit.c'\" unpacked with wrong size! fi # end of 'doit.c' fi if test -f 'go-files/h02.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/h02.s'\" else echo shar: Extracting \"'go-files/h02.s'\" \(4722 characters\) sed "s/^X//" >'go-files/h02.s' <<'END_OF_FILE' X( X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[pd] XPLayer[] XComment[h02.s] XFileFormat[1] XGameName[Hamete 2] XAddWhite[] X; XWhite[qf] X; XBlack[pf] X; XWhite[pg] X; XBlack[of] X; XWhite[qe] X; XBlack[qd] X; XWhite[qj] X( X; XBlack[nd] XComment[This sequence is known as the "Tsukenobi" Joseki X -- a very good joseki to know -- Xand it is one of the best joseki for handicap games. It would be a greater advantage had Black a stone at 'a'. XHowever, for lower kyu ratings, unless one is aware of the various positions, Xone can get into a lot of trouble. :-( ] XLetter[jd] X) X( X; XBlack[jc] XComment[Black eight is another variation.] X) X) X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[pd] XFileFormat[1] XGameName[Hamete 2a] X; XBlack[tt] X; XWhite[nc] X; XBlack[jc] X; XWhite[qf] X; XBlack[pf] XComment[5 at 'Q14' is separating 2 at 'O17' and pinching him with Black 3 at X'K17'.] X; XWhite[pg] X; XBlack[of] X; XWhite[qe] X; XBlack[qd] X; XWhite[pe] XComment[In this example Black 5 would be correct, separating the two White Xgroups with the tsukenobi joseki, but what happens when White tries to push Xthrough with White 10 at 'q 15'?] X( X; XBlack[oe] X; XWhite[od] XComment[If Black blocks with Black 11 at 'p15', then a Black position on the Xoutside is distroyed .] X; XBlack[rd] X; XWhite[qh] X; XBlack[pc] X; XWhite[ne] XComment[The objective of the pincer move is destroyed. White has much outside Xinfluence and Black's stones have been separated into 3 groups. Very bad for XBlack :\(] X) X( X; XBlack[od] XComment[Black 11 at 'p16' is a correct response] X; XWhite[oe] X; XBlack[nd] X; XWhite[ne] X( X; XBlack[md] XComment[This would be a correct sequence.] X) X( X; XBlack[mc] XComment[If Black plays Black 15 at 'n17', which is not unreasonable to expect Xfrom lower kyu players, he is faced with difficulties after the sequence is over with White 30 at 's 18'. XThe following sequence is hamete.] X; XWhite[md] X; XBlack[lc] X; XWhite[rd] X; XBlack[rc] X; XWhite[qc] X; XBlack[re] X; XWhite[sd] X; XBlack[sc] X; XWhite[pc] X; XBlack[se] X; XWhite[rd] X; XBlack[sd] X; XWhite[oc] X; XBlack[rd] X; XWhite[rb] X) X) X) X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[pd] XPLayer[] XFileFormat[1] XGameName[Hamete 2ab] X; XWhite[nc] X; XBlack[jc] X; XWhite[qf] X; XBlack[pf] X; XWhite[pg] X; XBlack[of] X; XWhite[qe] X; XBlack[qd] X; XWhite[kd] XComment[White 9 at 'l16' is hamete.] X( X; XBlack[jd] XComment[Black 10 at 'k16' is the usual response, Xbut White can exploit Black's position. ] X; XWhite[je] X; XBlack[ke] X; XWhite[kc] X; XBlack[kb] X; XWhite[lb] X; XBlack[jb] X; XWhite[md] X; XBlack[pe] X; XWhite[ie] X; XBlack[hd] X; XWhite[mf] X; XBlack[kf] X; XWhite[ph] XComment[Black's situation is overly complicated, and Black is left with vulnerabilities.] X) X( X; XBlack[oc] XComment[Black 10 at 'p17' is the correct play.] X( X; XWhite[nd] X; XBlack[pe] X; XWhite[qh] X; XBlack[jd] XComment[White feels too cramped with Black 14 at 'k16'.] X) X( X; XWhite[kc] X; XBlack[pi] X; XWhite[og] X; XBlack[ng] X; XWhite[oh] X; XBlack[nd] XComment[White would be unhappy with this result.] X) X) X) X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[pd] XFileFormat[1] XGameName[Hamete 2b] X; XBlack[tt] X; XWhite[qf] X; XBlack[pf] X; XWhite[pg] X; XBlack[of] X; XWhite[qe] X; XBlack[qd] X; XWhite[rd] X; XBlack[rc] X; XWhite[pe] X; XBlack[oe] X; XWhite[od] XComment[White 's16' and 'p16' leads to hamete. The following sequence is Xhamete, starting with Black 's15'.] X( X; XBlack[re] X; XWhite[qg] X( X; XBlack[nd] X; XWhite[oc] X; XBlack[nc] X; XWhite[qc] X; XBlack[sd] X; XWhite[pc] X; XBlack[rd] X; XWhite[nb] X; XBlack[mb] X; XWhite[ob] X( X; XBlack[lc] X; XWhite[rb] XComment[A difficult situation for Black.] X) X( X; XBlack[qb] X; XWhite[mc] X; XBlack[lb] X; XWhite[ne] X; XBlack[md] X; XWhite[ng] XComment[Black has many embarrassing decisions to chose from. ] X) X) X( X; XBlack[oc] X; XWhite[nd] X; XBlack[nc] X; XWhite[md] X; XBlack[mc] X; XWhite[ld] XComment[In this exchange, White has the advantage of the outside influence.] X) X) X( X; XBlack[qg] XComment[Black 13 at 'r13' is the correct response to break White's hamete.] X( X; XWhite[re] X; XBlack[oc] X( X; XWhite[nd] X; XBlack[rg] X; XWhite[qc] X; XBlack[pc] X; XWhite[qb] X; XBlack[rb] XComment[White has nothing to do.] X) X( X; XWhite[qh] X; XBlack[nd] XComment[A reasonable exchange for both.] X) X) X( X; XWhite[rg] X; XBlack[qh] X; XWhite[rh] X; XBlack[re] X; XWhite[rf] X; XBlack[sd] X( X; XWhite[qi] X; XBlack[nd] XComment[In this exchange Black is ahead.] X) X( X; XWhite[oc] XComment[White 20 at 'p17' will end in disaster for White.] X; XBlack[qi] X; XWhite[ri] X; XBlack[qj] X; XWhite[rj] X; XBlack[qk] X; XWhite[qb] X; XBlack[rb] X; XWhite[qc] X; XBlack[rk] X; XWhite[pc] X; XBlack[rd] X; XWhite[ra] X; XBlack[sb] X; XWhite[sf] X; XBlack[sj] X; XWhite[qa] X; XBlack[si] X; XWhite[sh] X; XBlack[sk] X; XWhite[sa] X; XBlack[me] XComment[The two groups on the right are in Seki and Black 41 generates a Xtremendous amount of influence.] X) X) X) X) X) END_OF_FILE if test 4722 -ne `wc -c <'go-files/h02.s'`; then echo shar: \"'go-files/h02.s'\" unpacked with wrong size! fi # end of 'go-files/h02.s' fi if test -f 'go-files/h04.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/h04.s'\" else echo shar: Extracting \"'go-files/h04.s'\" \(2767 characters\) sed "s/^X//" >'go-files/h04.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[pd][qd][oe][of][pf] XAddWhite[od][md][pe][qe][qf][pg] XComment[h04.s XThis is another common position that can result from the Xtsukenobi joseki. XHow should Black respond to complete this joseki?] XFileFormat[1] XGameName[Hamete 4] X; XAddEmpty[md][qd][qe][pe][oe][of][pf][pg][od] XAddWhite[] XPLayer[] X; XWhite[md] X; XBlack[pf] X; XWhite[pg] X; XBlack[of] X; XWhite[qe] X; XBlack[qd] X; XWhite[pe] X; XBlack[oe] X; XWhite[od] XKO[] XComment[This sequence leads up to a White cutting stone (White nine) at 'p16'. XHow should Black respond?] X; XBlack[nd] XComment[Black at 'o16' is the first correct move.] X; XWhite[oc] X; XBlack[rd] XComment[After Black twelve at 's16', White must play at 'r12', otherwise White Xwill lose three stones when Black cuts at 'r13'.] X; XWhite[qh] X; XBlack[nc] X; XWhite[ob] X; XBlack[nb] X( X; XWhite[ne] X; XBlack[nf] X; XWhite[me] X; XBlack[pb] X; XWhite[mg] XComment[The sequence ending with White twenty-one at 'n13' completes the Xjoseki. This result is considered equal for both Black and White. XBlack has a reasonable corner with a future play at 'a', and White has good Xdevelopment on the outside.] XLetter[lc] X) X( X; XWhite[qb] XComment[What should Black do if White were to play at 'r18', threatening to Xtake the corner, instead of playing White 'o15' as in the previous sequence?] X; XBlack[rb] XComment[Black at 's18' is natural, but a difficulty begins with White Xat 's19'.] X; XWhite[ra] XComment[How should Black play?] X( X; XBlack[sb] XComment[If you choose this move for Black at 't18', then you fall for White's hamete, X and you have much to learn about Go.] XBlack[nf] X; XWhite[me] X; XBlack[lc] X; XWhite[mg] X; XBlack[pb] X; XWhite[pc] X; XBlack[qc] X; XWhite[pa] X; XBlack[na] X; XWhite[oa] X; XBlack[sa] X; XWhite[mc] X; XBlack[qa] X; XWhite[mb] X; XBlack[pb] X; XWhite[mf] XComment[If this happens early in the game, Black would already lose. White's development on the outside is too great for Black to overcome, particularly when both players are 3 kyu or higher. XWhere did Black go wrong?] X) X( X; XBlack[me] XComment[At this juncture Black at 'n15' is the proper move. If your thoughts are outside at this point, rather than inside, your thinking could be at least 5th dan or higher.] X( X; XWhite[rc] X; XBlack[pb] X( X; XWhite[pc] X; XBlack[qc] X; XWhite[pa] X; XBlack[sc] X; XWhite[re] X; XBlack[na] X; XWhite[oa] XComment[This sequence ends in 'ko' or 'seki'.] X) X( X; XWhite[pa] XComment[If White plays 'q19' then all White stones die.] X; XBlack[pc] X; XWhite[oa] X; XBlack[na] X; XWhite[qa] X; XBlack[sb] X; XWhite[sc] X; XBlack[qc] XComment[] X; XWhite[sa] X; XBlack[rb] X; XWhite[sb] X; XBlack[sd] XComment[] X) X) X( X; XWhite[sb] XComment[White at 't18' also ends in ko.] X; XBlack[rc] X; XWhite[re] X; XBlack[sc] X) X( X; XWhite[qc] XComment[Lastly, White at 'r17' will end in ko.] X) X) X) X) END_OF_FILE if test 2767 -ne `wc -c <'go-files/h04.s'`; then echo shar: \"'go-files/h04.s'\" unpacked with wrong size! fi # end of 'go-files/h04.s' fi if test -f 'go-files/h08.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/h08.s'\" else echo shar: Extracting \"'go-files/h08.s'\" \(3977 characters\) sed "s/^X//" >'go-files/h08.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[pd][nd] XAddWhite[kd][qf][ob] XComment[h08.s XWhite at 'p18' is hamete. How should Black respond? X XSolution follows. X XNote - many variations.] XFileFormat[1] XGameName[Hamete 8] X( X; XBlack[qc] X; XWhite[mc] XComment[This exchange is how many kyu level players would resolve this Xposition. The White stones are far more efficient than the Black stones. XWhite has also succeeded in reducing Black's corner and weakening the Black Xgroup as well.] X) X( X; XBlack[mc] XComment[A stronger player may try to capture White's hamete stone \(p18\). XThis move leads to many complications, but the results are all bad for Black.] X; XWhite[qd] X( X; XBlack[pc] X; XWhite[qc] X; XBlack[pb] X; XWhite[lb] XComment[White has sacrificed the hamete stone \(p18\), and squeezed Black's Xstones into an overly concentrated group of stones. Black is now left in a Xvery difficult position.] X) X( X; XBlack[qc] XComment[Black three at 'r17' , instead of Black three at 'q17', is more Xcomplicated, but Black still loses. ] X; XWhite[pc] X; XBlack[oc] X; XWhite[pb] X( X; XBlack[qe] X; XWhite[rd] X; XBlack[pe] X; XWhite[re] X; XBlack[nb] X; XWhite[qb] XComment[The Black stones are too heavy, but many players would be satisfied Xwith Black's position. I hope you are not.] X) X( X; XBlack[rd] XComment[Black seven at 's16' is the worse possible play.] X; XWhite[qe] X; XBlack[qb] X; XWhite[nb] X( X; XBlack[mb] X; XWhite[rb] X; XBlack[rc] X; XWhite[qa] X; XBlack[ra] X; XWhite[sa] X; XBlack[pa] X; XWhite[oa] X; XBlack[sb] XComment[Black's only hope at this point is to play 'ko' with Black 't18'. If XWhite chooses to play ko, this would be a very long ko battle for Black to win.] X; XWhite[sc] X; XBlack[sd] X; XWhite[re] X; XBlack[sb] X; XWhite[nc] XComment[White does not have to play the ko, and White can instead play to take Xthe outside.] X; XBlack[ra] X; XWhite[od] XComment[Black's outside stones are toast.] X) X( X; XBlack[rb] XComment[If Black plays 's18' to live in the corner, he will be in serious Xtrouble on the outside.] X; XWhite[nc] X; XBlack[od] X; XWhite[md] X) X) X) X) X( X; XBlack[oc] XComment[Black one at 'p17' will leave too many weaknesses after the following Xexchange.] X; XWhite[pb] X; XBlack[nb] X; XWhite[mc] X; XBlack[nc] X; XWhite[rd] X; XBlack[qc] X; XWhite[rc] X; XBlack[qb] X; XWhite[qi] XComment[White can later play 'p15', n18', or s18' to exploit Black's Xweaknesses.] X) X( X; XBlack[pf] XComment[Black one at 'q14' is an interesting choice, but White still comes Xout ahead.] X; XWhite[qc] X( X; XBlack[qe] X; XWhite[qg] X; XBlack[re] X; XWhite[mc] X; XBlack[pg] X; XWhite[qh] XComment[Black's shape is very poor.] X) X( X; XBlack[qd] X; XWhite[rc] X; XBlack[qg] X; XWhite[mc] XComment[White has taken the corner with five stones, leaving Black's five Xstones are overly congested.] X) X) X( X; XBlack[pb] XComment[Black one at 'q18' is the correct play.] X( X; XWhite[oc] XComment[Black has nothing to fear if White plays 'p17'.] X; XBlack[pc] X; XWhite[od] X; XBlack[oe] X( X; XWhite[pe] XComment[White six at 'q15' is too greedy.] X; XBlack[nc] X; XWhite[nb] X; XBlack[mb] XComment[White loses his four stones.] X) X( X; XWhite[mc] XComment[White six at 'n17' will leave Black with a very strong corner.] X; XBlack[qe] X; XWhite[pf] X; XBlack[pe] X; XWhite[qi] XComment[Black has great strength in the corner. Later Black will have a Xstrong attack on either of the two White groups by playing at 'r9' or with an Xinteresting tesuji at 'm17'.] X) X) X( X; XWhite[pc] XComment[This is White's best play at this point.] X; XBlack[oc] X; XWhite[qc] X; XBlack[nb] X; XWhite[qd] X; XBlack[pe] X; XWhite[qb] X; XBlack[oa] XComment[This exchange is about equal for both players. Later, Black has a Xplay at 'r12', aiming at a tesuji play at 's15'. X XSee "From My Go Teacher" Tesuji#12, #13, and #14] X) X) X( X; XBlack[nb] XComment[Black one at 'o18' doesn't work.] X; XWhite[oc] X; XBlack[nc] X; XWhite[od] X; XBlack[oe] X; XWhite[qc] X; XBlack[qd] X; XWhite[rc] X; XBlack[rd] X; XWhite[pe] XComment[This exchange is very bad for Black. White has a strong corner, and XBlack has only a weak string of stones on the outside.] X) X) END_OF_FILE if test 3977 -ne `wc -c <'go-files/h08.s'`; then echo shar: \"'go-files/h08.s'\" unpacked with wrong size! fi # end of 'go-files/h08.s' fi if test -f 'go-files/h09.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/h09.s'\" else echo shar: Extracting \"'go-files/h09.s'\" \(2978 characters\) sed "s/^X//" >'go-files/h09.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[pd][nd] XAddWhite[kd][qf][pb] XComment[h09.s XWhite at 'q18' is hamete. How should Black respond? X XSolution follows.] XFileFormat[1] XGameName[Hamete 9] X( X; XBlack[qc] X; XWhite[mc] XComment[Black one \(r17\) through White two \(n17\) is a very poor exchange Xfor Black. Later White can take further advantage of Black's position by Xplaying at 'p17'.] X; XBlack[nb] XComment[To protect against the weakness at 'p17', Black may play Black three Xat 'o18', but the result will end in disaster for Black.] X; XWhite[nc] X; XBlack[ob] X; XWhite[oc] X; XBlack[pc] X; XWhite[mb] X; XBlack[qb] X; XWhite[od] XComment[This position is unacceptable for Black.] X) X( X; XBlack[oc] XComment[Black may try to protect his weakness by playing 'p17' immediately, Xbut this will end favorably for White instead.] X; XWhite[rd] X; XBlack[qc] X; XWhite[mc] XComment[This sequence ends with Black having too many stones doing so very Xlittle.] X) X( X; XBlack[nb] XComment[This seems more promising, but White will take the corner if Black Xplays this move. ] X; XWhite[qd] X; XBlack[qc] X; XWhite[pc] X; XBlack[qb] X; XWhite[rd] X( X; XBlack[rc] X; XWhite[pe] X; XBlack[od] X; XWhite[ra] XComment[After White's tesuji at 's19', Black loses the corner.] X) X( X; XBlack[oc] XComment[If Black plays 'p17' instead of 's17', White will sacrifice the two XWhite stones and take the corner.] X; XWhite[pe] X; XBlack[od] X; XWhite[rb] X; XBlack[ob] X; XWhite[rc] X; XBlack[pa] XComment[This exchange is bad for Black, because not only has White taken the Xcorner, but the Black stones are overly concentrated.] X) X) X( X; XBlack[pc] XComment[Black one at 'q17' is the correct tesuji.] X( X; XWhite[qb] X; XBlack[ob] X; XWhite[rd] X; XBlack[re] XComment[Black five at 's15' is another tesuji to separate the White stones Xinto two groups.] X( X; XWhite[qe] X; XBlack[rc] X; XWhite[qd] X; XBlack[qc] XComment[After this exchange, Black is left with a very secure corner, and XWhite is left with very little for his hamete investment.] X) X( X; XWhite[qd] XComment[If White plays White six at 'r16', instead of White 'r15', the result Xwill not be to White's advantage. ] X; XBlack[qe] X( X; XWhite[pe] X; XBlack[rf] X; XWhite[qc] X; XBlack[qg] XComment[This is a position I would not want to be in if I were White. Saving Xthe outside White stones doesn't help much, and the White corner group is not Xyet alive. White can live in the corner with 'gote'.] X) X( X; XWhite[rf] XComment[White eight at 's14', instead of White eight at 'q15', is very bad for XWhite. ] X; XBlack[pe] X; XWhite[se] X; XBlack[qc] X; XWhite[rc] X; XBlack[rb] XComment[Black at 's18' is tesuji.] X; XWhite[sb] X; XBlack[ra] XComment[White has little to show for all his efforts.] X) X) X) X( X; XWhite[ob] XComment[White can safely live in the corner with this move \(p18\), but White Xwill lose the effectiveness of his outside stones, and Black will have the Xadvantage.] X; XBlack[mc] X; XWhite[qc] X; XBlack[qd] X; XWhite[rc] X; XBlack[rd] X; XWhite[rb] X; XBlack[qh] XComment[Black now has a very strong position.] X) X) X) END_OF_FILE if test 2978 -ne `wc -c <'go-files/h09.s'`; then echo shar: \"'go-files/h09.s'\" unpacked with wrong size! fi # end of 'go-files/h09.s' fi if test -f 'go-files/h11.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/h11.s'\" else echo shar: Extracting \"'go-files/h11.s'\" \(3748 characters\) sed "s/^X//" >'go-files/h11.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[pd][nc] XAddWhite[lc][re] XFileFormat[1] XGameName[Hamete 11] XComment[h11.s XWhite at 's15' is hamete. How should Black respond? X XSolution follows.] X; XAddEmpty[nc][lc][re] XComment[The sequence White one 'm17' through White three 's15' is how the Xsequence begins.] X; XWhite[lc] X; XBlack[nc] X; XWhite[re] XKO[] X( X; XBlack[qd] XComment[Black at 'r16' leaves a weakness at 's16'. Black can only defend this Xweakness with 'gote', and to do so would mean Black would have to play two Xmoves to defend against the White hamete play at 'r12'. This would also mean Xthat the Black move at 'r16' must have been incorrect. ] X; XWhite[qh] XComment[If Black does not defend against the weakness at 's16', then White Xwill have a good play at 's16' to further reduce Black's corner.] X; XWhite[rd] X; XBlack[rc] X; XWhite[rb] XComment[White eight at 's18' is a tesuji, a type of which was discussed in one Xof the earlier tesuji problems.] X( X; XBlack[qb] X; XWhite[sc] X; XBlack[qc] XComment[Black's position is over concentrated.] X) X( X; XBlack[sc] XComment[Black at 't17', instead of 'r18', is also bad for Black.] X; XWhite[pb] X; XBlack[qb] X; XWhite[oc] X; XBlack[od] X; XWhite[nb] XComment[Again, Black's position is over concentrated.] X) X) X( X; XBlack[qf] XComment[Black at 'r14' gives White the corner to easily.] X; XWhite[rf] X; XBlack[qg] X; XWhite[qc] X; XBlack[pc] X; XWhite[qb] XComment[After this exchange, Black's position is too cramped. ] X) X( X; XBlack[rd] XComment[As you may have guessed, Black at 's16' is the correct play. ] X; XWhite[od] XComment[However, White's second hamete play at 'p16' is where the problem Xreally begins.] X( X; XBlack[oc] XComment[Black at 'p17' is the natural move, but it is also a very poor and Xunimaginative play.] X; XWhite[qd] X( X; XBlack[qc] XComment[Black at 'r17', and the following sequence is what White would like to Xhappen.] X; XWhite[qe] X( X; XBlack[rc] X; XWhite[pe] X; XBlack[pc] X; XWhite[qi] XComment[This exchange is very favorable for White.] X) X( X; XBlack[pe] XComment[Black at 'q15', instead of 's17', is also bad for Black.] X; XWhite[rc] X; XBlack[rb] X; XWhite[sd] X; XBlack[qb] X; XWhite[pf] X; XBlack[of] X; XWhite[og] XComment[The White moves 'q14' and 'p13' are very strong plays for White. XBlack's position is over concentrated, and White has taken part of the corner.] X) X) X( X; XBlack[qe] XComment[Black at 'r15' seems to be a good move\; the idea being to take the Xoutside and give White the corner.] X; XWhite[qc] X; XBlack[pe] X; XWhite[rc] X; XBlack[rf] X; XWhite[sd] X; XBlack[qg] XComment[This may seem like a good exchange for Black, even to many stronger Xplayers, but Black's position is too heavy. If you come to understand this, Xthen you are well on your way to becoming a very strong player.] X) X) X( X; XBlack[oe] XComment[Black at 'p15' is the correct tesuji in answer to White's second Xhamete play at 'p16'.] X; XWhite[qd] X; XBlack[qc] X; XWhite[qe] X; XBlack[rc] X( X; XWhite[pc] X; XBlack[pe] X; XWhite[oc] X; XBlack[nd] X; XWhite[nb] XComment[Now we come to another difficult juncture. How should Black respond Xto the last White move at 'o18'?] X( X; XBlack[mb] XComment[Black at 'n18' loses. ] X; XWhite[qb] X; XBlack[rb] X; XWhite[ne] XComment[The White cut at 'o15' is very painful. Ouch!] X) X( X; X; XBlack[oa] XComment[Black at 'p19' is the correct tesuji.] X; XWhite[qb] X; XBlack[pa] XComment[Black at 'q19', another tesuji! White loses the three stones at 'p16, Xq17, and p17'.] X) X) X( X; XWhite[pe] XComment[White at 'q15', instead of White 'q17', still does not help White.] X; XBlack[pc] X; XWhite[nd] X; XBlack[md] X; XWhite[ne] X; XBlack[of] X; XWhite[oc] X; XBlack[qg] XComment[White loses his four stones on the right, and the White's stones on Xthe left are over concentrated. Black now has a good size corner, and room to Xexpand. ] X) X) X) X) END_OF_FILE if test 3748 -ne `wc -c <'go-files/h11.s'`; then echo shar: \"'go-files/h11.s'\" unpacked with wrong size! fi # end of 'go-files/h11.s' fi if test -f 'go-files/h14.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/h14.s'\" else echo shar: Extracting \"'go-files/h14.s'\" \(4624 characters\) sed "s/^X//" >'go-files/h14.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[cd][dd][ed][fe][gd][gc][hc][hb] XAddWhite[ec][fc][fd][fb][gb][ge][ic][cf] XFileFormat[1] XGameName[14hamete] XComment[h14.s XThe White cutting stone at 'g15' is a hamete. How should Black answer? X XSolution follows.] X( X; XAddEmpty[cd][cf][df][ee][ed][ec][fb][fa][gb][hb][ic][hc][gc][fc][ec][ed][fd][fe] X[ge][gd] X; XWhite[cf] XComment[The following sequence starting with White one at 'c14', ending with Xthe final cutting stone at 'g15' illustrates how the position came about. ] X; XBlack[gc] X; XWhite[ic] X; XBlack[cd] X; XWhite[ec] X; XBlack[ed] X; XWhite[fc] X; XBlack[gd] X; XWhite[fd] X; XBlack[fe] X; XWhite[gb] X; XBlack[hb] X; XWhite[fb] X; XBlack[hc] X; XWhite[ge] XKO[] XComment[White hamete at 'g15' is a difficult cut for Black to answer Xwithout falling into the hamete trap. How would you proceed?] X) X( X; XBlack[he] XComment[Black one at 'h15' is the natural play, and after this there is no Xturning back for Black; he has already taken the bait.] X; XWhite[gf] X( X; XBlack[db] XComment[Interestingly enough, the Black move at 'd18' is the move that is Xusually made by a stronger player, and this leads to the worst of the two Xpossibilities for Black. The following sequence is forced if Black is to Xmaintain his original strategy of capturing the five White stones inside his Xterritory.] X; XWhite[ib] X; XBlack[ha] X; XWhite[id] X; XBlack[hd] X; XWhite[if] X; XBlack[dc] X; XWhite[ee] X; XBlack[ff] X; XWhite[fg] X; XBlack[ef] X; XWhite[eg] X; XBlack[df] X; XWhite[dg] X; XBlack[de] X; XWhite[hf] X; XBlack[eb] X; XWhite[ie] X; XBlack[fa] XComment[As you can see Black has succeeded in keeping the corner and capturing Xthe five White stones, but Black paid an extravagant price to accomplish these Xgoals. White has a solid outside wall with tremendous influence. The Xpotential profits White may gain with this wall should be enormous.] X) X( X; XBlack[dc] XComment[Black at 'd17', instead of 'd18' is a slightly better move for Black Xto play. As I stated earlier, a stronger player (.1.kyu.-.3.dan.) would have played Black at 'd18'. Ironically the slightly better move at 'd17' is usually made by lower lever kyu players. At a certain stage of development we learn to discern good from bad patterns. During this stage many players become slaves to playing only pattern-type moves. Learning patterns is very important in Go, but one must abandon instinctive play to begin re-thinking.] X; XWhite[ib] X; XBlack[ga] X; XWhite[id] X; XBlack[hd] X; XWhite[ff] X; XBlack[ee] X; XWhite[if] XComment[This position is not as solid as the last example, but White has Xnothing to be unhappy about. White is still has the superior position.] X) X) X( X; XBlack[id] XComment[Black one at 'j16' is the proper tesuji. White has two plays at this Xpoint. Lets consider a knight's move at 'c18' first...] X( X; XWhite[cb] XComment[White at 'c18' is the obvious attempt for making two eyes.] X; XBlack[ff] X; XWhite[bc] X; XBlack[bd] X; XWhite[df] X; XBlack[ef] X; XWhite[he] X; XBlack[jc] X; XWhite[hg] X; XBlack[eh] XComment[At this juncture Black's position is better than White's. If White runs with three stones in the middle, Black builds territory on the left side chasing White. If White tries to save two White stones on the left, Black gains a very strong position on the outside, further weakening the three White stones in the middle. If you look carefully, the White corner group is not unconditionally alive!] X; XBlack[ac] XComment[If White does not play another stone in the corner -- he is loathed to do -- there will be a ko battle. The ko battle is not favorable for Black, because it is a two stage ko, nonetheless, Black has nothing to lose by playing it out.] X; XWhite[ab] X; XBlack[db] X; XWhite[dc] X; XBlack[cc] X; XWhite[bb] X; XBlack[ea] X; XWhite[eb] X; XBlack[ca] XComment[The result here is this ko battle that I mentioned earlier. ] X) X( X; XWhite[he] XComment[White at 'h15' instead of 'c18' is another variant that complicates Xthe situation, but Black has nothing to fear. The intent of White 'h15' is to Xseparate the single Black stone at 'f15'.] X; XBlack[jc] X; XWhite[ee] X; XBlack[ff] X; XWhite[ef] X; XBlack[fg] X; XWhite[cb] X; XBlack[bb] X; XWhite[db] X; XBlack[bf] X; XWhite[bg] X; XBlack[eg] X; XWhite[df] X; XBlack[be] X; XWhite[ch] X; XBlack[bc] X; XWhite[ea] X; XBlack[hg] XComment[After this exchange both groups live in the corner. However Black has Xthe better position on the outside. Black has strong outside influence for Xterritory on the upper board, and threatens the White group on the left side. XThe future of the weak White group on the left side is in doubt, and it is Xsenseless for White to try to escape with the two White stones in the middle. ] X) X) X) END_OF_FILE if test 4624 -ne `wc -c <'go-files/h14.s'`; then echo shar: \"'go-files/h14.s'\" unpacked with wrong size! fi # end of 'go-files/h14.s' fi if test -f 'go-files/h16.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/h16.s'\" else echo shar: Extracting \"'go-files/h16.s'\" \(2944 characters\) sed "s/^X//" >'go-files/h16.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[cr][dr][dq][dp][eo][fp][jq] XAddWhite[br][cq][cp][do][dn][gp][fq] XFileFormat[1] XComment[h16.s XWhite at 'g4' is hamete. How should Black respond? X XSolution follows.] XGameName[16hamete] X( X; XAddEmpty[cp][cq][bq][br][cr][dr][dq][eq][fq][fp][gp][fp][eo][en][dn][do][eo][fo] X[gp][hp][ip][iq][jq] XComment[The following sequence ending with White 'g4' illustrates the order of Xplays.] XName[How it came about] X; XWhite[fq] X; XBlack[jq] X; XWhite[dn] X; XBlack[eo] X; XWhite[cq] X; XBlack[dq] X; XWhite[cp] X; XBlack[cr] X; XWhite[do] X; XBlack[fp] X; XWhite[br] X; XBlack[dr] X; XWhite[gp] XKO[] X) X( X; XName[Solution] X; XComment[] X( X; XBlack[go] XComment[Black at 'g5' looks promising, but does not take into account those White stones on the left.] X; XWhite[ip] XComment[Since Black did not make a forcing move to make White respond on left, XWhite will be able to play 'j4', threatening the single Black stone on the Xright.] X( X; XBlack[hp] X; XWhite[iq] X; XBlack[gq] X; XWhite[kq] XComment[White sacrificed two stones to gain a strong position on the right, Xkeeping the Black group confined. However, an original Black pinching stone Xat 'k3' has been rendered useless.] X) X( X; XBlack[gq] XComment[If Black plays 'g3' instead of 'j3', the result is identical. ] X; XWhite[gr] X; XBlack[hq] X; XWhite[iq] X; XBlack[hr] X; XWhite[ir] XComment[After this exchange, the Black stones are still confined, White has Xbecome stronger on the right, and Black 'k3' is rendered useless.] X) X) X( X; XBlack[gq] XComment[Black at 'g3' instead of 'g5' is the worst play, and probably the most Xcommon for mid-lower kyu players.] X; XWhite[hq] XComment[White can now threaten Black with atari to build additional strength.] X; XBlack[gr] X; XWhite[hr] X; XBlack[go] X; XWhite[hp] X; XBlack[fr] X; XWhite[ho] X; XBlack[gn] X; XWhite[lq] XComment[Black is over-concentrated, while White has solid groups on both Xsides.] X) X( X; XBlack[en] XComment[Black at 'e6' is the correct move. The idea is to keep pressure on Xthe corner using Black's strength and to essentially bury the two White stones Xin the process. This also makes efficient use of the Black stone at 'k3'.] X; XWhite[dm] X; XBlack[em] X; XWhite[dl] X; XBlack[el] X( X; XWhite[hq] XComment[If White plays 'h3' in an unwise attempt to protect his investment, XBlack will completely confine White to the corner by locking him in.] X; XBlack[dk] X; XWhite[ck] X; XBlack[cj] X( X; XWhite[bl] X; XBlack[bk] X; XWhite[cl] X; XBlack[dj] XComment[The result is a very strong outside position for Black.] X) X( X; XWhite[bj] XComment[White at 'b10' instead of 'b8' is even worse.] X; XBlack[cl] X; XWhite[bk] X; XBlack[co] XComment[White loses.] X) X) X( X; XWhite[dk] XComment[White's only play is to extend at 'd9', but White will surrender a Xlarge portion of the right side to Black.] X; XBlack[hq] X; XWhite[gq] X; XBlack[ho] X; XWhite[go] X; XBlack[gn] XComment[After this sequence Black has gained territory on the side and has Xdeveloped influence on the outside.] X) X) X) X) END_OF_FILE if test 2944 -ne `wc -c <'go-files/h16.s'`; then echo shar: \"'go-files/h16.s'\" unpacked with wrong size! fi # end of 'go-files/h16.s' fi if test -f 'go-files/h19.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/h19.s'\" else echo shar: Extracting \"'go-files/h19.s'\" \(3122 characters\) sed "s/^X//" >'go-files/h19.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[cd][ed][ee][fc][ic] XAddWhite[ec][ef][fd][fe] XFileFormat[1] XComment[h19.s XWhite to play. X XSolution follows.] XPLayer[] XGameName[Hamete #19] X( X; XAddEmpty[ed][fc][fd][ee][fe][ef][ic] XComment[Derivation: Black one at 'j17' through Black seven at 'f17'.] XName[Derivation] X; XBlack[ic] X; XWhite[ef] X; XBlack[ed] X; XWhite[fd] X; XBlack[ee] X; XWhite[fe] XComment[] X; XBlack[fc] XKO[] XComment[Black seven at 'f17' is hamete. How should White respond?] X) X( X; XName[First move] X; XWhite[gc] XComment[White one at 'g17' is the obvious and correct first play.] X; XBlack[fb] XComment[After Black two at 'f18', the real problem begins.] X( X; XWhite[dc] XComment[White three at 'd17' is an overplay, and an attempt to take the corner.] XName[Corner: Overplay] X; XBlack[gb] X( X; XWhite[cc] XName[Corner Variation] X; XBlack[ce] X; XWhite[eb] X; XBlack[ff] XComment[After this exchange White lives in the corner but loses all cohesion, Xsurrendering the outside to Black.] X) X( X; XWhite[dd] XComment[White five at 'd16' instead of 'c17' is a feeble attempt to capture two Black stones.] XName[Corner Variation] X; XBlack[de] X; XWhite[ce] X; XBlack[df] X; XWhite[cf] X; XBlack[dg] X; XWhite[bd] X; XBlack[cg] XComment[Again, White lives in the corner but loses the outside.] X) X) X( X; XWhite[hc] XComment[White at 'h17' instead of 'd17' is trying to strengthen the outside and pressure the Black stones.] XName[Outside: Bad Shape] X; XBlack[eb] X; XWhite[id] X; XBlack[ff] XComment[With this variation, White gives Black the corner and has to suffer a Xsevere Black cut at 'f14'] X( X; XWhite[he] XName[Protect Shape] X; XBlack[fg] XComment[After this exchange Black is very strong on the outside, and White is Xover-concentrated.] X) X( X; XWhite[jc] XComment[White at 'k17' instead of 'h15' doesn't help.] XName[Bad Shape] X; XBlack[he] XComment['h15' is an important point for both White and Black. In the previous variation, White played 'h15' to protect White's shape. If Black is allowed to Xplay 'h15' then White must either surrender the two White stones or suffer bad shape. This 'shape' move covers so many shape topics that its importance should be obvious to everyone.] X) X) X( X; XWhite[gb] XComment[As you should have guessed, White three at 'g18' is the second correct Xtesuji.] XName[Correct] X; XBlack[eb] X; XWhite[gf] XComment[White five at 'g14' is the third correct tesuji needed to complete White's outside influence, and White still has some aji left in the corner.] X( X; XBlack[df] XComment[Black at 'd14' only enlarges the White outside influence, and pushing further only makes matters worse for Black.] XName[Push: Bad] X; XWhite[eg] X; XBlack[dg] X; XWhite[dh] X; XBlack[ch] XComment[Black at 'c12' is an overplay.] XName[Push: Overplay] X; XWhite[dc] X; XBlack[db] X; XWhite[cc] X; XBlack[bc] X; XWhite[de] X; XBlack[dd] X; XWhite[ce] X; XBlack[cb] X; XWhite[cg] XComment[Black loses.] X) X( X; XBlack[cf] XComment[Black at 'c14' instead of 'd14' doesn't change anything.] XName[Protect: Doesn't help] X; XWhite[cg] X; XBlack[bg] X; XWhite[dc] X; XBlack[db] X; XWhite[cc] X; XBlack[bc] X; XWhite[de] X; XBlack[dd] X; XWhite[ce] X; XBlack[bd] X; XWhite[bf] XComment[Black loses again.] X) X) X) X) END_OF_FILE if test 3122 -ne `wc -c <'go-files/h19.s'`; then echo shar: \"'go-files/h19.s'\" unpacked with wrong size! fi # end of 'go-files/h19.s' fi if test -f 'go-files/pos13.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/pos13.s'\" else echo shar: Extracting \"'go-files/pos13.s'\" \(3052 characters\) sed "s/^X//" >'go-files/pos13.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[dd][cg][jc][pd][pf][qj][qm][oq][qr][dp][dn] XAddWhite[cj][fq][gn][lq][rr][qp][po][on][pl] XFileFormat[1] XComment[pos13.s XWhite has just played at 'q8'. How should Black proceed from here? X XSolution follows.] XMark[pl] XGameName[13position] X( X; XBlack[ql] XComment[Black one at 'r8' is too timid\; better to think on a grander scale. XBlack must concentrate his efforts on developing his territorial framework on Xthe upper part of the board, while keeping a check on White's territorial Xframework and anticipating White's eventual invasion.] X; XWhite[oj] XComment[White at 'p10' is an important play that severely dampens Black's Xinfluence and threatens a deeper invasion into Black's sphere.] X; XBlack[pi] X; XWhite[ie] XComment[The intent of White's play at 'j15' is a difficult concept for kyu and Xlower dan level players to fully understand. If given a chance, a stronger Xplayer would certainly make this play. This play works well with White's last Xmove at 'p10' to further reduce Black's potential. White 'j15' acts like a lid Xon Black's territory, preventing Black from further gaining outside influence, Xwhile allowing White to build his own influence on the outside. ] XMark[oj] X; XBlack[hd] XLetter[cc] XComment[Black would like to protect his upper left corner, but Black must Xrespond directly to White's last play \(j15\) to prevent White from further Xreducing his territory.] X; XWhite[he] X; XBlack[gd] XComment[White is only building influence with this exchange, and he is not Xworried about Black's buildup, because White is anticipating an invasion at X'c17'.] X; XWhite[cc] XMark[oj] XComment[White should be pleased with this result\; it works well with the XWhite stone at 'p10'. White has built a reasonably healthy sphere of influence Xon the outside, and the White invasion at 'c17' balances his territory. ] X) X( X; XBlack[ec] XComment[Black at 'e17' results in a trade off with the following three moves.] X; XWhite[oj] X; XBlack[ph] X; XWhite[je] XComment[The development is almost the same as before. The trade off being XWhite can at some point play at 'r8'.] XLetter[ql] X) X( X; XBlack[oj] XComment[Black at 'p10' works only if White plays his next move at 'r8'. But Xeven so, this is not Black's optimal move. This would be the second best Xchoice for Black.] X; XWhite[ql] X; XBlack[je] XComment[This exchange is very good for Black, but Black still has a better Xmove than Black 'p10'. Although Black has put much emphasis on the upper Xterritorial framework, he has not given much consideration to White's large Xterritorial framework at the bottom of the board.] X) X( X; XBlack[pk] XComment[Black one at 'q9' is a very aggressive play that White will certainly Xanswer. This is the best play for Black.] X; XWhite[ql] X; XBlack[ol] X; XWhite[pm] X; XBlack[mk] XComment[This exchange gives Black the strength needed to balance his Xposition\; Black keeps a watchful eye on White's territory on the lower board, Xand anticipates future White invasions in the upper part of the board.] X) X) END_OF_FILE if test 3052 -ne `wc -c <'go-files/pos13.s'`; then echo shar: \"'go-files/pos13.s'\" unpacked with wrong size! fi # end of 'go-files/pos13.s' fi if test -f 'go-files/pos15.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/pos15.s'\" else echo shar: Extracting \"'go-files/pos15.s'\" \(2896 characters\) sed "s/^X//" >'go-files/pos15.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[be][ce][cd][de][ed][fd][gc][pd][pf][dp][jq][cm] XAddWhite[bd][cc][dc][ec][dd][nc][qp][op][lq][qj][ck] XComment[pos15.s XBlack to play. X XSolution follows.] XFileFormat[1] XGameName[15position] X; X( X; XBlack[ci] XComment[In this situation many players would make the mistake of extending Xfrom the wall and pinching the White stone at 'c9'. In this tight a position XBlack one at 'c11' does not take full advantage of the wall at the upper left Xcorner. Black one at 'c11' is the worst choice. ] X; XWhite[ek] X; XBlack[ei] X; XWhite[em] X; XBlack[fp] X; XWhite[cn] XComment[After this exchange the Black wall has been reduced to an over Xconcentrated position, leaving White with reasonable influence on the outside Xand weakening Black's corner position at the lower left. Many kyu level Xplayers would be satisfied with this position, but a dan level player should Xnot.] X) X( X; XBlack[jo] XComment[Black one at 'k5' is a strategy many lower dan players would attempt. XThe thinking behind Black 'k5' is to build influence and territory in the lower Xleft corner, relying on the strength of the stones at the upper to fend for Xthemselves. Sometimes this would be a very good strategy, but in this case, XWhite should not be allowed to gather influence on the outside or too much Xstrength at the expense of the wall.] X; XWhite[ek] X; XBlack[em] X; XWhite[gk] X; XBlack[lo] XComment[If Black did play this sequence, then the follow through play should Xbe played at Black 'm5'. This move stands watch over the potential White Xterritory at the lower right. Black is also aiming at an invasion at 'r8', Xusing Black 'm5' as a backup. Black 'm5' also exerts mild pressure on the XWhite stones on the left.] XLetter[ql] X; XWhite[kd] XComment[While the original intention behind Black's original move at 'k5' was Xreasonable, it is still not optimal. The potential of the Black wall is still Xnot realized. ] X) X( X; XBlack[oc] XComment[Black on at 'p17' is another lower dan strategy using the same type of Xthinking in the previous example, Black one at 'k5'.] X; XWhite[nd] X; XBlack[kd] X; XWhite[mf] X; XBlack[kf] X; XWhite[ek] X; XBlack[em] XComment[The potential of the wall is still not fully realized.] X) X( X; XBlack[el] XComment[Black one at 'e8' is a very strong aggressive play.] X; XWhite[ej] X; XBlack[gk] X; XWhite[gi] X; XBlack[fi] X; XWhite[fj] X; XBlack[gj] XComment[With this exchange Black is using the strength of the wall to either Xcapture the White stones or to deny them a presence on the outside. Whether or Xnot White chooses to give up the side stones, or to live on the side, Black Xwill have influence and strength to develop the lower left, mount an invasion Xon the lower right, and hassle the White stone on the upper right. Making Xplays like these do not come easily, even to many higher dan players. Moves Xlike these require a lot of thought.] X) X) END_OF_FILE if test 2896 -ne `wc -c <'go-files/pos15.s'`; then echo shar: \"'go-files/pos15.s'\" unpacked with wrong size! fi # end of 'go-files/pos15.s' fi if test -f 'go-files/pos16.s' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'go-files/pos16.s'\" else echo shar: Extracting \"'go-files/pos16.s'\" \(2836 characters\) sed "s/^X//" >'go-files/pos16.s' <<'END_OF_FILE' X X( X; XGaMe[1] XSiZe[19] XVieW[] XBlackSpec[1] XWhiteSpec[1] XAddBlack[ab][ac][bc][rc][rd][qd][pc][pd][pf][of][nf][me][le][ld][lc][kc][kb][jf][cd][ce][cf][bf][bh][cq][dq][fq][gq][cn][dm][qq][qp][pq][or][nr][qk][ol][nk][cb] XAddWhite[ba][bb][cc][db][dc][dd][ef][bd][be][ci][cm][co][dn][en][dp][jc][jd][lf][mf][ng][lb][mb][mc][nc][ne][pb][qb][rb][qc][ok][hq][jp][mq][nq][oq][pp][po][qo] XFileFormat[1] XComment[pos16.s XBlack to play. X XSolution follows.] XGameName[16position] X; XComment[In this position, Black's primary interests should be for the safety of the six Black stones in the upper side of the board, the single Black stone at 'k14', and territory for Black in the upper right. One way to accomplish this would be to capture the two White stones at 'm14' and 'n14'.] X( X; XBlack[mg] XComment[Black one at 'n13' fails.] X; XWhite[ke] X; XBlack[kf] X; XWhite[lg] X; XBlack[mh] X; XWhite[lh] XComment[After this exchange, Black must play at 'o16' in 'gote' to protect the six Black stones. This still leaves the two Black stones at 'k14' and 'l14' cut off from the main group.] XLetter[nd] X) X( X; XBlack[nd] XComment[Black one at 'o16' first also fails.] X; XWhite[kf] X; XBlack[ke] X; XWhite[je] X; XBlack[jg] X; XWhite[lh] XComment[The two Black stones at 'k13' and 'k14' are still separated.] X) X( X; XBlack[lh] XComment[Black one at 'm12' is the correct tesuji and accomplishes all three objectives.] X( X; XWhite[kf] X; XBlack[ke] X( X; XWhite[kg] X; XBlack[je] XComment[This sequence ending with Black at 'k15' is very bad for White. Black has succeeded in connecting with the single stone at 'k14'. and as it stands now, White is very vulnerable to an attack on the side and in the middle. It would be very unwise for White to run with the middle group. They have lost their strategic value since Black is now safe. Black can mount a strong side attack on the upper left or escape with 'o16'.] XLetter[nd] X) X( X; XWhite[je] XLetter[mg] XComment[How about White at 'k15' instead of the connection at 'n13'? If you can read this sequence in a flash and understand that the three White stones are captured, I would say you are at least a 3rd dan. However, White still has some 'aji' left.] X; XBlack[jg] X; XWhite[mh] X; XBlack[mg] X; XWhite[lg] X; XBlack[kg] X; XWhite[mg] X; XBlack[mi] X; XWhite[li] X; XBlack[kh] X; XComment[At this juncture White has lost the seven stones, but White still has a move.] X; XWhite[oj] XComment[White at 'p10' is a very strong tesuji that capitalizes on the captured White stones. White can now take advantage of the weak Black stones on the right side and limit Black's territory.] X; XBlack[ni] X; XWhite[pl] X; XBlack[qi] X; XWhite[nl] X; XBlack[mk] XComment[After this exchange, Black has succeeded in his goals, and White played the best he could.] X) X) X( X; XWhite[mg] X; XBlack[kf] XComment[This sequence is also bad for White. I wonder where these stones are going?] X) X) X) END_OF_FILE if test 2836 -ne `wc -c <'go-files/pos16.s'`; then echo shar: \"'go-files/pos16.s'\" unpacked with wrong size! fi # end of 'go-files/pos16.s' fi if test -f 'mgt.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mgt.h'\" else echo shar: Extracting \"'mgt.h'\" \(3060 characters\) sed "s/^X//" >'mgt.h' <<'END_OF_FILE' X X/* X X "mgt" Copyright 1990 Shodan X All Rights Reserved. X Program by Greg Hale X XPermission to use, copy, modify, and distribute this software and its Xdocumentation for any purpose and without fee is hereby granted, Xprovided that this entire comment and copyright notice appear in all Xcopies and that both that copyright notice and this permission notice Xappear in supporting documentation. No representations are made about Xthe suitability of this software for any purpose. It is provided "as Xis" without express or implied warranty. X XPlease send copies of extensions to: X Xhale@scam.berkeley.edu X128.32.138.4 scam.berkeley.edu sting sting.Berkeley.EDU X XDonations for the 'From My Go Teacher' series may be sent to: X Shodan X P.O. Box 4456 X Berkeley, CA 94704 X (415) 849-9475 X X*/ X X#ifdef DEBUG X#define BUG(s) fprintf(debug,s) X#else X#define BUG(s) X#endif X X X X#define FUNCTION X#define false 0 X#define true 1 X X#define MAX(a,b) ((a)>(b)?a:b) X#define MIN(a,b) ((a)<(b)?a:b) X X Xtypedef int boolean; X Xtypedef enum { X C_NOTHING=0, X C_OPEN, X C_CLOSE, X C_QUIT, X C_DOWN, X C_UP, X C_WALKDOWN, X C_WALKUP, X C_END, X C_BEGINNING, X C_CHOSECHILD, X C_NEXTCMD=C_CHOSECHILD+128, X C_SEARCHCOMMENT, X C_SEARCHBACKCOMMENT, X C_DOWNFORK, X C_UPFORK, X C_GOTO X} command; X Xenum {ASC_QUIT=0,ASC_DOWN,ASC_UP, X ASC_WALKDOWN,ASC_WALKUP,ASC_END,ASC_BEGINNING, X ASC_SEARCHCOMMENT,ASC_SEARCHBACKCOMMENT, X ASC_DOWNFORK,ASC_UPFORK,ASC_GOTO, X ASC_COMMENTSCROLLDOWN,ASC_COMMENTSCROLLUP, X ASC_TREESCROLLDOWN,ASC_TREESCROLLUP, /* do not separate the next value */ X ASC_CHAR_BLACK,ASC_CHAR_WHITE,ASC_CHAR_NOTHING,ASC_CHAR_HANDICAP, X ASC_NUMENVS }; X Xtypedef int commandIndex; X X Xtypedef enum { X t_White, X t_Black, X t_Open, X t_Close, X t_NewNode, X t_Comment, X t_AddWhite, X t_AddBlack, X t_Letter, X t_LParen, X t_AddEmpty, X t_Name, X t_BlackSpec, X t_WhiteSpec, X t_Size, X t_LBracket, X t_RBracket, X X t_WS, X t_EOF X} token; X Xtypedef enum { P_NOTHING = 0, P_BLACK, P_WHITE } piece; X X#define xtoletter(x) ((char)((x) + 'a' + (((x) < 8) ? 0 : 1))) X#define lettertox(c) ((int)((c) - 'a')) X#define ytonum(y) (19-y) /* y = 0..18 */ X#define numtoy(n) (19-n) /* n = 1..19 */ X X Xtypedef piece boardType[19][19]; X Xtypedef struct { X boardType b; X} board, *pBoard; X X Xtypedef int (*pfi)(); X Xtypedef struct { X char *name; X char *option; X char *storage; X pfi open, X close, X refreshIO, X setPiece, X plotPiece, X displayComment, X clearComment, X clearBoard, X idle, X printDepth, X drawTree, X highlightLast, X setEnv, X notifyMessage, X notifyClear; X} interface,*interfaceP; X Xtypedef struct { X int x,y; X} coord; X Xtypedef struct { X char b[19*19/8]; X} coordList,*coordListP; X X Xtypedef union { X coordList addBlack,addWhite,remove; X char comment[1024]; X} data; X Xtypedef struct propertyRec { X struct propertyRec *next; X token t; X data *d; X} property; X X Xtypedef struct noderec { X property *p; X int nodeNum; X struct noderec *parent, *child, *nextSibling, *lastSibling; X} node, *nodep; X X#define DEPTH_LIMIT 1000 X Xtypedef struct { X int depth; /* limit 0...DEPTH_LIMIT-1 */ X char d[DEPTH_LIMIT]; X} depthrec; X X X#include "proto.h" END_OF_FILE if test 3060 -ne `wc -c <'mgt.h'`; then echo shar: \"'mgt.h'\" unpacked with wrong size! fi # end of 'mgt.h' fi if test -f 'proto.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'proto.h'\" else echo shar: Extracting \"'proto.h'\" \(2810 characters\) sed "s/^X//" >'proto.h' <<'END_OF_FILE' Xextern void printCmdSet(); Xextern int notifyMessageAscii(); Xextern int notifyClearAscii(); Xextern int getLine(); /* char *, char *, int */ Xextern int drawTreeAscii(); Xextern int drawTreeAscii0(); Xextern int depthAscii(); Xextern int initAscii(); Xextern int closeAscii(); Xextern int refreshAscii(); Xextern char boardPiece(); Xextern int plotPieceAscii(); Xextern int highlightAscii(); Xextern int setPieceAscii(); Xextern int showCommentAscii(); /* display from line i onward */ Xextern int clearCommentAscii(); Xextern int displayCommentAscii(); Xextern int clearBoardAscii(); Xextern commandIndex charToIndex(); Xextern int idleAscii(); Xextern boolean setEnvAscii(); Xextern helpMessage(); Xextern helpAscii(); Xextern piece boardSet(); Xextern piece boardGet(); Xextern void boardClear(); Xextern void clearLast(); Xextern void highlightLast(); Xextern void doPlace(); Xextern void doProps(); Xextern void doPropComment(); Xextern void buildTree0(); Xextern void buildTree(); Xextern void updateBoard(); Xextern char *commentGet(); /* int */ Xextern int commentLines(); Xextern void commentClear(); Xextern int wordLength(); /* char * */ Xextern int commentLineLength(); /* char *, int */ Xextern void formatComment(); /* char *, int */ Xextern nodep search(); Xextern void step(); Xextern void doit(); Xextern void initEnv(); Xextern void die(); Xextern void myexit(); Xextern void openfile(); Xextern void closefile(); Xextern boolean bfile(); Xextern void init(); Xextern main(); Xextern void readInit(); Xextern char readChar(); Xextern void readAdvance(); Xextern void getCoordStr(); Xextern boolean isCoordStr(); Xextern void getCoordList(); Xextern token tokenize(); Xextern void addMoveArrayProp(); Xextern void doSize(); Xextern void addChild(); /* add child c to node n */ Xextern nodep parse(); Xextern boolean inRange(); Xextern int lib0(); Xextern int liberties(); /* count the # of liberties for group at i,j */ Xextern void removeStones(); Xextern boolean tryKill(); Xextern boolean placeStone(); Xextern void clearCoordList(); Xextern boolean getCoord(); Xextern void setCoord(); Xextern void clearCoord(); Xextern void initNodes(); Xextern nodep newNode(); Xextern void freeNode(); Xextern char *dupStr(); Xextern void freeProps(); Xextern void delNode(); Xextern void addprop(); Xextern property *getprop(); Xextern int treeCountSiblings(); Xextern nodep nthChild(); /* nodep, int, boolean */ Xextern nodep parent(); Xextern nodep child(); Xextern nodep lastSibling(); Xextern nodep nextSibling(); Xextern nodep treeLastSibling(); Xextern nodep treeFirstSibling(); Xextern nodep treeDown(); Xextern nodep treeUp(); Xextern nodep treeNextUp(); Xextern nodep treeNext(); Xextern nodep lastChildOfLastSibling(); Xextern nodep treeLast(); Xextern int treeWillBranch(); Xextern void initDepth(); Xextern void updateDepth(); Xextern void Beep(); Xextern char getKey(); Xextern barf(); END_OF_FILE if test 2810 -ne `wc -c <'proto.h'`; then echo shar: \"'proto.h'\" unpacked with wrong size! fi # end of 'proto.h' fi echo shar: End of archive 2 \(of 5\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 5 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 5 archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0