# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # This is GNU Go, a Go program. Contact gnugo@gnu.org, or see # # http://www.gnu.org/software/gnugo/ for more information. # # # # Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, # # 2008 and 2009 by the Free Software Foundation. # # # # This program is free software; you can redistribute it and/or # # modify it under the terms of the GNU General Public License # # as published by the Free Software Foundation - version 3, # # or (at your option) any later version. # # # # This program is distributed in the hope that it will be # # useful, but WITHOUT ANY WARRANTY; without even the implied # # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # # PURPOSE. See the GNU General Public License in file COPYING # # for more details. # # # # You should have received a copy of the GNU General Public # # License along with this program; if not, write to the Free # # Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # # Boston, MA 02111, USA # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # The Pattern Database. # # Further documentation may be found in the Texinfo documentation # # First there is a pattern title of the form: Pattern [string]. The # string is used for identifying the pattern while tuning or debugging. # # Then a block of the following characters representing the pattern # itself. # # ? : don't care # . : empty # X : your piece, # O : my piece, # x : your piece or empty # o : my piece or empty # * : my next move # -, | : edge of board # + : corner of board # # If a pattern must not match at the edge of the board, # an extra row of ?'s in the pattern may be added. (This # will not add to the time taken to check the pattern.) # ################# # # After the pattern, some supplementary information in the format: # # :trfno, classification, [values], helper_function # # These and other aspects of the pattern database are documented # in the Texinfo documentation. # ################# # # Any line beginning with #, or any part of a line following # whitespace is a comment. # # The patterns are classified into a number of different categories: # # CC center cut/connection # EC edge cut/connection # CS center splitting # ES edge splitting # EB edge block/expand # CB center block/expand # ED edge defend/attack # CD center defend/attack # CM center miscellaneous # (F fuseki) moved to fuseki.db # (J joseki) moved to fuseki.db # EJ edge joseki # S seki # HH high handicap # LE large endgame # # The patterns are grouped in the file by category. New patterns # should be added close to a similar pattern or at the end of the # category where it belongs. When a new pattern is added, the names # of later patterns in the category should usually not be changed. # This can be accomplished by introducing names like CC35b and so on. # attribute_map general goal_elements none # FIXME: try to make callback_data pattern category specific callback_data XOxo ########################## # # Cutting and Connecting patterns # # Mainly patterns which actually guarantee a cut or a connection are # accepted. Occasionally patterns which threaten to make a cut or # connection. These patterns are given the C or B classification. # # See ConnXXX and CutXXX for a new set of cutting and connecting patterns. # ########################## # # Center Cuts and Connections # ########################## Pattern CC1 ?.?? connect O*.O .X.. :8,c Pattern CC2 ?.X connect against peep (not on edge) O*O ?X? :8,nBC ?aX b*c ?X? ;xplay_attack_either(*,a,a,b) || xplay_attack(*,a,c) Pattern CC3 ?O? break connection X*X ?O? :+,OB ?a? X*X ?b? ;alive(a) || alive(b) Pattern CC4 # More accurate helper needed. O.? break connection X*X ?O? :8,B a.? X*X ?b? ;lib(a)>1 && (alive(a) || alive(b)) Pattern CC5 ??? push in ... X*X ?O? :|,OB Pattern CC6 ?xxx? straight extension to connect XOO*? O...? :8,C ?xxx? XOO*? Oa..? ;xcut(a) && odefend_against(*,a) Pattern CC7 OX? cut X*. ?.? :\,OB aX? X*. ?.? ;lib(a)>2 && lib2(a)>3 Pattern CC8 ??X? push through to cut ?OXx O.O* ???X :8,OB ??A? ?OAx O.O* ???B ;!xplay_attack(*,A) && !xplay_attack(*,B) Pattern CC9 ?O? cut through XO? .*X :8,OB Pattern CC10 O.X three crows .*. X.. :\,OB Pattern CC10b O.X three crows .*. X.. :\,OXe Pattern CC11 o.X separate the opponent ?*O ?X? :8,nOB o.A ?*O ?B? ;!attack(A) && !attack(B) Pattern CC12 ?.X cut! O*. ?XO :8,B ?.X a*B ?Xc ;(alive(a) || alive(c)) && oplay_defend(*,B,c); Pattern CC13 # tm modified (3.1.10) # (compare Conn315) # gf Added n classification. (3.3.16) # gf Revised constraint. (3.5.4) O? cut! *X XO :8,Bn,shape(2) O? *A Bc ;lib(c)>1 && oplay_attack_either(*,A,B) Pattern CC13b # gf New pattern. (3.5.3) O? cut! *X XO :8,e a? *X XO ;alive(a) Pattern CC14 # This connection is bad shape. Should have a helper to verify # that it's necessary. .O. Connect ... X*. ?OO :8,OC Pattern CC15 ?X.O break connection O*.X :8,B ?Xac d*bX ;(alive(c) || alive(d)) ;&& (!oplay_attack_either(*,a,b,b,c) || !oplay_attack_either(*,b,a,*,a)) Pattern CC16 X.O break connection *.X Ox? :8,B Xac *bX dx? ;(alive(c) || alive(d)) ;&& (!oplay_attack_either(*,a,b,b,c) || !oplay_attack_either(*,b,a,*,a)) Pattern CC17 ?X.O break connection .*.X O.?? :8,B ?Xac .*bX d.?? ;(alive(c) || alive(d)) ;&& (!oplay_attack_either(*,a,b,b,c) || !oplay_attack_either(*,b,a,*,a)) Pattern CC19 .O. defend cut X*. ... OO. :8,OC Pattern CC20 .O.? try to connect ...? .*.X ?.O? :8,C .O.? d..? c*aX ?bO? ;!omoyo(c) || !omoyo(d) || !xplay_attack(a,*,b,b) Pattern CC21 ?X.? connect! .*.O O..O ??X? :8,C Pattern CC22 ?O.? connect! ..*X X... ?.O? :8,C Pattern CC23 ?O.O connect! ..*X X... ?.O? :8,C Pattern CC24 ?X.? connect! .OXO O.*O ??X? :8,C Pattern CC25 ?X.O break connection ..*. O.XO :8,B ?X.a ..*. O.XO ;alive(a) Pattern CC26 ?X.o? break connection ..*.O O.XO? :8,B ?X.o? ..*.b O.Xa? ;lib(a)>1 && alive(b) Pattern CC27 ??.? connection helper O*.O ?XO? :8,nC ??.? O*aO ?XO? ;oplay_attack(*,a,a) == WIN Pattern CC28 O..X? separate ..*.? X...o ....? ???O? :8,a Pattern CC29 ?.O atari to connect X*. O.? :8,C ?.O A*. a.? ;lib(a)>1 && lib(A)==2 Pattern CC30 # gf Revised pattern. (3.3.16) ?O* double connection X.O ?O. :8,nC ?b* XaO ?c. ;!xplay_connect(a,b,c) Pattern CC31 # gf Revised pattern. (3.3.16) ?O. double connection X*O ?O. :-,C ?a. X*O ?b. ;!xplay_connect(*,a,b) Pattern CC32 ?X. double break O*X ?X. :-,- ?ca O*d ?eb ;oplay_defend_both(*,a,b,*,b) && oplay_defend_both(*,b,a,*,a) >add_cut_move(c,d); >add_cut_move(c,e); >add_cut_move(d,e); Pattern CC33 XO.? hane to break connection *..x .X?? :8,OB BO.? *A.x .X?? ;oplay_attack(*,A,B) Pattern CC34 .... O.*O ..X? :8,C Pattern CC35 O?? break connection ..X X*X ?O? :8,OB O?? baX X*X ?O? ;!oplay_attack(*,a,b,*) && !oplay_attack(*,a,b,b) Pattern CC36 ?Oo?? connection pattern o.O.? x*X.x ?.O?? :8,XC ?Oo?? odO.? x*Xbx ?ca?? ;lib(a)>1 && oplay_attack(*,b,c,d,d) Pattern CC37 ?Oo? connection pattern o.OX ?*X. ?.O? :8,XC ?Oo? odOX ?*Xb ?ca? ;lib(a)>1 && oplay_attack(*,b,c,d,d) Pattern CC38 ?Oo? connection pattern o.O. ?*X. ?.OX :8,XC ?Oo? odO. ?*Xb ?caX ;lib(a)>1 && oplay_attack(*,b,c,d,d) Pattern CC39 # This pattern guarantees a strong connection. # The constraint is asymmetric. ?O. Connect .X* ?O. :8,C ?fb aD* ?ec ;lib(e)>1 && lib(f)>1 ;&& (!oplay_defend(*,D) || oplay_attack_either(*,a,b,c,D,c)) Pattern CC40 ?O*x Connect on the right side XXOX ?O.? :8,C ?O*x XXOX ?Oa? ;odefend_against(*,a) Pattern CC41 ?XX? Cut or threaten to cut O.*O o.X? :8,OB Pattern CC42 O.X.O warikomi oo*oo O.X.O :|,OB Pattern CC43 # This pattern caused a problem at move 52 in ego.sgf XO *. .X :8,OB Xb *a .X ;oplay_defend_both(*,a,*,b) Pattern CC44 # May be too risky. O.X boldly cut before connecting XO* ?X. :8,OB baX dO* ?c. ;oplay_attack(*,a,a) || oplay_attack(*,a,d) ;|| (oplay_attack(*,a,c) && !oplay_attack(*,a,b)) Pattern CC45 # B classification is somewhat incorrect, but does convey the urgency # of the move. .... connect to contain O*OX ?XXO :8,BC .... c*OX ?AAb ;lib(A)>1 && lib(b)>1 && alive(c) Pattern CC46 .XO Cut .*. OXO :8,OB .XO b*a cXO ;oplay_attack(*,a,a) && !oplay_attack(*,b,a,c) Pattern CC47 .*.X separate the opponent X..X ?OO? :8,OB .*cX XabX ?dO? ;!oplay_attack(*,a,b,c,d) && !oplay_attack(*,a,b,c,*) Pattern CC48 X*. Cut O.. O.X :8,OB B*. Oa. O.X ;oplay_attack_either(*,a,a,B) Pattern CC49 ?..X Cut O*.. ?X.. :8,OB ?..X O*ac ?Xbd ;!xarea(d) && !oplay_attack_either(*,a,b,*,b) ;&& !oplay_attack_either(*,b,a,c,d,a,d) Pattern CC50 o.X.? Cut O.*.? oOX.? :8,OB o.Xce Ob*af oOXdg ;(!xarea(f) || !(xarea(e) && xarea(g))) ;&& !oplay_attack_either(*,a,b,c,d,d,b) ;&& !oplay_attack_either(*,a,b,d,c,c,b) Pattern CC51 O*.O ?XO? :8,nC O*aO ?XO? ;odefend_against(*,a) Pattern CC52a # Constraint probably needs revision. OX.. connect if invaded .*.O :8,C Odbe c*aO ;oplay_attack(*,a,b,d) && oplay_attack(*,a,b,a) ;&& oplay_attack(*,a,b,e,e) && oplay_attack(*,a,b,c,c) Pattern CC52b # ab New pattern. (3.3.10) ????? .OX.? keep loose connection ..*.O ?..oo :8,c ????? .aX.? ..*.b ?..oo ;!same_dragon(a,b) && (alive(a) || alive(b)) Pattern CC53 XXO cut O*. ??X :8,B XXb c*a ??X ;alive(c) && oplay_defend_both(*,a,*,b) Pattern CC54 # This is a very conservative estimate of the chances to connect. # Other patterns are more accurate. # We really would need tactical reading functions for determining # whether a connection holds. OXO block opponent .*. ?.? :|,C OXO a*c ?b? ;!oplay_defend(*,a,b,c,a) && !oplay_defend(*,a,b,c,c) Pattern CC55 # Analogous to the previous one. XOX push out .*. ?.? :|,OB AOB .*. ?.? ;!xplay_break_through(*,A,*,B) Pattern CC57 # gf Removed obsolete add_connect_move actions. (3.3.16) ??XO? connect three stones ..*.o O..O? ?..?? :8,C ??Xc? ..*.o a..b? ?..?? ;lib(a)>2 && lib(b)>2 && lib(c)>3 Pattern CC58 X... attach XO*X .... ..O. :8,OB Pattern CC59 ?X?? cut the knight's move ..*O O.XO :8,OB Pattern CC60 ?X?? cut the knight's move .*OO OXXO :8,OB Pattern CC61 X.OO break connection X..X .*.? :8,OB Pattern CC62 O.X block off area .*. X.O :X,OB Pattern CC63 ?O? cut through XO? .*X :8,OB Pattern CC64 O.. three crows .*. x.O :/,C O.. .*. x.O ;!omoyo(*) Pattern CC65 ..Xx separate the opponent .*.? X.O? x??? :\,OB Pattern CC66 ..X. Attach to defend connection O.*. .... O.O. ?X?? :8,C ..X. O.*. .a.. ObO. ?X?? ;!oplay_defend(*,a,b,a) Pattern CC67 O*X cut! X.. X.O :8,OB O*X Xab Xcd ;!oplay_attack_either(*,a,b,*,b) && oplay_defend_both(*,b,a,c,a,d) Pattern CC68 ?O.. cut! ..*X .X.. ...O :8,OB ?O.. ..*X .Xab ..cd ;!oplay_attack_either(*,a,b,*,b) && oplay_defend_both(*,b,a,c,a,d) Pattern CC69 ?.? break through OXO .*. oXO :8,OB Pattern CC70 ?O.x Cut .X*X ?O.. :8,B ?fbx aX*E ?gcd ;(alive(f) || alive(g)) && !oplay_defend_both(*,a,b,c,d,c,E) Pattern CC71 # This connection is a bit sloppy but if we can't connect # we do at least capture an opponent worm. Assume we are allowed # to connect if the worm is at least as large as our dragon. ?O.x Connect .X*X ?O.. :8,C ?Obx aX*E ?fcd ;!oplay_defend_both(*,a,b,c,d,c,E) && (dragonsize(f) <= wormsize(E)) Pattern CC72 ?.... atari .OX*X ..O.. ?...? :8,OB Pattern CC73 # gf Reduced shape value. (3.5.2) ?X?? connect! o.*O O..X ?.O? :8,scad,shape(3) Pattern CC74 # gf Split pattern. (3.1.7) .O*. connect and constrain X OXXO :8,C aO*b OXXO ; oplay_attack(*,a,a) && oplay_attack(*,b,b) Pattern CC74b # gf Split pattern. (3.1.7) # Only shape bonus if X stones can't be attacked. .O*. connect and constrain X OXXO :8,C,shape(2) aO*b OCCO ;oplay_attack(*,a,a) && oplay_attack(*,b,b) ;&& !(attack(C) && oplay_defend(*,C)) Pattern CC75 ...*O connect out O...X ..O?? :8,Xc Pattern CC76 ..*O connect out O..X .O?? :8,Xc Pattern CC77 # tm: reduced shape value from 8 to 3 (3.1.18) X? prevent connection *O .X :8,OB,shape(3) C? *b aD ; !same_dragon(C,D) && xplay_attack_either(*,a,a,b) Pattern CC78 ..OX connect O*.O ?Xo? :8,C ..OX O*ba ?Xo? ;lib(a)>1 && xplay_attack(b,b)==3 Pattern CC79 # ab modified (3.3.10) # gf Reduced shape value. (3.5.2) ?O.xx XO.*. XXO.. ..... :8,XCad,shape(3) ?a.xx Xa.*. XXO.. ..... ; lib(a)>=3 && !omoyo(*) Pattern CC80 # db added (3.1.4) O*X XO? :8,B a*X XO? ; does_attack(*,a) Pattern CC81 # db added (3.1.4) O*X XO? ?O? :8,B,shape(3) a*X XO? ?O? ; does_attack(*,a) Pattern CC82 ..?? reverse sente connection .OXX X*O. ...? :8,ECad,shape(3) ..?? .AXX X*B. ...? ; !dead(A) && (xplay_attack(*,B) || xplay_attack(*,A)) Pattern CC83 # gf New pattern. (3.1.23) # See strategy3:142. O... X.*. ?X.O :8,XC Oac. Xb*. ?X.O ;!oplay_defend(*,a,b,a) && oplay_attack(*,b,a,c,c) Pattern CC84 # Formerly called EC37 XO?? prevent double nozoki O.O? ?*.O ??OX :8,nC Pattern CC85 # Formerly called EC38 ?XO? prevent ko .O*O O..X ?XXX :8,C Pattern CC86 # Formerly called EC39 ??o? connect out X..O O.*X ?.?? :8,C ??o? X..O O.*A ?.?? ; lib(A)==2 Pattern CC87 # Formerly called EC40 ??o? connect out X*.O O.OX ?.?? :8,C Pattern CC88 # Formerly called EC41 .O. cut! .*X X.. ..O :8,OB ########################## # # General Edge Connections # ########################## Pattern EC1 # gf Removed obsolete add_connect_move actions. (3.3.16) O.XO? connect under ..*.O ..... ----- :8,C ObEO? ca*dO ..... ----- ;odefend_against(*,d) ;&& !oplay_defend_both(*,a,b,a,E) ;&& oplay_attack_either(*,b,a,c,b,c) Pattern EC2 # gf Removed obsolete add_connect_move actions. (3.3.16) OXXO? connect under O.*.O ..... ----- :8,C eXXO? ea*dO .b... ----- ;odefend_against(*,d) && !oplay_attack(*,a,b,e) Pattern EC4 ?X.? connect underneath O*.O .... ---- :8,C ?X.? d*ac ..b. ---- ;odefend_against(*,a) || !oplay_attack_either(*,a,b,c,d) Pattern EC5 ?O.? break connection X*.X .... ---- :8,OB ?O.? D*aC ..b. ---- ;xdefend_against(*,a) || !xplay_attack_either(*,a,b,C,D) Pattern EC6 ?O.O break connection X.*X .... ---- :8,OB ?OaO Xd*X .cbe ---- ;odefend_against(*,a) && !oplay_attack(*,b,c,d,e,e) Pattern EC7 # Probably redundant ?O.X break connection X*.. .... ---- :8,OB ?DbX X*ac .... ---- ;!xplay_defend_both(*,a,b,a,D) && xplay_attack_either(*,b,a,c,b,c) Pattern EC8 # gf Revised constraint. (3.5.3) ?X.O connect O*.. .... ---- :8,XC,shape(2) ?X.b a*.. .... ---- ;oplay_disconnect(a,b) && !oplay_disconnect(*,a,b) Pattern EC8a ??xx? connect O.xx? .?X.O .O*.. ..... ----- :8,t ??ab? O.cd? .?X.O .O*.. ..... ----- ; x_alive_somewhere(a,b,c,d) Pattern EC9 # Probably redundant ??O? break connection ?X*X O..? ---- :8,OB Pattern EC10 ?OX.? connection pattern ?*... ....O ....O ----- :8,C Pattern EC11 ?OX.? connection pattern ?OX.. ..*.O ....O ----- :8,C Pattern EC12 ..OXX? Break connection. X.*.xx .....? ------ :8,OB Pattern EC13 XXO? Stop connection. .O*X ---- :8,B XXa? .O*A ---- ;!dead(a) && lib(A)>2 Pattern EC14 ??O? Connect under X*.O O... ---- :8,C Pattern EC15 XO? separate the opponent .*X ... --- :8,OB Pattern EC16 ?..O? hanging connection .*.OX o.OXX ..... ----- :8,C Pattern EC16a # gf Reduced shape value. (3.5.2) ?..O? hanging connection is best .*.OX o.OXX ..... ----- :8,C,shape(3) ?..O? .*bOX o.OXX ..a.. ----- ; !oplay_attack(a,b,b) > antisuji(a); > antisuji(b); Pattern EC17 OO? Get up from first line. .*X .OO --- :8,C OO? .*X .Oa --- ;lib(a)==2 Pattern EC18 X.OX? Prevent connection ..*xX ..... ----- :8,OB Pattern EC19 ?X? Prevent connection x.? .*O ..X --- :8,OB Pattern EC20 .X? Try to prevent connection .*O ... .XX --- :8,OB Pattern EC21 o.o XOX .*. ... --- :|,OB o.o aOb .*. ... --- ;!xplay_break_through(*,a,*,b) Pattern EC22 ?O? XOX .*. ... --- :|,OB ?O? aOb .*. ... --- ;!xplay_break_through(*,a,*,b) Pattern EC23 x.x OXO .*. ... --- :|,c x.x aXb .*. ... --- ;lib(a)>1 && lib(b)>1 Pattern EC24 # This move does not secure a connection without a constraint, see # e.g. nicklas1:502. ?X? OXO .*. ... --- :|,c ?X? aXb .*. ... --- ;lib(a)>1 && lib(b)>1 Pattern EC25 O.X Stop connection XO* X.. --- :8,OB ebX cO* cad --- ;!xplay_defend_both(*,a,b,a,e) ;&& xplay_attack_either(*,b,a,d,d,b) ;&& oplay_attack_either(*,b,b,c) ;&& oplay_attack_either(*,a,d,b,b,c) Pattern EC26 # Smaller endgame profit than EC25. O*X Stop connection XO. X.. --- :8,OB d*X XOa Xbc --- ;(!xplay_defend(a,b,*,b) || !xplay_defend(a,b,*,d)) ;&& xplay_attack(a,*,b,c,c) Pattern EC27 # gf Removed obsolete add_connect_move action. (3.3.16) # gf Reduced shape value. (3.5.2) ?X*O Use edge to stay connected. ?XOX ...O .... ---- :8,-,shape(3) ?X*O ?XOB ..aO .... ---- ; !attack(B) && oplay_attack(*,a,a) Pattern EC28 # gf Removed obsolete add_connect_move action. (3.3.16) O.XO? capture to connect OXOXO o..*. ----- :8,- caXO? cXOXO ob.*. ----- ;!oplay_attack(*,a,b,c) && !oplay_attack(*,b,a,c) Pattern EC29 X..Oo cut ..*X. ..... ----- :8,OB X.aOo ..*B. ..... ----- ;oplay_attack_either(*,a,B,a) Pattern EC30 ?O? force X to connect X*X ... --- :|,a Pattern EC31 ?..?? Clamp to connect under X..O? OX*.O ..... ----- :8,C ?..?? X..O? aX*.O ..... ----- ;!attack(a) Pattern EC32 XO? cut! .*X ... --- :8,OB Pattern EC33 ?O? Take an important ko OXO X*X --- :8,B ?b? OAO X*X --- ;ko(A) && alive(b) Pattern EC34 ?X? Take an important ko X*X OXO --- :8,C ?X? X*X OAO --- ;ko(A) Pattern EC35 ?X? Fill an important ko XOX O*O --- :8,C ?X? XaX O*O --- ;ko(a) Pattern EC36 ?O? Fill an important ko O*O XOX --- :8,B ?b? O*O XaX --- ;ko(a) && alive(b) Pattern EC42 ..OO? cut X.*X? ..... ..... ----- :8,OB Pattern EC43 ..OO? cut X.OX? .*X.. ..... ----- :8,OB Pattern EC44 Oo.X stop connection on edge X*.X ---- :8,OB Pattern EC45 ..O. descend .... .O.X X*.. .... ---- :8,OB Pattern EC46 ....? cut after invasion O.OX? ..X*O ....? ....? ----- :8,OB Pattern EC47 X.OX block edge connection X.*. ---- :8,OB Pattern EC48 XOXX break connection X*.? ---- :8,OB Pattern EC49 .O.. block X*.X .... .... ---- :8,OB Pattern EC50 .O.. block XO.X .X*. .... ---- :8,OB Pattern EC51 ..*x? Prevent connection ?XO.X ..... ..... ----- :8,OB Pattern EC52 .*.O? Prevent connection ?XO.X ..... ..... ----- :8,OB Pattern EC53 ?.O?? X.OX? .*X.. ..... ----- :8,OB Pattern EC54 ..O.. prevent connection XO.X. ..*.. ..... ----- :8,OB Pattern EC55 ?.O? break connection .O.X .X*. .... ---- :8,OB ?ce? dOaX bX*. .... ---- ;!oplay_attack(*,a,b,c,d,e) Pattern EC56 # gf The constraint was too inexact, see match at B9 in score2:34. # Replaced it by a connection constraint. (3.1.32) X*O? Prevent opponent's connection under ...X ---- :8,OB B*O? ...A ---- ;oplay_connect(A,B) && !oplay_connect(*,A,B) Pattern EC57 ??O?? Connect underneath by attaching O.X.O ..*.. ..... ----- :|,C ??O?? OdXaO fe*bc ..... ----- ;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,d,e,f,d,f) ;&& !oplay_defend_both(*,b,a,d,e,b,d) ;&& !oplay_defend_both(*,e,d,a,b,e,a) Pattern EC58 O.X.O connect! O.*.. ..... ..... ----- :8,C OfIaO Od*bc hge.. ..... ----- ;!oplay_defend_both(*,b,a,b,I) && oplay_attack_either(*,a,b,c,a,c) ;&& oplay_attack_either(*,b,a,d,e,f,g,h,f,h) ;&& !oplay_defend_both(*,b,a,d,e,g,f,g,I) Pattern EC59 .XO.X hane to prevent connection .*..X ----- :8,OB .Xa.X .*..X ----- ;!oplay_attack(*,a) Pattern EC60 # tm added constraint (3.1.18) # gf Changed B classification to C. (3.1.18) ?O.. protect cut XO*X XXO. .... ---- :8,OC ?O.. XO*X XXcA ...B ---- ; xplay_attack(A,B,c) || xplay_attack(*,c) Pattern EC60a # tm New Pattern (3.1.18) # gf Changed B classification to C. (3.1.18) ?O.. indirectly protect cut XO.X XXO* .... ---- :8,OC ?b.. XOaX XXO* .... ---- ; oplay_defend_both(*,a,*,b) Pattern EC61 OoOO? prevent connection X.X*X ..... ----- :8,OB Pattern EC62 .X.?? defend the extension O*... ....O ..... ..... ----- :8,C Pattern EC63 # gf Fixed value removed and constraint revised. (3.5.2) ?X? connect underneath if X can't cut OXO .*. ... --- :|,XC ?X? aXb .*. ... --- ;!oplay_disconnect(*,a,b) Pattern EC64 # gf Removed fixed value. (3.5.2) ..xxx threaten connection .O.Xx .*X.O ..... ----- :8,OXead ..xxx .O.Xx .*X.a ..... ----- ; lib(a)>2 Pattern EC65 # gf Reduced shape value. (3.5.2) ox..o Connect underneath O*X.O ..O.. ..... ----- :8,XC,shape(3) Pattern EC66 # gf Reduced shape value. (3.5.2) OXX.O connect below .*O.. ..... ----- :8,XCad,shape(3) OXX.O b*Oa. ..... ----- ; oplay_attack(*,a,a) && oplay_attack(*,b,b) Pattern EC67 # gf Reduced shape value. (3.5.2) OXX.O connect below .O*.. ..... ----- :8,XCad,shape(3) OXX.O bO*a. ..... ----- ; oplay_attack(*,a,a)&&oplay_attack(*,b,b) Pattern EC68 O.XOo connect underneath ..*.o ..... ----- :8,XCad O.Abo ..*.o ..... ----- ; lib(A)<4 && lib(b)>2 && !attack(A) Pattern EC69 ?OXx? X*..O ..O.. ..... ----- :8,XCad ?OXx? A*..O ..O.. ..... ----- ; does_attack(*,A) Pattern EC70 # constraint looks for shortage of liberties oOX.O connect with ko O.*.. ----- :8,XCd oOXbO Oc*ad ----- ; !oplay_attack(*,a,b,c,d,*,c) Pattern EC71 # constraint looks for shortage of liberties xXO.X prevent ko connection X.*.. ----- :8,Ba xXObX Xc*ad ----- ; !xplay_attack(*,a,b,c,d,*,c) Pattern EC73 ?OXXX? secure connection ..OO*O ...... ------ :8,XC,value(5) ?aXXX? ..OO*O ...... ------ ; lib(a)==2 && !dead(a) Pattern EC74 ?..ooo connect under ..X.Oo O.*..o ...... ...... ------ :8,XCd,shape(2) Pattern EC75 ?..ooo connect under ..X*Oo O.OX.o ...... ...... ------ :8,Cd,shape(3) Pattern EC76 #gf New pattern. (3.1.12) ?..O? cut! ...OX .XOXX ..*.. ----- :8,B ?..b? ..abX .XOXX ..*.. ----- ;alive(b) && oplay_attack(*,a,a) Pattern EC77 #tm New Pattern (3.1.16) #tm modified (3.1.17) |..x clamp! |.*. |.X. |XOO :8,OXe |..x |.*. |.A. |XOO ;oplay_defend(*,A) != WIN Pattern EC78 #tm New Pattern (3.1.18) # gf Revised constraint. (3.3.12) # see trevora:610 #FIXME: There's still a problem here, in that this sacrifice # is deemed unsafe, and not played.... # gf Is this really a cut pattern? (3.3.13) OOO block or cut into black's territory. ... *X. ... --- :8,sOXe OOO a.. *Xb ... --- ; safe_omove(*) ; || !oplay_attack(*,a,b,b) Pattern EC79 # gf New Pattern (3.3.13) X.O connect X*. O.. --- :8,C Pattern EC80 # gf New Pattern (3.3.15) XOOX block edge connection X.*. ---- :8,OB XOOX Xa*. ---- ;xplay_attack(*,a,a) Pattern EC81 # gf New Pattern (3.3.16) # See nngs1:31 XXX.Ox connect all stones OO..*X ....O? ...... ------ :8,XC ############################################## # First line, one space, cuts and connections. ############################################## Pattern EC101 XOX prevent connection .*. --- :|,OB XOX a*b --- ;xdefend_against(*,a) && xdefend_against(*,b) Pattern EC102 XOX prevent connection ..* --- :8,OB XcX ab* --- ;xdefend_against(b,a) && xdefend_against(b,*) && !oplay_attack(*,c) Pattern EC103 XOX? followup .*OX ---- :8,B XaX? .*OX ---- ;!dead(a) Pattern EC104 OXO make connection .*. --- :|,C OXO a*b --- ;odefend_against(*,a) && odefend_against(*,b) Pattern EC105 XO? don't allow connection underneath .*X --- :8,OB BO? a*X --- ;(safe_xmove(*) && xplay_defend_both(*,a,*,B)) || xdefend_against(a,*) Pattern EC106 XO? don't allow connection underneath X*X --- :8,nOB Pattern EC107 ?O? Cut on first line X*X --- :8,OB Pattern EC108 XOX block edge connection x*x --- :8,nOB AOB x*x --- ;(!attack(A)) && (!attack(B)) Pattern EC109 ?X? O*O --- :|,nC Pattern EC110 # Probably redundant ?OX*O connect under o.O.. ----- :8,C ############################################## # First line, two spaces, cuts and connections. ############################################## Pattern EC201 XO.. don't allow connection underneath .*.X ---- :8,OB BO.. a*.X ---- ;safe_xmove(*) && xplay_defend_both(*,a,*,B) Pattern EC202 XO*. don't allow connection underneath ...X ---- :8,nOB BO*. ac.X ---- ;xplay_defend_both(c,a,c,B) Pattern EC203 XO.. don't allow connection underneath X*.X ---- :8,nOB Pattern EC204 XO*. don't allow connection underneath X..X ---- :8,OB XO*. Xa.X ---- ;safe_xmove(a) Pattern EC205 XO.O don't allow connection underneath x.*X ---- :8,OB XOaO xb*X ---- ;odefend_against(*,a) && oplay_defend(*,b,*) Pattern EC206 # Probably redundant ?XO.OX? prevent connection x.X*..x ------- :8,C Pattern EC207 O.XO Connect at edge ..*. ---- :8,nC ObEO da*c ---- ;oplay_attack_either(*,c,E,c) && oplay_attack_either(*,b,a,d,b,d) ;&& oplay_attack(*,a,b,c,E) == WIN Pattern EC208 # Followup to EC207 O*XO Connect at edge .XO. ---- :8,nC O*BO .XOa ---- ;oplay_attack(*,a,B) Pattern EC209 # Probably redundant. X.OX block edge connection X.*. ---- :8,OB X.OB X.*a ---- ;xdefend_against(*,a) && !xplay_attack(*,B) Pattern EC210 X.OX Cut at edge ..*. ---- :8,nOB XbeX da*c ---- ;xplay_attack_either(*,c,e,c) && xplay_attack_either(*,b,a,d,b,d) ;&& xplay_attack(*,a,b,c,e) Pattern EC211 # Probably redundant. X.OO block edge connection X.*X ---- :8,OB Pattern EC212 ??XoO Defend monkey jump ?O*oo ----- :8,C ??XoO ?a*oo ----- ;lib(a)>=3 Pattern EC213 ?..XO Defend monkey jump .O.*o ----- :8,C Pattern EC214 ?xx.. Defend inverse monkey jump o.XO. O.*.. ----- :8,C Pattern EC215 ??OO? Cut through monkey jump. X..O? ..*Xx ----- :8,OB Pattern EC216 ?X..O Monkey jump edge connection O*..o ----- :8,C ?X..O a*..o ----- ;lib(a)>=3 Pattern EC217 ?O?? X*.X ---- :8,OB ?O?? B*aC ---- ;lib(B)>1 && lib(C)>1 && xplay_attack(*,a,a) Pattern EC218 ??o? Connect underneath OX.X .*.O ---- :8,C ###################################################################### # # Splitting and other strategically attacking (or defending) moves # # These patterns do not have the C or B classification but they # often have an effect on connections. # ###################################################################### #################################### # # Center splitting patterns # #################################### Pattern CS1 ?X?X? pattern to make two partial connections O.O.O ..... ..*.. ????? :|,Xd ?A?B? O.O.O ..... ..*.. ????? ;lib(A)>1 && lib(B)>1 Pattern CS2 ??O. pattern to connect X..O .*.. O.?? :8,OXead Pattern CS3 ...X Move out and separate .*.. X.O? :8,OXad Pattern CS4 .X.O.?? pattern to separate the opponent .....?? ...*.?? .....X. :8,OXad Pattern CS5 ??x?? Play out to separate the opponent .X.O. ..*.. ..... ..... ...X? :8,OXad Pattern CS6 ??O.? Play out to separate the opponent. Only play if no risk for cut at a below. .X.O. ..*.. ..... ..... ...X? :8,OXad ??Oa? .X.O. ..*.. ..... ..... ...X? ;!safe_xmove(a) Pattern CS7 ...O?? jump to separate .X...? ...*.. .....X :8,OXad Pattern CS8 ...O.. jump to separate .X...X ...*.. :8,OXad Pattern CS9 ?????? leap to connect ...... O.*..O ...... ?????? :8,OXad,jump_out_helper Pattern CS10 ??.?? jump to separate opponent ?.O.. X...X ?.*.. ??.?? :8,OXad Pattern CS11 ..X Cut across large knight's move ... .*O .X? :8,OXad b.X ... .*a .X? ;!weak(a) || !xmoyo(b) Pattern CS12 ?OO? jump across ...X X*.. :8,OXad Pattern CS13 .X.. attach .*.O .... ..X. :8,OXad Pattern CS14 ??.?? jump to separate opponent ?.O.. X.*.X ?.... ?oO?? :8,OXad Pattern CS15 .O.. X*.X .... oO?? :8,OXa Pattern CS16 # gf Revised constraint. (3.5.3) # See gifu03:308. ?O.x X*.X :8,OXa ?c.x A*dB ;!same_dragon(A,B) && (weak(c) || xplay_connect(*,d,A,B)) Pattern CS17 xXx Even a computer answers a peep. O*O ... :8,OXd xXx b*c .a. ;xplay_break_through(*,a,b,a,c) Pattern CS18 ?...? O.*.O o...o ?XxX? :|,OXad Pattern CS19 # gf Corrected symmetry. (3.1.23) X... O.*. O..X :8,OXad Pattern CS20a # gf Corrected symmetry. (3.1.23) # gf Split pattern. (3.3.16) X.. O*. ?xX :8,OXa Pattern CS20b # gf Corrected symmetry. (3.1.23) # gf Split pattern. (3.3.16) X.. O*. ?xX :8,OXd A.. O*. ?xB ;!oplay_connect(*,A,B) Pattern CS21 OOXX cutting tesuji .X.. .*.. ..O? :8,OXa aaXX .X.. .*.. ..O? ;lib(a)>2 Pattern CS22 ?..?? when caught in a crosscut, extend .OX.? ?XO*. ??..? :8,OXad Pattern CS23 ?.X. good relationship ?O*. .... X... ?.O? :8,OXad Pattern CS24 # This is part of a standard sequence in 4 stone games ...O. ..... O.*X. ..... ..... :8,OXd ...O. ..... O.*A. ..... ..... ;!weak(A) Pattern CS25 ...O. ..... O.OX. ..X*. ..... :8,sOXd Pattern CS26 ?X?? make shape .O.? ...? .*.. ?..? :8,OX,shape(1) #################################### # # Edge splitting patterns # #################################### Pattern ES1 ....O attach O.X.. ..*.O ..... ----- :8,Xd Pattern ES2 ....O attach O*X.. .XO.O ..... ----- :8,Xd Pattern ES3a # gf New pattern. (3.5.3) ..O.. ....X invade with support from above X.*.. ..... ..... ----- :8,OEa ..a.. ....X X.*.. ..... ..... ----- ;weakness(a)<0.7 Pattern ES3b # gf New pattern. (3.5.3) ..O.. ....X invade with support from above X.*.. ..... ..... ----- :8,Oea ..a.. ..b.X X.*.. ..... ..... ----- ;!weak(a) && oplay_connect(*,b,*,a) ###################################################################### # # Edge block/expand patterns # # Moves that expand own position along the edge in some way or stops # opponent from expanding his position. This includes monkey jump, # various sliding moves, blocks, some extensions along the edge. This # category contains very many patterns and may need to be split sooner # or later. Some extensions along the edge can be found in the fuseki # category. # # These patterns are further subdivided into the following classes: # # Slides # Jumping underneath # Center expansions # Checking extensions # Edge expansions # Third and fourth line blocks # Second line blocks # First line blocks # Monkey jump and other intrusions on first and second lines # Third line push or extend # Second line push or extend # First line push # Third line hane # Second line hane # First line hane # Hane on top # Attach # Strengthen stones # Block intrusion from above # Draw back # Miscellaneous # ###################################################################### ######## # Slides ######## Pattern EB4 ?X?o. slide ...O. .*... ..... ----- :8,OXed ?X?o. ..ac. .*b.. ..... ----- ;!oplay_attack(*,a,b,c) Pattern EB5 # gf Constraint added. See gunnar:86. (3.7.10) ??..X? long slide oO.... ....*. ...... ------ :8,OXed ??..X? oca... ..b.*. ...... ------ ;!oplay_disconnect(*,a,b,*,c) Pattern EB6 ...?? slide toward opponent's position .O..X ...*. ..... ----- :8,OXe Pattern EB7 ?XX.. slide OO..X ...*. ..... ----- :8,OXe Pattern EB8 # tm added d class (3.1.20) .X.. slide O..X ..*. .... ---- :8,OXed Pattern EB9 # tm added d class (3.1.20) .X.?? slide ...OO .*... ..... ----- :8,OXed Pattern EB10 # tm added d class (3.1.20) ?...X? large slide ?O...? O...*. .....? ------ :8,OXed Pattern EB11 ?.X... play beneath ?....O ..*... ...... ...... ------ :8,OXed #################### # Jumping underneath #################### Pattern EB102 ?XX.?? Jump underneath oO.*.? O....? .....? ------ :8,OXed Pattern EB104 ?.X.o jump under a stone on 4-th row .*..o ....O ....o ----- :8,OXed Pattern EB105 ..... knight's move for defense .X... ..*.. O.... ..... ..... ----- :8,OXed Pattern EB106 ......? knight's move for defense .X..... ...*... .O..... ....... ....... ------- :8,OXed Pattern EB107 .X.. knight's move to come out ..*. O... .... ---- :8,OXead Pattern EB108 ..... jump under .*.XO ...O. ..... ----- :8,OXe Pattern EB109 ?.X.. jump under O..*. O.... ..... ----- :8,OXed Pattern EB110 ?X?.?? jump under O..*.? O....? o....? ------ :8,OXed Pattern EB111 # if EB110 does not defend, this one may ?X?.? jump under O.*oo O.... o.... ----- :8,OXed Pattern EB112 |oOO? jump under |...X |..*? |.... |...? +---- :8,OXed Pattern EB113 XX.. jump out to defend O.*o O... .... ---- :8,OXe Pattern EB114 ??X..? O....? O..*.? .....? .....? ------ :8,OXed ################### # Center expansions ################### Pattern EB201 ..... jump when stone on third row is approached .*... ..... .O.X. ..... ..... ----- :8,OXd Pattern EB202 ..... Jump out! ..*.. ..... X.O.X ..... ..... ----- :8,OXd Pattern EB203 ....?? knight's move to come out ..*.X? .....O ...O.. ...... ------ :8,Oe Pattern EB204 .... match opponent's jump X.*. .... X.O. .... .... ---- :8,OE Pattern EB205 .*.. jump into center ...X .O.. ...O .... ---- :8,OXd Pattern EB206 ??.?? jump out ?.*.? X...? ..O.X ..... ..... ----- :8,OXd Pattern EB207 ......? push up to expand ....... ..X*... X.XO..X XOO.... ....... ....... ------- :8,OXd Pattern EB208 ..... attach ..X*. O.... ..O.. ..... ..... ----- :8,OXd Pattern EB209 ooo...... low approach ooo....X. ooo..*... ......... ......... --------- :8,j,shape(-2) Pattern EB210 ??????x?? high approach deemed bad ?????..?? oo...*.X? ooo....xx .......?? ........? --------- :8,-,shape(-8) Pattern EB211 ??????x?? far high approach deemed bad ?????..?? oo..*..X? ooo....xx .......?? ........? --------- :8,-,shape(-8) ##################### # Checking extensions ##################### Pattern EB301 ...... defend to prevent peep .O.O.. .....X ....*. ...... ------ :8,OXed Pattern EB302 .O.X expand shape O.*. .... .... ---- :8,OXe Pattern EB303 ....xx jump toward opponent's position .O.*.X ...... ...... ------ :8,OXe Pattern EB304 O.... extend ..*.X ..... ..... ----- :8,OXe Pattern EB305 X.... extend ..*.O ..... ..... ----- :8,OXe Pattern EB306 # gf Don't attach a weak stone. (3.1.18) ??.? extend and attach X*.O .... .... ---- :8,OXe ??.? A*.O .... .... ---- ;!weak(A) Pattern EB307 ??O? extend and attach X*.O .... .... ---- :8,OXe Pattern EB308 O... block on third line .*.X .... .... ---- :8,OXe Pattern EB309 .O.. diagonal attachment on 3-rd line ..*X .... .... ---- :8,OXe Pattern EB310 X..O. expand base .*..O ..... ..... ----- :8,OXe Pattern EB311 ........ extend .O...... O....*.X ........ ........ -------- :8,OXe Pattern EB312 ....? O.... ..*.X ..... ..... ----- :8,OXe Pattern EB313 ?X.O? double sente kosumi ?.*.? ?...? ----- :8,OXe ?X.O? b.*.a ?...? ----- ;omoyo(a) && xmoyo(b) Pattern EB314 ?o?? extend towards opponent X..O .*.. .... .... ---- :8,OXe Pattern EB315 O.... ..*.X ..... ..... ----- :8,OXe Pattern EB316 XOO... prevent opponent's slide O..*X. ...... ...... ------ :8,OXe Pattern EB317 ...oo block extension if X is weak X..oo X.*.o ....o ....o ----- :8,OXea ...oo A..oo A.*.o ....o ....o ----- ;weak(A) ################# # Edge expansions ################# Pattern EB401 O...? jump along edge ..*.? ....? ----- :8,Oe,jump_out_far_helper Pattern EB402 ....x O.*.x jump along edge ....? ....? ----- :8,Oe,jump_out_far_helper ....a O.*.b ....? ....? ----- ; x_alive_somewhere(a,b) Pattern EB403 ?..xx jump along edge O...x ...*. ..... ----- :8,Oe,jump_out_far_helper ?..dx Oa..e cb.*. ..... ----- ;oplay_attack(*,a,b,c,c) && x_alive_somewhere(d,e) Pattern EB404 oO... jump along edge O..*. ..... ----- :8,Oe,jump_out_helper Pattern EB405 OO... jump along edge ...*. ..... ----- :8,Oe,jump_out_helper Pattern EB406 ??x.? jump along edge OO.*. ..... ..... ----- :8,Oe,jump_out_helper Pattern EB407 # gf Added constraint. (3.5.3) oO.... jump along edge O...*. ...... ------ :8,Oe,jump_out_helper oa.... O...*. ...... ------ ;!oplay_disconnect(*,*,a) Pattern EB408 o..? jump along edge O.*. .... ---- :8,Oe,jump_out_helper Pattern EB409 o.... jump along edge O..*. ..... ----- :8,Oe,jump_out_helper o.... O..*. ..... ----- ;oarea(*) Pattern EB410 ...??? defend cut O....? XO*..? XXO..? .....? .....? ------ :8,ad Pattern EB411 # gf Reduced shape value. (3.5.2) ...??oo O....oo XO*..oo XXO..oo .....oo .....oo ------- :8,ead,shape(3) ...??oo O....oo XO*..ab XXO..cd .....oo .....oo ------- ; o_alive_somewhere(a,b,c,d) Pattern EB412 # db added (3.1.8) # gf Added OX classification. (3.3.3) X??? push along the edge OXX. .O*. .... ---- :8,OXed,shape(3) ############################## # Third and fourth line blocks ############################## Pattern EB501 # gf Reduced shape value. (3.5.2) ....? hane if attached .*X.X ..O.. ..... ..... ----- :8,ed,shape(3) Pattern EB501a # gf Reduced shape value. (3.5.2) ?..X.? push in to stabilize ..OX.X ...O*. ...... ...... ------ :8,ed,shape(3) Pattern EB502 ..O.X. block if attached .*X... ...... ...... ------ :8,Oe,followup(5) Pattern EB503 ..O..X block if attached .*X... ...... ...... ------ :8,Oe Pattern EB504 ?.O.o block xX*.o ..... ..... ----- :8,Oe Pattern EB505 ??.?? hane on the 4-th line .*X.. O.OO. ?.... ?.... ----- :8,Oe Pattern EB506 ??.?? hane on the 4-th line .*X.. x.OO. ?.... ?.... ----- :8,Oe ??.?? .*B.. xaOO. ?.... ?.... ----- ;oplay_attack_either(*,a,a,B) Pattern EB507 # tm Reduced shape value from 4 to 3 (3.1.20) # gf Removed shape value. (3.3.16) ?o?? ?O.. block X*.. .... .... ---- :8,Oe Pattern EB507a # tm New Pattern (3.1.20) (see strategy:26) # gf Reduced shape value. (3.5.2) ?o?? ?O.. block X*.. O... .... ---- :8,Oe,shape(3) Pattern EB508 # gf FIXME: This pattern seems to need more context or a constraint. (3.3.12) ..O. Block opponent's extension on third line .... .*.X ...? .... ---- :8,OE Pattern EB509 ?... block to prevent incursion XO.O X*.. .... .... ---- :8,Oe Pattern EB510 .O.O blocking is very large X*.. .... .... ---- :8,Oe Pattern EB511 .O.? endgame move O.*X .... .... ---- :8,OXe Pattern EB512 ..*X attach to immobilize 1-st line stone ?O.. X... ---- :8,Oe Pattern EB513 ...... bend is urgent X.X*.. .XOO.. ...... ...... ------ :8,Oe Pattern EB514 ?O.? connect against peep (third line) X*.. ?O.? .... .... ---- :8,ne Pattern EB515 ?OO?? jump down and block ?.... ..*.X ..... ..... ----- :8,Oe Pattern EB516 o.....o kosumi block O.....o .*.X.O. ....... ....... ------- :8,Oe Pattern EB517 ?O.O? block ..*XX ..... ..... ----- :8,OXe Pattern EB518 o.o block x*. XO. X.. --- :8,OXe Pattern EB519 |...O block in corner |..*. |...X |.... +---- :8,OXe Pattern EB520 ..... block XO... .*... ..... ..... ----- :8,Oe ..... XO... .*..a ..... ..... ----- ;omoyo(a) Pattern EB521 # gf FIXED: This fixed value looks dangerous. (3.3.12) # gf Removed fixed value and E classification. (3.5.2) ..O? urgent atari ..OX .*XO .... .... ---- :8,Xd ..O? ..OX .*Xa .... .... ---- ; attack(a) && !defend(a) #################### # Second line blocks #################### Pattern EB601 ?Oo? block on second line XO.? .X*o ...? ---- :8,OXead Pattern EB602 ?Oo? block on second line XO.? ..*o .X.? ---- :8,OXe Pattern EB603 ?.O block on second line if safe from cut and clamp .*X ?.. --- :8,OXea ?aO b*D ?c. --- ;oplay_attack_either(*,a,a,D) ;&& (oplay_attack(*,b,D) || oplay_attack_either(*,b,c,a,a,D)) Pattern EB604 ?.O block on second line if safe from cut O*X ?.. --- :8,OXe ?aO O*X ?.. --- ;odefend_against(*,a) Pattern EB605 ?.O block on second line if safe from cut X*X ?.. --- :8,OXe ?.O A*X ?.. --- ;does_attack(*,A) Pattern EB606 ?OOO block on second line X*.. .... ---- :8,OXed Pattern EB608 OO? block on second row .*X ..? --- :8,OXe Pattern EB609 X.O. Block off the edge .X*. .... ---- :8,OXe Pattern EB610 O..O? O..*X ..... ----- :8,OXe Pattern EB611 OOXX block on second line *X.. .... ---- :8,OXe Pattern EB612 ???? .O.. XXO. ..*. .... ---- :8,OXe ???b .Oa. XXO. ..*. .... ---- ;odefend_against(*,a) || omoyo(b) Pattern EB615 .O? Prevent monkey jump or other incursion .*X ... --- :8,OXe Pattern EB615b # gf New pattern. (3.3.13) .O? Prevent monkey jump or other incursion .*X ... --- :8,OXed .O? a*X ... --- ;omoyo_opposite(a) Pattern EB616 ?o.O? ?.*.X o...X ----- :8,OXe Pattern EB617 # gf Revised pattern. (3.1.9) oO.? Prevent monkey jump or other incursion o.*X .... ---- :8,OXe Pattern EB618 oO.? Prevent monkey jump or other incursion .*.X ...X ---- :8,OXe Pattern EB619 oO.? Prevent monkey jump or other incursion ..*X ...X ---- :8,OXe oOa? ..*X ...X ---- ;oplay_attack(*,a,a) Pattern EB624 # gf Unified with EB625. (3.3.12) ?O?? block ?.OX .*X. .... ---- :8,Oe ?b?? ?.aX .*X. .... ---- ;lib(a)>1 && !oplay_disconnect(*,*,b) Pattern EB626 X?O?? block after attachment X.O.? ..X*. ..... ----- :8,Oe Pattern EB627 ?O.... block XO.X.. X*.... ...... ------ :8,Oe Pattern EB628 .O.. prevent incursion .... .*.X .... ---- :8,OXe Pattern EB629 ..?? don't let the opponent undermine .OX? .*.X .... ---- :8,Oe Pattern EB630 ..O.OX stop incursion .*..OX ..X.X. ------ :8,Oe Pattern EB631 oO.?? clamp on second o..O? o*XOX o..X. ----- :8,Oe oOb?? o.ac? o*XcX o..X. ----- ;!oplay_attack(*,a,b,c) Pattern EB632 # gf Revised pattern. (3.3.12) ?oO?? clamp on second ?O..X XOX*. .X... ----- :8,Oe ?oO?? ?a..X XaX*. .X... ----- ;!oplay_disconnect(*,*,a) Pattern EB633 O.O. seal opponent in ?O.. ?X*. ?X.. ---- :8,OXe Pattern EB634 ...Oo? Fend off territory (hopefully) ....O? .....X ...*.X .....x ------ :8,OXe Pattern EB635 ?OOOX? Stop eye-stealing move X*..OO ...... ------ :8,Xd Pattern EB637 ?o.? stop intrusion on first line .*.O ..XX ---- :8,OXe ?od? e*cO baXX ---- ;!oplay_attack_either(*,a,b,*,b) && oplay_attack_either(*,a,b,c,d,e,a,e) Pattern EB638 ?O..Oo defend eye space .X*..o ...... ------ :8,OXed ?Oa.Oo .X*..o ...... ------ ;oplay_attack(*,a,a) Pattern EB639 ?OoO block on edge X... X.*. .... ---- :8,OXead ?OoO Xba. Xc*. .... ---- ;oplay_attack(*,a,b,c,a) Pattern EB640a Ooo block on edge x*. X.. --- :8,OXe Ooo x*. Xab --- ;!oplay_attack_either(*,a,b,*,b) Pattern EB640b # db modified (3.3.5) .Oo block on edge x*. X.. --- :8,OXe,shape(3) .Oo x*. Xab --- ;!oplay_attack_either(*,a,b,*,b) Pattern EB640c ..O block on edge x*. X.. --- :8,OXe ..O x*. Xab --- ;!oplay_attack_either(*,a,b,*,b) Pattern EB641a ?Oo? block on edge x.*. X... ---- :8,OXe Pattern EB641b ?.O? block on edge x.*. X... ---- :8,OXe Pattern EB641c ?..O block on edge x.*. X... ---- :8,OXe Pattern EB642 |XOO |X*. |... +--- :8,OXe,reverse_followup(6) Pattern EB643 # gf New pattern. (3.5.3) # See gifu03:506. ?.O block on edge O*. X.. --- :8,OXe ################### # First line blocks ################### Pattern EB701 |.OX Descending in the corner for profit and eyespace |.OX |.*. +--- :8,OXe Pattern EB702a # tm modified (3.1.20) (see endgame:102) ??o??? prevent incursion ?XO.?? ..X*.? ------ :8,OXe,reverse_followup(6) ??o??? ?Xab?? .cX*.? ------ ;lib(a)>2 ;|| !oplay_attack_either(*,b,c,*,a) Pattern EB702b ??o??| prevent incursion ?XO.?| ..X*.| -----+ :8,OXe,reverse_followup(2.5) ??o??| ?Xa.?| ..X*.| -----+ ;lib(a)>2 Pattern EB703 # gf Added O classification. (3.1.32) ?O? block on edge O.O X*. --- :8,OXe Pattern EB704 ?oO block on edge. Sometimes better to fall back... XO. .X* --- :8,OXe Pattern EB705 # FIXME: (see trevorc:1040) ????? ?O... prevent incursion X*... ----- :8,OXe ????? ?b... X*a.. ----- ;xplay_attack(*,a,a) || weak(b) Pattern EB706 ??Oo??? prevent incursion with sente ..XO... ..X*... ------- :8,OXe ??Oo??? ..AO... ..A*... ------- ;oplay_attack(*,A) Pattern EB707 |..? prevent incursion with sente |..? |XXO |*Oo |..? |..? +--- :8,OXe,followup(8) |..? |..? |AAO |*Oo |..? |..? +--- ;oplay_attack(*,A) Pattern EB708 O? seal off at edge .O *X -- :8,OXe Pattern EB709 |.XO extending in the corner is huge: double sente |*O. |... +--- :8,OXe,reverse_followup(3) Pattern EB709b # gf New pattern. (3.1.14) |*XO if this move can't be captured and O is already alive, we prefer |.O. hane to the descent |... +--- :8,OXe,reverse_followup(3) Pattern EB710 # gf Removed fixed value. (3.5.2) o.OOX? block .*XX.X ------ :8,OXe Pattern EB711 o.OO block .*XX ---- :8,OXe,followup(4) o.bb .*AA ---- ;oplay_attack(*,A) && !oplay_attack(*,b) Pattern EB712 # Probably bigger reverse followup in reality # tm Modified (3.1.17) # tm Modified (3.1.20) ?O.. block XO.. X*.. ---- :8,OXe,reverse_followup(6) ?O.. XOb. X*a. ---- ; !xplay_attack_either(*,a,b,*,b) Pattern EB712b # gf New pattern. (3.7.10) # Probably bigger reverse followup in reality # See trevora:340 and trevorb:370. ?*O.. block on top OXO.. .X... ----- :8,Xe,reverse_followup(6) ?*d.. eXdb. .Xca. ----- ;alive(d) && !xplay_attack_either(c,a,b,c,b) && oplay_attack(*,c,c) ;&& !oplay_connect(c,*,d,e) Pattern EB713 # tm modified (3.1.17) # FIXME: (see trevorc:1040) ?O.. block X*.. ---- :8,OXe,reverse_followup(3) ?Ob. X*a. ---- ;!xplay_attack_either(*,a,b,*,b) Pattern EB714 XO.X .X*. ---- :8,B XO.A .X*. ---- ;oplay_attack(*,A) Pattern EB715 # ab added (3.1.14) O.* jump if blocking is impossible X.. --- :8,OXe ac* Xbd --- ;!oplay_defend_both(b,c,a,b) && !oplay_defend_both(c,b,d,*,c,d) Pattern EB716 # ab added (3.1.14) O*. pull back if blocking is impossible X.. --- :8,OXe a*c Xbd --- ;!oplay_defend_both(b,*,a,b) && oplay_defend_both(*,b,d,c,a,d) Pattern EB717 # tm New Pattern (3.1.18) # gf FIXME: lib(A)==2 is always true in this pattern. (3.1.23) ?OO.. prevent incursion .XX*. ----- :8,sOXe ?OB.. .AA*. ----- ; lib(A) == 2 ; && !oplay_attack_either(*,B,*) Pattern EB718 # tm New Pattern (3.1.20) # compare to EB715 - slightly different. O.* jump back to block X.. --- :8,OXe ac* Xb. --- ;!oplay_defend_both(b,c,a,b) && oplay_defend_both(*,c,a,*) Pattern EB719 # gf New pattern. (3.5.3) # Inexact followup but usually big. .XXO block XOO* ---- :8,Xe,followup(6) aBBd Cee* ---- ;alive(d) && critical(e) && !oplay_defend_both(*,?,a,B,C) ############################################################ # Monkey jump and other intrusions on first and second lines ############################################################ Pattern EB801 # Not to first line. O.X.? jump under on second line .O.*? ....? ----- :8,Oe Pattern EB802 # gf Revised pattern and constraint. (3.3.12) ??xxxx monkey jump ?O.... o...*. ------ :8,OXe bcEFGx da.... o...*. ------ ;!weak(a) && o_alive_somewhere(b,c,d) && x_alive_somewhere(E,F,G) ;&& !oplay_disconnect(*,*,a) Pattern EB803 ?xX.. inverse monkey jump O..*. O.... ----- :8,OXe Pattern EB804 ?Xx.. inverse monkey jump O..*. O.... ----- :8,OXe Pattern EB805 ??X.? jump up O..*. oO... ----- :8,OXe Pattern EB806 ??X..? jump up O...*. oO.... ------ :8,OXe Pattern EB808 # tm added defend_against_atari ?xxx? jump out on first line OX..? .O.*. ----- :8,OXe ?xxx? aX..? bC.*. ----- ;!weak(a) && oplay_attack(*,b,b) >defend_against_atari(C) ########################### # Third line push or extend ########################### Pattern EB909 ?????X.? defense is becoming urgent .X.O..*. .....O.. ........ -------- :8,d Pattern EB910 ?.X.. follow up the slide with diagonal move (another slide could be broken) x*..O ..O.. ?.... ----- :8,Oe Pattern EB911 X.XX.. extend to 3 since B hane would be severe. .*O..O ...O.. ...... ------ :8,Oe Pattern EB912 ?XX? extend to defend slide ..O* O... .... ---- :8,Oe Pattern EB913 # gf Unified with EB916. (3.3.12) ??X. don't let opponent block ?O*. o... .... ---- :8,OXe Pattern EB913b ??X. don't let opponent block ?O*. .... .... ---- :8,Xd Pattern EB914 # gf Removed fixed value. (3.5.2) ?O??X. an exception to the preceeding pattern *XOO.. ...... ...... ------ :8,d ?O??X. *AOOa. ...... ...... ------ ; does_attack(*,A) && oplay_defend(a,A) > antisuji(a); Pattern EB915 # gf Removed fixed value. (3.5.2) ?O??X. exception, continued OXOO.. *X.... ...... ------ :8,d ?O??X. OAOOa. *X.... ...... ------ ; does_attack(*,A) && oplay_defend(a,A) > antisuji(a); Pattern EB917 ??X..?? leap out ?OX.*.. OoO.... ....... ------- :8,Oe Pattern EB918 ..XX atari to expand *XOO .O.. .... ---- :8,Oe,followup(6) ..XX *AOO .O.. .... ---- ;!attack(A) Pattern EB919 ..XX? extend along the edge .*OX? ...OO ..... ----- :8,OXe Pattern EB920 ????..? Two space extension .....O? .*..OXO ......O ....... ------- :8,Oe Pattern EB921 |oooX?? take corner |..*.X? |....OO |...... +------ :8,e Pattern EB922 ??Xx? override solid connection XXO*. OO... ..... ----- :8,OXe Pattern EB923 XO? separate! .*X ... ... --- :8,Oe Pattern EB924 .... extend on third line O.*. .... .... ---- :8,Oe .... O.*a .... .... ---- ;!omoyo(a) Pattern EB924a XX...x extend on third line O.O.*. ...... ...... ------ :8,O,shape(-3) Pattern EB924b XX...x extend on third line O.O... ....*. ...... ------ :8,O,shape(-3) Pattern EB925 # gf Removed fixed value and E classification, revised constraint. (3.5.2) XX...x extend on third line O.O*.x ...... ...... ------ :8,d,shape(3) XX...x a.O*.x ...... ...... ------ ; !dead(a) && !oplay_disconnect(*,a,*) ############################ # Second line push or extend ############################ Pattern EB1001 .X.O extend to undermine opponent *O.. .... ---- :8,OXe Pattern EB1003 XX.. move out on second line OO*. .... ---- :8,OXe Pattern EB1004 # We should climb to third line if safe. Need helper. # see EB1005 ??.XX push out ?.*OO ?.... ..... ----- :8,OXe Pattern EB1005 ??o?? hane ?o*XX ?..OO ?.... ..... ----- :8,OXe ??o?? ?o*XX ?.aOO ?.... ..... ----- ;odefend_against(*,a) Pattern EB1006 ?..X? push once .XXOO .*O.. ..... ----- :8,OXe Pattern EB1007 X.. overrides 113 O*. ... --- :8,OXe Pattern EB1008 ..X. Double sente, do it early! .O*. .... ---- :8,OXe Pattern EB1008b # gf Added n classification. See gifu03:105. (3.5.3) ?..X. Double sente, do it early! x.O*. ..... ----- :8,OXn,reverse_followup(2) Pattern EB1008c # gf Added n classification. See gifu03:105. (3.5.3) ?..X. Double sente, do it early! x.O*. ..... ----- :8,OXn,reverse_followup(5) ?..X. x.a*. ..... ----- ;xplay_attack(*,a) Pattern EB1009 OX. magari on second line O*. ... --- :8,OXe Pattern EB1011 ?XX.?? reverse sente extend OOX... ..O*.. ...... ------ :8,OXe Pattern EB1012 X.?X extend on second line O*.? .... ---- :8,OXe Pattern EB1013 X.?? extend on second line O*.X .... ---- :8,OXe Pattern EB1014 X.X extend on second line O*. ... --- :8,OXe Pattern EB1015 ?OXX Reverse sente push ..O* .... ---- :8,OXe Pattern EB1016 ?OX.. extend on second line -- reverse sente OXO*. ..... ----- :8,Oe ?OA.. aXO*. ..... ----- ;!attack(a) && !dead(A) Pattern EB1017 X... double sente push ..XX O.O* o... ---- :8,Oe Pattern EB1018 ??O.X. undermine the opponent and threaten two eyes XOoO*. oooo.. ------ :8,OXed Pattern EB1019 .XxoO? make eye and undermine opponent .*O.OX ...OXX ------ :8,OXed Pattern EB1020 |.... Double sente, do it early! |.O.X |.*X. |.... |.... +---- :8,OXe Pattern EB1021 ?XX. push to get one eye OO*. O... ---- :8,OXed Pattern EB1022 # db New pattern (3.1.28) ?Xxx?? simply extend to avoid bad aji oOX.x? o.O*.. ...... ------ :8,O,shape(2) ?Xxd?? ocX.e? obO*a. ...... ------ ; oplay_attack(a,b,*,c) || x_alive_somewhere(d,e) > replace(a,*) ################# # First line push ################# Pattern EB1101 ?x?? big push in sente ?X.. O*.. ---- :8,OXe ?x?? ?X.a O*.. ---- ;xmoyo(a) ################# # Third line hane ################# Pattern EB1201 ?XO?.. hane underneath .*.O.. ...... ...... ------ :8,OXe Pattern EB1202 # gf Removed fixed value. (3.5.2) ?...? hane O.X*. ..O.? ....? ----- :8,OXeCad Pattern EB1203 # gf Added constraint. (3.3.12) # gf Removed fixed value. (3.5.2) ?..X. extend to defend and connect O.XO* ..O.. ..... ----- :8,OXeCad ?..X. a.XO* ..O.. ..... ----- ;!oplay_disconnect(*,*,a) ################## # Second line hane ################## Pattern EB1301 ..XX hane underneath .XOO .*.. .... ---- :8,OXe Pattern EB1302 XOX hane on second line O.* ... --- :8,OXe XaX O.* ... --- ;lib(a)>1 Pattern EB1303 ?XX? block .XO? .*.O .... ---- :8,OXe Pattern EB1304 ..XX. hane O..OX ..O.* ..... ----- :8,OXe Pattern EB1305 ?.XX.. hane on second line .XO..O .*.O.. ...... ------ :8,OXe Pattern EB1306 ?XO? hane to claim space on second line .*.O .... ---- :8,OXe Pattern EB1307 # gf Removed shape bonus. (3.3.18) ?..?? hane to undermine the opponent ..XOo ..*.o ....o ----- :8,OXead ?..?? ..Xao ..*.o ....o ----- ; lib(a)>2 Pattern EB1308 ?.... ?.... OX... OX... .*... ..... ----- :8,OXed Pattern EB1309 # gf Reduced shape value. (3.5.2) ??.o??? urgent hane ?.XO..O ..*.... ....... ------- :8,-,shape(3) Pattern EB1310 # gf Removed fixed value. (3.5.2) ?..X? after hane opponent must fall back ..XOO ..*.o ....o ----- :8,OXead ?.cX? .bXOO da*eo .f..o ----- ; !oplay_defend(*,a,b,c,d,e,f,f) Pattern EB1311 # gf Removed fixed value. (3.5.2) ?..X? double sente .XXOO .*O.o ....o ----- :8,OXead ################# # First line hane ################# Pattern EB1401 # gf Removed fixed value. (3.5.2) |.XO? large endgame move |.XO? |.*.o +---- :8,OXe Pattern EB1402 ?.X?? hane ..XO? x.*.o ----- :8,OXe Pattern EB1403 # gf Revised pattern. (3.1.3) # gf Revised constraint. (3.3.13) # ab Removed followup value (handled by influence code). (3.3.20) ?oX?? sente hane ..XO? ?.*.o ----- :8,Xe ?oX?? b.Xa? ?.*.. ----- ;alive(a) && xmoyo(b) Pattern EB1404a # Followup to previous pattern. # # No need to check for sente. If we found the hane to be worth # playing, we should continue with the tsugi too. (Unless we can # follow up with a ko or nakade pattern or something similar, but # those should have higher values.) # # In practice this pattern doesn't always kick in at a high enough # value to guarantee that EB1403 will be followed up. # # gf Revised pattern. (3.1.3) # eb revised constraint (3.3.13) # see nngs3:1110 # ab FIXME: Is this still necessary? ?oX?? Connect after hane. ..XO? ?XO*o ----- :8,Xe,followup_value(8) ?oX?? ..Xa? ?BO*o ----- ;!dead(a) && !attack(B) Pattern EB1404c #cut followup to sente hane #evand new pattern (3.3.13) # gf Fixed value removed. (3.5.2) ?oX?? .*XO? ?XO.o ----- :8,Xe ?oX?? c*Xa? ?BO.o ----- ;!dead(a) && xmoyo(c) && !oplay_defend(*,B) && !oplay_attack_either(*,*,a) Pattern EB1405 ?..X? sente hane ..XO? ?.*.o ----- :8,OXe,followup_value(8) ?..X? ecDO? ?a*bo ----- ;xmoyo(e) && !oplay_defend_both(*,a,b,?,c,a,D) && !oplay_attack(*,a,b,c,*) ############# # Hane on top ############# Pattern EB1501 ??oo? Hane atop opponent's attachment on third line ..*.. ..XO. ..... ..... ----- :8,OXEad Pattern EB1502 ?oooo?? hane is urgent ooo*.?? o.OX.o? o.OX.o? o....?? o....?? ------- :8,OXead Pattern EB1503 ...? extend instead of hane x*.. .OX. .OX. .... .... ---- :8,OXed ######## # Attach ######## Pattern EB1601 ...... attach underneath .X.O.O .*.... ...... ------ :8,OXe Pattern EB1603 ?...? top attachment .O.*. ...X. ..... ..... ----- :8,OXE Pattern EB1604 # The attachment is beneficial even if captured except # in the case where the opponent pushes below leading # leading to a complicated fight. If this happens # O3X it is unclear who will come out better. (O can # 421 retaliate in various ways depending on surroundings # ... and fighting strength.) Attaching is preferred # --- to EB313 if it works. # # The final position could be: # # O # OOXX # OX.X # ..X. # ---- # # or: # # O # OOXO # .XXX # ..X. # ---- # # It can backfire if X pushes below. That is not always possible. ????.? attach on second line ?....? oO.X.o o..*.? .....? ------ :8,OXe ????.? ?....? oO.A.o o..*.? .....? ------ ;!weak(A) Pattern EB1605 ????.? attach on second line in sente ?....? oO.X.o o..*.? .....? ------ :8,OXe,followup(5) ????.? ?....? oO.Dco o.b*a? .....? ------ ;!weak(D) && !oplay_attack(*,a,b,?,c,c) Pattern EB1606 # Explicit followup. ???.? attach on second line ....? O.X.o .*OX? ....? ----- :8,e Pattern EB1606b # Explicit followup. ???.? threat to cut ....? O.X.o .*OX? ....? ----- :8,-,followup(8) ???.? ....? O.Xao .*OX? ....? ----- ;!oplay_attack(*,?,a,a) Pattern EB1607 X... attach to expand ..X. O.*. .... ---- :8,OXe Pattern EB1608 O..X. attach below oO.*. o.... ----- :8,OXe Pattern EB1609 ..x.. attach to connect ..... O.X.O ..*.. ..... ----- :|,OXcad ..x.. ..... O.X.O .a*b. ..... ----- >antisuji(a); >antisuji(b); Pattern EB1610 # gf Reduced shape value. (3.5.2) ..x.. followup ..... O*X.O .XO.. ..... ----- :8,cad,shape(3) Pattern EB1611 # gf Reduced shape value. (3.5.2) ..x.. followup ..*.. OOX.O .XOX. ..... ----- :8,cad,shape(3) ################### # Strengthen stones ################### Pattern EB1701 .*X? strengthen stone to prevent undermining hane .OX. .... .... ---- :8,OXd Pattern EB1702 .*.X jump up when kicked .OX. .... .... ---- :8,OXd,shape(3) Pattern EB1702b # gf New pattern. (3.1.17) ...*.X jump up when kicked ...OX. ...... ...... ------ :8,OXa,reverse_followup(8) Pattern EB1703 O.*X Strengthen stone on second line ..OX .... ---- :8,OXed Pattern EB1704 ?*.? Stand on third line XO.? ...? ---- :8,nOXed Pattern EB1705 ??o? Stand to defend connection O.*X ..OX .... ---- :8,OXed Pattern EB1706 ??X? Draw back to defend connection O*.X ..OX .... ---- :8,OXed Pattern EB1707 ..?? stand after attachment .*.. .OXX .... .... ---- :8,OXed Pattern EB1708 # If we are strong we prefer to connect solidly ?.O? Defend after hanetsugi *.OX .OXX ---- :8,OXe ?.O? *acX bOXX ---- ;xcut(a) || xplay_attack(a,b,c) Pattern EB1709 X*.O? make eye and reach for center xO.OX ..OXX ----- :8,OXd Pattern EB1710 # Sometimes better to hane. But under which constraints? .....? contact instability ..X..? ..O*.? .....? .....? ------ :8,OXed Pattern EB1711 # gf Shape bonus reduced. (3.1.12) .O.X prevent slide .*X. .... .... ---- :8,OXead,shape(1) ############################# # Block intrusion from above ############################# Pattern EB1801 ..*.. connect O...O ..... ----- :8,Oe ..*.. O...O ..... ----- ;!omoyo(*) Pattern EB1802 ..X.. connect O.*.O ..... ----- :8,OXec Pattern EB1803 o..Xx defend! O.*.. ....O ..... ..... ----- :8,OXec Pattern EB1804 ??.?? defend! O.*.. ....O ..... ..... ----- :8,Oec ??.?? O.*.. ....O ..... ..... ----- ;!omoyo(*) Pattern EB1805 ??.?? defend! O.*.O ..... ..... ..... ----- :8,Oec ??.?? O.*.O ..... ..... ..... ----- ;!omoyo(*) Pattern EB1806 ?.X.?? block intrusion into wide extension ...... O.*..O ...... ...... ------ :8,OXec Pattern EB1807 ?XO don't accept position being split O*. ... ... --- :8,OXec Pattern EB1808 # evand added shape value -0.5 (3.5.4) ??.?? defend! O.*.O ..... ..... ----- :8,OXec,shape(-0.5) ??.?? O.*.O ..... ..... ----- ;!omoyo(*) Pattern EB1808a ??.?? defend! O...O ..*.. ..... ----- :8,OXec ??.?? O...O ..*.. ..... ----- ;!omoyo(*) Pattern EB1809 ..X.. secure fourth line territory o.O*o o.... ..... ..... ----- :8,OXe ..X.. o.O*o o.... ..a.. ..... ----- ;safe_xmove(*) && oterri(a) Pattern EB1810 ?X? block below OXO .*. ... --- :|,OXeC ?X? bXa .*. ... --- ;!oplay_break_through(*,a,*,b) ########### # Draw back ########### Pattern EB1901 ?X?? draw back XO.O XO*. ?X?. ---- :8,OXe Pattern EB1902 .O*. draw back if opponent plays below XX.. .... ---- :8,OXe .O*. XXa. .... ---- ;!odefend_against(a,*) Pattern EB1903 .... draw back .*OX ..X. .... ---- :8,OXed Pattern EB1904 ..... draw back ..*OO ...XX ..... ----- :8,OXe Pattern EB1905 oo.O?? draw back o.*OX? o..X.X ------ :8,OXe oo.c?? o.*cX? o.aXbX ------ ;xplay_attack_either(b,a,a,c) >antisuji(a); Pattern EB1906 O... draw back if clamp is impossible .*O. .XOX ..Xx ---- :8,OXe Oab. .*O. .XOX ..Xx ---- ;!xplay_attack(*,a,b,b) ############### # Miscellaneous ############### Pattern EB2001 X... space odyssey .*X. O.OX o... ---- :8,OXed Pattern EB2002 # gf Reduced shape value. (3.5.2) ?..... don't jump if the edge is open .*.... ...... O..... ...... ...... ...... ------ :8,-,shape(-3) Pattern EB2003 # With a sufficiently strong position directly to the right of the # diagram, this may be a good move to build a moyo. # gf Reduced shape value. (3.5.2) ?...... don't jump if the edge is open .*..... ?...... ?O..... ?...... ?...... ?...... ------- :8,-,shape(-3) ###################################################################### # # Center block/expand patterns # # Moves that expand own position in the center in some way or stops # opponent from expanding his position. This includes moves like # block, bend, hane, and various extensions into empty space or # opponent's area. This category contains very many patterns and may # need to be split sooner or later. # ###################################################################### ################################################# # safe jump out patterns, cannot (usually) be cut ################################################# Pattern CB1 # gf Removed d classification (pattern too general). (3.3.13) ???????? jump into empty space .......? .O.O.*.? .......? ???????? :-,OE,jump_out_helper Pattern CB2 # gf Removed d classification (pattern too general). (3.3.13) ?????? jump into empty space ?....x ?.*.OO ?....x ?????? :8,OE,jump_out_helper Pattern CB3 ?.OO. extend ?.... ?.... ?.*.. ?.... ????? :8,OEd,jump_out_helper Pattern CB4 # gf Removed d classification (pattern too general). (3.3.13) ????? Jump out if starting to get surrounded ?...? ?.*.? ?...? ?.OO? :8,Oe,jump_out_helper Pattern CB5 # gf Removed d classification (pattern too general). (3.3.13) ????? jump out ?...O ?.*.O ??..? ????? :8,Oe,jump_out_helper Pattern CB6 # gf Removed d classification (pattern too general). (3.3.13) ?????? jump out ?...Oo ?.*..o ??..Oo ?????? :8,Oe,jump_out_helper Pattern CB7 ???.o? jump out ?....O ?.*..O ??...? ?????? :8,OEd,jump_out_helper Pattern CB8 ???.??? jump out ?....Oo ?.*...o ??...Oo ??????? :8,OEd,jump_out_helper Pattern CB9 ??O..O ?....O ?.*... ??.??? ?????? :8,OEd,jump_out_helper Pattern CB10 OoOo? jump out! ...?? ....? O.*.? ??.?? ????? :8,OEd,jump_out_helper Pattern CB12 .... atari to break X connection .*XO X.O. :8,OXeBad,shape(2) ..a. .*XO XbOc ; oplay_attack(*,a,b,c,c) Pattern CB13 ???? jump out to reduce and possibly expand x..O .*.O x..o ???? :8,Oe,jump_out_helper Pattern CB14 ?o?? attach ...O .*.. .X.O ...? :8,OXEd,shape(2) ?o?? ..bO .*ac .XdO ...? ; oplay_attack(*,a,b,c,a) || oplay_attack(*,a,d,b,a) Pattern CB14a ?o?? followup ...O .OX. .X*O ...? :8,OXed,shape(3) ?o?? ..aO .OX. .X*O ...? ; oplay_attack(*,a,a) Pattern CB14b ?o?? followup ..*O .OX. .X.O ...? :8,OXed,shape(2) ?o?? ..*O .OXa .X.O ...? ; oplay_attack(*,a,a) Pattern CB15 .xO. prevent push in xx*. xXO. xxXO :8,Oed,shape(2) .bO. ac*. xXO. xxXO ; x_alive_somewhere(a,b,c) ###################################### # unsafe jump out patterns, can be cut ###################################### Pattern CB101 O.....? extend ?...*.? ?.....? ??????? :8,OE,shape(-1),jump_out_far_helper Pattern CB103 O....? extend ?..*.? ?....? ?????? :8,OE,shape(-3),jump_out_far_helper Pattern CB104 ???O??? extend ??...?? ??...?? ??.*.?? ??...?? ??????? :|,OE,shape(-3),jump_out_far_helper Pattern CB105 O...? extend ?.*.? ?...? ????? :8,OE,jump_out_far_helper Pattern CB105b # gf New pattern, see 9x9:540. (3.7.8) ?O...? extend ?..*.? ?....? ?????? :8,OE ?O...? ?..*.? ?a...? ?????? ;xarea(*) && oarea(a) Pattern CB106 ???O??? extend ??...?? ??.*.?? ??...?? ??????? :|,OE,shape(2),jump_out_far_helper ######################## # Connect attacked keima ######################## Pattern CB207 # gf Merge with CB208. (3.1.23) ??x threaten connection O*. .XO :8,nOXea,shape(2) ??x O*. .ba ;(lib(a)>1) && (!attack(b) || defend(b)) Pattern CB209 ??O connect O*. .XO :8,nOXe ??a O*. .Xb ;lib(a)>1 && lib(b)>1 Pattern CB210 ??.? connect O*.O ?XO? :8,nOXea ??.? O*.O ?Xa? ;lib(a)>1 Pattern CB217 ?.O block .*X ?OX :8,OXecd ?.a .*X ?OX ;lib(a)>1 Pattern CB217a ?.O block attacking .*X ?OX :8,a ?.O .*A ?OA ; owl_threatens(*,A) Pattern CB277 .*O connect or threaten to connect OX? :8,nOXed .*O aX? ;lib(a)>1 Pattern CB327 # gf Reduced shape value. (3.1.23) # See nngs:1750 # ab increased shape value (3.1.29) # gf Added constraint. (3.3.3) ?.? seal opponent in ... .*O OX? :8,OXecd,shape(3) ?.? ... .*O OA? ;!attack(A) || !oplay_defend(*,A) Pattern CB328 #ab Revised constraint (3.3.3) # gf Reduced shape value. (3.5.2) ?.? seal opponent in and connect ... .*O OX? :8,OXC,shape(3) ?.? ... a*O OB? ; oplay_attack_either(*,a,a,B) && (!attack(B) || does_attack(*,B)) ###### # Hane ###### Pattern CB202 ?o.? hane if attached ..*. .OX. .... ..X. :8,OXE Pattern CB212 # constraint is complementary to CB213. .X.O.? hane to defend ...X*. :8,OXd .X.Oa? ...B*. ;!oplay_attack_either(*,a,a,B) Pattern CB213 .X.O.? extra value if X can't cut ...X*. :8,OXed,shape(2) .X.Oa? ...B*. ;oplay_attack_either(*,a,a,B) Pattern CB216 OX.. connect if invaded .*.O ...? :8,OXecd aX.. .*.b ...? ;lib(a)>=2 && lib(b)>=2 Pattern CB219 ....O hane ..O.. .*X.X ..... :8,OXE Pattern CB220 # gf Added missing '-' placeholder for classification. (3.1.18) *. XO hane at head of two stones. XO .. :8,-,shape(2) Pattern CB221 ????O? hane .XOO.. ..XX*? ??..?? :8,OXe Pattern CB223 ooo form eye to protect O.O .*X :8,OXed ooo O.a .*X ;lib(a)>1 Pattern CB231 ?ooo form eye to protect ?O.* o.OX ?o?? :8,OXed Pattern CB232 ?ooo form eye to protect ?O.* o.OX ?OXX :8,OXed,shape(1) Pattern CB236 XX*. block! this can be life or death ?O.O ??O? :8,OXed Pattern CB240 .. block off area .* OX :8,OXe ab .* cD ;!xarea(a) && !xarea(b) && lib(c)>2 && lib(D)<3 Pattern CB241a .. block off area .* OX O? :8,OXe .. a* OX O? ;odefend_against(*,a) Pattern CB241b .. block off area .* OX .x :8,OXe .. a* OX .x ; odefend_against(*,a) Pattern CB244 ?...? hane at the head of three stones OXXX* ?OOO. :8,OXe Pattern CB245 # tm modified (3.1.18) # see trevorb:750 ?..?? hane at the head of two stones OXX*? ?OO.? :8,OXe ?..?? cXe*F ?bbAD ; lib(c)>1 ; && !oplay_attack(*,b) ; && oplay_defend_both(*,A,*,b) ; && (oplay_attack(*,A,e) || !x_alive_somewhere(D,F)) Pattern CB247 ?O.. hane XO.. .X*. .... :8,OXe Pattern CB262 ..o? hane is urgent .*.. .XOO ..XO :8,OXe Pattern CB271 ?OX.? hane is urgent ..OX. ?O.*. ??... :8,OXe Pattern CB275 ?.X make shape ?.. O.O X*. ?.. ?.O :8,OXecd Pattern CB281 O.?? block! O.?? X*.? ...? Ooo? :8,OXe Pattern CB288 ?... block and expand ..*. OOX. ?X.. :8,OXe Pattern CB296 Oooo block .*.o OX?? :8,OXe Pattern CB297 # gf Added a classification. (3.5.3) Oooo block in sente .*.o OX?? :8,OXea,followup(5) Oooo .*.o OA?? ;!attack(A) && oplay_attack(*,A) Pattern CB298 O.Oo protect by drawing back XO.. XX*O :8,nOXed Pattern CB307 X..? atari OX*. XO.. :8,-,followup(5) X..? aX*. Xb.. ; dead(a) && !dead(b) Pattern CB309 ?..XO hane, threatening atari ..XOo ..*.O ?...? :8,OXed Pattern CB310 ?..? hane .*X. ..O? ?Oo? :8,OXed Pattern CB313 ?.O.. block! X.X*. ..... :8,OXE Pattern CB323 O.? block X*O :8,OXe Pattern CB329a # db added (3.3.6) ?.?? atari .*.? OX.X oOX? :8,OXe,followup(5),shape(2) Pattern CB335 # gf New pattern. (3.1.18) x.O block X*. O.o :8,OXe Pattern CB339 # gf New pattern. (3.3.4) ?x? x.O .*X :8,OXe ?x? xaO c*B ;xterri(c) && oplay_attack_either(*,a,a,B) ######## # Kosumi ######## Pattern CB205 ..... kosumi to claim space ..... .*... O.... ?X... :8,OXe Pattern CB225 # Move out diagonally instead ????? diagonal move to reduce ..... ..... ..*.. .O.X. ..... :8,OXe ????? ..... ab... ..*.. .O.X. ..... ;xarea(a) || xarea(b) Pattern CB235 ..X. extend and block O... .*.. ?... :8,OXe Pattern CB251 ..O? diagonal move .*.. ...X ...X :8,OXe Pattern CB256 ..O diagonal extension if nothing better .*. ..X :8,OXe Pattern CB257 X..O move out ..*. ...X :8,OXea Pattern CB260 .... Take opponent's vital point for moving out O... X.*. X..O :8,OXea Pattern CB267 OXOX prevent sealing XO.. X.*. :8,Oed Pattern CB289 ..O. reinforce and block .*.O .X.? :8,OXed ############### # Miscellaneous ############### Pattern CB203 ..O. extend and peep .OXX .*.. ..X. :8,Xea,followup(20) .ae. .fXX .*bc ..Xd ;(alive(e) || alive(f)) && oplay_attack(*,a,a) && !oplay_attack(*,?,b,c,d,d) Pattern CB204 # Kosumi is better if GNU is going to go back and defend anyway. ..... knight's move to claim space ..... ..*.. O.... ?X... :8,OXE e.... ..... cb*.. da... ?X... ;!xmoyo(e) && oplay_defend(*,a,b,c,d) Pattern CB204b # ab removed shape value (3.1.28) ..... knight's move to claim space ..... ..*.. O.... ?X... :8,OXEd e.... ..... cb*.. Oa... ?X... ;!xmoyo(e) && oplay_attack(*,a,b,c,c) Pattern CB206 ..... block solid to claim space -- ..... not so good if X (easily) can play double hane. ..... O*... ?X... :8,OXe ..... ..... .dc.. O*a.. ?Xb.. ;!oplay_attack(*,a,b,b) || !oplay_attack(*,a,c,d,*) Pattern CB214 O.X.. connect if invaded ..*.O ?...? :8,OXecd Pattern CB215 ..X.. connect if invaded O.*.O o...? :8,OXecd Pattern CB218 ?.? extend .*. .OX OX? OX? :8,OXe ?.? .*. .OA OX? OX? ;!attack(A) || does_attack(*,A) Pattern CB224 ????? knight's move to claim space ..... ..*.. ..... .O.X. ..... :8,OXE ????? ..... ab*.. ..... .O.X. ..... ;!xarea(a) && !xarea(b) Pattern CB226 ????? one space jump to reduce ..... .*... ..... .O.X. ..... :8,OXE ????? ..... a*... ..... .O.X. ..... ;xarea(a) || xarea(*) Pattern CB227 # gf Reduced shape value. (3.5.2) ?OO. bend around XX*. .... :8,OXead,shape(3) Pattern CB228 # gf Sometimes it's better shape to jump. See nngs:1180. (3.3.7 ) ?XX. prevent bend OO*. .... :8,OXe,shape(3) ?AAb OO*. .... ; !does_attack(b,A) Pattern CB229 xXO extend after hane XO. .*. ... :8,OXed,reverse_followup(5) Pattern CB230 ?.... knight's move with good shape .*..O ...O. ??XXO :8,OXed Pattern CB233 ..X. extend and block O... ..*. ?... :8,OXed ..X. Obc. da*. e... ;omoyo(e) || (oplay_attack(*,a,b,c,a) && oplay_attack_either(*,b,a,d,b,d)) Pattern CB234 ..X. extend and block O... O.*. ?... :8,OXe Pattern CB237 # tm Modified (3.1.23) # gf Corrected constraint. (3.3.12) ??x? extend O..X ..*. ?.o? :8,OXe ??x? a..X ..*. ?.o? ; !oplay_disconnect(*,*,a) Pattern CB238 ..? block off area O*o ?X? :8,OXe Pattern CB239 # db added (3.3.3) # see nngs1:50 # gf Revised to avoid bad shape. Constraint revised. (3.5.3) ..x connect to reinforce and attack O*O ?X? :8,Xeda ..x a*b ?X? ; !same_dragon(a,b) && (alive(a) || alive(b)) Pattern CB241c .. block off area *. OX .O :8,OXe .. *. OX bO ;odefend_against(*,b) Pattern CB242 ?..? default if previous pattern is not feasible ?*.? ?OX? :8,OXe Pattern CB243 #evand new (3.5.4) ?oo? extend in center ...? .*.? ?OX? ?ox? :8,OXead Pattern CB243b # gf New pattern. (3.7.4) # See gunnar:79. ?oo? block in center ...? ..*O ?OX? ?Ox? :8,OXead ?oo? ...? .a*O ?OX? ?Ox? ;oplay_attack(*,a,a) Pattern CB246 .O.O.? block opponent .....? ..X.*. .....? :8,OXed Pattern CB248 ?.XX? extend .*OOX ....X :8,OXed Pattern CB250 ??.O Here X has 3 liberties. ?O.? .*X? ?..? :8,OXed ??.O ?O.? .*A? ?..? ;lib(A)==3 Pattern CB252 # gf Merged with CB253. (3.1.23) ... bend around O*. OX? :8,OXe Pattern CB254 # gf Revised classification and constraint. (3.1.14) # db added shape value (3.1.28) ..O o*X ..O :-,Xead,shape(3) ..a o*X ..b ;(alive(a) || alive(b)) && !oplay_attack(*,a) && !oplay_attack(*,b) Pattern CB255 O.XO bend around ..*O ??x? :8,OXe Pattern CB258 # gf Added constraint. (3.3.13) ?????? jump! (But not down to second line) ?....? oO.*.? ?....? ?X...? :8,OXd ?????? ?....? oa.*.? ?....? ?X...? ;is_surrounded(a) Pattern CB259 # gf Removed d classification (pattern too general). (3.3.13) ?.... jump! oO.*. ?.... ?X.X. :8,OX Pattern CB261 ?O.? knight's move to block center XO.. X... X.*. :8,OXea Pattern CB263 ?x.? jump abreast .*.O ...O ?X?? :8,OXed Pattern CB263b # gf New pattern. (3.7.4) # See gunnar:74. ?x.? jump and attach ...O .*.O OX?? :8,OXed ?x.? ...O a*.O OX?? ;oplay_attack(*,a,a) Pattern CB264 ..O?? knight's move block ...X? .O..? ...*. ???.? :8,OXea a.O?? ...X? .O..? ...*. b??.? ;omoyo(a) && omoyo(b) Pattern CB265 O.??? seal the opponent in ..X?? .*..? ....O :8,OXea Pattern CB266 ....O build fence ..*.O O..XO :8,OXea Pattern CB268 O.... sketch a connection ...*. ?.... ??..O :8,OEcd,jump_out_helper a.... ...*. ?.... ??..b ;!attack(a) && lib(a)>2 && !attack(b) && lib(b)>2 Pattern CB269 O..? seal the opponent ..*. ?X.. ??.O :8,OXEa Pattern CB270 O... attach to make shape ..*. O.X? OX?? X??? :8,OXed Pattern CB272 # gf Not on the edge without more support, see 9x9:540. (3.7.8) ?..O. block jump ?.... ?.... ?.*.X ?.... ????? :8,OXEa Pattern CB273 # See global:8, global:9 # tm modified (3.1.22) ??O? jump out ?XOo X... ..*o ???? :8,OXe ??O? ?XOa Xecd ..*b ???? ; o_alive_somewhere(a,b) ; || oplay_attack(*,c,d,e,b,a) ; || oplay_attack(*,c,d,e,a,b) Pattern CB274 ?????? extend (urgent) ?..XX? ?.*OOX ?....? :8,OXed Pattern CB276 ?...? knight's move expansion O..*. oO..? ?XX?? :8,OXe Pattern CB278 OXO block opponent .*. ?.? :|,OXed aXb .*. ?.? ;lib(a)>1 && lib(b)>1 Pattern CB279 XOX push out .*. ?.? :|,OXe aOb .*. ?.? ;lib(a)>1 && lib(b)>1 Pattern CB280 ?.? extend to defend .*. XO? X.? XO? :8,OXe Pattern CB282 .......? block opponent in center X.X.*..? .......? :-,E .......? X.X.*..? .......? ;!xmoyo(*) Pattern CB283 ..x? bend around O*.. OX.. X..? :8,OXe Pattern CB284 .O.X.? make shape to enclose ....OO ..*... ...... :8,OXeca Pattern CB285 ..... vital point for both ..*.. O...O ?X.X? :|,OXEc Pattern CB286 ..... vital point for both ..*.. X...X ?O.O? :|,OXe Pattern CB287 ..O pattern to enclose ... ... .*. ..X O.? :8,OXEca Pattern CB290 ?.... jump out ?.*.X ....? .XOO? ?.XO? :8,OXed Pattern CB291 # gf Shape value removed. (3.1.9) .OX?? extend ..OX? ..*.? ?..?? :8,OXed .OX?? .aOX? ..*.? ?..?? ; oplay_attack(*,a,a) Pattern CB292 .O??? jump and block ..O?? ....? .*.X? ...?? :8,OXE Pattern CB293 # db reduced shape value (3.1.8) # gf Revised constraint. (3.3.12) ?O.. knight's move ?O.. X... ..*. ?x.? :8,OXead,shape(3) ?a.. ?a.. X... ..*. ?x.? ;!oplay_disconnect(*,*,a) Pattern CB294 XOO?? push .XO?? .X*.. ..... ....? :8,OXe Pattern CB295 oOo? attach ...? .*X. ...? :8,OXE Pattern CB299 OoO make good shape Ox. X*O :8,OXe Pattern CB300 ... bend around O*. OXX :8,OXe Pattern CB301 X.. .*. XO. ?O. :8,OXead Pattern CB302 ..O. seal the opponent .... .*.. ..X. O... :8,OXEca Pattern CB303 ?.X? make shape - reverse sente .*OX ?..? ?OO? :8,OXe,followup(3) ?.A? .*OX ?..? ?OO? ;!xplay_attack(*,A) Pattern CB304 ?X.. extend out OO*. ?X.. :-,OXe Pattern CB305 ?OX.. extend out o.O*. ?OX.. :-,OXe Pattern CB306 ?oX.. extend out O.O*. ?OX.. :8,OXe Pattern CB308 ?.?? Push, threatening atari -- Don't play if block at a ...? doesn't leave a cut at b. O*.. ?X.. :8,OXe,followup(5) ?.?? ...? O*a. ?Ab. ;lib(A)==3 && !xdefend_against(a,b) Pattern CB311 .... prevent escape O*.. X... ?.O. :8,OXeca Pattern CB312 ?.X. extend to defend O.OX ..*. ???? :8,OXe Pattern CB314 # tm modified (3.1.23) # FIXED: See global:8 for unexpected match. xX.. jump! ?... O.*. ?o?? :8,OXe xX.. ?... A.*. ?o?? ; !oplay_disconnect(*,A,*) Pattern CB315 ??XO? connect three stones ..*.o O..O? ?..?? :8,OXe Pattern CB316 ?OO make bamboo joint X.. .*O O.? :8,OXe ?aa X.. .*O O.? ;lib(a)<4 Pattern CB317 xX.. urgent extension XO*. O..X ooo? :8,OXed Pattern CB318 o.X break out O*. X.. :8,OXed o.X O*. Cba ;!xmoyo(a) && !oplay_attack(b,C) Pattern CB319 ?.X? breakout .*.O ?..O ?.XO ??.X :8,OXed Pattern CB320 X.O.? jump to move out and separate ....X o.*.? oo.o? ????? :8,OXad Pattern CB321 # gf No moyo building on the second line, see 9x9:540. (3.7.8) ??????? ??....? block to build moyo xxX.*.? ??....? ??????? :-,XE ??????? ??....? xxX.*.a ??....? ??????? ;!xmoyo(*) && !xarea(a) Pattern CB322 #FIXME: Pattern needs revision see nngs:860 ??.ooo? block to attack ??....? xxX.*.? ??....? ??.ooo? :-,XE ??.ooo? ??....? xxA.*.? ??....? ??.ooo? ;!xterri(*) && weak(A) Pattern CB322a # gf Corrected symmetry. (3.1.23) ??.ooo? block to attack ??.ooo? ??....? xxX.*.? ??....? ??.ooo? :8,XEa ??.bcd? ??.efg? ??....? xxA.*.? ??....? ??.ooo? ;!xterri(*) && weak(A) && o_alive_somewhere(b,c,d,e,f,g) Pattern CB324 xxX? block O*.. ...O :8,OXe Pattern CB325 *O block .X .X :8,nOXe Pattern CB326 # gf Reduced shape value. (3.5.2) ?.?? seal opponent in .... O.*. OXXO :8,OXe,shape(3) ?.?? .bc. Ba*d BAAO ;lib(A)<=3 && lib(B)>=3 && oplay_attack(*,a,b,c,d,?,A) Pattern CB330 # tm removed 'd' attribute (3.1.20) (see arend:3) ?.? push ... X*X ?O? :|,OXe,shape(3) Pattern CB331 ?.? push ... X*X o.O :8,OXe ?.? ... X*X oaO ;oplay_attack(*,a,a) Pattern CB332 ?xX..O expand and block ?..... ?.*..O ?....o :8,OXE Pattern CB333 # db added (3.1.7) # shape only --- other patterns matched give other attributes ?.? prevent X from pushing out OXO .*. ?.? :8,OX,shape(3) ?a? BXC .*. ?.? ; !safe_omove(a) && lib(B)>1 && lib(C)>1 Pattern CB334 # db added (3.1.8) ...O magnificent shape ...O .*OX O.Xx :8,OX,shape(2) Pattern CB337 # db added (3.3.3) # see nngs1:47 .X. Don't get sealed! ... O*. X.. :8,OXeda,shape(3) Pattern CB338 # gf New pattern. (3.3.3) # see e.g. trevorb:440 # The diagonal move is potentially very problematic since X often # can play either b or c threatening to cut off *. If that move # simultaneously threatens something more, we're in trouble. This # pattern has a very conservative constraint, where it is required # that neither b nor c is a threat against the connection. xxx diagonal push .*x O.x :/,OXe def c*g abh ;(x_alive_somewhere(d,e,f,g,h) || xarea(f)) ;&& !oplay_disconnect(*,b,*,a) && !oplay_disconnect(*,c,*,a) Pattern CB338b # gf New pattern. (3.3.16) # Another safe variation of the diagonal move. See comment for CB338. ?xxx diagonal push ?.*x OO.x ?oO? :8,OXe ?def ?.*g aach ?ib? ;(x_somewhere(d,e,f,g,h) || xarea(f)) ;&& (same_string(a,b) || oplay_attack(*,c,?,i,i)) Pattern CB340 # db added (3.3.14) # compare CB242 X... extend to prevent hane ..X. O.O* o... :8,OXda,shape(3) Pattern CB341 # db added (3.3.14) # compare CB242 ..X. extend to prevent hane and split O.O* o... ..X. :8,OXda,shape(3) Pattern CB342 # gf New pattern. (3.5.3) ?.X.? extend to prevent hane and split O..*. o.... oooOo :8,OXe Pattern CB343 # evand New pattern. (3.7.1) # Is there a better way to do this than r_followup, followup, and terri? # See gifu03:202. xX.. ..*. .... ..Oo .... :8,OXe,reverse_followup(2),followup(1),terri(3) xXde ..*. .... ..Oo .abc ;omoyo(a) && omoyo(b) && omoyo(c) && xmoyo(d) && xmoyo(e) Pattern CB344a # evand New pattern. (3.7.1) # see endgame:850 ?X?? .*.o O..O ?..? :8,OXe ?X?? .*.o O..O ?ab? ;omoyo(a) || omoyo(b) Pattern CB344b # evand New pattern. (3.7.1) # see endgame:850 ?X?? *..o O..O ?..? :8,OXe ?X?? *..o O..O ?ab? ;omoyo(a) || omoyo(b) Pattern CB344c # evand New pattern. (3.7.1) # see endgame:850 ?X?? ..*o O..O ?..? :8,OXe ?X?? ..*o O..O ?ab? ;omoyo(a) || omoyo(b) ###################################################################### # # Edge defend/attack patterns # # Moves that threaten to capture, cut, or destroy eyes, and moves # defending against this or preventing such moves. Also moves that # actually do capture or destroy eyes are included here. # ###################################################################### Pattern ED1 ?XX? Avoid opponent's push between two stones on second line .O*O .... ---- :8,OXad Pattern ED2 .O.O.. capture 2 stones ...... O.X.*. .OX... ...... ------ :8,OXa Pattern ED3 X.?? prevent severe attachment ..O. O.*X .... ---- :8,OXd Pattern ED4 ???.?.x Block to defend ?XO.O.x OO..*.x ....... ....... ------- :8,OXd ???.?.x ?XO.O.a OO..*.b ....... ....... ------- ;x_alive_somewhere(a,b) Pattern ED6 ?X? connect against peep (on edge) O*O ?.? --- :|,OXd Pattern ED7 |??O? Make sente throw in to kill eye in corner |XXOX |.*X. +---- :8,sOXa |??a? |XXaX |.*X. +---- ;!oplay_attack(*,a) Pattern ED8 XXXOX sente throw in to kill eye on the edge X.*X. ----- :8,sOXa XXXaX X.*X. ----- ;!oplay_attack(*,a) Pattern ED9 ??X? Prevent capture of 2 stones, or forcing sequence OO*O .... ---- :8,OXd Pattern ED10 ??O? Capture 2 stones, or force opponent XX*X .... ---- :8,OXa Pattern ED11 xxxx???? if attached, cut! .......? .X.O..Oo ..*X...o ........ -------- :8,sOXBd,shape(3) Pattern ED12 # bad to intercept in this case ..O.??? block! ....... .X.O..O ...X*.. ....... ------- :8,OXed,shape(3) ..O.??? ....... .X.O..O ..aX*.. ....... ------- >antisuji(a); Pattern ED13 # Add followup value if this is sente. .O.??? block! ...... X.O..O ..X*.. ...... ------ :8,OX,followup(7) .O.??? ...... X.Ob.O .aX*.. ...... ------ ;oplay_attack(*,a,b,b) Pattern ED14 ?...Ooo block! X.O...o .*X..oo ....... ------- :8,OXBd,shape(2) Pattern ED15 ??.? atari improves our group .*XO ..OO .... ---- :8,OXd Pattern ED16 oOX? Make atari to kill eye OX.X .*.. ---- :8,OXa Pattern ED17 ??OOO enclose two stones ?OX.. oOX.* o??.. ----- :8,OXa Pattern ED18 ?OOO? threatens capture OXX*. OX.X. O.... ----- :8,OXa,followup(8) ?OOO? bAA*. bA.X. b.... ----- ;oplay_attack(*,A) && !oplay_attack(*,b) Pattern ED19 ?XXXO oki --- sacrifice helper because defend2 doesn't see the tesuji OX..X ..*.. ----- :8,sOXa ?XXXO cX.bX .a*.. ----- ;!oplay_attack(*,c) && !oplay_defend(*,a,b,a) Pattern ED20 ?O? force X to connect X*X ... --- :|,OXa Pattern ED21 ?OO. atari! XOX* .X.. ---- :8,OXa Pattern ED22 # gf Added b classification. (3.1.18) # gf Split pattern and revised constraint. (3.3.3) ??*X sente endgame (maybe rather middle game) move ..XO ..X? ---- :8,OXed,followup(5) ??*X ..Ab ..A? ---- ;oplay_attack(*,A) && !oplay_attack_either(*,*,b) Pattern ED22b # gf Added b classification. (3.1.18) # gf Split pattern and revised constraint. (3.3.3) ??*. sente endgame (maybe rather middle game) move ..XO ..X? ---- :8,OXed,followup(5) ??*c ..Ab ..A? ---- ;oplay_attack(*,A) && oplay_defend_both(*,c,*,b) Pattern ED23 # gf Added b classification. (3.1.18) ??*O sente endgame (maybe rather middle game) move ..X? ..X? ---- :8,OXed,followup(5) ??*O ..A? ..A? ---- ;oplay_attack(*,A) Pattern ED24 ??*O sente endgame (maybe rather middle game) move ..XX ..xx ---- :8,OXd,followup(7) ??*O ..AA ..xx ---- ;oplay_attack(*,A) Pattern ED25 X.OX Avoid peep. .*.O .... ---- :8,OXd X.OA .*.O .... ---- ;!attack(A) Pattern ED26 oOOo?? Capture some stones OX.*.? OX.... ?X.... ------ :8,OXa Pattern ED27 oOO*. Punish X's weak shape OXOX. .XX.. ----- :8,OXad Pattern ED28 ?XO.. ?XO.. ..*.X ..X.. ..... ----- :8,OXea Pattern ED29 OXO Sacrifice a second stone tesuji XOX .*. --- :|,sa aAb BOC .*. --- ;lib(A)<=2 && lib(B)>1 && lib(C)>1 ;&& !oplay_attack(*,a) && !oplay_attack(*,b) ;&& oplay_attack(*,A) && oplay_attack(*,B) && oplay_attack(*,C) Pattern ED30 |.o?? hane is big, often urgent |.*X? |..OO |.... +---- :8,OXd Pattern ED31 xxX.o extend to defend ..O*. O.... ..... ----- :8,OXead Pattern ED31b x.xXx extend to defend O.*O. ..... ..... ----- :8,OXed Pattern ED31c x.X*.. hane o.O..O o..... ...... ------ :8,OXed Pattern ED32 X.X.. useful kikashi OX.*. ..... ..... ----- :8,-,followup(10) X.X.. aX.*. ..... ..... ----- ;lib(a)>2 Pattern ED33 |xXx??? slide to live |.OXX?? |.OO..x |....*. |...... +------ :8,OXd Pattern ED34 |xXx??? hane to live |.OXX?? |.OOX.x |...*.. |...... +------ :8,OXd Pattern ED35 |..XX?? hane to live |.OOX.x |...*.. |...... +------ :8,OXd Pattern ED36 # this can be aji keshi because 1 point above is also sente ?XXOo atari on edge ?..XO .X.*. ----- :8,OXa Pattern ED37 # This should not need be a sacrifice pattern, and the constraint # on the O stones should be superfluous, if only the tactical reading # could understand a double snapback. O???O double snapback X.X.X X.*.X ----- :8,sX c???d A.X.B A.*.B ----- ;lib(A)==2 && lib(B)==2 && lib(c)>1 && lib(d)>1 >test_attack_either_move(A,B); Pattern ED38 XXOXX swallow either side ..X*. ..... ----- :8,s DDOCC .aX*. ..b.. ----- ;oplay_attack(*,b,C) && oplay_attack(a,b,D) >test_attack_either_move(C,D); Pattern ED39 # This is almost always a good idea. ?XXO decrease eye space in sente (unless it kills) X.*X ---- # helper sets followup value :8,sXa,throw_in_atari_helper ?bba Xc*A ---- ;lib(A)==2 && lib(a)>1 && !alive(b) && proper_eye(c) Pattern ED40 OXO decrease eye space in sente (unless it kills) X*X X.X --- # helper sets followup value :8,sXa,throw_in_atari_helper aAb X*X X.X --- ;lib(A)==2 && lib(a)>1 && lib(b)>1 Pattern ED41 |XXO decrease eye space in sente (unless it kills) |.*X +--- # helper sets followup value :8,sXa,throw_in_atari_helper |XXa |.*A +--- ;lib(A)==2 && lib(a)>1 Pattern ED42 ?XX... jump out OO.*.. ...... ...... ------ :8,OXead ?XX.g. HHA*.. .EbCd. ...f.. ------ ; lib(H)>4 || !oplay_defend(*,A,b,C,d,E,f,E) >antisuji(g); Pattern ED43 # gf Reduced shape value. (3.5.2) ?OO..o push through and cut! XX*X.o .....o .....? ------ :8,OXad,shape(3) ?OO..o AA*B.o .fcdeo ...g.? ------ ; oplay_attack(*,c,d,f,B) && oplay_attack(*,c,d,e,f,g,A) Pattern ED44 # gf Reduced shape value. (3.5.2) O.... capture one stone O..*. O.X.O ..... ..... ----- :8,OXecad,shape(3) Pattern ED45 # gf Fixed value removed. (3.5.2) ?XX... defense is urgent OO.O*. ?..... ?..... ------ :8,OXead ?XX... OOaO*. ?cbd.. ?..... ------ ; xplay_defend(a,b,c,d,c) Pattern ED46 # gf Removed fixed value. (3.5.2) ?X... jump to take territory on 4-th line ..... O.*.. ..... ..... ..... ----- :8,OXead Pattern ED47 # gf Reduced shape value. (3.5.2) X.O...x xXO.*.x ?XXO... ....... ------- :8,OXed,shape(3) Pattern ED48 # gf Reduced shape value. (3.5.2) ?... break ponnuki, threaten to cut ?.*O .XOX ?.X. ?... ---- :8,OXead,shape(3) ?... ?.*O .XOA ?.X. ?... ---- ; lib(A)==2 Pattern ED49 # gf Reduced shape value. (3.5.2) ??..? push to stabilize O ?.X.. ..*O. ..... ..... ----- :8,OXead,shape(3) Pattern ED49b oo....? push to stabilize O and (probably) make territory oo..X.. oo..*O. ....... ....... ------- :8,OXJ oo....? bc..X.. de..*a. ....... ....... ------- ;weak(a) && o_alive_somewhere(b,c,d,e) Pattern ED50 # gf Removed fixed value. (3.5.2) ..... don't get sealed in! ..*Xx X.O.. ....O ..... ..... ----- :8,OeBad Pattern ED51 # gf Reduced shape value. (3.5.2) ......... block to build influence o.....*Xx oo....O.. oo......O ......... ......... --------- :8,OXead,shape(3) Pattern ED52 # gf Removed fixed value. (3.5.2) ?..... attach in sente ...... ..X.X. ..*..O ...O.. ...... ...... ------ :8,OXad Pattern ED53 # gf Removed fixed value, added B classification. (3.5.2) ?OO... push through and cut XX*X.. ?..... ?..... ------ :8,OXBead ?OO... EE*D.. ?bac.. ?..... ------ ; oplay_attack(*,a,b,c,E) && oplay_attack(*,a,c,D) Pattern ED54 # gf Removed fixed value. (3.5.2) ?OO... cut XXOX.. .*X... ?..... ------ :8,sOXBad ?OO... AAOB.. .*Xd.. ?..... ------ ; oplay_attack(*,d,A) && oplay_attack(d,B) Pattern ED55 # gf Removed fixed value. (3.5.2) ?OO... cut XXOX.. XOX*.. ?..... ------ :8,Bad ?OO... XXOB.. XOX*.. ?a.... ------ ; oplay_attack(*,a,B) Pattern ED56 # tm modified (3.1.20) (nngs:1170) ...X.? extend to defend if attached O..O*. ...... ...... ------ :8,OXCad,shape(3) Pattern ED57 # gf Reduced shape value. (3.5.2) OOXX?? push to defend .XOX.. ..O*.. ...... ------ :8,-,shape(3) OOXX?? .AOX.. ..O*.. ...... ------ ; does_attack(*,A) Pattern ED58 # gf Removed fixed value and revised constraint. (3.5.2) ??X?? connect to defend everything ?OXO? .*OX. ..... ----- :8,BCad ??G?? ?cGO? .*OAd ..bef ----- ; alive(G) && !oplay_defend(*,A) && xplay_attack(*,b,c) > antisuji(b); > antisuji(d); > antisuji(e); > antisuji(f); Pattern ED59 ??X?? capture to defend everything ?OXO? ..OX* ..... ----- :8,Xad ??X?? ?OXA? caOX* deb.. ----- ; (lib(A)>1) && !oplay_defend(*,a,b,a) && oplay_attack(a,A) > antisuji(a); > antisuji(c); > antisuji(d); > antisuji(e); Pattern ED61 ??.?? follow up ED59 ?.O.? .OXOX ..X*. ..... ----- :8,J Pattern ED62 # gf Reduced shape value. (3.5.2) ....? if double hane is not reasonable, extend OO..? XXO*. ..X.. ..... ----- :8,OXead,shape(3) ....? OOb.? FFO*. .dXac ...e. ----- ; !oplay_attack(a,*,b,c,d,e,F) Pattern ED63 oOXx capture one stone---don't descend! OXOX .*.. ---- :8,ad,shape(2) oOXx OXOX .*a. ---- > antisuji(a); Pattern ED64 ..... connect solidly .O*.. XXO.. ..... ..... ----- :8,OXead,shape(2) ..a.. .O*.. XXO.. ..... ..... ----- > antisuji(a); Pattern ED65 # gf Removed fixed value. (3.5.2) ?o..? pull back to stabilize ?O..? XXO*. ?xX.. xxx.. ----- :8,OXad Pattern ED68 # tm Modified (3.1.20) (see nngs:1130) ?O*Xx reinforce o..OO ..... ..... ----- :8,OXed ?O*Xx o.aOO ..... ..... ----- ; xplay_defend(a,*,a) Pattern ED69 O..x connect under .*.X ...O .... ---- :8,Cad,shape(3) O..x .*cA ..bO .... ---- ; !attack(A) && !oplay_defend(*,b,c,b) Pattern ED70 # Threaten to capture some stones. O*X OX. :8,OXe,followup(6) O*C OBa ;xterri(a) && !attack(B) && !attack(C) && !oplay_attack(*,?,a,a) ;&& !oplay_defend_both(*,?,a,B,C) Pattern ED71 O*.X capture correctly OXOX .... ---- :8,Cad,shape(1) O*.X OXOX ..a. ---- >antisuji(a) Pattern ED72 ?OXO? ..O*X ..... ----- :8,Xd,shape(3) ?OXB? .aO*X ..... ----- ;xplay_attack(*,a,B) Pattern ED73 ?OXO?? ..O.X* ...... ------ :8,-,shape(-3) ?OXO?? ..OaB* ...... ------ ; !oplay_attack(*,a,B) Pattern ED74 O*. connect solid if descent is impossible XOX ... --- :8,d,shape(3) O*. AOX .a. --- ; !attack(A) && !oplay_attack(a,*,*) Pattern ED75 O.. don't descend if X can cut XOX .*. --- :8,-,shape(-3) Oa. XOX .*. --- ; !oplay_attack(*,a,a) Pattern ED76 # gf The negative shape value is a temporary measure to avoid # overvaluation. (3.1.17) # tm Added right hand side check (3.1.20) (see strategy4:195) # db removed 'a' classification and reduced negative shape. oOo??? stop expansion and undermine o..X?? o.*.x? ....?? ------ :8,OXe,shape(-2) oOo??? obaX?g oc*.xf ....?? ------ ;oplay_attack_either(*,a,b,c,a,c) ;&& !oarea(f) && !oarea(g) Pattern ED77 # gf Reduced shape value. (3.5.2) ?XX? defend cut O*O. .... .... ---- :8,OXead,shape(3) ?XX? O*Oc .ab. .... ---- ;xplay_attack_either(*,a,b,c,a,c) Pattern ED78 # gf Reduced shape value. (3.5.2) ?OO? push through and cut X*X. .... .... ---- :8,OXead,shape(3) ?OO? X*Xc .ab. .... ---- ;oplay_attack_either(*,a,b,c,a,c) Pattern ED79 # avoid does_defend since some levels GNU may not see attack on B ?OXX avoid a stupid defense ..OX ..*O ---- :8,X,shape(-2) ?OXX .aOX ..*B ---- ; does_attack(a,B) && !xplay_attack(a,B) Pattern ED80 # descending at 'a' is almost always bad ?x?? defend correctly x.Oo XOX* .... ---- :8,d ?x?? x.Oo XOX* .a.. ---- > antisuji(a); Pattern ED81 .?.??? give up one stone ...O.. ...*XX ....OX ...... ------ :8,- .?.??? ..cO.. .db*XX ...aOX ...... ------ ; oplay_defend(a,*,b,c,d,c) >antisuji(a); Pattern ED82 # gf Reduced shape value. (3.5.2) |..... atari is usually a better way to use the dead stone |..*.. |..... |..XOO |..OX? :8,-,shape(-3) |..... |..*.. |..... |..XOO |..aX? ; dead(a) Pattern ED83 |xXX? |XOOX |.*.x |..O? :8,ed,shape(2) |xXX? |XOOX |a*.x |..O? > antisuji(a) Pattern ED84 # db added (3.1.7) # gf Changed antisuji action to replace action. (3.1.14) |xXXx fall back to defend territory |XOOX |..OX |.*.O |...o :8,OXd,shape(2) |xXXx |XOOX |a.OX |.*.O |...o >replace(a,*) Pattern ED85 # gf New pattern. (3.1.14) |...... attach at 3-3 to defend |..X.O. |..*... |...... |...... +------ :8,Xd Pattern ED86 # gf New pattern. (3.1.14) # This is not redundant in the presence of ED85, since it also infers # a strategical defense of the stone on the fifth line. If the two O # stones are not amalgamated, this makes a difference. |..x.O. |...... attach at 3-3 to defend |..X.O. |..*... |...... |...... +------ :8,Xd Pattern ED87 # db New pattern (3.1.28) ooOo? Don't leave aji ...*X ...OX ..... ----- :8,-,shape(2) ooOo? ...*X ...OX ..ba. ----- >replace(a,*); >replace(b,*); Pattern ED87a # db New pattern (3.1.28) ooOX? Don't leave aji ..*.X ...OX ..... ----- :8,-,shape(2) ooOX? ..*.X ...OX ..ba. ----- >replace(a,*); >replace(b,*); Pattern ED88 # db New pattern (3.1.28) # gf Corrected the replace action. (3.1.30) ??...X? take territory on the fourth line oo..*OX oo....O ......o ....... ------- :8,-,shape(2) ??...X? oo..*OX oo..b.a ......o ....... ------- ; lib(a)>2 > replace(b,*) Pattern ED89 # db New pattern (3.1.28) # It is difficult to give an exact criterion for when it is good to # fight this ko. But it is bad to lose it, may even threaten the # life of the O dragon. See nngs1:11 ??XxOo? Don't fight an unfavorable ko! ..XO.Oo .XO*O.? ------- :8,- ??XxOo? .aXO.bo .XO*O.? ------- ; alive(b) > replace(a,*) Pattern ED90 # db New pattern (3.1.28) # ab d classification added (3.1.29) ???..o? Jump under on the third line ???X.oo ?O..*.o ?O....o o...... ------- :8,dj ???..o? ???X.oo ?hfa*.o ?hcbd.o o.e.... ------- ; oplay_attack(*,a,b,c,d,e,e) && !oplay_attack(*,a,b,c,d,f,e,h) > replace(b,*) Pattern ED91 # db New pattern (3.1.28) # gf Changed to connection pattern. (3.7.2) ??XXoo Extend after the push O..O*. O....o ...... ------ :8,C ??XXoo a..O*. a....o ...... ------ ;!oplay_disconnect(*,*,a) Pattern ED92 # db New pattern (3.1.30) # See nngs1:18, where * is found as an owl defense oOXx?? don't do this! ..OXx? ...*.x .....? ------ :8,-,shape(-3) oOXx?? ..OAx? ...*.x .....? ------ ; lib(A)>2 Pattern ED93 # db new pattern (3.3.6) # see century2002:120 # ab Added e classification (3.3.20) .....X? don't make the wrong atari ..X...? ...*XO? ....Ooo ....... ------- :8,edO .....X? ..X.a.? ...*XO? ....Ooo ....... ------- > replace(a,*) Pattern ED94 # gf New pattern. (3.3.13) oo.O? Significant improvement of eyespace. .*.OX Often sufficient for local life. ..OXX ----- :8,dX oo.O? .*aOB ..OBB ----- ;!attack(B) && safe_xmove(a) Pattern ED95 # gf New pattern. (3.3.14) # gf Added constraint. (3.3.17) ...xx .O.Xx fourth line sente kosumi ..*.. ..... ..... ----- :8,OXea ...xx .a.Xx ..*.. ..... ..... ----- ;!weak(a) Pattern ED96 # ab New pattern (3.3.20) # See arend2:120 ?.... O*.X. ..OX. ..... ----- :8,OXe ?.... f*.X. hgeXd ..cab ----- ;!oplay_connect(a,b,c,d,?,g,?,h,e,f) > replace(a,*) Pattern ED97 # gf New pattern. (3.5.3) # See gifu03:401 ........ x..O.*.X x....... ........ ........ -------- :8,OXeda ........ c..a.*.B d....... ........ ........ -------- ;weak(a) && weak(B) && x_somewhere(c,d) Pattern ED98 # evand new Pattern (3.5.4) ..... O.*.x O...x ..... ..... ----- :8,OXed ..... A.*.b A...c ..... ..... ----- ;x_alive_somewhere(b,c) && weak(A) Pattern ED99a # pp New pattern (3.5.8) |..X.? stabilize the corner in double sente |..XO. |.XO.O |.*... +----- :8,OXd,reverse_followup(3) |..X.? |..XA. |.XO.O |.*... +----- ; weak(A) Pattern ED100 # gf New pattern. (3.7.8) ..... cut through to weaken X.O.. .XOX. ..*.. ..... ----- :8,OXae Pattern ED101 # gf New pattern. (3.7.9) |oo? |.O? |.*X +--- :8,Xd |oo? |.a? |.*X +--- ;weak(a) ##################################################################### # # Center defend/attack patterns # # Moves that threaten to capture, cut, or destroy eyes, and moves # defending against this or preventing such moves. Also moves that # actually do capture or destroy eyes are included here. # ###################################################################### Pattern CD1 ?xx? protect by drawing back XO*. XX.O :8,nOXd Pattern CD3 ??? Usually better to atari on this side. .*. .XO XO? :8,X,followup(5) ??? .*. .Xa XO? ;!oplay_attack(*,a) Pattern CD7 ?X? attack eye X.X .*. :|,Xa ?X? A.B .*. ;weak(A) || weak(B) || !xterri(*) Pattern CD28 xXO? urgent to attack and defend XOX. .O*. .... .X.? :8,ad Pattern CD31 ?.X? vital point .*.X X.X? ?X?? :8,Xa Pattern CD39 ?Oo? vital point OX.X OX?* ?O.. ?..? :8,OXa Pattern CD40 ?X?? trap .*.. OX.. ?XO. :8,X ?D?? .*b. cEa. ?EO. ;lib(E)==2 && !oplay_attack(*,c) && !oplay_defend_both(*,a,b,E,D) >test_attack_either_move(D,E); # Pattern CD41 # # gf Too general, removed. See gunnar:87. (3.7.10) # # ?o? don't double atari if it backfires # ?.. # .OX # OX* # ?.? # # :8,- # # ?o? # ?.b # ceX # dX* # ?a? # # ;!oplay_defend_both(*,a,b,c,d,e) # # >antisuji(*); Pattern CD43 .X.X kosumi tesuji .*.X X.O? :8,OXa .X.B a*.B X.O? ;!attack(B) && oplay_attack(*,a,B) Pattern CD48 ?xX?? prevent trouble ..X.O O.O*. ..... ..... :8,OXed Pattern CD49 ?Xx?? prevent trouble ..X.O O.O*. ..... ..... :8,OXed Pattern CD55 ?... Double peep X.X. o*.. OoX? :/,OXa Pattern CD56 .... Double peep X.X. .*.. O.X. :8,OXad gf.. ibX. .*cd O.he ;oplay_attack(*,b,c,d,e,d) && oplay_attack(*,b,c,d,e,h) ;&& oplay_attack(*,c,b,f,g,f) && oplay_attack(*,c,b,f,g,i) Pattern CD64 # Converse to ED68 ?XXO decrease eye space in sente (unless it kills) X.*X ?XXO # helper sets followup value :8,sXa,throw_in_atari_helper ?XXa Xc*A ?XXb ;lib(A)==2 && lib(a)>1 && lib(b)>1 && proper_eye(c) Pattern CD67 # Sometimes the cap or another move in the area kills. # Always advisable to move out. ??X? avoid cap ?O.. X.*. ?... :\,OXd ??X? ?a.. X.*. ?... ;lib(a)==3 Pattern CD76 XOo atari (not aji keshi) OX* ?.o :8,X Xao bX* ?.o ;attack(b) && !defend(b) && !oplay_attack(*,a) # Estimate a followup value >threaten_to_save(b); Pattern CD77 ?oo atari (not aji keshi) X*o OXO ?.o :8,X ?oo X*o aXb ?.o ;attack(a) && !defend(a) && !dead(b) # Estimate a followup value >threaten_to_save(a); Pattern CD79 # even if X can't cut, this prevents getting sealed # this pattern works on second or third line also ?OXX. tiger's mouth ..O.. .*... ..... ..X.. :8,OXed Pattern CD82 # Hard to value accurately. Wild guess that it may be worth 20 points. # gf Inappropriate when scoring, disabled in that case. (3.7.2) ?xxxx capture ladder to eliminate aji ?xxxx O*.xx OXO.? ?O??? :8,O,value(20) ?xxxx ?xxxx O*.xx aCb.? ?O??? ;!doing_scoring && (!same_dragon(a,b) || potential_cutstone(C)) Pattern CD83 ?OOX? tesuji to break out X..X? ?*... ??..? :8,OXed ?AOX? Xabf? ?*cd. ??e.? ;(lib(A)>1) && oplay_attack(*,a,b,c,d,e,f) Pattern CD87 # gf Reduced shape value. (3.5.2) .XO create cutting points .*. .XO :-,OXad,shape(3) cXO a*b dXO # The second move by X at a is intentional and has the effect of X passing. ;oplay_attack(*,b,b) ;&& !oplay_attack(*,a,b,a,c,c) && !oplay_attack(*,a,b,a,d,d) Pattern CD88 #tm removed shape bonus (3.1.22) (see nngs:700) X*.. attack 1 stone to defend and probably connect O..O :8,OXcad a*.. O..O ; does_attack(*,a) Pattern CD89 # gf Reduced shape value. (3.5.2) ?OXoo prevent ponnuki .XO*o ?.Xoo :8,OXead,shape(3) ?OAoo .XO*o ?.Xoo ;lib(A)>1 || !oplay_defend(*,A) Pattern CD90 # gf Reduced shape value. (3.5.2) OXx extending usually better than capturing, but not at edge XOX ?*. ??? :8,OXead,shape(3) bXx AOX ?*. ??? ; lib(A)==1 && lib(b)>1 && does_attack(*,A) Pattern CD91 # gf Revised constraint. (3.3.18) # gf Reduced shape value. (3.5.2) ?XO. atari to prevent opponent's expansion OOX. ..*. :8,XEd,shape(3) ?Xa. bbX. ..*. ; alive(b) && attack(a) && !defend(a) Pattern CD92 # tm Modified (3.1.20) - added constraint .X. ponnuki is worth thirty points XO* .XO :8,ad,shape(3) .X. XO* .aO ; !attack(a) Pattern CD92a # db added X class (3.3.5) .O. ponnuki is worth thirty points OX* .Ox :8,OXead,shape(1) Pattern CD92b .O. ponnuki, preventing threat to cut OX* .OX :8,Oead,shape(3),reverse_followup(8) aO. OX* .OX ; !xplay_attack_either(*,?,a,*,a) Pattern CD93 # gf Removed fixed value and reduced shape. (3.5.2) ?OX. break through one way or the other ?*.. X.X. ...O :8,XBad,shape(3) ?OF. ?*be DcE. .d.O ; oplay_break_through(*,b,c,d,D,d,E) && oplay_break_through(*,c,b,e,F,e,E) Pattern CD94 # gf Split and revised. (3.3.14) # gf Reduced shape value. (3.5.2) ???????? jump out ???????? ........ ..*..... X...???? x.O..??? :8,OXEad,shape(3) ???????? ???????? ........ ..*..... X...abcd x.O..??? ; x_alive_somewhere(a,b,c,d) Pattern CD94b # gf Split and revised. (3.3.14) # gf Reduced shape value. (3.5.2) ???????? jump out ???????? ........ ..*..... X...???? O.O..??? :8,OXEad,shape(3) ???????? ???????? ........ ..*..... Xe..abcd f.O..??? ; x_alive_somewhere(a,b,c,d) && oplay_connect(*,e,*,f) Pattern CD95 # One point to the left is sometimes better oO.. seal the opponent .... X.*. .... oO.. :-,OXEad,shape(2) Pattern CD96 .O? hane, threatening capture ... X*. O.X :8,OXad,shape(3) .O? ... B*. OaX ; oplay_attack(*,a,B) Pattern CD99 # gf Revised constraint. (3.1.14) # gf Added !doing_scoring since this can generate a losing ko threat. # We might want to take it out entirely. (3.3.17) OX if a cutting stone can't be caught, X* play in opponent's territory :8,OX,followup_value(3) OA B* ;!doing_scoring && !attack(A) && !attack(B) && xterri(*) # FIXME: The two following patterns may be superfluous due to the # atari_atari code. Pattern CD102 *X? don't help the opponent cut O.O ... :8,OX,shape(-3) *X? OaO cb. ; xplay_attack(a,b,c,c) && !oplay_attack(*,a,b,c,c) Pattern CD104a # gf Revised constraint. # gf Split pattern. We can't have eE classification unless b is alive. (3.1.32) ... atari using dead stone .*. OX. XO? :8,Ed ... .*. bX. XA? ;lib(b)>1 && alive(b) && attack(A) && !defend(A) Pattern CD104b # gf Revised constraint. # gf Split pattern. We can't have eE classification unless b is alive. (3.1.32) ... atari using dead stone .*. OX. XO? :8,d,shape(3) ... .*. bX. XA? ;lib(b)>1 && attack(A) && !defend(A) Pattern CD105 ?.X? eliminate aji and danger of misreading! O.*O x... xxxx :8,Ot ?.A? O.*b x... xxxx ; dead(A) && effective_size(A)>8 && lib(b)<=4 Pattern CD107 # db added (3.1.8) # gf Added O classification. (3.1.12) # evand modified (3.5.4) ?x.?? xX..? good shape keima ..*.? O...? :8,OXead ?x.?? xX..? .a*.? Abc.? ; !dead(A) && oplay_attack(*,a,b,c,c) Pattern CD108 # db added (3.1.8) # Exception to CD107 ?xX.. bad shape keima O..*. XO... :8,-,shape(-3) Pattern CD109 # gf New pattern. (3.3.18) .OX defend cut to attack .*O .OX :-,Xa,shape(2) .cX .*a .bX ;lib(a)==1 && (alive(b) || alive(c)) ;&& (xplay_attack(*,b) || xplay_attack(*,c)) ###################################################################### # # Edge joseki patterns. # # Standard invasions of wide extensions, sequences following # attachment under edge stones, and other standard patterns # often warranting a j or J classification. # ###################################################################### Pattern EJ1 ?.... sacrifice cut oO*X. o.XO. ..... ----- :8,sEdJ Pattern EJ2 ?.... hane if attached under fourth line stone x.O.. ?.X*. ?.... ?.... ----- :8,OedJ Pattern EJ2b ..... create cutting points while strengthening own stones .O.O. .X*X. ..... ..... ----- :8,edJ Pattern EJ3 ?...? block on top if 2 space extension is invaded ..*.. O.XO. ..... ..... ----- :8,EadJ Pattern EJ4 #tm modified (3.1.18) # added ? column. ...*.? continuation -- never play 'a' here .OOX.o ..XOX? .....? ------ :8,Edj ...*.? .OOX.o .aXOX? .....? ------ >antisuji(a); Pattern EJ6 ...O.? continuation .OOX*. ..X.X. ...X.? ------ :8,Eaj Pattern EJ7 ?????...? ........? .O..O.X.o ......*.. ......... --------- :8,ed ?????...? ........? .O..O.A.o ......*.. ......... --------- ;!weak(A) Pattern EJ7b #gf New pattern. (3.1.12) ?????...? ........? .O..O.X.o .....*OX. ......... --------- :8,ed Pattern EJ8 ??X..... extend from tsukenobi X.XO.... XOO...*. ........ ........ -------- :8,ed Pattern EJ9 ..*.? tsukenobi shape O.OX? ..X.x ....? ....? ----- :8,Ed Pattern EJ12 # Invade if we have two ladders on our side. ooooo invade .oooo ...oo X.... ..*.X ..... ..... ----- :8,I ooooo .oooo .e.oo IcB.. gD*FX ..H.. ..... ----- ;oplay_attack(*,B,c,D,e,B) && oplay_attack(*,B,c,D,e,F,g,H,I); Pattern EJ13 ..... invade ..... ..... X.*.X ..... ..... ----- :8,I ..... ..a.. ..... X.*.X ..... ..... ----- ;!xmoyo(a) Pattern EJ13b # gf New pattern. (3.3.13) o...... invade o...... O.X.*.X o...... o...... ------- :8,Ia o...... o...... a.X.*.X o...... o...... ------- ;!weak(a) Pattern EJ14 ...... invade ...... ...... X.*..X ...... ...... ------ :8,I ...... ..a... ...... X.*..X ...... ...... ------ ;!xmoyo(a) Pattern EJ15 ??....? cap stone on third line ..*.... ....... ..X..O. ....... ....... ------- :8,Ea ??....? ..*.... ....... a.X..O. ....... ....... ------- ;!xmoyo(a) Pattern EJ17 ..... cut! .X*O. .OX.. ..... ..... ----- :8,adJ Pattern EJ18 # Override capturing single X stone. ?oXXOOo Connect underneath. oOXOX.o o.*O..o o.....o ------- :8,ed ?oXXOOo oOXOXao o.*Ob.o o..c..o ------- >antisuji(a); >antisuji(b); >antisuji(c); Pattern EJ19 # Override capturing single X stone. ???.??? Punish overplay. ?o*XOOo oOXOX.o o.XO..o o.....o ------- :8,ad ???.??? ?o*XOOo oOXOXao o.XOb.o o..c..o ------- >antisuji(a); >antisuji(b); >antisuji(c); Pattern EJ20 ?x.XOOo Connect underneath. oOXOX.o o.*O..o o.....o ------- :8,ed ?x.XOOo oOXOXao o.*Ob.o o..c..o ------- >antisuji(a); >antisuji(b); >antisuji(c); Pattern EJ21 ....? tsukeosae shape O.OX? .*X.x ....? ....? ----- :8,ed Pattern EJ22 oo.X.? continuation ?..*.. ?OOX.O ?.XOX. ?..... ------ :8,a Pattern EJ23 oo.X.? continuation ?..O*. ?OOXXO ?.XOX. ?..... ------ :8,a Pattern EJ24 XX.. extend on fourth line if pushed .O*. .... .... .... ---- :8,ed Pattern EJ25 XXX.. extend on fourth line if pushed .OO*. ..... ..... ..... ----- :8,ed Pattern EJ26 XXXX.. extend on fourth line if pushed .OOO*. ...... ...... ...... ------ :8,ed Pattern EJ27 ........ wedge in after invasion ...X*X.. .X.O.... ........ ........ -------- :8,d Pattern EJ28 ....X... follow up ..XXOX.. .X.OO*.. ........ ........ -------- :8,ed Pattern EJ29 ....X... follow up ..XXOXX. .X.OOO*. ........ ........ -------- :8,ed Pattern EJ30 oo.X.? continuation ?..... ?O.X*O ?..OX. ?..... ------ :8,a oo.D.? ?..... ?a.C*b ?.eOX. ?..... ------ >add_connect_move(a,b); >add_cut_move(C,D); >antisuji(e); Pattern EJ31 ??..???? connect out beneath xxX..... x.O*.X.O x....... ?....... -------- :8,ed ?a..?b?? xxX..... x.O*.X.O x....... ?....... -------- ;!oarea(a) && !xmoyo(b) Pattern EJ32 ??..???? connect out beneath, continuation xxXX.... x.OO*X.O x....... ?....... -------- :8,ed ?a..?b?? xxXX.... x.OO*X.O x....... ?....... -------- ;!oarea(a) && !xmoyo(b) Pattern EJ33 # gf Sometimes it's better to play one step to the left. See # nngs:1180. (3.3.7) # gf Revised classification. (3.5.2) ...XX common important follow up .O.*O ..... ..... ----- :8,XCd Pattern EJ34 ....O. break through .X.OX. ...X*. ...... ...... ------ :8,J Pattern EJ35 ....O. break through .X.OXX ..*XO. ...... ...... ------ :8,J Pattern EJ37 ..X... hane after attachment ...... .XO..O .*.... ...... ------ :8,J Pattern EJ39 # sometimes the solid connection would be better # gf Removed fixed value, added d classification. (3.5.2) ?.XX.O draw back to defend .O.O*. ...... ...... ------ :8,d ?.XX.O .O.O*. a..... ...... ------ > antisuji(a) Pattern EJ40 # This pattern is sometimes too general. But more often than not, this is # worth doing. XXx?? push to prevent opponent's block OOXX? ..O*. ..... ----- :8,OXt Pattern EJ41 ?..O? solid connection xX*OX ..OXX ..... ----- :8,OJ ?..O? xX*OX .aOXX ..... ----- >antisuji(a); Pattern EJ42 ..... ..*.. jump ....X X.O.x ..... ..... ----- :8,t Pattern EJ43 # gf Revised. (3.3.16) ?...? connect after peep x.O.x x.*Xx x.O.x ?...? ?...? ----- :8,OJ Pattern EJ44 # gf Reduced shape value. (3.5.2) ...... almost an antisuji oO.X.. ..XO*. ...... ...... ------ :8,-,shape(-3) Pattern EJ45 ?....? hane making shape in the center ?.*..? ?.XOOo ?..XX? ?....? ?....? ------ :8,J ?....? ?.*..? ?.XBBo ?.aXX? ?....? ?....? ------ ; !safe_omove(a) && !oplay_attack(*,B) Pattern EJ46 # tm modified (3.1.23) (see arend:3) .X. Defend after the peep O*O ... ... ... --- :8,XeCd Pattern EJ47 ........... invade on the third line ........... .........xx X...*....xx ........... ........... ----------- :8,t,shape(2) ........... ........... .........ab X...*....cd ........... ........... ----------- ; x_alive_somewhere(a,b,c,d) Pattern EJ49b # Actually 'a' is often playable ..*.. connect on the outside OOX.O .XOX. ..... ..... ----- :8,sEj ..*.. OOX.O bXOX. ..a.. ..... ----- >antisuji(a); >antisuji(b); Pattern EJ50 # tm Modified (3.1.22) (see nngs:1740) ??.....?? good extension ?.O.....x OO....*.x ......... ......... --------- :8,sed,shape(3) Pattern EJ51 ...... connection is urgent for local shape ...... .O*... .XO... X..... ...... ------ :8,J ...... ...... .O*... .AO... X..... ...... ------ ; !attack(A) Pattern EJ52 ..... extend to stabilize shape ..*.O xXO.. xxX.O ..... ..... ----- :8,J Pattern EJ53 .......xxx extend to stabilize group ......OO.X ..*...OXXx .......... .......... ---------- :8,J Pattern EJ54 ......| block the corner X.O...| ..OX..| .*X...| ......| ------+ :8,J Pattern EJ55 ....... tiger's mouth ..X.O.. ..*.OX. ...OXxx .....x. ------- :8,J ....... ..X.O.. ..*.OX. ...OXab .....c. ------- ; x_alive_somewhere(a,b,c) Pattern EJ56 .......? pull back to stabilize group ..OX..oo ..XO*.oo .......o ........ -------- :8,J .......? ..OX..ab ..XO*.cd .......o ........ -------- ; o_alive_somewhere(a,b,c,d) Pattern EJ57 ??.x? stop effective cut and probably connect OOX*O .XO.. ..... ----- :8,cJ ??.x? OOA*O .XO.. ..... ----- ;!attack(A) Pattern EJ58 ....... urgent! attach at the top oo.*.O? oO.X.oo o...... ....... ------- :8,J Pattern EJ59 o... seal with sente o.*O oOXX .... .... ---- :8,J o... o.*O oOAA .... .... ---- ; owl_threatens(*,A) Pattern EJ60 # sometimes the double hane is better ..oOO extend with sente .*OXX ..X.. ..... ----- :8,J ..oOO .*OAA ..X.. ..... ----- ; owl_threatens(*,A) Pattern EJ62a # gf Split and revised. (3.5.2) XX... push to expand threatened dragon OOX.. ..*.. ..... ----- :8,OJ XX... aaX.. ..*.. ..... ----- ;owl_threatens(*,a) Pattern EJ62b # gf Split and revised. (3.5.2) XX... push to expand threatened dragon OOX.. ..*.. ..... ----- :8,d,followup(8) XX... aaX.. ..*.. ..... ----- ;critical(a) Pattern EJ63a # gf Split and revised. (3.5.2) XX.... push again to expand threatened dragon OOXX.. ..O*.. ...... ------ :8,J XX.... aaXX.. ..O*.. ...... ------ ;owl_threatens(*,a) Pattern EJ63 # gf Split and revised. (3.5.2) XX.... push again to expand threatened dragon OOXX.. ..O*.. ...... ------ :8,d,followup(8) XX.... aaXX.. ..O*.. ...... ------ ;critical(a) Pattern EJ64 XX.... atari after double hane OOX*.. ..OX.. ...... ------ :8,J BBa... OOX*.. ..OX.. ...... ------ ; !oplay_attack(a,*,B) Pattern EJ65 ?X........ extend from ponnuki to make a base ?XO....*.x XO.O...... ..O....... ---------- :8,J ?X........ ?XO....*.x aO.O...... ..O....... ---------- ; !attack(a) Pattern EJ66 ?X......x extend from ponnuki to make a base ?XO...*.x XO.O..... ..O...... --------- :8,J ?X......x ?XO...*.x aO.O..... ..O...... --------- ; !attack(a) Pattern EJ67 ........ standard move to break connection and move out ........ ....*... .X.O.... .....X.. ........ ........ -------- :8,J Pattern EJ68 ........ standard move to break connection and move out ........ ....O... .X.O.... ..*X.X.. ........ ........ -------- :8,J Pattern EJ69 ........ standard move to break connection and move out ........ ....O... .XXO.... ..OX*X.. ........ ........ -------- :8,J Pattern EJ71 ........ standard move to break connection and move out ........ ....O... .XXO.... ..OXOX.. ...X*... ........ -------- :8,J Pattern EJ72 # If the right edge is the fourth line this is # not too good because it provokes X to make territory # but there is no really good move in this case. ..... jump again ..*.. ....X ..O.. ....X X.O.. ..... ..... ----- :8,J Pattern EJ73 x.......... invade open space x.......... X.......... x.....*.... ........... ........... ----------- :8,t Pattern EJ74 ??X... defend cut xXXO.. XOO.*. ...... ...... ------ :8,J Pattern EJ75 #tm modified (3.1.22) (see trevorc:420) #FIXME: Pattern still seems a bit too general # consider adding appropriate constraint. .X.?? connect under O*.oo ..... ..... ----- :8,XeE .X.?? O*.ab ..... ..... ----- ; o_alive_somewhere(a,b) Pattern EJ76 ..X... tsukenobi X.XO.. .*O... ...... ...... ------ :8,j Pattern EJ77 ??oo... connection is urgent ?XO.... ?XO*X.. xxXO... x?..... ------- :8,j ??ab... ?XO.... ?XO*X.. cdXO... e?..... ------- ; o_alive_somewhere(a,b) && x_alive_somewhere(c,d,e) Pattern EJ78 ..... seal the side ....O .*O.? O.XX? ..... ..... ----- :8,j Pattern EJ79 |..X??x make a base |.O.X.x |.....x |..O... |...... |..*... |...... |..xxx? :8,j |..X??b |.O.X.a |.....x |..O... |...... |..*... |...... |..cdx? ; x_alive_somewhere(a,b) && x_alive_somewhere(c,d) Pattern EJ80 # db generalized (3.1.25) |...O.x even a computer connects after nozoki |..X*.x |...O.x |....?? |..x.?? :8,J Pattern EJ81 # db added (3.1.4) # gf Revised. (3.3.14) ?....x.. seal the side ?O.O.... o..*.X.x ........ ........ -------- :8,j ?....x.. ?O.O.... o..*.Abx ........ ........ -------- ;x_visible_along_edge(A,b) Pattern EJ81b # gf New pattern. (3.3.14) ?....X.... seal the side to attack ?O.O...ooo o..*.X.ooo .......... .......... ---------- :8,j ?....X.... ?O.O...def o..*.X.abc .......... .......... ---------- ;o_somewhere(a,b,c,d,e,f) Pattern EJ81c # gf New pattern. (3.3.14) # FIXME: May wish to prefer other pincers in some situations. ?......... pincer ?O.O...... o....X.*.. .......... .......... ---------- :8,j ?......... ?O.O...... o....Ab*.. .......... .......... ---------- ;o_visible_along_edge(A,b) Pattern EJ82 # db added (3.1.4) ?oO.. answer the peep! XXO.. ?O*X. ..... ----- :8,j ?oA.. XXA.. ?O*X. ..... ----- ; !dead(A) Pattern EJ84 # gf Made pattern more powerful. (3.1.9) # gf Added one more replacement point. (3.1.10) ...... Atari before connecting ..*... X.XO.. .XO... ...... ...... ------ :8,J,reverse_followup(10) ...... ..*c.. X.XO.. .XObe. .fad.. ...... ------ >replace(a,*); >replace(b,*); >replace(c,*); >replace(d,*); >replace(e,*); >replace(f,*); Pattern EJ85 # db added (3.1.8) ??O.X? Important sente block ?XO... ..X*.. ...... ------ :8,OJ Pattern EJ86 # db added (3.1.9) ?..... extend automatically xX..oo XO*.oo ?..... ?..... ------ :8,XJ ?..... xX..ab XO*.cd ?..... ?..... ------ ; o_alive_somewhere(a,b,c,d) Pattern EJ87 #db added (3.1.9) ??.... extend after the top attachment ..X... ..O*.. ...... ...... ...... ------ :8,J Pattern EJ88 # gf New pattern. (3.1.17) ...... connect after invasion ...... .O.*.O ...X.O ...... ...... ------ :8,J Pattern EJ89 # gf New pattern. (3.1.17) ...... connect after invasion ...... .O.X.O ...*.O ...... ...... ------ :8,J Pattern EJ90 # db New pattern (3.1.26) ?XX.... extend on the fourth line ..O*... O...... ....... ....... ------- :8,J Pattern EJ91 # db New pattern (3.1.26) # gf Demoted from J to j. See e.g. trevorc:1180 and nngs4:485. (3.7.1) ?..... large block affecting stability of both ..O.oo .X*..o ...... ...... ------ :8,j Pattern EJ92 # db new pattern (3.1.28) oo......... extend to build moyo oo.....*... oooo...OXX. ooo.....O.X .........ox ........... ----------- :8,j oo......... oo.....*... abcg..iOXX. def.....O.X .........hx ........... ----------- ; o_alive_somewhere(a,b,c,d,e,f,g) > replace(h,*); > replace(i,*) Pattern EJ93 # db new pattern (3.1.32) # db modified (3.3.9) |..xx....... stand to defend |........... |...X.*..xxx |....XO..xxx |........... |........... +----------- :8,j |..xx....... |........... |...X.*..xxx |....XO..xxx |....cba.... |........... +----------- > replace(a,*); > replace(b,*); > replace(c,*) Pattern EJ94 # db new pattern (3.3.3) # See nngs1:53 ..... Block! ..O.. ..X*. .X.O. ..... ..... ----- :8,j ..... .aO.. ..X*. .X.O. ..... ..... ----- > replace(a,*) Pattern EJ95 # db added (3.3.6) .....? attach below ..X.O? O.*.oo ...... ...... ------ :8,j Pattern EJ96 # db added (3.3.6) ..XXOO Don't allow the cut with sente! .OXOX. ..*O.. ...... ------ :8,j ..XXOO .OXOA. ..*O.. ...... ------ ; !oplay_defend(*,A) Pattern EJ97 # db added (3.3.6) ...... seal the opponent, connecting loosely oo.*O. ooo.XX ...... ...... ------ :8,j ...... ab.*O. cde.XX ...... ...... ------ ; o_alive_somewhere(a,b,c,d,e) Pattern EJ98 # db added (3.3.7) O..X.? connect O..*O. ...... ...... ------ :8,j Pattern EJ99 # db added (3.3.14) # see nngs3:330 where GNU thinks e is an owl attack ........ seal the opponent oooO*.oo ooOXX.oo o....... ........ -------- :8,j,shape(3) ........ oooO*.ab ooOXX.cd o.e..... ........ -------- ; o_somewhere(a,b,c,d) > replace(e,*) Pattern EJ100 # db added (3.3.14) |...O... seal the opponent |....... |...X*.. |...XO.. |..XOO.. :8,jda Pattern EJ101 # gf New pattern. (3.5.3) # See nngs:1020. ......X .O..OX. .....*O ....... ------- :8,jcd ###################################################################### # # Seki patterns. # # Patterns to reduce territory into sekis. # # seki_helper(a) verifies that no string surrounding a can be # captured. # ###################################################################### Pattern S1 # With no supporting stones, a 5 points gote seki. # If X does not reply, the corner point makes ko. # but this is not a good ko because it takes 4 moves # to remove the X stones, while O loses the seki # if it loses the ko. Moreover if X immediately plays # atari at one 1-2 point we have to answer at the second # 1-2 point, after which X can leave it without aji. So # this move is gote and no folloup value is assigned. |XX?? |.XX? |o*XX |.o.X +---- :/,sXe,terri(5) |AA?? |.AA? |o*AA |.o.A +---- ;lib(A)==3 && seki_helper(A) Pattern S2 # With no enemy stones, 5 points gote to defend territory. |OO?? |.OO? |*xOO |.x.O +---- :8,Oe,terri(6) |aa?? |.aa? |*xaa |.x.a +---- ;lib(a)<=3 && seki_helper(a) Pattern S3 # 7 points sente seki. If X does not answer, we can kill, # which at the very least is worth another 20 points. |XXXXX |..*.X |....X +----- :8,sXe,terri(7),followup(20) |AAAAA |..*.A |.b..A +----- ;lib(A)==5 && seki_helper(A) >replace(b,*) Pattern S4 # 7 points reverse sente to defend territory. |OOOOO |..*.O |....O +----- :8,Oe,terri(7),reverse_followup(20) |aaaaa |..*.a |....a +----- ;lib(a)==5 && seki_helper(a) Pattern S5 # Explicit followup to S4. |OOOOO |.*O.O |.X..O +----- :8,Oe,terri(7) |aaaaa |.*a.a |.X..a +----- ;lib(a)==5 && seki_helper(a) Pattern S6 # 6 points seki. Whether this is gote or sente depends on # the ko threat situation. |XX?? |.XXX |.*.X |...X +---- :8,sXe,terri(6),followup(14) |AA?? |.AAA |.*.A |...A +---- ;lib(A)==4 && seki_helper(A) Pattern S6b # 6 points seki. Explicit followup to S6. |XX?? |.XXX |XO.X |.*.X +---- :8,sXe,terri(6),followup(14) |AA?? |.AAA |XO.A |.*.A +---- ;lib(A)==3 && seki_helper(A) Pattern S6c # Eliminate a potential 1000-year ko for the life of the entire # corner. This moves secures a seki. |OO?? |.OOO |OX.O |.X*O +---- :8,Oe,terri(14) |aa?? |.aaa |OX.a |.X*a +---- ;lib(a)==3 && seki_helper(a) Pattern S7 # 6 points seki. See S6. |OO?? |.OOO |.*.O |...O +---- :8,Oe,terri(6),reverse_followup(14) |aa?? |.aaa |.*.a |...a +---- ;lib(a)==4 && seki_helper(a) Pattern S8 # gf New pattern. (3.5.3) # 7 points gote seki. See seki:301. |XX??? |.XXX? |.*.XX |....X +----- :8,sXe,terri(7) |AA??? |.AAA? |.*.AA |....A +----- ;lib(A)==4 && seki_helper(A) Pattern S9 # gf New pattern. (3.5.3) # 7 points seki. Compare S8. See seki:302 |OO??? |.OOO? |.*.OO |....O +----- :8,sXe,terri(7) |aa??? |.aaa? |.*.aa |....a +----- ;lib(a)==4 && seki_helper(a) Pattern S10 # gf New pattern. (3.5.3) # 8 points (mostly) sente seki. See seki:801. |XXX?? |..XX? |.*.XX |....X +----- :8,sXe,terri(8),followup(16) |AAA?? |..AA? |.*.AA |....A +----- ;lib(A)==4 && seki_helper(A) Pattern S10b # gf New pattern. (3.5.3) # Best way to secure seki. See seki:803. |OOO?? |..OO? |.X*OO |....O +----- :8,sXe,terri(8),reverse_followup(16) |aaa?? |..aa? |bX*aa |....a +----- ;lib(a)==4 && seki_helper(a) >replace(b,*); Pattern S10c # gf New pattern. (3.5.3) # Make seki in sente, not gote. See seki:808. |XXX?? |..XX? |.O*XX |..X.X +----- :8,sXe,terri(8),followup(16) |AAA?? |..AA? |bO*AA |.cX.A +----- ;lib(A)==4 && seki_helper(A) >replace(b,*); >replace(c,*); Pattern S10d # gf New pattern. (3.5.3) # Make seki in sente, not gote. See seki:810. # Only replace pattern here. The seki_helper doesn't apply and the # semeai code should find either a or * if there's a chance to make seki. |XXX?? |*.XX? |.OOXX |.XX.X +----- :8,sX |XXX?? |*.XX? |aOOXX |.XX.X +----- >replace(a,*); Pattern S11 # gf New pattern. (3.5.3) # 8 points (mostly) reverse sente seki. Compare S10. See seki:802. |OOO?? |..OO? |.*.OO |....O +----- :8,sXe,terri(8),reverse_followup(16) |aaa?? |..aa? |.*.aa |....a +----- ;lib(a)==4 && seki_helper(a) Pattern S12 # gf New pattern. (3.5.3) # 9 points gote seki. See seki:901. |XXXX? |...X? |.*.XX |....X +----- :8,sXe,terri(9) |AAAA? |...A? |.*.AA |....A +----- ;lib(A)==5 && seki_helper(A) Pattern S13 # gf New pattern. (3.5.3) # 9 points seki. Compare S12. See seki:902. |OOOO? |...O? |.*.OO |....O +----- :8,sXe,terri(9) |aaaa? |...a? |.*.aa |....a +----- ;lib(a)==5 && seki_helper(a) Pattern S14b # gf New pattern. (3.5.3) # Make sente seki. See seki:905. |OOOO? |.X.O? |.XOOO |..*.O +----- :8,sX |OOOO? |.X.O? |.XOOO |.a*.O +----- > replace(a,*); Pattern S15 # gf New pattern. (3.7.12) # 9 points gote seki. See seki:1201. |XX??? |.XX?? |..XX? |.*.XX |....X +----- :8,sXe,terri(9) |AA??? |.AA?? |..AA? |.*.AA |....A +----- ;lib(A)==4 && seki_helper(A) Pattern S16 # gf New pattern. (3.7.12) # 9 points gote seki. Compare S15. See seki:1202. |OO??? |.OO?? |..OO? |.*.OO |....O +----- :8,sXe,terri(9) |aa??? |.aa?? |..aa? |.*.aa |....a +----- ;lib(a)==4 && seki_helper(a) ###################################################################### # # High handicap patterns. # # Patterns to place additional handicap stones when white starts by # passing. After white's first move these patterns are not considered # any more, due to the high_handicap_helper. # ###################################################################### Pattern HH1 ....... Add stone where the distance is large. ....... O..*..O ....... ....... :+,-,value(40),high_handicap_helper Pattern HH2 # gf Corrected symmetry. (3.1.23) ....... Add stone where the distance is large. ....... ...*... O.....O ....... ....... :|,-,value(40),high_handicap_helper Pattern HH3 ?..o..? Make iron pillar. ?.....? ?..*..? ?..O..? ?.....? ?.....? ------- :|,-,value(30),high_handicap_helper Pattern HH4 ..o.. Make iron pillar. ..... ..O.. ..*.. ..... ..... ----- :|,-,value(30),high_handicap_helper Pattern HH5 ..... Jump towards center. ..*.. ..... ..O.. ..... ..... ----- :|,-,value(30),high_handicap_helper Pattern HH6 |...... Corner enclosure from 3-3. |...... |..O.*. |...... |...... +------ :8,-,value(30),high_handicap_helper Pattern HH7 ..... Jump into nowhere ..... ..*.. ..... ..... ooOoo :8,-,value(20),high_handicap_helper Pattern HH8 ..... Yet another third line stone. O...o o.*.o ..... ..... ----- :8,-,value(10),high_handicap_helper Pattern HH9 ..... Yet another fourth line stone. ..... o.*.o O...o ..... ..... ----- :8,-,value(10),high_handicap_helper Pattern HH10 ..... Jump ..... O.*.. ..... ..... :-,-,value(5),high_handicap_helper Pattern HH11 ..... Keima O.... ..*.. ..... ????? :8,-,value(5),high_handicap_helper Pattern HH12 o.... Extend ..... .O*.o ..... o.... :-,-,value(2),high_handicap_helper Pattern HH13 o.... Extend ....o .O*.. ....o oo... :8,-,value(3),high_handicap_helper Pattern HH14 |..O... Solidify corner still more. |...O.. |...*.O |...... |...... +------ :8,-,value(1),high_handicap_helper Pattern HH15 |....oo Solidify corner still more. |..O.oo |..*.oo |...... |...... +------ :8,-,value(1),high_handicap_helper Pattern HH16 |..ooo Solidify corner still more. |....o |..O.o |..*.. |..... +----- :8,-,value(1),high_handicap_helper Pattern HH17 |..... Solidify corner still more. |...O. |..*.. |..... |..... +----- :8,-,value(1),high_handicap_helper ###################################################################### # # Reinforcement patterns. # ###################################################################### # # Early in high handicap games, especially on small boards, it may # happen that the lonely white stones are all thought to be dead. # These patterns are used in such positions to reinforce possible # weaknesses that the owl code has failed to take into account. # # All these patterns have s classification. For performance reasons, # the move safety is tested in the helper instead. # ###################################################################### Pattern Reinforce1 ?...? ..*.. O...O ..... ..... ----- :|,s,value(5),reinforce_helper Pattern Reinforce2 ..... O.*.O ..... ..... ----- :|,s,value(3),reinforce_helper Pattern Reinforce3 X.. .*. X.. :-,s,value(2),reinforce_helper Pattern Reinforce4 xx *O X. :8,s,value(1),reinforce_helper Pattern Reinforce5 ?xx .*O X.. :8,s,value(1),reinforce_helper ###################################################################### # # Reinforcement patterns for the middle game # ###################################################################### Pattern Reinforce102 # FIXME: This pattern should be contingent on being clearly ahead. # gf In any case, don't play it while scoring. (3.7.2) ....... O..O..O Eliminate invasion point ...*... ....... ....... ------- :8,O,value(8) ....... O..O..O ...*... ....... ....... ------- ;!doing_scoring ###################################################################### # # Large Endgame moves # # Endgame patterns of value < 6 are in endgame.db # # "A point with sente is worth 2 with gote." # ###################################################################### Pattern LE1 O.Xx fourth line sente kosumi .*.. .... .... ---- :8,OXe Pattern LE2 # gf Added e classification. (3.5.2) ????? third line sente kosumi O.Xxx .*... ..... ----- :8,OXe Pattern LE3 # gf Added e classification. (3.5.2) xXx expand territory ... .*. O.. o.. :8,OXe Pattern LE5 # gf Added e classification and constraint. (3.5.2) ?Xxx O... ..*. .... ---- :8,OXe ?Xxx ca.. .b*. .... ---- ;!oplay_disconnect(*,a,b,*,c) Pattern LE6 # At move 96 of ego.tst, this is matched at J8. # tm - revised (3.1.15) (see trevora:330) # added left-hand ?s # gf Revised. (3.1.20) # see also trevora:280, arend:23 # tm Revised. (3.1.20) ?oo??? ?..*.x ?....X ?..O?? :8,OXeE ?ocbd? ?..*.x ?a...X ?..O?? ; omoyo(a) && !(o_alive_somewhere(b) && o_alive_somewhere(c,d)) Pattern LE8 # gf Changed fixed value to e classification, removed constraint. (3.5.2) ?OOo prevent monkey jump X*.. .... ---- :8,OXe Pattern LE9 # gf Added e classification. (3.5.2) oo..? good local sente ..O.x O*X.. ....X ..... ----- :8,OXe Pattern LE10 # gf Revised constraint. (3.1.14) OX cut with sente and try to live inside opponent's territory X* :\,OXW,followup_value(5) OB A* ;xmoyo(*) && !attack(A) && !attack(B) ;&& safe_omove(*) && oplay_attack_either(*,A,B) Pattern LE12 # gf Changed fixed value to e classification, removed constraint. (3.5.2) ?O.. seal the edge X*.. .... ---- :8,OX Pattern LE13 # gf Changed fixed value to e classification, added reverse followup. (3.5.2) |??o? take the corner |...O |..OX |..*X |.... +---- :8,OXe,reverse_followup(5) |??o? |..aO |..OX |..*X |.... +---- ; oplay_attack(*,a,a) Pattern LE15 # tm decreased value (3.1.20) (see nngs:1150 move G4) # gf Don't bother with this inside own territory. (3.1.29) xxx jump towards moyo x.x .*. ... ... OoO ?o? :|,OE xxx x.x .*. ... ... OoO ?o? ;!oterri(*) Pattern LE16 +---- it's better to bend around |..O. |.*XO |?.X? :8,OX,terri(3),followup(2) +---- |.aO. |.*XO |?.X? > replace(a,*) ###################################################################### # # Replacement patterns # # Patterns using the "replace" autohelper macro for when # "this move is better than that move" # ###################################################################### Pattern RE1 # db added (3.1.11) XOO? better to make an eye O*.O XO.O ?OO? :8,- XOO? A*aO XO.O ?OO? ; lib(A)==1 > replace(a,*) Pattern RE2 # gf New pattern. (3.1.12) # See test case niki:1 for an example. ..O... connect solidly XO.... XO*X.. XXO... ...... ------ :8,- ..O... XO.... XO*X.. XXOa.. ...... ------ > replace(a,*) Pattern RE3 # gf New pattern. (3.1.12) # Common invasion in handicap games. Attaching on top better than # capping. ....... ....... .O.*.O. ...X... ....... ....... ------- :|,- ....... ...a... .O.*.O. ...X... ....... ....... ------- > replace(a,*) # Pattern RE4 # # tm New Pattern (3.1.17) # # gf This is too general as gunnar:95 shows. Removed. (3.7.10) # # ?O.| push before blocking # *XX| # OO.| # # :8,- # # ?O.| # *BX| # OOa| # # ; oplay_attack(*,a,B) # # > replace(a,*) # Pattern RE5 # # tm New pattern (3.1.18) (see trevorb:440) # # gf This pattern can cause a crash, see ticket #203. Removed. (3.7.12) # # OX? threaten snapback # X.X # X.* # ?O. # ??o # # :8,- # # OX? # B.X # Xa* # ?O. # ??o # # ; lib(B) == 2 # # > replace(a,*) Pattern RE6 # tm New Pattern (3.1.18) (see trevorb:400) ----- .*... take it off, don't leave atari followup OXOX? ?OOX? :8,- ----- .*a.. OXOX? ?OBX? ; lib(B) == 1 > replace(a,*) Pattern RE8 # db new pattern (3.3.6) # see century-2002:10 ?..O?? first line block just helps the opponent X.*OX? ..OX.. ...X.. ------ :8,- ?..O?? X.*OX? ..OX.. ..aX.. ------ > replace(a,*) Pattern RE9 # db new pattern (3.3.6) # see century-2002:100 ?o.X?? to slide is better than kosumi .O...? ...*.. ...... ------ :8,- ?o.X?? .O...? ..a*.. ...... ------ > replace(a,*) Pattern RE10 # db new pattern (3.3.6) # see century-2002:130 xxxx don't allow the cut ...X x.O* ?XXO :8,d xxxx .a.X x.O* ?XXb ; !dead(b) > replace(a,*) Pattern RE12 # db added (3.3.14) # See ninestones:20, where hane is a bogus owl defense. ???OX. kosumi defense O.XO.. ....*. ...... ------ :8,-,shape(3) ???aX. O.Ba.. ..c.*. ...... ------ ; lib(a)==2 && lib(B)>=2 && !oplay_attack(*,a) > replace(c,*) Pattern RE13 # gf New pattern. (3.3.17) # See gunnar:20. ?XXO backfill before playing into bamboo joint in gote (dame filling) O*.. ?XXO :-,OX ?XXO a*b. ?XXO ;oplay_attack(*,b,*) && oplay_defend(*,b,*) >backfill_replace(*,a) Pattern RE14 # gf New pattern. (3.3.22) # See filllib:35. +--- |..? fix up corner eye shape to avoid seki or worse |*.O |..O |O.O |.O? :8,O +--- |..? |*.O |b.O |O.O |aO? ;olib(a)==2 && !oplay_attack(a,b,b) >replace(a,*) ###################################################################### # # Thrashing patterns. # # Patterns to force early moves when playing white against high # handicaps instead of passing because all stones look dead. # These patterns are disabled by the thrash_around_helper when white has # managed to get living stones or when at least 40% of the board is # covered. # ###################################################################### Pattern Th1 ..... X.*.X ..... ..... ----- :|,-,value(5),thrash_around_helper Pattern Th2 xxXxx o...o o.*.o ..... ..... ----- :|,-,value(5),thrash_around_helper Pattern Th3 oo.oo .X*.x ..... ..... ..... ----- :8,-,value(3),thrash_around_helper Pattern Th4 ooXoo o.*.o ..... ..... ----- :|,-,value(3),thrash_around_helper Pattern Th5 X..o ..*. .... oooo :8,-,value(1),thrash_around_helper Pattern Th6 ...o X.*. .... oooo :8,-,value(1),thrash_around_helper Pattern Th7 ....x .X.o. .*.o. ....x :8,s,value(4),thrash_around_helper ....x .X.a. .*.b. ....x ;o_somewhere(a,b) Pattern Th8 oo..? *X.o. .O.o. ....x :8,-,value(5),thrash_around_helper oo..? *X.a. .O.b. ....x ;o_somewhere(a,b) Pattern Th9 .... O.*. ...x :8,-,value(3),thrash_around_helper Pattern Th10 ?x? .*x O.O ?o? :8,-,value(3),thrash_around_helper Pattern Th11 ?x? o*? O.O ?o? :8,-,value(2),thrash_around_helper Pattern Th12 ?.? .*. ... O.O :|,-,value(3),thrash_around_helper Pattern Th13 .O. ... O.* :8,-,value(3),thrash_around_helper Pattern Th14 x*O o.. O.O :8,-,value(2),thrash_around_helper Pattern Th15 xO* o.. O.O :8,-,value(2),thrash_around_helper Pattern Th16 ?.O.? x*.O? ??..x :8,-,value(3),thrash_around_helper Pattern Th17 # FIXME: Give value to all attack threats. ?O? *XO ?.? :8,-,value(4),thrash_around_helper Pattern Th18 # FIXME: Give value to all attack threats. ?O? *XO ?.? :8,s,value(0.5),thrash_around_helper Pattern Th19 *Ox O.O .O. :8,n,value(1),thrash_around_helper Pattern Th20 ?.o. .*X. ?... :8,s,value(0.5),thrash_around_helper Pattern Th21 .O? *XO .Oo :8,s,value(1),thrash_around_helper Pattern Th22 ..O *.. ... --- :8,s,value(4),thrash_around_helper Pattern Th23 ?X? .*O ... --- :8,s,value(2),thrash_around_helper Pattern Th24 .*x .XO ... --- :8,s,value(3),thrash_around_helper ###################################################################### # # Mirror breaking patterns. # # Patterns to break mirror go strategies being employed by the opponent. # ###################################################################### Pattern M1 # gf New pattern. (3.5.11) ..... ..... ..X.. ..*.. ..... :|,-,value(30) .mil. .dbgq .fAe. ph*c. .kjn. ;oplay_attack(*,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q,A) && break_mirror_helper(A) Pattern M2 # gf New pattern. (3.5.11) ..... ..X.. ..X.. ..O*. ..... :8,-,value(40) .mil. .dXgq .fAe. phO*. .kjn. ;oplay_attack(*,d,e,f,g,h,i,j,k,l,m,n,p,q,A) && break_mirror_helper(A) Pattern M3 # gf New pattern. (3.5.11) ..... .XX.. ..X*. ..OO. ..... :8,-,value(40) .mil. .XXgq .fA*. phOO. .kjn. ;oplay_attack(*,f,g,h,i,j,k,l,m,n,p,q,A) && break_mirror_helper(A) Pattern M4 # gf New pattern. (3.5.11) ..... .XX*. .XXO. ..OO. ..... :8,-,value(40) .mil. .XX*q .XAO. phOO. .kjn. ;oplay_attack(*,h,i,j,k,l,m,n,p,q,A) && break_mirror_helper(A) Pattern M5 # gf New pattern. (3.5.11) ..*.. .XXO. .XXO. .XOO. ..... :8,-,value(40) .m*l. .XXOq .XAO. pXOO. .kjn. ;oplay_attack(*,j,k,l,m,n,p,q,A) && break_mirror_helper(A) Pattern M6 # gf New pattern. (3.5.11) ..O.. .XXO. .XXO. .XOO. .*X.. :8,-,value(40) .mOl. .XXOq .XAO. pXOO. .*Xn. ;oplay_attack(*,l,m,n,p,q,A) && break_mirror_helper(A) Pattern M7 # gf New pattern. (3.5.11) .*OX. .XXO. .XXO. .XOO. .OX.. :8,-,value(70) .*OX. .XXOq .XAO. pXOO. .OXn. ;oplay_attack(*,n,p,q,A) && break_mirror_helper(A) Pattern M8 # gf New pattern. (3.5.11) .OOX. .XXO. .XXO. *XOO. .OXX. :8,-,value(60) .OOX. .XXOq .XAO. *XOO. .OXX. ;oplay_attack(*,q,A) && break_mirror_helper(A) # END OF FILE