# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 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 defensive 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. 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. # # B : This move is not connected to the goal dragon and should # therefore not be included in the goal. # # b : This move is maybe not connected to the goal dragon and should # therefore be included only after closer examination. # # a : This move connects all O stones in the pattern to the goal. # ################# # # The patterns in this database are sorted into the following # categories: # # Dxx Expanding moves on the fourth line # D1xx Expanding moves on the third line # D2xx Expanding moves on the second line # D3xx Expanding moves in the center # D4xx Expanding moves in the corner # D5xx Defend one worm of the dragon # D6xx Make eyeshape on the edge # D7xx Make eyeshape in the center # D8xx Make eyeshape in the corner # D9xx Prevent intrusion # D10xx Prevent a cut # D11xx Attack a defect in the perimeter # D12xx Kikashi # D13xx Escape # D14xx Ko # # DCxx Threats to capture # DExx Threats to create eyes # DRxx Reverse sente defending moves attribute_map owl_defense goal_elements Oo callback_data none ######################################################### # # # Expanding moves on the fourth line # # # ######################################################### Pattern D1 ?X.. jump out safely O.*. O... .... .... ---- :8,-,value(75) ?X.. Oa*. Obc. .... .... ---- ; oplay_attack(*,a,b,c,c) Pattern D2 .... hane if attached .*X. ..Oo .... .... ---- :8,-,value(55) Pattern D3 ..X? push to expand ..*O .... .... .... ---- :8,-,value(77) Pattern D4 .X.. extend along the fourth line oO*. .... .... .... ---- :8,-,value(83) ######################################################### # # # Expanding moves on the third line # # # ######################################################### Pattern D100 ?XX? Push along third line ?O*. .... .... ---- :8,-,value(80) Pattern D101 ?Xx?? Slide from fourth to third line OO..? ...*. ..... ..... ----- :8,-,value(80) Pattern D102 ?x.? XX*. Escape! OO.. .... ---- :8,-,value(80) Pattern D103 ?O.? XX*. Escape! OO.. .... ---- :8,-,value(85) Pattern D104 ??*O save one stone XO.. .... ---- :8,-,value(75) ??*O Xa.. .... ---- ;attack(a) && !oplay_attack(*,a) Pattern D104b ?O.O* save two stones while extending XO... ..... ----- :8,-,value(80) ?a.O* Xa... ..... ----- ;attack(a) && !oplay_attack(*,a) Pattern D105 |..O? |..O? try before extension |.OXo |..*? :8,-,value(80) Pattern D106 X.OX? hanging connection on third line .*.OO ..... ..... ----- :8,-,value(80) Pattern D107 ?..x attach .X.O .*.. .... .... ---- :8,B,value(70) Pattern D108 ?..x pull back .X.O XO*. .... .... ---- :8,-,value(80) Pattern D109 # gf Added b classification. (3.3.17) ?..x extend .X.O *O.. .... .... ---- :8,b,value(95) Pattern D110 .....X. one space jump to live .*.O.oX .....OO ....... ------- :8,-,value(75) Pattern D111 .Xx push on third line .*O ... ... --- :8,-,value(79) Pattern D112 o....? two space jump O..*.? o...oo .....o ------ :8,-,value(80) Pattern D113 ?xX.. draw back on the third line X.O*. ..... ..... ----- :8,-,value(80) Pattern D114 ..X push to defend X*O ... ... --- :8,-,value(77) Pattern D115 ?X.? knight's move if safe ?.*. O..o .... ---- :8,-,value(76) ?X.? ?b*. Oa.o .... ---- ; !oplay_defend(*,a,b,a) Pattern D116 O*X climb to third line ..O ... --- :8,-,value(50) O*X ..a ... --- ;lib(a) >= 4 Pattern D117 # tm modified (3.1.22) # gf Fixed diagram inconsistency. (3.1.23) ?*O.X extend on third line o...O ?.... ----- :8,-,value(70) ?*O.X o...a ?.... ----- ;lib(a) >= 4 Pattern D118 # This is usually better than D213 when both match. ?OX? hane to expand O.*. .... .... ---- :8,-,value(81) ?aX? O.*. .... .... ---- ;lib(a)>1 Pattern D119 # This is usually better than D213 when both match. OOX?? hane to expand ..O*. ..... ..... ----- :8,-,value(81) Pattern D120 ??xxx? better to make a base than jump in the center ?O...X o..*.. ...... ...... ------ :8,-,value(82) Pattern D121 ...... jump to maximum eyespace on third line O.*.X. ...... ...... ------ :8,-,value(40) Pattern D122 ??... hane moving out XX*.. OO... ..... ..... ----- :8,-,value(80) ??... XX*.. OOa.. ..... ..... ----- ; oplay_attack(*,a,a) Pattern D123 # tm New Pattern (3.1.17) # tm Modified (3.1.18) # spl modified (3.3.23) ??x?? ??*O? expand eye shape, not in corner oO.O? ?...? ----- :8,-,value(65) Pattern D124 # tm New Pattern (3.1.20) (see trevorb:660) # ab Revised constraint. ?X.. split off weak stones o*OO o.Xx o... ---- :8,-,value(81) ?X.. a*OO obcx o... ---- ;oplay_attack(*,a,b,c) && !attack(c) Pattern D125 # gf New pattern. (3.5.3) ?oo? ...X escape or build further on the edge .X*. .o.O .... ---- :8,-,value(77) ?ab? ...X .X*. .o.O .... ---- ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D126 # gf New pattern. (3.5.5) # See ld_owl:501. |..?Ooo |.XX.oo |...X.X peep in the corner |..O.*. |...... |...... +------ :8,-,value(85) Pattern D127 # ab New pattern (3.7.1) ???..o ?..*Oo oO.X.o o....o ------ :8,-,value(80) ######################################################### # # # Expanding moves on the second line # # # ######################################################### Pattern D200 ?XX?? Slide OO... ...*. ..... ----- :8,-,value(80) Pattern D201 ?XX?? Slide OO..X ...*. ..... ----- :8,-,value(81) Pattern D202 ?X.. Hane on second line OOX. ..*. .... ---- :8,-,value(80) Pattern D203 XX.. Push! O*.. .... ---- :8,-,value(80) Pattern D204 # tm Pattern revised. (3.1.13) # tm Pattern revised. (3.1.14) ??X? push ?O*. ?.x. ---- :8,-,value(60) ??X? AO*. ?.x. ---- ;!x_somewhere(A) || !defend(A) Pattern D205 ?X? hane ?OX O.* ... --- :8,-,value(60) Pattern D206 #tm revised 3.1.14 ?XxX? extend oO*?x ?.... ----- :8,-,value(65) Pattern D207 # tm reduced value (3.1.22) (see nngs:710) # gf Modified. (3.3.6) ?O.X second line kosumi o.*x o... ---- :8,-,value(66) Pattern D208 # db reduced slightly (3.1.8) # tm reduced some more (3.1.22) (see nngs:710) ???o second line keima X..O .*.. .... ---- :8,-,value(65) Pattern D209 ?OO block on edge X*. ... --- :8,n,value(70) Pattern D209a # tm New pattern (3.1.15) ?OO sente block on first line. X.. .*. --- :8,n,value(35) ?OO B.. .*. --- ; oplay_attack(*,B) Pattern D209b #spl modified 3.5.1 ?O.o block on edge X*.o .... ---- :8,n,value(70) Pattern D210 ?OO? expand eyespace X*.O .... ---- :8,-,value(70) Pattern D211 |..O |..O try before hanging connection |.OX |.*x |.x? :8,-,value(71) Pattern D212 # gf FIXME: This is not a second line move. Move the pattern. ??O??? capture one stone to improve eye space ?..OX? .XOX*o ------ :8,-,value(75) Pattern D213 ??X? slide O..x ..*. .... ---- :8,-,value(80) ??X? Oa.x cb*. .... ---- ;oplay_attack_either(*,a,b,c,a,c) Pattern D214 oOx .*X ... --- :8,-,value(50) Pattern D215 ??.. urgent hane ..XX .XOO .*.. .... ---- :8,-,value(80) Pattern D216 .O.? O.*. make eye on edge .... ---- :8,-,value(75) Pattern D217 # tm Pattern revised. (3.1.13) # tm Pattern revised. (3.1.17) # gf FIXME: This constraint is weird. (3.1.23) o... O.*. expand eyespace xx.. ---- :8,-,value(60) o... O.*. Ax.. ---- ; oplay_attack(*,A) Pattern D217a # tm Pattern added (3.1.14) # see owl:170 ?... O.*. .x.. ---- :8,-,value(50) ?... O.*. .A.. ---- ; !oplay_defend(*,A) Pattern D217b O.XO O.*. expand eyespace .... ---- :8,-,value(80) Pattern D217c # tm added (3.1.14) # see trevor:401 # Possible to sacrifice to gain tempo here. # nn Modified (3.3.13) O.X? expand eye-space O.*. .x.o ---- :8,s,value(10) Pattern D218 xx...X. slide (usually inferior to play on third line) ...O.oX .*...OO ....... ------- :8,-,value(70) Pattern D220 # tm modified (3.1.17) ?oo.x jump to enlarge eyespace oO.*x ....x ----- :8,-,value(40) abo.x cO.*x ....x ----- ; o_somewhere(a,b,c) Pattern D221 oo?x jump along second line O.*. .... ---- :8,-,value(35) Pattern D221b # gf New pattern. (3.5.3) oo?x jump along second line O.*. O... ---- :8,-,value(45) Pattern D222 # tm Pattern revised. (3.1.13) ???? come straight out xX.? OO*. ..x. ---- :8,-,value(75) Pattern D223 O.XX? push ..O*o ....o ----- :8,-,value(70) ObXX? .ac*o ....o ----- ;xplay_attack(a,b,c) && !oplay_attack(*,a,b,c) Pattern D224 ??xX extend oO*. o... ---- :8,-,value(30) Pattern D225 ??X?? draw back .O.OO XO*.. .X... ----- :8,-,value(45) Pattern D226 # gf New pattern. (3.1.12) ?oO threaten to escape and cut X.o O*X ... --- :8,E,value(45) ?ob X.o a*X ... --- ;owl_goal_dragon(a) && owl_escape_value(b)>0 Pattern D227 # gf New pattern. (3.1.13) X.O. jump and threaten to cut, connect, or force OX.. O.*. o... ---- :8,-,value(65) X.O. aX.. a.*. o... ---- ;owl_goal_dragon(a) && !oplay_attack(*,a) Pattern D228 # gf New pattern. (3.1.13) X.O. followup OXX* O.O. o... ---- :8,-,value(65) X.O. aXX* a.O. o... ---- ;owl_goal_dragon(a) && !oplay_attack(*,a) Pattern D229 # gf New pattern. (3.1.14) XOoo capture or threaten to capture, improving eyespace OX*o .... ---- :8,-,value(76) XOoo OX*o ...a ---- ;owl_eyespace(a) Pattern D230 # tm New Pattern (3.1.16) # gf Not down to edge. (3.3.20) # gf Not if it can be cut off. Constraint added. (3.5.3) ?OO...? expand along edge. o....*? ?.....? ------- :8,-,value(80) ?Ob...? o...a*? ?.....? ------- ;oplay_connect(*,a,*,b) Pattern D231 # tm New Pattern (3.1.20) (see nngs:1320 owl_does_attack L15 M17) ---- attach under .ooo *..o X.Oo ..?? ???? :8,sbE,value(70) ---- .ooo *a.o XbOo c.?? ed?? ; safe_omove(*) || ; ((owl_escape_value(c) > 0 || owl_escape_value(d) >0 || owl_escape_value(e)>0) ; && oplay_attack(*,a,b,a)) Pattern D232 # gf New pattern. (3.1.23) # See nngs:1630. ??O?? defend eye against edge descent tesuji XO.O* ..O.X ----- :8,-,value(45) ??O?? XOab* cdOeF ----- ;lib(F)>=3 && owl_topological_eye(a,b)<=2 && !xplay_attack(c,d,e,c) Pattern D233 # evand New pattern. (3.3.18) # see owl:257 oooO? block oo.*X ooo.. ----- :8,n,value(35) Pattern D234 # gf New pattern. (3.5.3). # See e.g. nngs:1090. ...x? ..*X? ...Oo ----- :8,-,value(35) ...x? ba*C? ...Oo ----- ;oplay_disconnect(*,a,a,C) && oplay_disconnect(*,b,b,C) ######################################################### # # # Expanding moves in the center # # # ######################################################### Pattern D300 # gf Revised pattern. (3.1.15) X..?? push into the open O*..? x..?? :8,E,value(80) X..?? O*.a? x..?? ;owl_escape_value(a) > 1 Pattern D301 X..? O.*. O..? :8,E,value(80) X..? O.*a O..? ;owl_escape_value(a) > 1 Pattern D302 # FIXME: This pattern looks way too general (see owl:23) XX.? push along O*.. ?..? :8,-,value(50) Pattern D303 # The b classification inhibits the addition of * to the dragon. XX.? hane to try to escape OOX. ?.*. ??.? :8,b,value(70) Pattern D304 OO? block X.? *.. :8,-,value(75) OO? a.? *.. ; does_attack(*,a) Pattern D305 ??.? attach ..X. O.*. .... :8,-,value(75) Pattern D306 ???o keima to expand shape X..O .*.. .... :8,-,value(75) ???o XdaO .*bc .... ;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,b,a,d,b,d) Pattern D307 ??.?? block .*X.. O.OX? :8,-,value(75) ??b?? .*Xc. O.OD? ; oplay_attack(*,?,c,b,D) Pattern D308 # tm added b category (3.1.17) # tm modified & increased value (3.1.20) o.O chimera .*X :8,nsb,value(77) ocO b*X ; oplay_attack(*,b,b) && oplay_attack(*,c,c) && safe_xmove(*) Pattern D309 # tm modified (3.1.16) # tm reduced value (3.1.20) (see dniwog:5) # FIXME: Adding B attribute solve niki:14 - not sure why -tm. # adding it breaks a lot, however (i.e. trevorb:590) ?O? block off area X*. ooo :8,-,value(65) ?O? b*a ooo ;oplay_attack(*,b) && oplay_attack(*,a,a) Pattern D309a # tm modified (3.1.16) # tm modified (3.1.22) # tm modified (3.1.23) (added b attribute) ?O? block off area X*. ooo :8,b,value(60) ?O? X*a ooo ; oplay_attack(*,a,a) ; && !obvious_false_oeye(a) Pattern D309b ?O? block off area X.. .*. ??? :8,-,value(61) ?O? Xba .*. ??? ;oplay_attack(*,a,a) && oplay_attack(*,b,b) Pattern D310a ?o? *.O hanging connection to make eye .OX oo? :8,-,value(55) ?o? *ba .OX oo? ; lib(a)>1 && safe_xmove(b) && oplay_attack(*,b,b) Pattern D310b # More worth if safe from atari. # tm Reduced value (3.1.22) (see owl:153) ?o? *.O hanging connection to make eye .OX oo? :8,-,value(65) ?o? *ba .cX oo? ; lib(a)>2 && lib(c)>2 && safe_xmove(b) && oplay_attack(*,b,b) Pattern D311 # gf Added n classification. (3.5.4) OX? try to seal off some space .*O .?? :8,n,value(60) OX? a*O .?? ; oplay_attack(*,a,a) Pattern D313 ..X move out and separate .*O ... ?XX :8,-,value(75) Pattern D314 ??.XX push to defend! .XXOO .*O.. ..... :8,-,value(80) Pattern D315 X*o hane starting an eye O.o OOo :8,-,value(60) X*o Oao OOo ; oplay_attack(*,a,a) Pattern D316 ?X? connect to protect O*O ... :8,-,value(50) ?X? O*O .a. ; oplay_attack(*,a,a) Pattern D317 OO? urgent block X*? ... :8,-,value(95) bb? A*? ... ;does_attack(*,A) && does_defend(*,b) Pattern D318 # nn Modified (3.3.12) OOXx descend - don't capture OXOX o.*. :8,-,value(82) OOXx OAOX o.*. ; does_attack(*,A) Pattern D319 # db added (3.1.8) ...X atari! .*XO X.Oo :8,-,value(80) ...X .*XA X.Oo ; lib(A)>1 Pattern D320 # db added (3.1.8) .*.? jump out ...? XO.o o.O? :8,-,value(50) ######################################################### # # # Expanding moves in the corner # # # ######################################################### Pattern D400 --+ sagari in corner ..| O*| Xx| :8,-,value(70) --+ ..| O*| Ax| ;!attack(A) Pattern D401 --+ capture in corner ..| O.| X*| :8,-,value(80) --+ ..| O.| A*| ;lib(A)==1 Pattern D402 ..O..| enclose corner to live *....| .....| .....| -----+ :8,-,value(60) Pattern D403 |.O?? isolate corner stone |..Ox |.X*. |.... +---- :8,-,value(70) Pattern D404 ?.O.| proceed into corner for almost certain life X.o.| .*..| ....| ....| ----+ :8,-,value(90) Pattern D405 ?Oo.| proceed into corner for almost certain life X.o.| .*..| ....| ....| ----+ :8,-,value(90) ?Oc.| Xab.| .*d.| ....| ....| ----+ ; o_somewhere(b,c)||!oplay_defend(*,a,b,c,d,c) Pattern D406 |ooOO? realize eyespace in corner |....? |...*x |....? +----- :8,-,value(70) Pattern D407 |..X?? easy life in corner |.*OX? |...OO |..... +----- :8,-,value(80) Pattern D408 |ooO? slightly expand corner eyespace |.O*X |.... +---- :8,-,value(30) Pattern D409 #evand new pattern (3.3.13) oO.X.| move to corner to make life ..*..| .....| .....| -----+ :8,-,value(45) ######################################################### # # # Defend one worm of the dragon # # # ######################################################### Pattern D500 xXOO descend to defend XO.. .*.. ---- :8,-,value(60) Pattern D502 ?X.O sagari XO.O .*.. ---- :8,-,value(75) Pattern D503 # The first constraint is necessary because the lower O stone # may be short on liberties. It might work to replace it with # a liberty constraint. # tm modified (3.1.22) |..O |*.O hanging connection to protect eyespace |?OX :8,-,value(70) |.bO |*aO |?Oc ; oplay_attack(*,a,a) ; && !xplay_attack_either(a,a,c) ; && oplay_attack(*,b,a,b) Pattern D503b # gf New pattern. (3.7.1) # See ld_owl:319. Cf. D1004b. |o.O try to get second eye through ko |.*O |..O |?OX :8,s,value(45) |oaO |.*O |c.O |bOX ;owl_proper_eye(a) ;&& oplay_attack(*,b,c,b) Pattern D504 # Don't apply this pattern on the edge. See patterns D505 and D506 # gf Revised constraint. (3.3.18) ?*.O hanging connection to defend and make eye ?.OX :8,-,value(85) ?*ba ?.cX ; lib(a)>1 && safe_xmove(b) && !obvious_false_oeye(b) ; && oplay_attack(*,b,b) && does_attack(b,c) Pattern D505 #tm modified (3.1.22) # gf Changed does_attack to xplay_defend for better ko handling. (3.3.13) OOX hanging connection to defend and make eye ..O .*. --- :8,-,value(85) OaX dbc .*. --- ; lib(a)>1 && safe_xmove(b) && oplay_attack(*,d,b,d) ; && xplay_defend(b,c) != WIN Pattern D506 # Smaller value in this case since it leaves substantial aji. In # particular we want to try the solid connection (pattern D44, value # 80) before this pattern. .OX hanging connection to defend and make eye ..O .*. --- :8,-,value(75) .aX dbc .*. --- ; lib(a)>1 && safe_xmove(b) && oplay_attack(*,b,b) && does_attack(b,c) ; && oplay_attack(*,d,d) Pattern D507 ?XX.o defend two stones XOO*. ?.... ----- :8,-,value(80) ?XX.o Xaa*. ?.... ----- ;does_defend(*,a) Pattern D508 ?XX*o XOO.O defend ?.... ----- :8,-,value(90) ?XX*o Xaa.O ?.... ----- ;does_defend(*,a) Pattern D509 # FIXME: (see trevor:360) # nn Fixed constraint (3.3.12) # does_defend() doesn't return WIN XO? capture to defend *XO --- :8,-,value(90) Xa? *XO --- ;does_defend(*,a) Pattern D510 # gf Devalued. (3.1.12) ?OX capture to defend *XO ?O? :8,-,value(75) ?aX *XO ?O? ;does_defend(*,a) Pattern D511 O.o rescue one stone OX. XO* xXO :8,-,value(75) A.o AX. XO* xXO ; !oplay_attack(*,A) Pattern D512 ..*.. atari before defending X.XO. .XO.. ..... ..... ----- :8,-,value(85) Pattern D513 ??... connect XXO.o XO*.o ....o ....o ----- :8,-,value(85) Pattern D514 # gf New pattern. (3.1.14) ?*.o avoid double atari XO.. ?XOO :8,-,value(76) ?*.o AO.. ?Bcc ;lib(A)>1 && lib(B)>1 && lib(c)==2 Pattern D515 # gf New pattern. (3.3.20) ?OOX? hanging connection to defend and make eye O..OX .*... ----- :8,-,value(61) ?OOX? O.aOX .*.b. ----- ;!oplay_defend(*,a,b,a) ######################################################### # # # Make eyeshape on the edge # # # ######################################################### # # # Moves that do not necessarily expand the eyeshape # # but try to make what exists yield two eyes # # # ######################################################### Pattern D600 # tm modified (3.1.20) (see strategy4:203) oOX? eye with reverse sente OxOX o*.. ---- :8,-,value(80) Pattern D600a # tm New Pattern (3.1.15) # tm modified (3.1.20) oOX?? eye with reverse sente, avoid ko OxOX? o.*.X ----- :8,-,value(81) Pattern D602 ?OO make eye O.O .*. --- :8,-,value(35) ?OO O.O a*b --- ;oplay_attack(*,a,a) && oplay_attack(*,b,b) Pattern D603 XO. make eye O.O .*. --- :8,-,value(35) XOc O.O a*b --- ;oplay_attack(*,a,a) && oplay_attack(*,b,b) && oplay_attack(*,c,c) Pattern D604 # tm Modified (3.1.17) oOOX descend to close eyeshape ?.*x ---- :8,-,value(35) oOOA ?b*x ---- #;owl_eyespace(b) && ;(!obvious_false_oeye(b) || oplay_attack(*,A)) ;&& !xplay_attack(*,A) Pattern D604a #tm New Pattern (3.1.15) (see maeda:70) OOOOOX make eye by threatening large capture XX..*. ------ :8,-,value(35) OOOOOX XCAb*. ------ ; !oplay_defend(*,A,b,C) Pattern D605 oOo? O.*O make an eye and threaten another, while preventing atari XO.. ---- :8,-,value(35) Pattern D606 XOX try to partition eyespace rather than defend O.O .*. --- :8,-,value(65) XaX O.O b*c --- ;lib(a) == 1 && !obvious_false_oeye(b) && !obvious_false_oeye(c) Pattern D607 OXO avoid nakade while probably securing eyes X*X --- :8,-,value(70) OBO A*C --- ;lib(A)==1 && lib(B)==1 && lib(C)==2 Pattern D608 oOOX eat lunch in the right direction .X*. ---- :8,-,value(50) oOOX .A*. ---- ;does_attack(*,A) Pattern D608b # gf New pattern. (3.1.11) ooO.X eat lunch in the right direction .X*.. ----- :8,-,value(50) ooO.X aB*.. ----- ;owl_eyespace(a) && does_attack(*,B) Pattern D609 ?X? preserve eyespace O*O ... --- :8,-,value(80) Pattern D610 ??oOX get out of liberty shortage oOO.O *XXO. ----- :8,-,value(45) ??oOX oOO.O *XXOa ----- ;olib(a)==1 Pattern D611 xXOo forestall snapback threat, securing eye XO.O .O*X ---- :8,-,value(60) xXOo XO.O .O*A ---- ;lib(A) == 2 Pattern D612 ?OOO? comb formation O.X.O O.*.O ----- :8,-,value(50) Pattern D613 ?OOO? comb formation O.*.O O.X.O ----- :8,-,value(50) Pattern D614 oOo initiate ko to attempt for an extra eye *.O XOX --- :8,-,value(30) oOo *.O AOX --- ;oplay_defend(*,A) != WIN Pattern D614b # gf New pattern. (3.1.9) ooOOo attempt to live without ko o...O .*XOX ----- :8,-,value(31) Pattern D615 XOo? secure eye shape against snapback threat O.O? O.*. ---- :8,-,value(50) XOo? A.O? A.*b ---- ;lib(A)==2 && xplay_attack(*,b,b) Pattern D616 oOX?? secure eye with ko O.OX? *O.oX ----- :8,-,value(25) oOX?? O.OX? *O.oX ----- ;xlib(*)>1 Pattern D616a # higher value than D616 for owl.tst number 183 where this defense # gives fewer ko threats ??oOX?? secure one eye with ko ?.O.OX? .X*O.oX ------- :8,-,value(45) ??oOX?? ?.O.OX? .X*O.oX ------- ;xlib(*)>1 Pattern D617 ooOX?? secure eye with ko *O.OX? XXO.oX ------ :8,-,value(25) ooOX?? *O.OX? AAO.oX ------ ;lib(A)<=2 Pattern D618 oOX?? take ko to make eye O.OX? XOX*X ----- :8,-,value(25) oOX?? O.OX? AOX*X ----- ;lib(A)<=2 Pattern D619 oOX capture to defend and maybe make eye OX* .OX --- :8,-,value(39) Pattern D620 XOo? defend eye from collapse O.O* OO.X ---- :8,-,value(72) XOo? a.O* aa.B ---- ;lib(a)==2 && lib(B)==3 Pattern D621 ?O?? threaten two eyes simultaneously O.O? oO*X O..? ---- :8,-,value(45) Pattern D622 *OX? solidify eye and threaten to make more on the edge OXOo .... ---- :8,n,value(45) *OA? OXOo b... ---- ;!attack(A) && oplay_attack(*,b,b) Pattern D623 ?XxOO? make one eye ?XO.*X ..xO.. ------ :8,s,value(95) ?XbOO? ?XO.*X ..aO.. ------ ; !x_somewhere(a) || !x_somewhere(b) Pattern D624 # tm added (3.1.14) # Needed in trevor:403 O.?? Block on first line to make eye. O.OX ox*? ---- :8,-,value(40) Pattern D625 # gf New pattern. (3.1.14) # gf Revised constraint. (3.3.6) O*o prevent eye stealing capture XO. --- :8,n,value(45) a*o XOb --- ;lib(a)==1 && !obvious_false_oeye(b) Pattern D626 # tm New pattern. (3.1.15) # special position - see ld_owl:188 OOX.| *..X| ----+ :8,-,value(45) Pattern D627 # tm New pattern (3.1.15) (see maeda:100) |.OX |O.O |..O |X*. :8,-,value(45) |.OX |O.O |B.O |A*. ; oplay_defend(*,A) && oplay_attack(*,B,A) Pattern D628 # tm New pattern (3.1.15) |OO |.* |O. :8,-,value(80) |OO |.* |OA ; !xplay_attack(*,*) && oplay_attack(*,A,A) Pattern D629 # tm New Pattern (3.1.15) |xX? make an eye on the edge. |.OO |*.O |..O |..O |xX? :8,s,value(65) Pattern D630 # tm New Pattern (3.1.15) # gf This was classified as a 0 (zero) pattern. Removed class. (3.1.18) # tm added b category (3.1.18) .*O Cut off black stone OX? ??? --- :8,b,value(65) .*O OA? ??? --- ; defend(A) && oplay_attack(*,A) Pattern D631 # tm New Pattern (3.1.15) OOOO funny edge capture. .XX. .*O. ---- :8,s,value(75) OOOO .XC. A*OB ---- ; oplay_attack(*,C) ; && oplay_defend(*,A,*) ; && oplay_defend(*,B,*) Pattern D632 # tm New Pattern (3.1.15) OOX? Eat lunch with snapback. OXOX OX.* ---- :8,-,value(65) OOX? OXOA OX.* ---- ; oplay_attack(*,A) Pattern D633 # tm New pattern (3.1.15) OOoO? vital point for eye shape O..OO ..*.. ----- :8,-,value(65) Pattern D634 # tm New pattern (3.1.15) # only really useful if short of liberties. XXO Hane in sente .*. --- :8,-,value(70) BBA .*. --- ; lib(A) < 4 && oplay_attack(*,B) Pattern D635 # tm New Pattern (3.1.15) ?OO? O..O O*.O .... ---- :8,-,value(65) ?OO? O.BO O*FO aecD ---- ; !oplay_defend(*,a,B,c,D,e,F,a) Pattern D636 # tm New Pattern (3.1.15) OOO.X special eye shape on edge. ...*. ----- :8,-,value(65) OOOaX ..B*. ----- ; oplay_attack(*,a,B,a) Pattern D637 # tm New Pattern (3.1.20) (see strategy4:171) # FIXME: This is due to a defect in the eye space handing. # This point should come through as a vital point. O*. XO? :8,-,value(65) A*d bO? ; ko(b) && owl_topological_eye(*,A) > 2 && !obvious_false_oeye(d) Pattern D638 #evand new pattern 3.3.12 ?o.x attempt to escape or make eyeshape by forcing. oOX* O.O. ---- :8,-,value(45) Pattern D639 # gf New pattern. See owl1:285. (3.3.17) oO*X eat lunch without getting a false eye XX.. ---- :8,-,value(50) oO*X AA.. ---- ;!oplay_defend(*,A) Pattern D640 # gf New pattern. (3.3.20) # Compare D720. ?O*.o try to make eye on edge O.... ----- :8,-,value(56) ?O*bo Oa... ----- ;!obvious_false_oeye(a) && !oplay_attack(b,*,*) Pattern D641 # evand New pattern. (3.3.20) xXOO. ..X*O ..... ----- :8,-,value(75) xXOOa ..X*O ....b ----- ;!obvious_false_oeye(a) || !obvious_false_oeye(b) Pattern D642 # tm New Pattern (3.1.22) (see trevord:910) # gf Revised constraint. (3.5.3) X*O? Extend side eye-space in sente ?..o ---- :8,-,value(80) C*O? ?bao ---- ;!obvious_false_oeye(a) ;&& oplay_attack(*,b,C) && !attack(C) Pattern D643 # spl added 3.3.22 ?oO try to make 2 eyes OO. o.* --- :8,-,value(40) Pattern D643b # gf New pattern. (3.5.5) ??OO try to make 2 eyes OO.. o.*. ---- :8,-,value(40) Pattern D644 # gf New pattern. (3.5.3) # See seki:111. oOOo make one definite eye .*.O X..O ---- :8,-,value(30) Pattern D645 # gf New pattern. (3.7.2) # See semeai:117-119. OOX secure eye and capture lunch .*. --- :8,-,value(96) OOB a*. --- ;owl_proper_eye(a) && does_attack(*,B) && !obvious_false_oeye(B) ######################################################### # # # Make eyeshape in the center # # # ######################################################### # # # Moves that do not necessarily expand the eyeshape # # but try to make what exists yield two eyes # # # ######################################################### Pattern D700 oOo make eyeshape O.O .*. :|,-,value(75) Pattern D701 ?*? half eye sometimes missed by optics O.O ?O. :8,-,value(70) ?*? OaB ?Ob ; (owl_topological_eye(a,B)>=2) && (owl_topological_eye(b,B)==2) Pattern D702 ?X? half eye sometimes missed by optics O*O .O. :8,n,value(70) ?X? O*B aOb ; (owl_topological_eye(a,B)==2) ; && ((owl_topological_eye(b,B)==2) || (owl_topological_eye(b,B)==3)) Pattern D703 ?O* defend half eye (reverse sente) o.O ?o? :8,-,value(70) ?O* oaB ?o? ;owl_topological_eye(a,B)==3 && does_attack(*,B) Pattern D704 oO. half eye sometimes missed O.* ?o? :8,-,value(35) oOb Ba* ?o? ; owl_topological_eye(a,B)==3 ; && safe_xmove(b) && safe_xmove(*) && oplay_attack(*,b,b) Pattern D704b # gf Revised constraint. (3.1.15) # gf Revised constraint. (3.1.23) # pp Revised pattern. (3.3.18) oO.? half eye sometimes missed O.*? ---- :8,-,value(35) cOb? O.*? ---- ; (safe_xmove(b) || safe_xmove(*)) && oplay_attack(*,b,b) ; && (o_somewhere(c) || !safe_xmove(c)) Pattern D705 O.X block to cut off one stone X*o --- :8,-,value(45) O.X a*o --- ; does_attack(*,a) Pattern D706 ?O* save a half eye against an atari o.O ?o? :8,n,value(35) ?B* oba ?o? ; lib(a)==2 && owl_topological_eye(b,B)==3 Pattern D707 XX? make half eye with sente O*O O.O o?o :8,-,value(77) AA? O*O O.O o?o ; oplay_attack(*,A) Pattern D708 ?X?? make half eye with sente O*O? O.O? ?.oo ??Oo :8,-,value(77) ?A?? O*O? O.O? ?.oo ??Oo ; oplay_attack(*,A) Pattern D709 oOOx eat lunch in the right direction .X*. ?OOx :8,-,value(50) oOOx .A*a ?OOx ;olib(a)<=2 && does_attack(*,A) Pattern D710 # gf Revised constraint. (3.1.15) OO* try to make center eye O.. ?OO :8,-,value(30) OO* O.a ?OO ;!owl_big_eyespace(a) && !obvious_false_oeye(a) Pattern D711 O? capture nakade, might give new possibilities X* :8,-,value(25) O? A* ;lib(A)==1 && wormsize(A)>=3 Pattern D712 ?O capture nakade, might give new possibilities X* :8,-,value(25) ?O A* ;lib(A)==1 && wormsize(A)>=3 Pattern D713 .OO? make one eye *..O .OO? :-,-,value(50) .OO? *.aB .OO? ;owl_topological_eye(a,B)==3 Pattern D714 ?O*? make one eye O..O .OO? :8,n,value(35) Pattern D715 O* defend against atari inside eyespace :-,-,value(35) a* ; lib(a)==2 && xlib(*)>1 && owl_big_eyespace(*) Pattern D715b # gf New pattern. (3.1.15) O.* XO. defend against atari inside eyespace on edge --- :8,-,value(36) O.* XOa --- ;xlib(a)>1 && owl_big_eyespace(a) && oplay_attack(*,a,a) Pattern D715c # gf New pattern. (3.3.20) .X* defend against atari inside eyespace O.O XOo :8,-,value(60) .B* a.O XOo ;lib(a)==2 && lib(B)==3 && owl_big_eyespace(*) Pattern D716 # gf New pattern. (3.1.11) ?*OO secure eye O..o ?oOX :8,-,value(60) ?*OO O.ao ?oOX ;owl_eyespace(a) && !owl_big_eyespace(a) Pattern D717 # gf New pattern. (3.1.12) # pp Modified (3.3.16) oOXx eat lunch to make certain eye OXOx O.*x :8,-,value(81) oOXx OAOx O.*x ;!oplay_defend(*,A) Pattern D718 # tm New pattern (3.1.14) # see owl:111 ?X? O*O Expand eye space ... OO. :8,-,value(60) Pattern D720 # tm New pattern (3.1.16) ?O.o O.*o :8,-,value(55) ?O.o Oa*o ;owl_proper_eye(a) Pattern D721 # nn New pattern. (3.3.9) OoO good shape can help o.O O*X :8,-,value(55) Pattern D722 # evand New pattern. (3.3.18) ?O*X #half eye in sente O.O? ?O?? :8,-,value(65) ?O*A ObO? ?O?? ;!obvious_false_oeye(b) && oplay_attack(*,A) Pattern D723 # gf New pattern. (3.7.9) ?..o .*.O protect eyespace ...O oOOX :8,-,value(75) ######################################################### # # # Make eyeshape in the corner # # # ######################################################### # # # Moves that do not necessarily expand the eyeshape # # but try to make what exists yield two eyes # # # ######################################################### Pattern D800 O...| claim the corner to live .*..| ....| ....| ----+ :8,-,value(60) Pattern D801 XO.| defend corner eye .*.| ---+ :8,-,value(35) Pattern D802 Oo.| defend corner eye X*.| ---+ :8,-,value(35) Pattern D803 .O.| defend corner eye X*.| ---+ :8,-,value(35) Pattern D804 # We need this pattern because the optics can't be relied on coming up # with it when it's vital. Taking it out should cause some failures # in the ld_owl test suite. OOO| take corner eye .*.| ---+ :8,-,value(25) OOO| a*.| ---+ ;!obvious_false_oeye(a) Pattern D804a #spl 3.5.1 owl1:320 |OO? defend eye in the corner |.*X +--- :8,-,value(75) |aa? |.*X +--- ;lib(a) > 2 Pattern D804b # This is kind of obscure, but sometimes D804 leads to a shortage of # liberties, e.g. in the position # # .XXXXX..| # .X.OOXXX| # XXOOXOOO| # X.O.X...| # --------+ # # After O playing on the 1-2 point, X fills an outer liberty and O dies. # This pattern avoids that bitter fate. XOOO| take corner eye X*..| ----+ :8,-,value(26) Pattern D805 # tm modified (3.1.15) # s category incorrectly necessary - see ld_owl:53 # see also trevor:590 for underlying problem. # tm modified back (3.1.16) # trevor:590 solved. |oOO? |...O try to secure corner |.*.o +---- :8,-,value(98) Pattern D805a |oOOo |...o try to secure corner |.*.o +---- :8,-,value(45) Pattern D805b |oO.? |.*.O try to secure corner |...o +---- :8,-,value(30) Pattern D806 |.XOO miai eyes |.*.. +---- :8,-,value(60) |bAOO |.*.a +---- ;attack(A) && !oplay_defend(*,a,b,A) Pattern D807 |.XOO miai eyes with ko |.*.. +---- :8,-,value(60) |bAOO |.*.a +---- ;attack(A) && oplay_defend(*,a,b,A) != WIN Pattern D808 |.XOO life (but possibly unnecessarily small) |.*.O +---- :8,-,value(65) |.AOO |.*.O +---- ;does_attack(*,A) Pattern D809 |.XOO might give seki |.*.O +---- :8,-,value(25) |.AOO |.*.O +---- ;oplay_attack(*,A) Pattern D810 |.XOoo miai eyes or better |.*... +----- :8,-,value(55) |aXOoo |.*... +----- ;!oplay_defend(*,a,a) Pattern D811 |ooO? miai eyes or better |o.Oo |.*.. +---- :8,-,value(60) Pattern D811a # tm New Pattern (3.1.15) (see cho1:200) |oO?? miai eyes or better |o.O? |.*.? +---- :8,-,value(60) Pattern D812 |oo? work around eyespace generation weakness |.OX |*XO +--- :8,-,value(70) Pattern D813 |.OX descend in corner |.*? +--- :8,-,value(30) Pattern D814 |.O? proper defense of L+1 shape |.OO |..O |.*O |... +--- :8,-,value(85) Pattern D815 |.OO? proper defense of L+1 shape |..O? |*.OO |.... +---- :8,-,value(85) Pattern D816 |.OX important shape point |X.O |*.O |... +--- :8,s,value(35) Pattern D817 |.OX important shape point |X.O |*.O |... +--- :8,s,value(45) |.aX |X.O |*.O |... +--- ;attack(a) && ! oplay_attack(*,a) Pattern D818 |O?? throw in to improve eye potential |.OO |*X. +--- :8,s,value(75) |O?? |.OO |*A. +--- ;oplay_defend(*,A) != WIN Pattern D818b |O?? throwin risky, try to live without |.OO |.X* +--- :8,s,value(76) |a?? |.OO |.X* +--- ;lib(a) == 2 Pattern D819 |ooO |*.O secure corner eye |.O. +--- :8,-,value(30) Pattern D820 |oo?? play ko to enlarge eyespace |.OX? |OX*X +---- :8,s,value(40) Pattern D820b |oXO? play ko to enlarge eyespace |.OX? |OX*X +---- :8,s,value(40) |oAO? |.OX? |OX*X +---- ;!oplay_defend(*,A) Pattern D821 |oO?? might be passive, but almost certain life |o.O? |.*.O |..oo +---- :8,-,value(60) Pattern D822 |o.O? often best way to capture lunch |O*OO |.X.X +---- :8,-,value(60) |o.O? |O*OO |.X.A +---- ;lib(A)==1 Pattern D823a |OOO? form false eye trying to at least get seki |.*.O |OXXO |.xxO +---- :8,-,value(45) Pattern D823b |OOOO at least seki |*xxO |OXXO |.XxO +---- :8,-,value(46) Pattern D824 |OOO? at least secure seki |.O*O |OXXO |.X.O +---- :8,-,value(45) Pattern D825 |ooO threaten to make eyes in the corner |.OX |*X. |... +--- :8,-,value(85) |ooO |.aX |*B. |... +--- ;!oplay_attack(*,a) && oplay_attack(*,B) Pattern D826 |ooo if nothing else works, make an eye in the corner |*.o |.O? +--- :8,-,value(25) |ooo |*ao |.O? +--- ;oplay_attack(*,a,a) Pattern D827 |.XX??? special corner shape |.OOXX? |.*.OOX |.....o +------ :8,-,value(80) Pattern D828 |ooO? block on 1-2 with atari |o.OX |.*X. +---- :8,-,value(80) Pattern D829 |OO?? special corner shape, setting up ko |..O? |.O.. |..*. +---- :8,-,value(55) |aa?? |..O? |.O.. |..*. +---- ;lib(a)==2 Pattern D830 # gf New pattern. (3.1.1) |OO? special corner shape, setting up ko |..O |XOo |*.O +--- :8,-,value(55) |aa? |..O |XOo |*.O +--- ;lib(a)==2 Pattern D831 |OOo? (at least) ko |.XOo |OXXO |.*xO +---- :8,s,value(35) Pattern D832 # gf New pattern. (3.1.9) |O?? throw in to improve eye potential |.Oo |*XX +--- :8,s,value(35) |O?? |.Oo |*AX +--- ;oplay_defend(*,A) != WIN Pattern D833 # tm added (3.1.13) # useful in manyfaces:8 # gf Revised pattern. (3.1.14) ?O?| vital corner point. O.O| O.x| O.*| o..| ---+ :8,-,value(40) Pattern D834 # gf New pattern. (3.1.14) ?O?| often best defense O.O| O..| O*X| ...| ---+ :8,-,value(40) Pattern D835 # tm New Pattern (3.1.15) (see trevora:400) |.*. Special corner pattern |.XO |... |... +--- :8,-,value(65) Pattern D836 # tm New Pattern (3.1.15) |O. |.* +-- :8,-,value(65) |OA |.* +-- ; oplay_attack(*,A,A) Pattern D837 # tm New Pattern (3.1.16) # see trevor:200 ??oO.| special corner defend at 2-2 ?O...| o.X..| O..*.| .....| -----+ :8,-,value(55) Pattern D838 # tm New Pattern (3.1.16) |.*? |.XO |OXO |.O? +--- :8,-,value(55) |.*? |.AO |OXO |.O? +--- ;oplay_attack(*,A) Pattern D839 # gf New pattern. (3.3.18) |.X?? Capture lunch with threat to make second eye |.OO? |.XO? |*XOo |...o +---- :8,-,value(88) |.X?? |cOO? |.AO? |*AOo |.b.o +---- ;does_attack(*,A) && xplay_attack(b,*,c,A) Pattern D840 # gf New pattern. (3.5.3) # See seki:203. |OO?? |.*O? |XXOO make seki |.O.O +---- :8,-,value(25) Pattern D841 # gf New pattern. (3.5.5) # See ld_owl:503. |..O? |..O? make eyeshape |..OX |.*.. |.... +---- :8,-,value(45) Pattern D842 # gf New pattern. (3.5.5) ???X.| ?XXO.| aim for ko XOO..| ...*.| .....| -----+ :8,-,value(76) Pattern D843 # pp New pattern (3.5.5) |OOOOO workaround lunch problem (the eye is not considered a unit) |..*.O |.X..O +----- :8,-,value(80) Pattern D844 # gf New pattern. (3.7.2) |.OO partition corner eyespace to avoid bent four complications |.*. +--- :8,-,value(40) |bOO |.*a +--- ;owl_proper_eye(a) && owl_proper_eye(b) && owl_big_eyespace(a) Pattern D845 # gf New pattern. (3.7.2) # See ld_owl:321. |OO.o converse to A1305b |*X.O |...O +---- :8,s,value(35) |aa.o |*X.O |...O +---- ;lib(a)==2 Pattern D846 # gf New pattern. (3.7.2) # See ld_owl:321. |OO.o followup |OX.O |.*.O +---- :8,-,value(35) Pattern D847 # gf New pattern. (3.7.2) # See ld_owl:321. |OO.o followup |OX*O |.X.O +---- :8,-,value(35) ######################################################### # # # Prevent intrusion # # # ######################################################### Pattern D900 # gf Added constraint. (3.3.20) ??O? block on edge XO.? xX*o ---- :8,-,value(75) ??O? Xa.? xX*o ---- ;oplay_attack(*,a)!=WIN Pattern D902 XO. stop connection under .*X --- :8,-,value(80) XO. .*A --- ; does_attack(*,A) #FIXME: D903 & D904 often both match, reducing the number # of patterns available for other options. Perhaps reduce # the value of one or the other? Pattern D903 # tm modified (3.1.17) XOX descend to prevent connection .*. --- :8,-,value(85) AOX .*. --- ; does_attack(*,A) Pattern D904 XOX hane to prevent connection *.. --- :8,-,value(84) AOX *.. --- ; does_attack(*,A) Pattern D905 *XOX clamp to prevent connection .... ---- :8,-,value(86) *AOX .... ---- ; does_attack(*,A) Pattern D906 # O dragons may not be amalgamated O..O? block connection ..XOX ...*. ----- :8,-,value(45) Pattern D907 # O dragons may not be amalgamated O..O? threaten one stone .*XOX ..... ----- :8,-,value(45) Pattern D908 ?OO?? threaten one stone O..O? .*XOX ..... ----- :8,-,value(75) ?OO?? O.aO? .*XOX ..... ----- ;oplay_attack(*,a,a) Pattern D909 # gf New pattern. (3.1.14) O* stop capture inside eyespace, not ko :-,-,value(55) a* ;lib(a)==1 && owl_eyespace(*) && olib(*) > 0 Pattern D910a # gf New pattern. (3.1.15) o.O.X block .*X.. ..... ----- :8,-,value(65) Pattern D910b # gf New pattern. (3.1.15) o.O.X block in sente .*X.. ..... ----- :8,-,value(75) obO.X .*Xa. ..... ----- ;xplay_attack(a,*,b,b) Pattern D911 # db added (3.3.4) oo???? stop the monkey jump oooo?? .*...X ..X... ------ :8,-,value(70) ob???? acdo?? .*...X ..X... ------ ; o_somewhere(a,b,c,d) ######################################################### # # # Prevent a cut # # # ######################################################### Pattern D1000 # tm modified (3.1.22) O* prevent opponent's safe cut XO :/,-,value(60) B* aC ; (wormsize(B) > 1 && wormsize(C) > 1) ; && safe_xmove(*) && !xplay_attack(*,a) Pattern D1000a O* save large section :-,-,value(95) A* ; lib(A) == 1 && wormsize(A) > 2 Pattern D1001 X*O connect ?OX :8,n,value(70) X*O ?Oa ;!attack(a) || (wormsize(a)<=2 && does_attack(*,a)) Pattern D1001b ?XOOo XO.X* x.O.. ----- :8,n,value(71) Pattern D1002 # Smaller value if opponent can't cut. # gf Revised constraint. (3.1.11) X*O connect ?OX :8,-,value(35) X*O ?Oa ; !attack(a) && xlib(*) > 1 Pattern D1003 # Notice similarity with D310a, D310b. # tm reduced value (3.1.22) (see trevorc:1440) ???? ?*.O hanging connection to protect eyespace ?.OX ?oo? :8,-,value(55) ???? ?*ab ?.Oc ?oo? ;lib(b)>1 && oplay_attack(*,a,a) && !xplay_attack_either(*,?,a,a,c) Pattern D1004 # Less attractive when making empty triangle. # gf Added n classification. (3.1.14) # tm Modified constraint (3.1.16) # tm Modified constraint (3.1.23) # nn Modified constraint (3.3.11) ???? ?*.O hanging connection to protect eyespace ?OOX :8,n,value(69) ??D? ?*ab ?OOc ;(lib(b)>1 && oplay_attack(*,a,a) && !xplay_attack_either(*,?,a,a,c)) ;&& (!x_somewhere(D) || oplay_attack(*,a,D)) ;&& (!legal_xmove(D) || oplay_attack(*,D,D)) Pattern D1004b # gf New pattern. (3.1.14) ---- oooo sometimes useful to partion eyespace on edge or in corner .*.O oOOX :8,-,value(45) Pattern D1005 .... repair shape in center .*OX .OXx :8,-,value(80) Pattern D1006 # gf Added n classification. (3.1.11) # gf Revised constraint. (3.3.6) OXO connect underneath .*. --- :|,n,value(60) aCb .*. --- ;lib(a)>1 && lib(b)>1 && !attack(C) Pattern D1006b # gf New pattern. (3.1.14) # gf Revised constraint. (3.1.32) OXO connect underneath .*. --- :|,nE,value(80) aXb .*. --- ;(owl_escape_value(a)>0 || owl_escape_value(b)>0) && lib(a)>1 && lib(b)>1 Pattern D1007 # gf Revised constraint. (3.1.14) # gf Revised constraint. (3.3.20) OXO connect underneath in sente .*. --- :|,a,value(90) bAc .*. --- ;lib(A) == 2 && lib(b)>1 && lib(c)>1 && !attack(A) && !oplay_disconnect(*,b,c) ######################################################### # # # Attack a defect in the perimeter # # # ######################################################### Pattern D1100 # gf Split and revised pattern. (3.5.5) # gf Revised constraint. (3.7.9) X* attack the surrounding chain OX :/,b,value(88) A* OB ;vital_chain(A) && vital_chain(B) && !ko(*) && !oplay_defend_both(*,A,B) Pattern D1100b # gf Split and revised pattern. (3.5.5) X* attack the surrounding chain OX :/,b,value(92) A* OB ;vital_chain(A)>1 && vital_chain(B)>1 && !oplay_defend_both(*,A,B) Pattern D1101 ... try to break out X*X ?O? :|,-,value(95) .a. b*c ?O? ; oplay_break_through(*,a,b,a,c) == WIN Pattern D1102 # tm reduced value (3.1.16) # gf Revised constraint. (3.5.3) ... create cutting points X*X ?O? :|,-,value(50) c.d A*B ?O? ;(lib(A)<=3 && olib(c)>2) || (lib(B)<=3 && olib(d)>2) Pattern D1102a # nn New pattern (3.3.11) ..... create cutting points .X*X. ..O.. :|,-,value(45) Pattern D1103 ?OO. OXX* capture or cut ?... .... ---- :8,-,value(85) ?OOa OBB* ?... .... ---- ;oplay_attack_either(*,a,B,a) Pattern D1104 # The two O's may be in different dragons. # Normally this is enough to live. ??oo? kill one stone .O..O ...*X ..... ----- :8,-,value(100) ??oo? .O..O ...*a ..... ----- ; does_attack(*,a) Pattern D1105 ??o? cut off stone on second line ?X*o OOXo .... ---- :8,b,value(35) Pattern D1106 .O? hane, threatening capture ... X*. O.X :8,-,value(77) .O? ... B*. OaX ; oplay_attack(*,a,B) Pattern D1107 XOXx capture to defend *XO. ---- :8,-,value(35) Pattern D1108 X.... surrounding chain collapses OXX*. .OOX. ..... :8,B,value(95) Ba... OCC*. eOODf ..... ; !oplay_defend_both(*,f,a,B,C) && oplay_attack(*,D) && !safe_xmove(e) Pattern D1108b X*... surrounding chain collapses OXXO. .OOXX ..... :8,B,value(95) B*... OCCO. .aaXX ..... ;owl_goal_dragon(a) && !oplay_defend_both(*,B,C) Pattern D1109 ?O? capture left or right X*X .X. :8,-,value(60) ?O? A*B .X. ; oplay_attack(*,A) && oplay_attack(*,B) Pattern D1110 # may overlap with D1333 and D1335 OOX. double atari OX*. X..? :8,b,value(75) OOB. OX*. Xa.? ; oplay_attack(*,a,B) Pattern D1111 ?..?? cutting combination OX*.? ?OX.. ?OX.. ?oOX. :8,Bs,value(90) ?a.?? OX*g? ?hXcf ?OXbd ?oiXe ;owl_goal_dragon(h) && lib(i)>1 && oplay_attack(*,a,b,c,d,e,f,g,e) Pattern D1112 ??O.? cutting combination, followup ?OX.. ?OX*. ?oOX. :8,B,value(90) ??Oe? ?fXad ?OX*b ?ogXc ;owl_goal_dragon(f) && lib(g)>1 && oplay_attack(*,a,b,c,d,e,c) Pattern D1113 ??O.? cutting combination, followup ?OXX. ?OXO* ?oOX. :8,B,value(90) ??Oc? ?dXXb ?OXO* ?oeXa ;owl_goal_dragon(d) && lib(e)>1 && oplay_attack(*,a,b,c,a) Pattern D1114 ??O.? cutting combination, followup ?OXX* ?OXOO ?oOXX :8,B,value(90) ??Oa? ?cXX* ?OXOO ?odBB ;owl_goal_dragon(c) && lib(d)>1 && oplay_attack(*,a,B) Pattern D1115 o.X? continue ladder .*OX .XOO ?.X? :8,-,value(80) Pattern D1116 XXOo capture (possibly with ko) .*XO ...X ---- :8,-,value(65) XXOo .*XO ..aX ---- ;oplay_attack(*,a,a) Pattern D1117 .xX? try to push out ..*O ..XO ..xx ---- :8,-,value(75) .xX? .a*O ..BO ..xx ---- ;oplay_attack(*,a,B) Pattern D1117a # tm New Pattern (3.1.15) # continuation of D1117 .xX? try to push out .*OO .XXO ..xX ---- :8,-,value(75) .xX? a*OO .XXO ..xB ---- ;oplay_attack(*,a,B) && wormsize(B) > 2 Pattern D1118 ooo? capture to defend and threaten escape X*X? OXOX ?O.? :8,-,value(85) Pattern D1119 oOX.? might break through somewhere ?*..? X.X.? ...o? ????? :8,E,value(70) oOX.? ?*..b X.X.? ...o? ?a??? ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D1120 ooX.? might break through ?O*.? X.X.? ...o? ????? :8,E,value(81) ooX.? ?O*.b X.X.? ...o? ?a??? ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D1120b ooX. might break through ?OOX X*X. ...o :8,-,value(81) Pattern D1121a # gf Split pattern. (3.3.17) OoXo push into the open .*.o X..o oooo :8,-,value(70) Pattern D1121b # gf Split pattern. (3.3.17) OOXo push into the open X*.o X..o oooo :8,-,value(70) Pattern D1121c # gf Split pattern. (3.3.17) O.Xo push into the open X*.o X..o oooo :8,-,value(70) OaXo B*.o B..o oooo ;oplay_attack_either(*,a,a,B) Pattern D1122 # gf Repaired constraint. (3.3.6) ?O? Cut and maybe capture to make eye X*X --- :|,-,value(45) ?O? A*B --- ;oplay_attack(*,A) || oplay_attack(*,B) Pattern D1123 # tm modified (3.1.17) added b classification oX*o break through OOX. OX.. X..? :8,b,value(86) oB*o OOXa OX.. X..? ;oplay_attack(*,a,B) Pattern D1124 OXO double atari X*? :8,bE,value(90) OAc B*? ;lib(A)==2 && owl_escape_value(c)>0 && !oplay_defend_both(*,A,B) Pattern D1125 ooo? ...o .*X. ?OOX :8,E,value(79) abc? ...o .*X. ?OOX ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1126 # gf Revised constraint and added B classification. (3.1.8) OX. cut to capture something X*. ..? :8,b,value(82) cB. A*. b.? ;lib(c)>1 && oplay_attack(*,A) && oplay_attack(*,b,B) Pattern D1127 # gf Added constraint and B classification. (3.1.8) .O. atari! X*X OX. oO? :8,b,value(35) .O. X*X aX. oO? ;lib(a)>1 Pattern D1128 # gf Added B classification. (3.1.8) ...o set up multiple ataris ...O .*XO ?XO? :8,B,value(45) Pattern D1129 # db added B class (3.1.8) ..*o set up multiple ataris ..XO .OXO ?XO? :8,B,value(77) Pattern D1130 O.?? prevent cut XO*X xXO? :8,-,value(35) Oa?? XO*X xbO? ; !safe_xmove(a) && lib(b)>1 Pattern D1131 OX cut to capture something and escape X* ?O :8,E,value(90) bC D* ?a ;owl_goal_dragon(a) && owl_escape_value(b)>0 ;&& oplay_attack(*,C) && oplay_attack(*,D) Pattern D1132 # db added (3.1.7) # tm reduced value (3.1.18) (see trevorb:590) ?X*O cut to find defects OOX. :8,b,value(45) ?A*O OOB. ; oplay_attack_either(*,A,B) Pattern D1133 # gf New pattern. (3.1.9) ?X.o Ox*. escape oO.. ---- :8,E,value(65) ?X.o Ox*a oO.. ---- ;owl_escape_value(a)>0 Pattern D1134 # tm new pattern (3.1.14) # Give a very low value, unless add lots of constraints. # See trevor:520. XXO Cut! O*X OX. ?.. :8,b,value(5) Pattern D1135 # tm new pattern (3.1.14) # See trevor:330 O*. connect out, threaten cut X.? :8,E,value(35) O*a B.? ; owl_escape_value(a)>0 ; && oplay_attack(*,a,B) Pattern D1137 # gf New pattern. (3.1.14) # gf Bugfix. (3.1.18) # See buzco:6 ?oo? ?..o X*.o O.?? :8,BE,value(65) ?oc? ?..d B*.o Oa?? ;lib(B)<=4 && owl_escape_value(c) + owl_escape_value(d) > 0 ;&& oplay_attack_either(*,a,a,B) Pattern D1138 # tm New Pattern (3.1.17) # tm modified (3.1.23) ???? .X*? breakout! XOX? :8,sbE,value(85) e?f? .B*? AOCd ; lib(C) == 2 ; && (owl_escape_value(e) > 0 || vital_chain(A)) ; && (owl_escape_value(f) > 0 || vital_chain(C)) ; && olib(*) > 1 ; && oplay_attack_either(*,d,B,A) Pattern D1139 # tm New Pattern (3.1.20) (see nngs:110) # gf Added n classification. (3.3.20) ?* XO OX :8,bEn,value(75) ?* aO Ob ; (owl_escape_value(*) > 0) && !oplay_defend_both(*,a,b) Pattern D1140 # tm New Pattern (3.1.20) (see nngs:1320 owl_does_attack L15 M17) ?XO ?*. ??? :8,bE,value(70) ?aO b*. cd? ;(owl_escape_value(b) > 0 ; || owl_escape_value(c) > 0 ; || owl_escape_value(d) > 0) ;&& oplay_attack(*,a) Pattern D1141 # tm New Pattern (3.1.22) # (see nngs:1810 owl_attack M17, result 3 L16) ... atari for tempo O.X OX. X*. :8,-,value(45) ... O.X OX. a*. ; lib(a) == 2 || oplay_attack(*,a) Pattern D1142 # pp New pattern (3.5.3). See nngs4:420. # gf Fixed symmetry. (3.7.1) ?X? split boundary in hope that it will help; *OX low value because it's not guaranteed it will ?XO :8,b,value(30) ?C? *AX ?XB ; does_defend(*,A) && !oplay_attack(*,B) ; && !same_string(B,C) && vital_chain(B) && vital_chain(C) ; && (oplay_attack(*,B) || oplay_attack(*,C)) && !oplay_connect(*,B,C) Pattern D1143 # gf New pattern. (3.5.3). # See e.g. nngs:1090. .*XO XOXO ..Oo ---- :8,-,value(65) .*Ac BOAc ..do ---- ;lib(A)==2 && lib(c)>1 && lib(d)>1 && oplay_attack(*,B) Pattern D1144 # gf New pattern. (3.5.3). # See 13x13b:23. OXO escape by capturing .*X --- :8,-,value(82) bXc .*A --- ; lib(A) == 1 && (owl_escape_value(b) > 0 || owl_escape_value(c) > 0) Pattern D1144b # gf New pattern. (3.5.3). # See 13x13b:23. OXO escape by capturing .*X --- :8,-,value(40) OXO .*A --- ; lib(A) == 1 ######################################################## # # # Kikashi # # # ######################################################### # # # Forcing moves that may improve the eyespace # # # ######################################################### Pattern D1200 .X...| forcing move .*X..| .OOX.| .....| -----+ :8,-,value(80) Pattern D1201a # gf Split pattern. (3.5.3) XOo atari to build eyespace *.O ooo :8,-,value(50) AOo *.O ooo ; lib(A)==2 Pattern D1201b # gf Split pattern and revised constraint. (3.5.3) XOo atari to build eyespace *.O Xoo :8,-,value(50) AOo *.O Boo ; lib(A)==2 && !oplay_defend_both(*,A,B) Pattern D1202 # tm modified (3.1.22) (see owl:152) o*X? move up with atari o.OO .... ---- :8,-,value(75) o*A? B.OO .... ---- ;lib(A) <= 2 && (o_somewhere(B) || !attack(A) || defend(A)) Pattern D1203 OOX block in sente .*x --- :8,-,value(80) OOA b*x --- ;!attack(A) && oplay_attack(*,A) && !obvious_false_oeye(b) Pattern D1204 OOo block in sente .*X --- :8,-,value(85) OOo b*A --- ;wormsize(A)>=3 && !attack(A) && oplay_attack(*,A) && !obvious_false_oeye(b) Pattern D1205 ?X? connect, cut, and threaten to capture O*O ?X? :|,-,value(50) ?A? O*O ?X? ;oplay_attack(*,A) Pattern D1206 oOo capture, threatening to take again OXO ?*X :8,-,value(40) oOo OXO ?*A ; oplay_attack(*,A) Pattern D1207 # gf New pattern. (3.7.3) o..x sacrifice a stone to gain tempo .X*. .... ---- :8,s,value(40) ob.x aX*. .... ---- ;oplay_attack(*,a,a) && oplay_attack(*,b,b) ######################################################### # # # Escape # # # ######################################################### Pattern D1300 OX connect out .* XO :8,Ea,value(90) cb a* XO ;owl_escape_value(c)>0 && oplay_attack_either(*,a,a,b) Pattern D1300b OX connect out *. XO :8,Ea,value(89) cX *a BO ;owl_escape_value(c)>0 && oplay_attack_either(*,a,a,B) Pattern D1301 ?X.? connect to another dragon O*.O .... :8,a,value(90) ?Xc? f*ag .ebd ;(!owl_goal_dragon(f) || !owl_goal_dragon(g)) ;&& (oplay_attack(*,a,b,c,d,e,e) || oplay_attack(*,a,b,c,e,d,d)) Pattern D1301b # gf New pattern. (3.3.7) ?Xo? connect to another dragon O*.O .xo? :8,a,value(90) ?Xo? a*.b .xo? ;(!owl_goal_dragon(a) || !owl_goal_dragon(b)) ;&& !oplay_disconnect(*,a,b) Pattern D1302 # gf Revised constraint. (3.1.15) OX? try to connect out .*O .?? :8,a,value(80) bX? a*c .de ;!(o_somewhere(d) && o_somewhere(e)) ;&& (!owl_goal_dragon(b) || !owl_goal_dragon(c)) && oplay_attack(*,a,a) Pattern D1303 ????? oooo? try to escape X.*o? ?O.o? ??Xo? :/,E,value(80) ????? ooca? X.*b? ?O.o? ??Xo? ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1304 ooooo try to escape ....o X.*.o ?O..o ??X.o :/,E,value(80) oooab ....c X.*.o ?O..o ??X.o ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1305 ???? oooo ..*. try to escape X.Ox ?O.X :8,E,value(75) ???? oabc ..*. X.Ox ?O.X ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1306 ??oo xX*. try to escape X.O. ?O.X :8,E,value(79) ??ab xX*. X.O. ?O.X ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1307 ???oo xX.*o try to escape X.O.? ?O.?? :8,E,value(80) ???oa xX.*o X.O.? ?O.?? ;owl_escape_value(a) > 0 Pattern D1308 # gf Not towards edge. (3.1.15) oooo? O.*o? try to escape ....? ....? ----- :8,E,value(75) ooob? O.*a? ....? ....? ----- ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1309 oo..o O..*o try to escape ..... ..... ----- :8,E,value(81) oo..b O..*a ..... ..... ----- ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1309b # More positive shape than previous pattern. ?ooo? try to escape o.*.o O...O ..... ..... ----- :8,E,value(82) ?ooo? o.*.b O...a ..... ..... ----- ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1310 #tm modified (3.1.15) (see trevora:400) #tm added b constraint (3.1.17) ?ooo ?ooo try to escape X*oo ?OX? :8,E,value(80) dabo eooc X*oo ?OX? ;(!x_somewhere(e) && !x_somewhere(d) && (owl_escape_value(a) > 0)) ;|| owl_escape_value(b) > 0 ;|| owl_escape_value(c) > 0 Pattern D1311 oooo o.oo try to escape .*.o xOX? :8,E,value(80) oabo o.oc .*.o xOX? ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1312 ooooo ....o ....o try to escape X*..o ?OX?? :8,E,value(80) ooabo ....c ....o X*..o ?OX?? ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1313 O... O.*. run away .... ???? :8,E,value(55) O..b O.*a .... ???? ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1314 # nn Modified (3.3.13) # It's rather pointless to match at the edge o.o? O.O. run away .... .... .*.. ???? :8,E,value(55) o.o? O.O. .... .... .*.. ???? ;owl_escape_value(*) > 0 Pattern D1315 # db generalized (3.3.14) o.o O.O run away ... .*. ?oo :8,E,value(50) o.o O.O ... .*. ?ab ; owl_escape_value(a) > 0 || owl_escape_value(b) > 0 Pattern D1316 OX connect out *O :8,n,value(35) OX *a ;!owl_goal_dragon(a) Pattern D1316b # gf New pattern. (3.3.17) OX connect out to strong dragon *O :8,n,value(90) OX *a ;owl_strong_dragon(a) Pattern D1317 o..X move out, separate, and escape o.*O o... ??XX :8,E,value(90) o..X a.*O o... ??XX ;owl_escape_value(a)>0 Pattern D1318 # gf Too vague, reduced. (3.1.9) # gf Still too vague, removed. (3.1.14) # evand modified and reinstated, with lower value. (3.3.18) ??.... try to run towards center ??.... ??..*. ??...O :8,-,value(50) ??bce. ??a... ??d.*. ??...O ;owl_escape_value(a) > 0 || owl_escape_value(b) > 0 ;|| owl_escape_value(c) > 0 || owl_escape_value(d) > 0 ;|| owl_escape_value(e) > 0 Pattern D1319 ... jump to the center ... .*. ... oOo ooo ooo --- :8,-,value(82) Pattern D1320 # tm modified (3.1.20) O*O connect to friendly dragon :+,n,value(35) a*b ;!owl_goal_dragon(a) || !owl_goal_dragon(b) Pattern D1320a # tm New Pattern (3.1.20) # gf Changed symmetry to accomodate for asymmetric constraint. (3.1.23) ?X? O*O connect to friendly dragon ... :8,n,value(70) ?X? A*B cd. ; (!owl_goal_dragon(A) || !owl_goal_dragon(B)) ; && !xplay_attack_either(*,d,c,c,*) Pattern D1320b # gf New pattern. (3.3.17) O*O connect to strong friendly dragon :+,n,value(90) a*b ;owl_strong_dragon(a) || owl_strong_dragon(b) Pattern D1321 *.O O.O connect to friendly dragon by bamboo joint :8,na,value(36) *.b a.b ;!owl_goal_dragon(a) || !owl_goal_dragon(b) Pattern D1321b # gf New pattern. (3.3.17) *.O O.O connect to strong friendly dragon by bamboo joint :8,na,value(91) *.b a.b ;owl_strong_dragon(a) || owl_strong_dragon(b) Pattern D1322 # gf Constraint revised. (3.7.9) .*O OXO connect to friendly dragon by atari :8,na,value(36) .*b aCb ;(!owl_goal_dragon(a) || !owl_goal_dragon(b)) && lib(C) <= 2 && lib(a) > 1 Pattern D1323 # without more context this is often an inferior # solution (for example games/manner.sgf move 12). # tm Modified (3.1.17) # gf Removed safe_xmove(*) from constraint. This is redundant with n # classification. (3.1.17) O*O connect to escape :+,nE,value(35) a*b ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D1323a # tm New Pattern (3.1.17) ??X connect out in sente ?O* ?.O :8,nE,value(55) BCd AO* ?.O ;(owl_escape_value(A) > 0 ; || owl_escape_value(B) > 0 ; || owl_escape_value(C) > 0) ;&& oplay_attack(*,d) Pattern D1324 *.O O.O connect by bamboo joint to escape :8,nEa,value(86) *.b a.b ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D1325 # gf Constraint revised. (3.7.9) .*O OXO connect to friendly dragon by atari to escape :8,nEa,value(86) .*b aCb ;(owl_escape_value(a)>0 || owl_escape_value(b)>0) && lib(C) <= 2 && lib(a) > 1 Pattern D1326 O*O connect to escape :+,E,value(35) a*b ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D1329 o.... jump towards safety O.*.. o.... :8,-,value(35) Pattern D1330 ?O.x break out into the center X*.X .... oooo :8,E,value(90) ?O.x E*cX dab. ofoo ;owl_escape_value(f)>0 && !oplay_defend_both(*,a,b,c,d,a,E) Pattern D1331 ?O.x break out into the center, followup XO.X .X*. oooo :8,BE,value(90) ?O.x COaX bD*. oeoo ;owl_escape_value(e)>0 && !oplay_defend_both(*,a,b,C,D) Pattern D1332 # gf Revised. (3.1.12) ?O?x break out into the center, followup XO*X xXO. oooo :8,E,value(95) ?O?x XO*X xXO. oaoo ;owl_escape_value(a)>0 Pattern D1333 ?O? break out into the center, followup XOX *XO ooo :8,BE,value(90) ?O? AdX *BO oco ;owl_escape_value(c)>0 && owl_goal_dragon(d) && !oplay_defend_both(*,A,B) Pattern D1333b ?O? break out into the center, followup XOX *XO ?O? :8,E,value(90) ?O? XdX *XO ?c? ;owl_escape_value(c)>0 && owl_goal_dragon(d) Pattern D1334 # This is not handled as a lunch because capturing only gives a false eye. XOX break out into the center, followup OXO o*o :|,E,value(95) XOX OXO o*o ;owl_escape_value(*)>0 Pattern D1335 ?O?? double atari to escape .XO? o*XO oo.? :/,BE,value(95) ?O?? .Xb? o*XO ao.? ;owl_escape_value(a)>0 && owl_goal_dragon(b) && lib(b)>1 Pattern D1336 XOo capture to escape *XO oOX :8,E,value(95) XOo *XO aOX ; owl_escape_value(a)>0 Pattern D1337 ?OO? break out into the center X..X ..*. oooo :8,BE,value(90) ?OO? EbaX dc*. ofoo ;owl_escape_value(f)>0 && !oplay_defend_both(*,a,b,c,d,c,E) Pattern D1338 ?OO? break out into the center, followup X*XX ..O. oooo :8,E,value(90) ?OO? C*XX baO. odoo ;owl_escape_value(d)>0 && !oplay_defend_both(*,a,b,a,C) Pattern D1339 # tm modified (3.1.17) ?O? break out into the center, followup X*X oOo :|,E,value(93) ?O? X*X odo ;owl_escape_value(d)>0 Pattern D1340 o.X? tunnel out OX*O .... ---- :8,Ea,value(85) obX? cX*d .a.. ---- ;(owl_escape_value(c)>0 || owl_escape_value(d)>0) && oplay_attack(*,a,a) ;&& !oplay_attack_either(*,b,a,*,a) && !oplay_attack_either(*,b,a,c,a) Pattern D1341 ?O?? break out into the center X*.X ...? ooo? :8,E,value(60) ?O?? X*.X ...? oao? ;owl_escape_value(a)>0 Pattern D1342 X..? miai to make eye or escape into center O*X? OX.. o... ---- :8,-,value(60) Pattern D1343a #tm reduced value (3.1.16) ooo? escape into center o..X o.*. ?x.O :8,E,value(77) obo? a..X o.*. ?x.O ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1343b #tm reduced value (3.1.16) ooo? escape into center o..X o.*o ?XoO :8,E,value(60) obo? a..X o.*o ?XoO ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1343c #tm reduced value (3.1.16) ooo? escape into center o..X o*.o ?.oO :8,E,value(60) obo? a..X o*.c ?.dO ;o_somewhere(c,d) && (owl_escape_value(a) + owl_escape_value(b) > 0) Pattern D1343d #tm reduced value (3.1.16) ooo? escape into center o..X o*.. ?..O :8,BE,value(55) obo? a..X o*.. ?..O ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1344 ?XX?o oO*.o escape along edge o.... ----- :8,E,value(85) ?XX?o oO*.a o.... ----- ;owl_escape_value(a)>0 Pattern D1345 # gf Revised constraint. (3.1.32) OXO atari to connect .*. :8,bEa,value(85) cDe a*b ;lib(D)==2 && lib(c)>1 && lib(e)>1 ;&& (owl_escape_value(c)>0 || owl_escape_value(e)>0) ;&& !oplay_disconnect(*,b,a,c,e) Pattern D1346 ?O.X break out into the center X.*. x... oooo :8,E,value(65) ?O.X X.*. x... oabc ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1347 OX? capture (possibly with ko) XO* ... --- :8,a,value(75) OX? AO* ... --- ;!oplay_defend(*,A) Pattern D1348 O.? connect to friendly dragon to escape .*O :8,nEa,value(36) a.? .*b ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D1348b # gf New pattern. (3.3.17) O.? connect to strong friendly dragon to escape .*O :8,nEa,value(90) a.? .*b ;owl_strong_dragon(a) || owl_strong_dragon(b) Pattern D1348c # gf New pattern. (3.3.17) Oxx connect to strong friendly dragon to escape .*O :8,nEa,value(90) axx .*b ;(owl_strong_dragon(a) || owl_strong_dragon(b)) && !oplay_disconnect(*,a,b) Pattern D1348d # gf New pattern. (3.3.17) O.? connect to strong friendly dragon to escape .*. ?.O :8,nEa,value(90) a.? .*. ?.b ;owl_strong_dragon(a) || owl_strong_dragon(b) Pattern D1350 ?*.. capture lunch to escape (may be undervalued) OXO. :8,E,value(85) ?*bc OAOd ;lib(A) == 1 ;&& (owl_escape_value(b) + owl_escape_value(c) + owl_escape_value(d)) > 0 Pattern D1351 XO? .*X o.? :8,E,value(65) XO? .*X a.? ;owl_escape_value(a)>0 Pattern D1352 O.OX escape or threaten to ..*O :8,a,value(80) ObaX dc*O ;!owl_goal_dragon(a) && xplay_attack_either(b,c,d,b,d) Pattern D1353 X... hane to escape .*.. OX.. .... ---- :8,-,value(80) Pattern D1354 ?...? jump away ?.*.? X...x ?OOO? :8,E,value(65) ?abc? ?.*.? X...x ?OOO? ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1355 OXXO connect out .O*. ---- :8,-,value(70) aXXb .O*. ---- ;lib(a)>1 && lib(b)>1 Pattern D1356 # nn Modified (3.3.13) see also D1356a o.... jump towards safety O.*.. o.... :-,E,value(90) o..a. d.*b. o..c. ; (owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0) ; && !oplay_disconnect(*,d,*) Pattern D1356a # nn New pattern (3.3.13) # B attribute since cut possible o.... jump towards safety O.*.. o.... :-,BE,value(80) o..a. d.*b. o..c. ; (owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0) ; && oplay_disconnect(*,d,*) Pattern D1356b # gf New pattern. (3.5.3) # See nngs4:40 ?.... jump towards safety O..*. o.... ..... ----- :8,E,value(91) ?..a. c..*. o..b. ..... ----- ; (owl_escape_value(a) + owl_escape_value(*) + owl_escape_value(b) > 0) ; && !oplay_disconnect(*,c,*) Pattern D1357 o...o block/connect to escape O.... O.*.. ?OXOo :8,E,value(61) o...a O...b O.*.c ?OXOo ; owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1358 O..? connect to escape O.*O :8,Ea,value(61) bde? bc*a ;(owl_escape_value(a) > 0 || owl_escape_value(b) > 0) ;&& oplay_attack_either(*,c,d,e,c,e) Pattern D1359 ?...? ..... ?.*X. ?..OX ?.Oo? :8,E,value(65) ?bc.? a.... ?.*X. ?..OX ?.Oo? ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1360 ??.. run while connecting ..*. .O.. ...x .O.x :8,E,value(65) ??ac ..*b .O.. ...x .O.x ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern D1361a # too generic; see resultant A1121, see also trevor:1050 # gf Added constraint. (3.1.32) # gf Split pattern. (3.5.7) X.X push to expose weakness O*. ?Xo :8,-,value(65) A.B O*. ?Co ;!same_string(A,B) && (lib(A) <= 4 || lib(B) <= 4 || lib(C) <= 4) Pattern D1361b # too generic; see resultant A1121, see also trevor:1050 # gf Added constraint. (3.1.32) # gf Split pattern and revised constraint. (3.5.7) X.X push to expose weakness O*. ?XX :8,-,value(65) A.B O*. ?CX ;!same_string(A,B) && (lib(A) <= 4 || lib(B) <= 4 || lib(C) <= 4) ;&& !oplay_connect(*,A,C) Pattern D1362 # db added (3.1.8) ?X.. try to escape ?.*. O... o... .... ---- :8,-,value(85) Pattern D1363 # db added (3.1.8) oOX? force the opponent to cut, exposing thinness .*.? .XOO ..X. ?... :8,B,value(75) Pattern D1364 # db added (3.1.8) .OX? atari! .XOO .*X. ?... :8,B,value(85) Pattern D1365 # db added (3.1.8) OX? atari! XOO OX* ... :8,B,value(85) Pattern D1366 # db added (3.1.8) # gf Revised. (3.1.11) XOO? try to break out OXO? .X*x o... ?o.. :8,-,value(85) Xaa? OXa? .X*x o... ?o.. ;owl_goal_dragon(a) Pattern D1367 # db added (3.1.11) # tm added b attribute. # gf Removed b class. (3.3.17) ...? .*.? jump out ...X ?OO? :8,-,value(60) Pattern D1368 # gf added (3.1.12) ...? move out .*X? ..OX XOo? :8,E,value(70) b..? .*X? ..OX Xao? ;lib(a)>1 && owl_escape_value(b)>0 Pattern D1370 # gf New pattern. (3.1.13) oo? move out ..X .*. XO? :8,E,value(75) ao? b.X .*. XO? ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D1371 # gf New pattern. (3.1.13) # tm Added b class (3.1.20) oOo move out ... .*X .O? :8,bE,value(85) oao ... .*X .O? ;owl_escape_value(a)>0 Pattern D1372 # gf New pattern. (3.1.14) OX. escape underneath .*O --- :8,E,value(85) aB. .*O --- ;owl_escape_value(a)>0 && !attack(B) Pattern D1373 # gf New pattern. (3.1.14) o*XO capture to escape :-,bE,value(85) a*BO ;owl_escape_value(a)>0 && does_attack(*,B) Pattern D1374 # gf New pattern. (3.1.14) oo..Xo connect underneath ...*O. ------ :8,E,value(55) ab..Xo ...*O. ------ ;o_somewhere(a,b) && owl_escape_value(a) + owl_escape_value(b) > 0 Pattern D1375 # tm New pattern (3.1.15) O?.? connect out with atari. .*XO ..O. :8,-,value(75) O?.? .*AO ..O. ; defend(A) Pattern D1376 # tm New Pattern (3.1.16) # gf Revised constraint. (3.1.22) OoX? x.*O ---- :8,Ea,value(75) bdE? xc*a ---- ; (owl_escape_value(a) > 0 || owl_escape_value(b) > 0) ; && ((o_somewhere(d) && oplay_attack_either(*,c,c,E)) ; || (!o_somewhere(d) && !oplay_defend_both(*,c,d,c,E))) Pattern D1377 ????? OX*.o hane into the open. .O..o ----- :8,-,value(50) ????? OA*.o .O..o ----- ;defend(A) Pattern D1378 # tm reduced value (3.1.17) # gf Revised constraint. (3.3.18) # See also A1126. X*X breakout & attack ?O? :|,-,value(55) A*B ?O? ; vital_chain(A) && vital_chain(B) ; && oplay_attack_either(*,A,B) && !oplay_connect(*,A,B) Pattern D1379 # tm New Pattern (3.1.17) ??? escape or attack. x.. O*X ?X? :8,E,value(65) ?BC xeA O*X ?d? ; (owl_escape_value(A) > 0 ; || owl_escape_value(B) > 0 ; || owl_escape_value(C) > 0) ; && !attack(d) ; && oplay_attack(*,A,d) ; && oplay_attack(*,e,d) Pattern D1380 # tm (?) New Pattern (3.1.17) ?.. escape .*. O.? :8,E,value(65) ?AB .*C O.? ; owl_escape_value(A) + owl_escape_value(B) + owl_escape_value(C) > 3 Pattern D1381 # tm New Pattern (3.1.19) O*. ?XO :8,Ea,value(70) O*a ?CB ; (owl_escape_value(B) > 0 || owl_escape_value(a) > 0) ; && oplay_attack_either(*,a,a,C) Pattern D1382 # tm New Pattern (3.1.19) .O threaten attack and connect *X O. :8,Ea,value(70) cA *d B. ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && oplay_attack(*,c,d) Pattern D1383 # tm New Pattern (3.1.20) # tm added b attribute (3.1.23) # gf No escape to second line, see 9x9:550. (3.7.8) ?Oo ... ?*. ?.? ??? :8,sbE,value(71) ?Bo ... ?*. ?a? ??? ;(owl_escape_value(a) > 0) ; && !oplay_disconnect(*,*,B) Pattern D1384 # tm New Pattern (3.1.22) (see strategy2:73) # may not be necessary, but probably doesn't hurt. # (doesn't work for strategy2:73; no matching stones are in dragon) O.. escape or capture to escape .*? ?.O :8,E,value(65) A.. .*c ?dB ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && (!x_somewhere(c) || oplay_attack_either(*,d,c,d)) Pattern D1385 # tm New Pattern (3.1.23) .O escape or capture .. X* ?O :8,E,value(75) fB dc e* ?A ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && (oplay_attack(*,c,d,f,e) && oplay_attack(*,c,d,f,f)) Pattern D1386a # gf New pattern. (3.3.17) OX.x connect along edge to strong dragon o*.O ---- :8,Eb,value(90) aX.x o*.b ---- ;owl_strong_dragon(a) || owl_strong_dragon(b) Pattern D1386b # gf New pattern. (3.3.17) OX.x connect along edge o*.O ---- :8,Eb,value(35) aX.x o*.b ---- ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern D1387 # gf New pattern. (3.3.17) ??o? atari to break out o... *X.X XOo? :8,EB,value(75) ?dce o... *X.X Bao? ;(owl_escape_value(c)>0 || owl_escape_value(d)>0 || owl_escape_value(e)>0) ;&& lib(B)==2 && olib(*)>=2 && !oplay_attack(*,a) Pattern D1388 # gf New pattern. (3.3.17) ??o? atari to break out o... OX*X ?Oo? :8,Eb,value(75) ?cbd o... OX*X ?ao? ;(owl_escape_value(b)>0 || owl_escape_value(c)>0 || owl_escape_value(d)>0) ;&& !oplay_attack(*,a) Pattern D1389 # gf New pattern. (3.3.18) # gf Added a classification. (3.7.10) # See also D1340. OX.O ?*.? ---- :8,Ea,value(84) aX.b ?*.? ---- ;(owl_strong_dragon(a) || owl_strong_dragon(b)) && !oplay_disconnect(*,a,b) Pattern D1390 # pp New pattern (3.5.2) ???.O either capture or escape o*... OX..? ?x.?? ----- :8,b,value(80) ???dC o*bc. ABa.? ?x.?? ----- ; owl_escape_value(d) > 0 ; && oplay_attack_either(*,a,b,c,d,B,c) && oplay_connect(*,a,b,c,d,?,A,C) Pattern D1391 # gf New pattern. (3.5.3) # gf Revised pattern. (3.7.2) # See owl1:353. .O*O connect out OX?? :8,a,value(80) bO*a dC?? ;owl_escape_value(a) > 0 && oplay_attack_either(*,b,C,b) ;&& !xplay_connect(*,a,d) Pattern D1392 # evand New pattern. (3.7.1) # sometimes forcing is better than the cut -- see gifu03:704 O.X *XO :8,b,value(40) O.X *AO ;lib(A) == 2 Pattern D1393 # pp New pattern, see kgs:500 (3.7.4) O.O. secure escape connection by first threatening opponent ?*XO :8,B,value(50) A.Ca ?*DB # Note: xplay_disconnect() to avoid generating this move when it is # not really needed. ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && xplay_disconnect(A,C) && oplay_attack(*,a,D) Pattern D1394 #pp New pattern, see kgs:500 (3.7.4) O.O* connect out! ??XO :8,a,value(70) A.O* ??XB ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && safe_xmove(*) && !oplay_disconnect(*,A,B) Pattern D1395 # gf New pattern. (3.7.4) # See gunnar:73. ?OXO OX*x ---- :8,sb,value(40) ?bXa OX*x ---- ;(owl_escape_value(a) > 0 || owl_escape_value(b) > 0) ;&& oplay_disconnect(*,a,b) != WIN ######################################################### # # # Ko # # # ######################################################### Pattern D1400 ---- connect (don't fight ko) ..X? O*OX ?OX? :8,-,value(95) ---- ..C? O*OA ?OB? ;lib(A)>1 && lib(B)>1 && lib(C)>1 Pattern D1400b ---- capture, no ko .*X? O.OX ?OX? :8,-,value(95) ---- .*A? O.OX ?OX? ;lib(A)==1 Pattern D1401 ---- do fight ko .*X? O.OX ?OX? :8,-,value(35) ---- .*X? O.OA ?OB? ; (lib(A)>1) && (lib(B)>1) Pattern D1402 .OX? take the ko OX*X ---- :8,s,value(45) aBX? OX*X ---- ; (legal_omove(*) && owl_topological_eye(a,B)==3) ; || (!legal_omove(*) && owl_topological_eye(a,B)==2) Pattern D1403 |XO? corner ko capture |*XO +--- :8,s,value(30) Pattern D1404 |..O start corner ko |*XO |.OX +--- :8,s,value(80) |..O |*AO |.OX +--- ;oplay_defend(*,A) != WIN Pattern D1405 |X.O start or continue corner ko |*XO |xOo +--- :8,s,value(80) |X.O |*AO |xOo +--- ;oplay_defend(*,A) != WIN Pattern D1405b |X.O start or continue corner ko |OXO |.*o +--- :8,s,value(80) |X.O |OAO |.*o +--- ;oplay_defend(*,A) != WIN Pattern D1406 |X*O try to avoid corner ko |.XO |.Oo +--- :8,-,value(55) Pattern D1407 |.OX? defend corner eye space |..O? |.O*X |.... +---- :8,-,value(75) Pattern D1408 ?X?? take ko X*X? OXOX ?O.O :8,s,value(45) Pattern D1409 ?X?| take ko X*X| OXO| ?O.| :8,s,value(45) Pattern D1410 ?OO| throw in to set up ko or squeeze O.X| OOX| o.*| ---+ :8,s,value(35) Pattern D1411 |*XO play corner ko |XO. +--- :8,s,value(45) |*AO |XO. +--- ;attack(A) != 0 Pattern D1411b |*XO play corner ko |XOo +--- :8,s,value(35) |*AO |XOo +--- ;oplay_defend(*,A) != WIN Pattern D1412 |O?? capture to finish ko |.OO |OX* +--- :8,-,value(35) Pattern D1413 |O?? squeeze to finish ko |XOO |.X* +--- :8,-,value(35) |a?? |XOO |.X* +--- ;lib(a) > 1 Pattern D1414 |oo??? try to live with double ko |.O??? |XOO?? |.XO*o |X.X.o +----- :8,-,value(45) Pattern D1415 # Generalizes D1412. Necessary to have one O stone in the pattern to # identify the goal. ?O capture to finish ko X* :8,-,value(35) ?O A* ;lib(A)==1 && finish_ko_helper(A) Pattern D1416 # Generalizes D1412. Necessary to have one O stone in the pattern to # identify the goal. X*O capture to finish ko :-,-,value(35) A*O ;lib(A)==1 && finish_ko_helper(A) Pattern D1417 # Generalizes D1413. Necessary to have one O stone in the pattern to # identify the goal. ?O squeeze to finish ko X* :8,-,value(35) ?O A* ;lib(A)==2 && olib(*)>1 && squeeze_ko_helper(A) Pattern D1418 # Generalizes D1413. Necessary to have one O stone in the pattern to # identify the goal. X*O squeeze to finish ko :-,-,value(35) A*O ;lib(A)==2 && olib(*)>1 && squeeze_ko_helper(A) Pattern D1419 oOX? take ko to preserve eye O.OX XOX* ---- :8,s,value(35) oOX? O.OX AOX* ---- ;attack(A) Pattern D1420 oOX? take ko to preserve eye O.OX .OX* ---- :8,s,value(35) oOX? O.OX aOX* ---- ;!safe_xmove(a) Pattern D1421 xXO avoid ko X.* --- :8,s,value(25) xXa X.* --- ;xplay_defend(*,a) != WIN && oplay_attack(*,a) == 0 Pattern D1422 |XX?? keep ko going |OXOO |.OXX |O.O* +---- :8,s,value(25) |XX?? |OXOO |.OAA |O.O* +---- ;lib(A)==1 Pattern D1423 # gf New pattern. (3.3.6) |OO? throw in to make ko or better |.O? |XOO |*.O +--- :8,s,value(45) Pattern D1424 # pp New pattern (3.3.12) |Oo? avoid corner ko |.Oo |oX* +--- :8,-,value(45) ######################################################### # # # Threats to capture # # # ######################################################### Pattern DC01a # pp New pattern (3.5.5). ??? threaten to cut off vital chain X.X O*? :8,c, threatens_to_capture(A), value(35) abc AdX O*? ; o_somewhere(a,b,c) && vital_chain(A) && !oplay_defend(*,?,d,A) Pattern DC01b # pp New pattern (3.5.5). ??? threaten to cut off vital chain X.X O*? :8,c, threatens_to_capture(B), value(35) abc XdB O*? ; o_somewhere(a,b,c) && vital_chain(B) && !oplay_defend(*,?,d,B) Pattern DC02 # pp New pattern (3.5.5) -- see ld_owl:316. OX.? OX.. .*.. ---- :8,c, threatens_to_capture(A), value(35) ABb? AB.. .*.. ---- ; lib(A) >= 3 && lib(B) == 3 && olib(b) > 2 ######################################################### # # # Threats to create eyes # # # ######################################################### Pattern DE01a # pp New pattern (3.5.5). ?O*? .... xOOO :8,c, threatens_eye(a), value(30) ?O*? ..a. xOOO Pattern DE01b # pp New pattern (3.5.5). ?O*? .... OOOo :8,c, threatens_eye(a), value(30) ?O*? .a.. OOOo Pattern DE02 # pp New pattern (3.5.5). ?O* O.. --- :8,c, threatens_eye(a), value(30) bO* Oa. --- ; o_somewhere(b) ; || (x_somewhere(b) ? !oplay_defend(*,b) : !oplay_defend(*,b,b)) Pattern DE03 # pp New pattern (3.5.5) -- see owl1:326. OO? ..* --- :8,c, threatens_eye(a), value(30) OOb .a* --- ; o_somewhere(b) ; || (x_somewhere(b) ? !oplay_defend(*,b) : !oplay_defend(*,b,b)) Pattern DE04 # pp New pattern (3.5.5) -- see owl1:326. xXOo? XO.O? X.OX* ----- :8,c, threatens_eye(a), value(30) xXOo? XOaO? X.OX* ----- ######################################################### # # # Reverse sente defending moves # # # ######################################################### Pattern DR01 # pp New pattern (3.5.5) -- see ld_owl:316. # FIXME: most likely need variations for other first line moves. ?.OX? prevent X's sente move at 'a' ..OXx ...*. ----- :8,c, reverse_sente(a), value(30) ?.OB? .aOBx ...*. ----- ; owl_proper_eye(a) && !attack(B) # END OF FILE