# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 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. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Database of connection patterns. # # ? - don't care # . - empty # X - opposite color of O # O - color of dragon looking for connection # x - X or empty # o - O or empty # * - cutting point in the O formation, an X move here must be # tactically safe # ! - inhibit connection, eye space points for O are turned marginal # ################################### # # Classification # # The connection database contains patterns of three different classes, # which also are matched separately. # # B - Indicate cutting points and inhibit connections. # C - Amalgamate worms into dragons. # # Additionally there are a few acceptance modifiers. # # s - Accept even if the pattern includes tactically unsafe strings # ################################### # # Organisation # # The connection database is organized into a number of different # categories and ordered so that more specific patterns are matched # before more general ones, since evaluating the constraints of the # latter usually is expensive. # # EB - Edge B patterns # CB - Center B patterns # EC - Edge C patterns # CC - Center C patterns # Lunch - patterns that invalidate lunches, matched with I patterns # ################################### attribute_map none goal_elements none # callback_data is dependent on pattern class in this database ######################## # # B patterns on the edge # ######################## callback_data X! ########################## # # B patterns in the center # ########################## callback_data X! Pattern CB1b ?O. fragile double connection X*O ?O. :8,B ?b. X*O ?a. ;!xplay_connect(*,a,b) Pattern CB2b ?O. ?.. fragile double connection X*O ?O. :8,B ?b. ?.. X*O ?a. ;!xplay_connect(*,a,b) Pattern CB3b O!O .*X .O? :8,B O!a .*X .b? ;!xplay_connect(*,a,b) Pattern CB3c O!O .*. .OX :8,B c!a .*. .bX ;!oplay_disconnect(a,c) ;&& !oplay_disconnect(c,b) ;&& !xplay_connect(*,a,b) Pattern CB7 # This pattern is used to find potential cutting stones as defined by # the field cutstone2 in the worm data. The helper returns 0 so the # pattern doesn't fire as a B pattern. XO O* :\,B,cutstone2_helper AO O* ;attack(A) Pattern CB11b ?OX? O!OX ?*!O ??O? :8,B ?bX? O!OX ?*!a ??O? ;!xplay_connect(*,a,b) Pattern CB15b # tm New Pattern (3.1.23) (see global:17, ) # careful not to break trevord:730 # FIXME: Need to use amalgamate_most_valuable helper. # xplay_disconnect helper also might be useful here. ?*? save cutting stone. OXO !O! :8,B ?*? aXb !O! ;!xplay_connect(*,a,b) Pattern CB16 # gf Revised constraint. (3.3.13) ?O x* fragile double connection XO O! :8,B ?a x* XO b! ;xplay_connect(a,b) && !xplay_connect(*,a,b) Pattern CB17 O!O !*? fragile double connection O?? :\,B O!a !*? b?? ;!xplay_connect(*,a,b) Pattern CB18 ?X? X.X workaround for ko contingent connection OXO ?O* :8,B ?X? XbX OAd ?c* ;xplay_attack(*,A)= 3) Pattern CC109 # gf Revised constraint. (3.3.3) O.oo ..oo ..oo .Ooo :8,C c.oo .aoo .boo .doo ;omoyo(a) && omoyo(b) && lib(c)>=4 && lib(d)>=4 ########################################################## # # CC2xx - patterns with reasonably inexpensive constraints # ########################################################## ############################################# # # CC3xx - patterns with expensive constraints # ############################################# # # CC30x - one space jump connections # #################################### ########################### # # CC31x - keima connections # ########################### #################################### # # CC32x - two space jump connections # #################################### ############################ # # CC33x - ogeima connections # ############################ #################################################################### # # CC4xx - fragile double connections # # FIXME: These shouldn't be matched until all other amalgamation has # been completed. # #################################################################### Pattern CC401 # Do amalgamate one of the two possible connections. We guess that # the larger of the two dragons is the one we most want to keep in # case of a cut. ?O. fragile double connection X.O ?O. :8,- ?d. Xac ?b. ;xcut(a) >amalgamate_most_valuable_helper(b,c,d); Pattern CC402 # Do amalgamate one of the two possible connections. We guess that # the larger of the two dragons is the one we most want to keep in # case of a cut. ?O. ?.. fragile double connection X.O ?O. :8,- ?gd ?bc Xaf ?e. ;xcut(a) >if (!xplay_attack_either(b,c,d,b,d) || !xplay_attack_either(c,b,a,c,a)) > amalgamate(e,f); >else > amalgamate_most_valuable_helper(e,f,g); #################################################################### # # CC5xx - experimental connection patterns # #################################################################### # # Note about patterns CC501, CC502, CC502b, CC511 # # In theory, these patterns go against the connection policy that the # involved strings must be tactically stable (not capturable) and # consequently, they should not be needed at all. In practice though, # problems arise with the optics/owl analysis when such strings aren't # amalgamated. An example (see owl:50) # # +------ # |...X.O # |XXX.XO # |.OOXXO # |O.OOOO # # In the absence of the mentioned patterns, the topmost X stone would # NOT be amalgamated with the others, because all attempts at # defending these kosumi connections result in a tactical capture of # the whole string, thus a successful cut. # # As a consequence, the owl code would be run against separate targets, # and in the above case, it would even fail to find a way to kill the # topmost X stone (the lack of context is then responsible for the # optics/owl code not being able to return vital points) # #################################################################### Pattern CC501 # Connect even if stones not tactically safe. xO O. :\,sC xO Oc ;x_suicide(c) Pattern CC502 # Connect even if stones not tactically safe. XO O. :\,sC Xb ac ;lib(a)>1 && lib(b)>1 && !xcut(c) && xlib(c)==1 && xplay_attack(c,c)==WIN Pattern CC502b # Connect even if stones not tactically safe. .O O. :\,sC db ac ;lib(a)>1 && lib(b)>1 && !xcut(c) && !xcut(d) ;&& xlib(c)==1 && xplay_attack(c,c) Pattern CC503 O . O :+,C c a b ;!xcut(a) && !disconnect_helper(b,c) Pattern CC504 XO O. :\,C Xb ca ;!xcut(a) && !disconnect_helper(b,c) Pattern CC505 XO OX :X,C Bc dA ;((attack(A) && !distrust_tactics_helper(A)) ; || (attack(B) && !distrust_tactics_helper(B))) ;&& !disconnect_helper(c,d) Pattern CC506 O . . O :+,C c a b d ;!xcut(a) && !xcut(b) && !disconnect_helper(c,d) Pattern CC506b O. Xo .. O. :8,C c. Eo ab d. ;!xcut(a) && !xcut(b) && lib(E)<=2 && !disconnect_helper(c,d) Pattern CC507 Ox .. xO :O,C cx ab xd ;!xcut(a) && !xcut(b) && !disconnect_helper(c,d) Pattern CC508 O? .X xO :8,C b? aX xc ;!xcut(a) && !disconnect_helper(b,c) Pattern CC509 Ox .. .. xO :O,C ex ab cd xf ;!xcut(a) && !xcut(b) && !xcut(c) && !xcut(d) && !disconnect_helper(e,f) Pattern CC511 # Connect even if stones not tactically safe. .O O. :\,sC db ac ;attack(a) && attack(b) && !xcut(c) && !xcut(d) # END OF FILE