# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 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 Endgame 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: # # EE edge endgame # EF edge followups # CE center endgame # CF center followups # EY eye stealing/saving 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. # ###################################################################### # # Edge endgame patterns # # These patterns need to be revised. # # Moves along the edge with small weights, intended to come into play # in the endgame. # # These patterns are further subdivided into the following classes # # first line descents (except in corner) # first line hanes (except in corner) # first line pushes (except in corner) # first line blocks (except in corner) # first line corner moves # miscellaneous first line moves # second line descents # second line hanes # second line extensions # second line clamps # miscellaneous second line moves # third line moves # ###################################################################### attribute_map general goal_elements none # Several patterns here have a or d class, so we need these elements. callback_data XOxo # first line descents (except in corner) ######################################## Pattern EE1 # gf Removed terri(1) value because move might be inside own territory. (3.3.7) ?OOx block on edge ..*x 1 point gote ---- :8,OXe ?ccx ba*x ---- ;marginal_eye(*) && proper_eye(a) && proper_eye(b) && !xplay_attack(*,c) Pattern EE1a ?OOx block on edge ..*x 2 point gote ---- :8,OXe,terri(2) ?ccx ba*x ---- ; marginal_eye(*) && proper_eye(a) && proper_eye(b) ; && xplay_attack(*,a,c) && !xplay_attack(*,c) Pattern EE2 OXXx xOOX Start by backfilling *..x At least 1 point gote ---- :8,OX,terri(1) OXXx xbbX *.ax ---- ;xplay_attack(a,b) Pattern EE2b OXXx *OOX Start by backfilling ...x At least 1 point gote ---- :8,OX,terri(1) OXXx *ddX cbax ---- ;marginal_eye(a) && proper_eye(b) && proper_eye(c) && xplay_attack(a,d) Pattern EE2c OXX? Start by backfilling if block is unsafe *OO? At least 1 point gote ...? ---- :8,OX,terri(1) OXX? *OOb ..ac ---- ;x_alive_somewhere(b,c) && oplay_attack(a,a) && !oplay_attack(*,?,a,a) Pattern EE4 XOO. .X*. one point sente ---- :8,OXe,terri(1),followup(1) XOO. .X*. ---- ;marginal_eye(*) Pattern EE5 ??? XO? descend to edge .*? may quite possibly be 0 points gote --- :8,OXe,terri(0.1) eab XOc .*d --- ;o_somewhere(a,b,c,d,e) Pattern EE6 .OOOXX ...*.. ------ :8,OXe,terri(2) .OOOXX ..a*bc ------ ; proper_eye(a) && !oplay_attack(*,*) && oplay_attack(b,*,a,c,*,a) ; && xplay_attack(*,a,b,a) Pattern EE7 # tm New Pattern (3.1.19) # s classification, in case of ko (see trevorc:180) # pp Revised (3.3.18) the pattern to match on edge only. ?.X? O.*. ---- :8,sOXe,terri(0.75) ?.X? O.*a ---- ;proper_eye(a) && safe_omove(*) # first line hanes (except in corner) ##################################### Pattern EE101 OOXX endgame move ..*. 2 points gote ---- :8,OXe,terri(2) OOXX b.*a ---- ;proper_eye(a) && proper_eye(b) Pattern EE102 ???X? sente hane OXX.. 1 or 2 points sente .*..? ----- :8,OXe,terri(2),followup(7) ???X? OAA.. .*..? ----- ;lib(A)==3 Pattern EE103 ?OX? one point gote (and a little extra) ?.*. ---- :8,OXe ?OX? ?.*a ---- ;proper_eye(a) Pattern EE104 ?OX? two points gote ..*. ---- :8,OXe ?OX? b.*a ---- ;proper_eye(a) && proper_eye(b) # # If both EE105 and EE106 match, it's a double sente situation. # (followup and reverse followup probably bigger in reality.) # Pattern EE105 ?OX.. three points sente ..*.. ----- :8,OXe ?OE.. bc*a. ----- ;proper_eye(a) && proper_eye(b) && oplay_attack_either(*,a,c,a,E) Pattern EE106 ..OX? three points reverse sente ...*. ----- :8,OXe,reverse_followup(6) ..dX? .bc*a ----- ;proper_eye(a) && proper_eye(b) && xplay_attack_either(c,b,*,b,d) ;&& !xplay_attack(c,b,*,*) Pattern EE107 #tm New Pattern (3.1.16) # see trevor:163 # FIXME: move this pattern to appropriate place +-- very special corner position |.* |.O |OX :8,Oa +-- |.* |.O |OB ; defend(B) && !oplay_defend(*,B) && safe_xmove(*) Pattern EE108 # pp New pattern (see endgame:890) (3.5.1) ?OX? very small endgame move O.*. ---- :8,OXes,value(0.5) ?OX? Oa*b ---- ; proper_eye(b) && oplay_attack(*,b,a,a) && oplay_defend(a,*,a) Pattern EE109 # gf New pattern. (3.5.3) # Generic hane, let the territorial evaluation determine its value. OX hane on first line .* -- :8,OXe Pattern EE110 # gf New pattern. (3.5.3) # Followup value obviously imprecise, usually an underestimation. OX.O followup to save dead stones .*.. ---- :8,Xe,followup(5) aX.b d*c. ---- ;alive(a) && dead(b) && oplay_defend(*,c,d,b) # first line pushes (except in corner) ###################################### Pattern EE201 ?XX push on first line. O*. one point gote (and a little extra) --- :8,OXe,terri(1) ?XX O*a --- ;marginal_eye(*) && proper_eye(a) && max_eye_value(a) > 0 Pattern EE201b # nando New pattern. (3.7.11) ?XX push deeper on first line. O.* --- :8,sOXe ?XX Oa* --- ;marginal_eye(a) && proper_eye(*) && max_eye_value(*) > 0 ;&& (safe_omove(*) || oplay_attack(*,a,a)) >if (!safe_omove(*)) known_safe_move(*) Pattern EE202 OXX. endgame move .O*. 1 point reverse sente ---- :8,OXe,terri(1),reverse_followup(1) OXX. .O*a ---- ;marginal_eye(*) && marginal_eye(a) Pattern EE203 OXX. 1 point double sente .O*. ---- :8,OXe,terri(1),reverse_followup(2) ODDc bO*a ---- ;marginal_eye(*) && marginal_eye(a) && marginal_eye(c) ;&& (oplay_attack(*,a,b,a) || oplay_attack(*,a,b,D)) Pattern EE204 ?X. endgame move O*. 2 points gote --- :8,OXe,terri(2) ?Cb O*a --- ;marginal_eye(*) && proper_eye(a) ;&& (!oplay_defend(*,a,b,a) || !oplay_defend(*,a,b,C)) Pattern EE205 X.X at least 2 points, possibly more (followup) O*. --- :8,OXe,terri(2) XaX O*b --- ;marginal_eye(*) && proper_eye(a) && proper_eye(b) Pattern EE206 # gf New pattern. (3.1.20) X. O* -- :8,OXe # first line blocks (except in corner) ###################################### Pattern EE301 O. endgame move X* 1 points gote -- :8,OXe,terri(1) Oa X* -- ;marginal_eye(*) && proper_eye(a) && oplay_attack(*,a,a) Pattern EE302 # gf Revised constraint. (3.3.10) O. endgame move X* 2 points reverse sente -- :8,OXe,terri(2),reverse_followup(5) ba X* -- ;eye(*) && proper_eye(a) && oplay_defend_both(*,a,*,b) Pattern EE303 # al1 Revised symmetry. (3.7.11) OXO .*. --- :|,OXe,terri(2) # first line corner moves ######################### Pattern EE401 # gf Added n classification. (3.5.2) |.O? big endgame move |.OX at least 2 points gote |.*x +--- :8,nOXed,terri(2) Pattern EE402 # May look risky, but if it is, the safe_move test will reject it. |xxXO big endgame move |.XO. at least 3 points reverse sente |.*.. +---- :8,OXed,terri(3),reverse_followup(5) Pattern EE403 |OX endgame move |.* one point gote +-- :8,OXe,terri(1) |OX |.* +-- ;marginal_eye(*) Pattern EE404 # gf Revised constraint. (3.3.10) |OX? endgame move |.*. half point gote as sacrifice +--- :8,sOXe,terri(0.5) |OX? |.*a +--- ;marginal_eye(*) && proper_eye(a) Pattern EE404b # gf New pattern. See nngs:1480. (3.3.7) |.OX |OX. endgame move |.*. at least 1.5 points gote as sacrifice +--- :8,sOXe,value(1.5) |.OX |OX. |.*. +--- ;marginal_eye(*) Pattern EE405 # gf Made main diagram consistent with constraint diagram. (3.1.18) # gf Revised constraint. (3.3.10) |XO? endgame move |.*. one point gote +--- :8,OXe,terri(1) |XO? |.*a +--- ;marginal_eye(*) && proper_eye(a) Pattern EE406 |XO endgame move |.* possibly only filling dame +-- :8,OXe,terri(0.1) Pattern EE407 # gf Increased value. (3.3.14) # Give it a little more than 0.5 points in order to fill before capturing. |OX? fill ko at end of game |*OX 1/2 point gote +--- :8,X,terri(0.6) |aX? |*OX +--- ;!dead(a) Pattern EE408 # gf Increased value. (3.3.14) # Give it a little more than 0.5 points in order to fill before capturing. |XO? fill ko at end of game |O*O 1/2 point gote +--- :8,X,terri(0.6) |Xa? |O*O +--- ;!dead(a) Pattern EE409 |OX? take ko at end of game |X*X 1/2 point +--- :8,sO,terri(0.5) |OA? |X*X +--- ;!dead(A) Pattern EE410 |XO? take ko at end of game |*XO 1/2 point +--- :8,sO,terri(0.5) |AO? |*XO +--- ;!dead(A) Pattern EE411 |*O endgame ko |XO zero points sente or better |.X +-- :8,OX,terri(0.1),followup(0.5) Pattern EE412 |.X endgame ko |OX zero points reverse sente or better |*O +-- :8,OX,terri(0.1),reverse_followup(0.5) Pattern EE413 |.X? endgame ko |OXO 1/2 point |.O* +--- :8,OX,terri(0.5) Pattern EE414 |xX? three points gote |*OX plus possibly more for the eye in the corner |.OX |..O +--- :8,OXed,terri(3) Pattern EE415 # pp New pattern (3.3.18) # Currently necessary (see trevorb:170, where N11 is otherwise rejected # as "strategically or tactically unsafe) /ab |*O? |OXX |.OX +--- :8,X,terri(0.1),reverse_followup(2) |*A? |OXX |.OX +--- ;alive(A) Pattern EE416 # pp New pattern (3.3.18) |.OO? |..*X +---- :8,OXe |.aa? |..*X +---- ;xplay_attack(*,a) && !oplay_attack(*,a) >prevent_attack_threat(a) # miscellaneous first line moves ################################ Pattern EE501 # gf Increased value. (3.3.14) # Give it a little more than 0.5 points in order to fill before capturing. ?OX? fill ko at end of game O*OX 1/2 point gote ---- :8,X,terri(0.6) ?aX? O*OX ---- ;!dead(a) Pattern EE502 ?OX? take ko at end of game OX*X 1/2 point ---- :8,sO,terri(0.5) ?OA? OX*X ---- ;!dead(A) Pattern EE504 ... jump on the edge *.O --- :8,Oe ... *.O --- ;!omoyo(*) # second line descents ###################### Pattern EE601 # gf Revised constraint to avoid cyclic redistribution. (3.5.1) ??O? It's better to push down before blocking .X*X .... ---- :8,OX,terri(3),followup(5) ??O? aA*X .... ---- ; oplay_attack(*,a,A) && !oplay_attack(a,*,A) > replace(a,*) # second line hanes ################### # second line extensions ######################## Pattern EE801 # 1: not really gote and larger than 2.5 points # 2: Well, without making the pattern more specific we should be # prepared that the x really is in place and that there is an X two # steps below * too. Then it is usually gote and about this size. # We certainly can and should add patterns to deal with the case # that there is more space below, when it very likely is sente, # unless such patterns already exist in the EB class. # gf Actually this pattern doesn't even guarantee a single point, see # gifu03:204. Removed fixed territorial value. (3.5.3) |.O? endgame move |.*X 2.5 points gote |..x :8,OXe Pattern EE802 |.X extend on second line |.* 2 points gote |.O :8,OXe,terri(2) |bX |.* |aO ;proper_eye(a) && proper_eye(b) Pattern EE803 ?xx? X.*O extend on second line .... about 2 points gote ---- :8,OXe,terri(2) ?xx? X.*O b..a ---- ;proper_eye(a) && proper_eye(b) Pattern EE804 # gf Revised value. (3.3.15) O*X endgame move ..X not guaranteed to be more than 0 points gote --- :8,OXe,terri(0.1) O*X a.X --- ;marginal_eye(a) Pattern EE805 XX. extend on second line OO* not guaranteed to yield a single point ... --- :8,OXe,terri(0.1) Pattern EE806 # evand new (3.7.1) # see kgs:70 |.O?? |.OX. |.*X. |.... +---- :8,OXe,terri(3) |bO?? |.OX. |.*Xa |.... +---- ;xmoyo(a) && omoyo(b) # second line extensions ######################## Pattern EE851 Ox. clamp on second line OX* almost too big to be classified as endgame move ... --- :8,OXe,terri(8) Ox. OX* .a. --- ;oplay_attack(*,a,a) # miscellaneous second line moves ################################# Pattern EE901 # al1 Revised symmetry. (3.7.11) ?.? endgame move X*X one point reverse sente O.O --- :|,OXe,terri(1),reverse_followup(2) ?a? X*X O.O --- ;marginal_eye(*) && proper_eye(a) Pattern EE902 # al1 Revised symmetry. (3.7.11) # Why does this have followup value? -ab ?.? endgame move O*O one point sente X.X --- :|,OXe,terri(1),followup(2) ?a? O*O X.X --- ;marginal_eye(*) && proper_eye(a) Pattern EE903 # gf New pattern. (3.1.23) ??XO? ?OO*. X.... ----- :8,OXe ??XO? ?OO*. Xa... ----- ;!safe_omove(a) # third line moves ################## Pattern EE1002 ??X? endgame move ?X*O at least one point reverse sente OO.. .... ---- :8,OXe,terri(1),reverse_followup(4) ??X? ?X*O aa.. .... ---- ;lib(a)>3 Pattern EE1003 # gf New pattern. (3.1.12) O*X? at least one point and usually sente ?X.o ?X.o ---- :8,OXe,terri(1) O*X? ?Abo ?A.o ---- ;lib(A)==3 && proper_eye(b) # reverse followups ###################################### Pattern EF101 # This is the least value for the followup. A more precise value can # only be had by dynamic reading. O.. X*. --- :8,OX,reverse_followup(4) Oa. X*. --- ;marginal_eye(*) && proper_eye(a) && oplay_attack(*,a,a) Pattern EF102 # tm New Pattern (3.1.16) # tm modified (3.1.17) # tm modified (3.1.20) # gf Removed terri(1) value. (3.1.29) # FIXME: see endgame:218, trevord:1030, trevorc:430 # FIXME: This is no edge pattern, move it. O. *O :8,O,reverse_followup(3) ac *b ;proper_eye(c) && oterri(c) && !oplay_attack(*,*) ;&& !xplay_attack(*,*) && xplay_attack_either(*,a,b) ###################################################################### # # Center endgame patterns # # Moves in the center with small weights, intended to come into play # in the endgame. # ###################################################################### Pattern CE1 # gf Increased value. (3.3.14) # Give it a little more than 0.5 points in order to fill before capturing. ?OX? fill ko at end of game O*OX 1/2 point gote ?OX? :-,X,terri(0.6) ?OX? a*OX ?OX? ;!dead(a) Pattern CE2 ?OX? take ko at end of game OX*X 1/2 point ?OX? :-,sO,terri(0.5) ?OX? OX*A ?OX? ;!dead(A) Pattern CE3 # al1 Revised symmetry. (3.7.11) ... push against opponent O*X about 1 point gote ... :-,OXe,terri(1) Pattern CE4a # gf Split and revised pattern. (3.3.10) # gf Revised constraint. (3.3.16) ??X endgame move O*. about 1 point reverse sente ?.O :8,OXe,terri(1),reverse_followup(1) ??X O*. ?aO ;marginal_eye(*) && proper_eye(a) && (!halfeye(a) || false_eye_territory(a)) Pattern CE4b # gf Split and revised pattern. (3.3.10) ??X endgame move O*. about 1 point reverse sente x.O :8,OXe,terri(1),reverse_followup(2) ??X O*. baO ;marginal_eye(*) && proper_eye(a) && proper_eye(b) Pattern CE6 X? push in *O 0 points gote :8,OXe,terri(0.1) Pattern CE9 # gf Revised constraint. (3.3.15) .X push in *O 1 points gote :8,nOXe,terri(1) aX *O ;marginal_eye(*) && max_eye_value(*)>0 ;&& !safe_omove(a) && !obvious_false_xeye(a) Pattern CE12 X*O worth a point in chinese rules :-,OXe,terri(0.1) Pattern CE13 # al1 Revised symmetry. (3.7.11) X.X sometimes double sente endgame move .*. one point gote O.O :|,OXe,terri(1) XbX .*. OaO ;proper_eye(a) || proper_eye(b) Pattern CE14 # al1 Revised symmetry. (3.7.11) X.X sometimes double sente endgame move .*. two points gote O.O :|,OXe,terri(2) XbX .*. OaO ;proper_eye(a) && proper_eye(b) Pattern CE15 .X? sente endgame move .*. one point sente X.O :8,OXe,terri(1) .X? a*. X.O ;marginal_eye(*) && proper_eye(a) Pattern CE15b XX? gote endgame move .*. one point gote X.O :8,OXe,terri(1) XX? a*. X.O ;marginal_eye(*) && proper_eye(a) Pattern CE16 .X? sente endgame move .*O one point sente X?? :8,OXe,terri(1) .X? a*O X?? ;marginal_eye(*) && proper_eye(a) && olib(*)>2 Pattern CE16b # gf Revised constraint. (3.3.15) .O? sente endgame move .*X one point reverse sente O?? :8,OXe,terri(1),reverse_followup(2) .O? a*X O?? ;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 && xlib(*)>2 Pattern CE17 # gf Revised constraint. (3.3.20) XO endgame move .* one point sente xX :8,OXe,terri(1) XO a* xX ;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 && olib(*)>2 Pattern CE18 # tm removed reverse_followup value # see trevorb:700 # gf Revised constraint. (3.3.15) OX endgame move .* one point gote. oO :8,OXe,terri(1) OX a* oO ;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 Pattern CE19 # gf Revised constraint. (3.3.15) ?.? endgame move X*X one point gote O.O :|,OXe,terri(1) ?b? X*X OaO ;marginal_eye(*) && proper_eye(b) && max_eye_value(b)>0 && oplay_attack(*,a,a) Pattern CE20a # gf Split and revised pattern. (3.3.10) # gf Revised constraint. (3.3.15) ?.? Smallish endgame O*O one point, possibly reverse sente ?X? :|,nOXe,terri(1),reverse_followup(1) ?a? O*O ?X? ;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 Pattern CE20b # gf Split and revised pattern. (3.3.10) ?.x Smallish endgame O*O one point reverse sente ?X? :8,nOXe,terri(1),reverse_followup(2) ?ab O*O ?X? ;marginal_eye(*) && proper_eye(a) && proper_eye(b) Pattern CE20c # gf Split and revised pattern. (3.3.10) x.x Smallish endgame O*O one point reverse sente ?X? :|,nOXe,terri(1),reverse_followup(3) cab O*O ?X? ;marginal_eye(*) && proper_eye(a) && proper_eye(b) && proper_eye(c) Pattern CE21 # gf Constraint revised. (3.1.8) *OX Smallish endgame O.O one point reverse sente :8,nOXe,terri(1),reverse_followup(2) *bX OaO ;proper_eye(a) && lib(b)==2 && !oterri(*) Pattern CE22 # gf Territory not guaranteed by pattern. Removed terri(1). (3.7.2) # al1 Revised symmetry. (3.7.11) ?X? .*. one point gote O.O ooo :|,OXe Pattern CE23 O?? *Xx endgame move ..X two points gote xXO :8,OXe,terri(2) O?? *Xx baX xXO ;proper_eye(a) && proper_eye(b) Pattern CE24 #tm revised terri from 5 to 4 (3.1.20) (see trevord:180 O6) ??OX rescue one stone making territory X*.O ?O.. :8,X,terri(4) ??OX X*.A ?Ob. ; omoyo(b) && lib(A)==2 # Pattern CE25 # # tm New pattern (3.1.15) (see trevora:320) # # gf Bad pattern, see olympiad2004:121. # # gf Also no longer needed in trevora:320, removed. (3.7.1) # # O*X # XX. # # :8,OX,terri(1) # # O*X # Xa. # # ;lib(a)==2 Pattern CE26 # gf New pattern. (3.1.18) (see trevorb:870) O*O X.X :|,OXe Pattern CE27 # tm New Pattern (3.1.18) # al1 Revised symmetry. (3.7.11) ... moyo breakin worth a lot. X*X ?O? :|,-,terri(3) .b. A*C ?O? ; xmoyo(b) && oplay_break_through(*,b,A,b,C) == WIN Pattern CE28 # tm New Pattern (3.1.20) # gf Revised constraint. (3.3.10) OX .* O. :8,nOXe,terri(1) OX A* OB ;proper_eye(A) && oplay_attack(*,B,B) Pattern CE28b # gf New pattern. (3.3.10) OX .* O. :8,nOXe Pattern CE29 # tm New Pattern (3.1.20) (see trevord:950) # FIXME: this pattern better in patterns.db? # gf Added constraint. (3.3.13) (see gunnar:18) # nando Added s classification and action. (3.7.11) X*X Wedge O.X :8,sOXe B*X OaX ;oplay_attack_either(*,a,a,B) >if (!safe_omove(*)) known_safe_move(*) Pattern CE31 # gf New pattern. (3.3.6) X.X ?*? ?O? :|,OXe,terri(0.1) Pattern CE32 # gf New pattern. (3.3.17) X*X O.o ?O? :8,OXe Pattern CE33 # gf New pattern. (3.5.3) # If both colors are alive this does at best fill a dame. OOO O*O ?X? :8,OX,maxterri(0.1) Pattern CE34 # gf New pattern. (3.7.4) # See gunnar:77. X.* ?O. ??X :/,OXe ###################################################################### # # Center followup patterns # # Patterns in the center which enhance the precision of the CE patterns. # ###################################################################### # Pattern CF3 # # tm New Pattern (3.1.23) (see arend:36) # # FIXME: Perhaps better in patterns.db? # # gf This pattern is redundant because the followup has already been # # found by find_worm_threats(). (This was broken in 3.1.23 and 3.1.24.) # # al1 Remove pattern. (3.7.11) # # O*.O threaten to save # # :-,- # # b*ca # # ; dead(a) && !dead(b) && oplay_disconnect(*,*,a) && !oplay_attack(*,?,c,a) # # > threaten_to_save(a) ###################################################################### # # Eye patterns # # Moves which steal or save a few points by making eye points false. # ###################################################################### Pattern EY1 # gf Revised constraint. (3.3.10) X*O .X? :8,nOXe,terri(1) X*b aX? ;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) && !weak(b) Pattern EY2 # gf Revised constraint. (3.3.10) ?.O X*. .X? :/,nOXe,terri(1) ?.b X*. aX? ;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) && !weak(b) Pattern EY3 # gf Revised constraint. (3.3.10) O*X .O? :8,nOXe,terri(1) O*X aO? ;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) Pattern EY4 # gf Revised constraint. (3.3.10) ?.X O*. .O? :/,nOXe,terri(1) ?.X O*. aO? ;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) Pattern EY5 # gf Revised constraint. (3.3.10) ?.X O.* .O? :8,nOXe,terri(1) ?.X Ob* aO? ;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) ;&& oplay_attack(*,b,b) == WIN # END OF FILE