# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 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 atari_atari attack 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.) # ################# # # In the second field (classification) the following pattern attributes # are possible. Friendly stones are 'O', opponent stones are 'X'. # # s : "Sacrifice" pattern. Allow sacrifice through self atari. # Notice that this is different from the usual meaning of the # s classification since all but a few moves in an atari_atari # sequence are expected to be sacrifices. # # c : "Conditional" pattern. Don't accept the move unless it is also # found by a non-conditional pattern or by one more conditional # pattern that threatens some other string. # ######################################################### attribute_map none goal_elements Xx callback_data X Pattern A1 X* :-,- A* ;lib(A) == 2 Pattern A2 xXOXx ..X*. ..... ----- :8,- Pattern A3 OX X* X. xx -- :8,- Pattern A4 ?X O* X. xx -- :8,- Pattern A5 ?O? X*X ... --- :|,- Pattern A6 *.X oXO :8,c *.X oXO ;olib(*)>3 Pattern A7 X.X reduce eyespace X*X OXO :|,s Pattern A7b # gf New pattern. (3.5.10) |.X reduce eyespace |*X |XO |.X :8,s Pattern A7c X.X reduce eyespace X*X OX. :8,s A.X A*X OXb ;lib(A)==2 && olib(b)>1 Pattern A8 O.. ?X* ??O :8,c Pattern A9 X* OX :/,- X* OX ;safe_omove(*) Pattern A10 ?X? XOX .*. :|,- Pattern A11 *.X ?.X ?XO :8,c *.X ?.X ?XO ;olib(*)>3 Pattern A12 .X? *.X .X? --- :8,- .X? *.X .A? --- ;lib(A)==2 && olib(*)>3 Pattern A13 *O .X .X .x -- :8,- *O .A .A .x -- ;lib(A)==3 && olib(*)>=3 Pattern A14 .X. X*X ?O? :|,- .X. A*B ?O? ;safe_omove(*) && oplay_attack_either(*,A,B) ;&& !oplay_connect(*,A,B) Pattern A15 #evand new pattern (3.3.13) ?X? X*. ?XX :8,s ?X? X*b ?AA ;lib(A) == 2 && xlib(b) <= 2 Pattern A16 #evand new pattern (3.3.13) *x X. x. -- :8,- *x A. x. -- ;lib(A) == 3 Pattern A17 # gf New pattern. (3.3.16) ?O?? o*XX ..xX ...X ---- :8,- ?O?? o*AA ..xA ...A ---- ;lib(A)==3 && olib(*)>=2 Pattern A18 # gf New pattern. (3.3.17) ??.? ?X*. OOX. ?X.. ??.? :8,- ??.? ?C*. eeXa ?Db. ??.? ;!oplay_attack(*,e) && oplay_attack(*,a,C) && oplay_attack(b,a,D) Pattern A19 # gf New pattern. (3.3.17) ?*X threaten snapback O.. ?XX :8,c ?*X O.. ?AA ;lib(A)==2 && olib(*)>1 Pattern A20 # gf New pattern. (3.3.17) |*X threaten snapback |.. |XX :8,c |*X |.. |AA ;lib(A)==2 && olib(*)>1 Pattern A21 # gf New pattern. (3.3.17) .XO *.X --- :8,- .XO *.A --- ;lib(A)==2 && olib(*)>2 Pattern A22 #evand New pattern. (3.3.18) ?.X O.X X*X ?X? :8,s ?.A ObA X*A ?X? ;lib(A) <= 4 && oplay_attack(*,b,A) && oplay_defend(*,?,*) Pattern A23 # evand New pattern. (3.3.19) XXO .X. .*. :8,- AAB .A. .*. ;lib(A) == 3 && lib(B) > 1 && oplay_attack(*,A) Pattern A24 # pp New pattern - see atari_atari:25 and blunder:31 (3.5.1) ?*? XOX :|,- ?*? BAC ; lib(A) == 1 && lib(B) + lib(C) <= 6 && !oplay_defend_both(*,B,C) Pattern A25 # gf New pattern. (3.5.4) ..X *OX .XO :8,- ..A *OA .BO ;lib(A)<=3 && lib(B)<=3 && (oplay_attack(*,A) || oplay_attack(*,B)) Pattern A26 # pp New pattern, see kgs:490. (3.7.4) ?XX O*. ?X. :8,- ?CC A*a ?B. # FIXME: The constraint is not very good. ; lib(B) <= 5 && lib(A) > lib(B) && !oplay_defend(*,?,a,C) # END OF FILE