# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 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 Owl urgent offensive pattern database. These are patterns # which are always matched. The patterns in owl_attackpats.db # are not matched if owl_shapes finds that the dragon has two # eyes. So the patterns in this database are exceptional ones # corresponding to defects in the optical code. # # 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 # ! : your defense move against * (if different) # -, | : 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.) # ################# # # In the second field (classification) the following pattern attributes # are possible. Friendly stones are 'O', opponent stones are 'X'. # # s : "Sacrifice" pattern. Omit the usual check that an O stone here # cannot be capture. # # n : In addition to usual check that an O stone here cannot be # captured, check also that an X move cannot be captured. # attribute_map value_only goal_elements Xx callback_data ! Pattern VA1 ?x?? threaten two eyes simultaneously X.X? .X*O X.X? :8,-,value(75) ?x?? A.d? cX*a XbX? ; lib(a)>2 && owl_topological_eye(b,A)==2 && owl_topological_eye(c,A)==2 && oplay_attack(*,d) Pattern VA2 |XXO? remaining ko potential |..XO |*X.X |..XX +---- :8,s,value(45) |AAO? |..XO |*X.B |..BB +---- ;lib(A)==2 && lib(B)==2 Pattern VA3 |XX??? may still be possible to kill through bent four in the corner |OXx?O |O.XX* |..... +----- :8,-,value(45) Pattern VA4 |XX?? may still be possible to kill through bent four in the corner |OXx? |O.XX |.*.X +---- :8,s,value(45) Pattern VA5 |X?? take ko for possible nakade |*X? |XOx |Oox +--- :8,s,value(45) Pattern VA6 # Workaround for mistake related to false margins. XXXO? O.OX* ----- :8,s,value(45) XXXO? a.OX* ----- ;lib(a)==2 Pattern VA7 |XXx bent four in the corner |O.X |OXx |*OX +--- :8,s,value(45) Pattern VA8 *Xx X.X XXO :8,s,value(45) *Xx A.X AAO ;lib(A)==2 && olib(*)>1 Pattern VA9 # nn Modified constraint (3.3.14) X* atari inside eyespace :-,s,value(45) A* ;lib(A)==2 && olib(*)>1 && owl_big_eyespace(*) ;&& (owl_eye_size(*) <= 8 || !oplay_attack(*,*)) Pattern VA10 X* atari inside eyespace with ko :-,s,value(35) A* ;lib(A)==2 && olib(*)==1 && owl_big_eyespace(*) && oplay_attack(*,*)!=WIN Pattern VA11 ?XX??? chance to get nakade XOOXXx !OX*.x ------ :8,s,value(65) ?XX??? XaaXXx .aX*.x ------ ;attack(a) && !defend(a) Pattern VA12 |xx?? |.X?? try to kill with bent four in the corner |OXXx |X*.x +---- :8,s,value(75) Pattern VA13 # This is almost identical to attack pattern A1330. It is needed in # both places. |XX? take ko to maybe kill |*XX |XOX |O!O +--- :8,s,value(85) |AA? |*AA |XOA |OaO +--- ;lib(A)<=3 && oplay_attack(a,a) # nn Removal candidate (3.3.14) # Success rate in regressions : 0% (0/131) Pattern VA14 ?OX force X to defend inside own eyespace OX! *XO --- :8,-,value(35) ?bX ODa *Dc --- ;lib(b)>1 && lib(c)>1 && owl_eyespace(a) && !attack(D) Pattern VA15 X.? sacrifice to destroy eye X*X OX. :8,s,value(45) Ac? A*X bXd ;lib(A) == 2 && lib(b) > 1 && !oplay_attack(*,c,d,d) Pattern VA16 ---- .X.X play safely inside eyespace to falsify eye .*Xx X..? :8,-,value(46) ---- .X.X .*Xx X..? ;owl_eyespace(*) Pattern VA17 xXXOo exploit shortage of liberties !O*XO .X.Xo :8,s,value(35) xXXOo aO*XO .X.Xo ; oplay_attack(*,a,a) Pattern VA18 XX!O throw in to kill an eye .*X? XXO? :8,-,value(35) XXaO .*X? XXO? ; oplay_attack(*,a,a) Pattern VA19 # gf New pattern. (3.1.11) OX.x peep at edge X.*. XX.. ---- :8,s,value(75) OX.x A.*. AA.. ---- ;lib(A)==2 && owl_big_eyespace(*) Pattern VA20 # tm New pattern. (3.1.13) # see trevor:450 ?X? X.X *X? X.X ?X? :-,-,value(75) ?X? XaX *C? XbX ?X? ; owl_topological_eye(a,C) == 2 ; && owl_topological_eye(b,C) == 2 Pattern VA21 # gf New pattern. (3.1.14) # gf Revised pattern. (3.1.17) XO? bogus eyespace .*X ... --- :8,-,value(75) XO? .*X .a. --- ;owl_big_eyespace(a) Pattern VA22 # gf New pattern. (3.1.14) x.O bogus eyespace .*X ... --- :8,-,value(75) xaO .*B ... --- ;owl_big_eyespace(*) && oplay_attack(*,a,B) Pattern VA23 # gf New pattern. (3.1.14) ??O? bogus eyespace x.*X .... .... ---- :8,-,value(75) ??O? xc*X .ba. .... ---- ;owl_big_eyespace(*) && oplay_attack(*,a,b,c,a) Pattern VA24 # gf New pattern. (3.1.14) # gf Revise constraint to update for changed olib behaviour. (3.7.8) X* capture inside eyespace, not ko :-,-,value(76) A* ;lib(A)==1 && owl_eyespace(*) && olib(*) > 1 Pattern VA25 # tm New pattern. (3.1.15) (see cho1:161) ?OO| special corner shape. *X.| XOX| XO.| ---+ :8,-,value(76) Pattern VA26 # gf New pattern. (3.1.15) ??XX? making nakade is only chance to kill, unless we can capture ?XO!X some of the wall X*XOX X.OX? ?XX?? :8,s,value(70) Pattern VA26b # gf New pattern. (3.1.15) # This pattern is entirely bogus. VA25 gives the correct attack point # but currently we also need this pattern to get a second match, which # is necessary to offset the fact that X is thought to have three # eyes. ??XX? making nakade is only chance to kill, unless we can capture ?XO.X some of the wall X.XOX X*OX? ?XX?? :8,s,value(0) Pattern VA27 # gf New pattern. (3.1.15) XX?? not two certain eyes .*xX OXOx ---- :8,s,value(45) XX?? .*AX OXOB ---- ;x_somewhere(A,B) Pattern VA28 # gf New pattern. (3.1.15) XX?? not two certain eyes .OxX *XOx ---- :8,s,value(45) XX?? .OAX *XOB ---- ;x_somewhere(A,B) Pattern VA29 # gf New pattern. (3.1.15) |XXX? not two certain eyes |!O.X |OX*x +---- :8,s,value(45) Pattern VA30 # gf New pattern. (3.1.15) ?XX! atari to destroy eye X.*X ?XX? :8,s,value(45) ?XXb Xa*X ?CC? ;lib(C)==2 && owl_eyespace(a) && oplay_attack(*,a,b,b)!=WIN Pattern VA31 # tm New pattern (3.1.15) (see maeda0:60) # gf Added constraint. (3.5.5) ?O.| OX.| X.X| X!*| ??.| :8,s,value(76) ?Oa| OXb| X.X| X!*| ??.| ;!oplay_attack(a,?,b,a) Pattern VA32 # tm New pattern (3.1.15) (see maeda0:60) # gf Added constraint. (3.5.5) ?O*| OX!| X.X| XXO| :8,s,value(76) ?O*| OXb| X.X| XXa| ;lib(a)>1 || !oplay_attack(*,?,b,*)==WIN Pattern VA33 # tm New pattern (3.1.15) ?X| XO| !O| *X| :8,-,value(76) Pattern VA34 # tm New pattern (3.1.15) # See also VA27 ?X? XOX !OX *XO :8,-,value(76) ?X? XOX .OX *XA ; oplay_defend_both(*,A,*) Pattern VA35 ?XX| X..| X*X| XO.| ---+ :8,s,value(45) ?XX| XA.| X*X| XO.| ---+ ; xlib(A)==2 Pattern VA36 ?XXX| cut black up X.OX| XX*O| ?OX.| ??XX| :8,s,value(45) Pattern VA37 # tm New Pattern (3.1.15) ?xXO? ?X.XO O.X!* ----- :8,-,value(45) ?xXO? ?X.XO A.X.* ----- ;lib(A) > 2 Pattern VA38 # gf New pattern. (3.1.15) # See trevora:25 ??O x!. capture a string at the edge of an eyespace .*X ... --- :8,-,value(80) ??O x.. .*A ... --- ;owl_big_eyespace(*) && !oplay_defend(*,A) Pattern VA39 # tm New Pattern (3.1.16) # gf Revised constraint. (3.5.4) XO*| atari to kill eye !XX| XOO| :8,s,value(95) XO*| aXX| Xbb| ;owl_eyespace(a) && olib(*)>1 && lib(b)>1 Pattern VA40 # tm New Pattern (3.1.16) (see trevora:550) OXx Threaten snapback inside eyespace. X.. X.* X.. :8,s,value(95) OXx X.. A.* X.. ; lib(A) == 3 Pattern VA41 # tm New Pattern (3.1.16) XXO .*X !.X :8,s,value(95) XBO .*A ..X ;lib(A) ==2 || lib(B) == 2 Pattern VA42 # tm New Pattern (3.1.16) X*X double attack on safe eye .X. X.X OXX :8,-,value(75) b*c .X. X.X DXX ;!attack(D) && oplay_attack(*,b) && oplay_attack(*,c) Pattern VA43 # tm New Pattern (3.1.17) XXX. .O*. ---- :8,s,value(50) XXXb .O*a ---- ; !oplay_attack(*,a,b,b) ; && !oplay_attack(*,b,a,a) Pattern VA44 # tm New Pattern (3.1.17) # gf Fixed symmetry. (3.3.6) # nn Modified constraint (3.3.14) # gf Revised constraint. (3.5.3) XoX o*o :|,s,value(57) XbX a*c ; owl_proper_eye(*) ; && (owl_proper_eye(a) + owl_proper_eye(b) + owl_proper_eye(c) > 2) ; && safe_xmove(*) ; && ((owl_eye_size(*) <= 8 && owl_maxeye(*)>1) || !oplay_attack(*,*)) Pattern VA45 # tm New Pattern (3.1.17) X* cut to create false eye OX -- :8,-,value(75) X* OX -- ; !ko(*) Pattern VA46 # tm New Pattern (3.1.17) # see trevor:650 ?X??? X.X?? ?X.O* :8,-,value(75) ?X??? CbX?? ?XAO* ; xlib(A) == 1 ; && olib(A) == 1 ; && owl_topological_eye(b,C) < 4 && owl_topological_eye(b,C) > 0 Pattern VA47a # tm Moved from owl_attackpats (3.1.17) # was A1107 # gf Split with respect to ko. (3.7.9) O* defend the surrounding chain XO :/,-,value(95) a* Xb ;vital_chain(a) && vital_chain(b) && !ko(*) && !xplay_defend_both(*,a,b) Pattern VA47b # tm Moved from owl_attackpats (3.1.17) # was A1107 # gf Split with respect to ko. (3.7.9) O* defend the surrounding chain XO :/,-,value(65) a* Xb ;vital_chain(a) && vital_chain(b) && ko(*) && !xplay_defend_both(*,a,b) Pattern VA48 # tm New Pattern (3.1.18) +---- |.*.. |XX!O :8,s,value(75) Pattern VA49 # tm New Pattern (3.1.18) (see trevor:430) # FIXME: This is non-sense if the ataried stone has neighbours # in atari (see trevorb:360) X* atari outside eyespace oX :8,-,value(35) X* AB ; lib(B) <= 2 && owl_eyespace(A) Pattern VA50 # pp New pattern (3.3.10) |xx?? |Ox?? try to kill with bent four in the corner |OXXx |X*.x +---- :8,s,value(45) Pattern VA51 # pp New pattern (3.3.12) |*Oo start an unfavourable ko |.XO |X.X |.Xx |.O. +--- :8,-,value(35) Pattern VA52a # gf New pattern. (3.3.20) |*Oo make X short of liberties |.XO |X.X |..X |OXX |.X? +--- :8,-,value(65) Pattern VA52b # gf New pattern. (3.3.20) |*Oo |OXO make X short of liberties |.XO |X.X |..X |OXX |.X? +--- :8,-,value(65) Pattern VA53 # gf New pattern. (3.3.20) # See ld_owl:68. |XXX nakade if X cannot squeeze |O.X |XOX |*OX +--- :8,s,value(75) |AAA |O.A |XOA |*OA +--- ;lib(A)==2 Pattern VA54 # mh New pattern (3.5.4) # See ld_owl:413/414 X.X play atari inside one eye to destroy the other eye *XO :8,s,value(45) XaX *BO ;lib(B)==2 && olib(*)>=2 && owl_proper_eye(*) && owl_maxeye(a)>0 Pattern VA55 # gf New pattern. (3.7.9) # See ld_owl:406. ?X? force opponent to fill one eye X.X .XO *.? --- :8,s,value(45) ?X? X.X bXO *a? --- ;xlib(a)==3 && oplay_lib(*,a,b,b)>1 Pattern VA56 # gf New pattern. (3.7.9) # See ld_owl:326. xXOo destroy eye X.XO OX.* ---- :8,-,value(45) xXOo XaXO OX.* ---- ;owl_mineye(a)==1 # END OF FILE