# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 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 offensive 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. # ################# # # 'Y' is the anchor stone, a unique stone of color 'X' used by the pattern # matcher to find the pattern. # ################# # The patterns in this database are sorted into the following # categories: # # Axx Limiting moves on the fourth line # A1xx Limiting moves on the third line # A2xx Limiting moves on the second line # A3xx Limiting moves on the first line # A4xx Limiting moves in the center # A5xx Eye reducing moves on the second line # A6xx Eye reducing moves on the first line # A7xx Eye reducing moves in the center # A8xx Invade the eye space # A9xx Nakade patterns # A10xx Cuts # A11xx Reinforce the perimeter # A12xx Kill or threaten a worm of the dragon # A13xx Specific corner attacks # A14xx Invasion patterns # A15xx Ko patterns # A16xx Specific edge attacks # # ACxx Threats to capture # AExx Threats to destroy eyes # ARxx Reverse sente attacking moves attribute_map owl_attack goal_elements Xx callback_data Xx ######################################################### # # # Limiting moves on the fourth line # # # ######################################################### Pattern A1 # sometimes sagari is better ?.*Ox connect ..OYX ..... ..... ----- :8,n,value(80) ?.*Ax ..OYX ..... ..... ----- ; lib(A)<4 Pattern A2 ?..X. ?.*.x block ..OY. ..... ..... ----- :8,-,value(65) Pattern A3 # db added (3.1.8) # gf Reduced value. (3.1.14) .*O? draw back O.YX .... .... ---- :8,-,value(65) ######################################################### # # # Limiting moves on the third line # # # ######################################################### Pattern A101 Oo? Block Y*. ... ... --- :8,-,value(70) Pattern A102 OO..? Draw back XXO*. ..Y.. ..... ----- :8,-,value(80) Pattern A103 ?Oo? draw back x*.Y x.OX ?... ---- :8,-,value(50) Pattern A104 ?..O pull back .*OY ..X. .... ---- :8,-,value(90) ?..O .*Oa ..X. .... ---- ; lib(a)>2 Pattern A105 ?..OxX mandatory block ..*Y.. ...... ...... ------ :8,-,value(99) Pattern A106 ?X?? push in ..*O X.YO .... ---- :8,-,value(60) Pattern A107 # gf Not on second line without known support. See trevora:290. (3.1.15) # nn Added constraint (3.3.14) ....? block on third line Y.*.? ....? ....? ----- :8,-,value(50) # # ....? # a.*.b # ....? # ....? # ----- # # ; weak(a) || oarea(b) Pattern A108 *.x stand on third line OYx ... --- :8,n,value(70) Pattern A109 # tm Constraint added (3.1.16) oOo block on third line Y*. ... ... --- :8,-,value(79) aOb Y*. ... ... --- #Pattern A232 is almost certainly better if this #constraint fails (avoid empty triangle) ; (o_somewhere(a) || !o_somewhere(b)) Pattern A110 O..o draw back --- the only move! XO*. XY.. .... ---- :8,-,value(85) Pattern A111 # db added (3.1.8) ?Ooo try to confine ?... Y.*. x... .... ---- :8,-,value(50) Pattern A112 # db added (3.1.8) ..O? draw back O*YX .... .... ---- :8,-,value(79) ..A? O*YX .... .... ---- ; lib(A)>2 Pattern A113 # gf Moved from A212. (3.1.9) |..xX prevent connection |.... |..*O |..Y? :8,C,value(99) Pattern A114 # gf Moved from A213. (3.1.9) |..X. prevent connection |.... |..*O |..Y? :8,C,value(99) Pattern A115 # gf New pattern. (3.1.14) o..Y? o.*.X ..... ..... ----- :8,-,value(85) a..Y? b.*.X ..... ..... ----- ;o_somewhere(a,b) ######################################################### # # # Limiting moves on the second line # # # ######################################################### Pattern A201 OO... Block if safe XXOO. ..YX* ..... ----- :8,-,value(60) OOc.b XXOOa ..YX* ..... ----- ; oplay_attack(*,a,a) || !oplay_attack(*,a,b,c,*) Pattern A203 # tm Modified (3.1.16) ?O?? second line block x*Yx ...X ---- :8,C,value(60) Pattern A204 # gf Pattern revised. (3.5.1) ??O?? second line block ?.*Y? ..... ----- :8,-,value(60) Pattern A205 ?Oo second line block (needs a helper) XY* ... --- :8,-,value(60) Pattern A205b ?Oo second line block (needs a helper) XY* .O. --- :8,-,value(70) Pattern A206 ?O? block YOo .X* ... --- :8,-,value(80) Pattern A206b ?.O block YO. .X* ... --- :8,-,value(78) Pattern A207 O.Y second line kosumi .*. ... --- :8,-,value(35) Pattern A207b O.Yx second line kosumi .*.x ...? ---- :8,-,value(58) Pattern A207c # nn Modified (3.3.11) see A207d ?O.Yxx second line kosumi ?.*.xx ?...?? ------ :8,-,value(78) ?O.Yxx a.*.xx ?...?? ------ ;!x_somewhere(a) || attack(a) # nn Removal candidate (3.3.13) # Success rate in regressions : 2.61% (15/560) Pattern A207d # nn New pattern (3.3.11) penalty for being gote ?O.Yxx second line kosumi X.*.xx ?...?? ------ :8,C,value(60) ?O.Yxx a.*.xx ?...?? ------ ;!attack(a) Pattern A208a # tm New Pattern (3.1.16) O.X *.Y .oo --- :8,-,value(55) Pattern A208b # nn New Pattern (3.3.11) O.. *.Y .oo --- :8,-,value(35) Pattern A208c # gf New pattern. (3.3.18) ?Xx O.X .*Y .oo --- :8,-,value(56) Pattern A208d # gf New pattern. (3.5.3) O.X .*Y .oo --- :8,-,value(56) OaX .*Y .oo --- ;!oplay_attack(*,a,*) Pattern A208e # gf New pattern. (3.7.3) O.. .*Y .oo --- :8,-,value(56) Oa. .*Y .oo --- ;oplay_attack(*,a,a) Pattern A209 ?Ooo xY*. second line block x... ---- :8,-,value(70) ?aoo xY*. x... ---- ;lib(a)>2 Pattern A210 ?OO?x xY*.x second line block x.... ----- :8,C,value(85) ?OO?x xY*.a x.... ----- ;owl_escape_value(a)>0 Pattern A211 ?Oo? second line block o..Y o.*. ?... ---- :8,-,value(80) Pattern A214 ---- connect .... XO*. xYO? :8,-,value(85) ---- .... XO*. xAO? ;lib(A)>1 Pattern A215 ?oOx sagari ?OYX x*.. .... ---- :8,C,value(80) Pattern A216 ??O descend to attack XYO ..* ... --- :8,-,value(50) Pattern A216b # gf New pattern. (3.1.11) ??O hane with support XYO .*. ... --- :8,-,value(60) ??O XYO a*. ... --- ;!oplay_attack(*,a,*) Pattern A217 ?OYX sometimes more effective to just descend .*.. .... ---- :8,-,value(40) Pattern A217b # gf Increased value. (3.1.14) ?OYX sometimes more effective to just descend .*.. .... ---- :8,-,value(65) ?aYX .*.. .... ---- ;lib(a)==2 Pattern A217c # gf New pattern. (3.1.14) .OYX sometimes more effective to just descend .*.. .... ---- :8,-,value(60) caYX b*.. .... ---- ;!xplay_defend_both(*,b,c,a,b) Pattern A218 ..OO reverse sente sagari .OYX .*.. .... ---- :8,-,value(75) Pattern A219 O..? XO.? double hane .Y*. ...? ---- :8,s,value(70) ba.? AOc? eY*d ..f? ---- ;(xlib(a)==1 || lib(b)>2) && lib(A)<=3 && olib(e)>1 ;&& oplay_attack(*,c,a,d,e,f,A) ;&& oplay_defend(*,c,a,e,*) Pattern A220 # tm Modified (3.1.23) ???? prevent jump ?xx. xY*. .... ---- :8,-,value(45) ??bc ?xad xY*. .... ---- ; (owl_escape_value(b) <= 0 && owl_escape_value(c) <= 0) ; || !oplay_attack(*,a,d) Pattern A221 # tm Modified (3.1.20) - added right hand ?s # tm Modified (3.1.23) ????? back off to prevent jump ?xx.? xY.*? ....? ----- :8,-,value(50) ???a? ?xx.? xY.*? ....? ----- ;owl_escape_value(a) < 1 Pattern A222 ?oOo?? clamp ?Oooo? XOY*.. .X.... ------ :8,-,value(35) Pattern A223 O.Y attach underneath ..* ... --- :8,-,value(80) O.B .a* ... --- ;lib(B)<=3 && oplay_attack(*,a,B) Pattern A224 ???? block if X can't cut OO.? XY*. .... ---- :8,-,value(80) ???? OOa? XY*. .... ---- ; oplay_attack(*,a,a) Pattern A225 ?OY? descend to prevent hane and eye .*.X ...x ---- :8,-,value(50) Pattern A226 .OY? descend to prevent hane and eye in sente .*.X ...x ---- :8,-,value(80) bCY? a*.X ...x ---- ;xplay_attack(*,a,C) || !xplay_defend_both(*,a,b,a,C) Pattern A227 ?XOxx ?XO*. stop escape X.Y.. ----- :8,C,value(35) ?XOxx ?XO*a X.Y.. ----- ;owl_escape_value(a)>0 Pattern A227b # gf New pattern. (3.1.9) ?O.x X.*. stop escape xY.. ---- :8,C,value(65) ?O.x X.*a xYb. ---- ;owl_escape_value(a)>0 && !oplay_attack(*,a,b,*) Pattern A228 .*O eliminate kikashi ..Y --- :8,-,value(45) .*a ..Y --- ; xplay_attack(*,a) Pattern A229 xx.O? stop escape x.*OX ...Y. ----- :8,C,value(80) ac.O? b.*OX ...Y. ----- ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern A229b xxx? stop escape ..*O ...Y ---- :8,C,value(79) abx? ..*O ...Y ---- ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern A229c xx? stop escape .*O ..Y --- :8,-,value(79) ab? .*O ..Y --- ;owl_escape_value(a) + owl_escape_value(b) > 0 Pattern A229d X? stop escape *O .Y -- :8,C,value(79) a? *O .Y -- ;owl_escape_value(a) > 0 Pattern A230 ?Oo? stop escape along edge ..*Y .... ---- :8,-,value(80) ?Oo? a.*Y b... ---- ;owl_escape_value(a)+owl_escape_value(b) > 0 Pattern A231 ?..Y jump to undermine O.*. .... :8,-,value(50) Pattern A232 # db added (3.1.7) ?OO? Jump down to block Y..? .*.. .... ---- :8,C,value(80) ?OO? Yab? .*c. .... ---- ; oplay_attack(*,a,b,c,c) Pattern A232b # gf New pattern. (3.5.4) # See trevorc:240. ?O. Jump down to block Y.. .*. ... --- :8,-,value(80) ?ed Yab .*c ... --- ; xlib(d)<=2 && lib(e)>3 && oplay_attack(*,a,b,c,c) Pattern A233 # db added (3.1.10) OO.? Jump and block .... Y*.? ...? ---- :8,-,value(75) Pattern A234 # tm new pattern (3.1.13) # Descend to attack. Possibly defend vulnerable stone. # Useful in arb:231 xX defend vulnerable stone. YO .* .. -- :8,C,value(20) Pattern A235 # db new pattern (3.3.6) # gf Revised pattern. (3.5.7) ?XXO? prevent the hane ?Y.*. ..x.. ----- :8,-,value(77) Pattern A236 # tm new pattern (3.3.12) --- x.. Y.* X.. xO. :8,-,value(66) --- x.. Y.* X.. xO. ; !oplay_attack(*,*) Pattern A237 # pp New pattern (3.3.18) See nngs4:370 ??O. eliminate an eye in reverse sente xY*O X..o ---- :8,-,value(80) ??Oc aY*A X.bo ---- ; (x_somewhere(a) || ! safe_omove(a)) && !xplay_defend(*,b,c,A) Pattern A238 # evand New pattern (3.3.20) See nngs4:570 oO?Y Jump down to enclose o..x .*.X .... ---- :8,-,value(55) Pattern A239 #spl added 3.5.1 .Yo .*O Penetration ... --- :8,-,value(85) Pattern A240 #spl added 3.5.1 ?YO? o*XO capture one stone and limiting eye o... maybe gote ---- :8,C,value(50) Pattern A241 # gf New pattern. See gifu03:303. (3.5.3) O.YO connect beneath o.*o .... ---- :8,-,value(37) a.Yb o.*o .... ---- ;!oplay_disconnect(*,a,b) Pattern A242 # gf New pattern. (3.5.3). # See e.g. nngs:1090. ...o? ..*O? ...Yx ----- :8,-,value(35) ...o? ba*c? ...Yx ----- ;xplay_disconnect(*,a,a,c) && xplay_disconnect(*,b,b,c) ######################################################### # # # Limiting moves on the first line # # # ######################################################### Pattern A301 YO.X prevent connection X*.. ---- :8,-,value(60) YO.A X*.. ---- ;!owl_goal_dragon(A) Pattern A302 # gf Revised pattern. (3.1.14) ?oOX? descend, but not on edge ?OY.x x*.Xo ----- :8,-,value(30) Pattern A305 # tm New Pattern (3.1.15) xYxx? Monkey Jump to reduce eye space x...O .*..o ----- :8,C,value(45) ######################################################### # # # Limiting moves in the center # # # ######################################################### Pattern A401 # tm Modified (3.1.17) O..? block strongly if possible Y*.. ?..? :8,-,value(80) ba.? Y*.. ?..? ; oplay_defend_both(*,a,*,b) && !oplay_attack(*,a,b) Pattern A401a # tm Modified (3.1.17) # identical to A401, but lower value if bad cut aji # see, for example, strategy4:182 O..? block strongly if possible Y*.. ?..? :8,-,value(60) ba.? Y*.. ?..? ; oplay_defend_both(*,a,*,b) Pattern A402 # tm Modified (3.1.14) - doesn't make sense to match at edge. O*.? fall back to confine Y... ?..? ???? :8,-,value(70) a*.? Y... ?..? ???? ;lib(a)<=2 || xlib(*)>2 Pattern A403 # gf Devalued. See also A403b. (3.3.13) ..* knight's move to block O.. OYX :8,-,value(55) cb* Aad OYX ; oplay_defend_both(*,a,b,c,A,b) && oplay_defend_both(*,b,a,d,*,A) Pattern A403b # gf More specific pattern and constraint. (3.3.13) ??? ..* knight's move to block O.. OYX :8,-,value(75) ??e cb* Aad OYX ; owl_escape_value(e)>0 ; && oplay_defend_both(*,a,b,c,A,b) && oplay_defend_both(*,b,a,d,*,A) Pattern A404 xYx attack eyeshape X.X .*. :|,-,value(75) Pattern A406 xxx ... center block .*O OY? :8,-,value(85) xax b.. .*O OY? ; (owl_escape_value(a)>0)||(owl_escape_value(b)>0) Pattern A406b # nn Modifed (3.3.13) ?xxx? o...o center block ..*Oo o.Y?? :8,-,value(80) ?xax? o...o ..*Od o.Ybc ;owl_escape_value(a)>0 ;&& (!x_somewhere(b,c) ; || o_somewhere(b,d) ; || (o_somewhere(c) && !safe_xmove(d))) Pattern A406c # tm New Pattern (3.1.17) # tm Modified (3.1.22) ?xx *.. center keima enclosure ..O .YO :8,-,value(81) ?ax *c. dbO eYO ;owl_escape_value(a)>0 ; && (xplay_attack(b,c,*,d,d) || !xplay_defend(*,b,d,e,e)) Pattern A406d # gf New pattern. (3.7.1) ?xxx? o...o center block ..*Oo o..Y? ??Xx? :8,-,value(80) ?xax? o...o ..*Oo o..Y? ??Xx? ;owl_escape_value(a)>0 Pattern A407 # gf Added constraint. (3.5.3) ?O.X ?*Y. ?... ?... :8,-,value(45) aO.X b*Y. c... ?... ;!(o_somewhere(a) && o_somewhere(b)) || x_somewhere(c) Pattern A407b # gf New pattern. (3.5.3) OO.X O.Y. o*.. ?... :8,-,value(45) Pattern A408 # gf Revised constraint. (3.1.14) ?oOo seal the opponent in ?... .*.Y .... ???. ???. :8,-,value(70) ?oOo ?... e*.Y .... ?ab. ?cd. ;o_somewhere(a,b,c,d) && owl_escape_value(e) > 0 Pattern A409 ??xxx oO*.. try to contain O.Y.O ?X.Oo :8,C,value(80) ??abc oO*.. O.Y.O ?X.Oo ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern A410 xxx try to block .*. OYO ?X? :|,B,value(90) xax .*. OYO ?X? ;owl_escape_value(a)>0 Pattern A411 # gf Revised pattern. Necessary to constrain it harder. (3.1.14) # gf Revised and devalued pattern. (3.1.15) # nn Modified constraint (3.3.11) ??...??? try to stop escape into center ??...oo? ??.*.oo? ??o.Y??? ??oo???? :8,-,value(79) ??.a.??? ??...def ??.*.ghi ??j.Y??? ??bc???? ;owl_escape_value(a)>0 ;&& ((o_somewhere(b,c,j) && o_somewhere(d,e,f,g,h,i)) ; || (o_somewhere(j) && owl_escape_value(d)==0 && owl_escape_value(e)==0)) Pattern A411a # nn New pattern (3.3.11) # FIXME: there must be a way to prevent duplicate matches with A411 ???..?? try to stop escape into center ??...oo ??.*.oo ??o.Y?? ??oo??? ??oo??? :8,-,value(79) ???a.?? ??...de ??.*.bc ??f.Y?? ??gh??? ??ij??? ;owl_escape_value(a)>0 && o_somewhere(f,g,h,i,j) && o_somewhere(b,c,d,e) Pattern A413a # nn New pattern (3.3.11) o..... prevent escape o..... o..*.. O.Y... :8,-,value(50) idf... jcbe.. k.a*.. O.Y... ;(o_somewhere(j) || (o_somewhere(i) && o_somewhere(k))) ;&& !oplay_attack(*,a,b,c,d,e,f,*) && !oplay_attack(*,a,b,e,f,*) Pattern A414 # gf Revised constraint. (3.1.14) ??xxx?? cap to prevent escape ??...?? oo.*.oo oo...oo ??.Y.?? :8,-,value(82) ??xxx?? ??e..?? ab.*.fg cd...hi ??.Y.jk ; o_somewhere(a,b,c,d) && owl_escape_value(e)>0 && o_somewhere(f,g,h,i,j,k) Pattern A414a # nn New pattern (3.3.11) ......o ......o ..*...o oo.Y.oo :8,-,value(65) a.....b ......c ..*...d ef.Y.oo ;owl_escape_value(a)>0 ;&& owl_escape_value(b)==0 ;&& owl_escape_value(c)==0 ;&& owl_escape_value(d)==0 ;&& o_somewhere(e,f) Pattern A415 o.. cut off escape .*Y X.O :8,C,value(80) o.. .*Y Abc ;owl_escape_value(A)>0 && oplay_defend_both(*,b,*,c) Pattern A416 ?.O?? hane .*Y.X ?...x :8,-,value(65) Pattern A417 ?Y.O prevent center escape O.*. o... xxxx :8,-,value(75) ?Y.O O.*. o... xabc ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern A418 # db added (3.1.8) ...O prevent escape .*OX O.Yx :8,-,value(80) ...O .*OA O.Yx ; lib(A)>1 Pattern A419 # gf New pattern. (3.1.10) # gf Uncommented pattern (3.1.13) # tm modified (3.1.22) (see 13x13:52 --decide-dragon K10) Y.O .*X cut to stop escape :8,C,value(68) Ycd .*A ;(owl_escape_value(A)>0) ; && oplay_defend_both(*,c,*,d) Pattern A419b # Same as A419, different anchor. X.O .*Y cut to stop escape :8,C,value(68) Acd .*Y ;(owl_escape_value(A)>0) ; && oplay_defend_both(*,c,*,d) Pattern A420 # gf New pattern. (3.1.12) ?X.o stop escape into center OY.O .O*. xxxx :8,-,value(75) ?X.o cYaO bd*. xexx ;owl_escape_value(e)>0 && !xplay_defend_both(*,a,b,c,d) Pattern A421 # gf New pattern. (3.1.13) xx? ..O center block .*. OY? :8,-,value(80) ax? b.O .*. OY? ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern A422 # ab New pattern. (3.3.10) ?Oo? prevent connection to another dragon Y*.X ?xo? :8,-,value(85) ?Oo? a*.b ?xo? ;(!owl_goal_dragon(b)) ;&& !xplay_disconnect(*,a,b) Pattern A422a # same as A422; different anchor. ?Oo? prevent connection to another dragon X*.Y ?xo? :8,-,value(85) ?Oo? a*.b ?xo? ;(!owl_goal_dragon(a)) ;&& !xplay_disconnect(*,a,b) Pattern A423 # db New pattern (3.3.9) # complementary to D1358 X..? try to cut Y.*X ??O? :8,C,value(61) X..? Y.*a ??O? ;(owl_escape_value(a) > 0) Pattern A423a # Same as A423; different anchor. X..? try to cut X.*Y ??O? :8,-,value(61) a..? a.*Y ??O? ;(owl_escape_value(a) > 0) Pattern A424 # pp New pattern (3.3.18) XYO? block and prevent opponent from playing double threat move .O.o XX*. :8,-,value(80) XYO? .O.o XX*a ;owl_escape_value(a) > 0 Pattern A425 #spl added 3.5.1, counter part of D1348d O.Y block connection .*. X.O :/,n,value(90) ######################################################### # # # Eye reducing moves on the second line # # # ######################################################### Pattern A501 x.Y? jump under .*.O .... ---- :8,C,value(75) Pattern A502 ?Xo extend to kill eye O*Y X.X --- :8,Cn,value(45) ?Xo a*Y X.X --- ; attack(a) Pattern A503 ?XX push in to eliminate eye Y*O X.X --- :8,Cs,value(45) Pattern A503b # gf New pattern. (3.5.3) ?XXX atari to eliminate eye or make ko Y.O. X.X* ---- :8,s,value(32) ?XXX Y.O. X.X* ---- ;olib(*)>1 Pattern A504 Y* cut off one stone OX -- :8,C,value(35) Pattern A505 ?OYX there is death in the hane ..*. .... ---- :8,-,value(45) Pattern A506 ?YX undermine eyespace O*. ... --- :8,-,value(35) Pattern A507 ?O? destroy eye space and threaten to cut Y*X ... --- :8,C,value(80) Pattern A508 o.Xx? undermine potential eye space O.*.Y ....x ----- :8,C,value(65) Pattern A509 X.O destroy eye space by damezumari Y*X x.x --- :8,-,value(80) AbO A*X x.x --- ;lib(A)<=3 && xlib(b) <= 2 && oplay_attack(*,b,b) Pattern A510 .XY.X destroy eyespace in reverse sente OXO*. .O... ----- :8,C,value(55) Pattern A511 # gf New pattern. (3.1.11) ?Y.x undermine eyespace O*.x ...x ---- :8,-,value(35) ?Y.x O*ax ...x ---- ;owl_eyespace(a) Pattern A512 # gf New pattern. (3.1.11) .O?? attack eye shape and stop expansion .*Yx ..oX ---- :8,-,value(70) Pattern A513 # tm New pattern. (3.1.15) (see trevora:620) # This may be just too generic, though often useful. # tm Modified (3.1.16) # Added ??? rows, make sure not at upper edge. # ab This is indeed too generic. # gf Added constraint to make it slightly less generic. (3.5.3) # See trevora:620,630 and gifu03:303 for relevant testcases. ???| ???| Y..| O*.| :8,-,value(45) ???| ?b?| Ya.| O*.| ;x_somewhere(b) || oplay_attack(a,b,a) Pattern A514 # tm New Pattern (3.1.15) # see also Pattern A615 XOo| special edge position .YX| x*O| ...| :8,s,value(45) XOb| CYW| A*O| ...| ; oplay_attack(*,W) && !oplay_attack(*,A,b,C,b) Pattern A515 # gf New pattern. See owl1:286. (3.3.17) XXY*O sacrifice lunch and falsify eye XOO.. ----- :8,-,value(35) XXY*O XOba. ----- ;!oplay_attack(*,a,b,*) Pattern A516 # evand New pattern (3.3.20) oOXY. Begin to falsify eye in reverse sente ..O*X ..... ----- :8,-,value(70) oOXYa ..O*X ....b ----- ;!obvious_false_xeye(a) || !obvious_false_oeye(b) Pattern A517 #spl added (3.3.23) see nando:11 ?OYXxx Prevent opponent from making an eye on the first line .*O.X. .....X ------ :8,-,value(5) Pattern A518 # gf New pattern. (3.5.3) # See nngs2:460 O.xx? destroye eye .*.YX ....X ----- :8,-,value(45) ######################################################### # # # Eye reducing moves on the first line # # # ######################################################### Pattern A601 ---- jump along edge O.*. Y..? ?Xxx :8,-,value(75) Pattern A602 --+ hane in corner ..| Y*| Oo| :8,-,value(70) --+ ..| Y*| ao| ;!attack(a) Pattern A603 xXY.O reduce eye space x.*.. ----- :8,s,value(35) xXY.a cb*.. ----- ;!attack(a) && owl_proper_eye(b) ;&& (x_somewhere(c) || owl_proper_eye(c)) Pattern A603b # tm - modified (3.1.15) (see trevora:170) xY.x reduce eye space .*.O ---- :8,s,value(35) xY.x b*.a ---- ;owl_eyespace(b) && !attack(a) Pattern A604 XY..O reduce eye space .*... ----- :8,s,value(35) Pattern A605 |.Y.O reduce eye space |.*.. +---- :8,s,value(35) Pattern A606 XxY.O try to destroy eye xO*.. ----- :8,s,value(50) XxYaO xc*b. ----- ;lib(c) > 1 && !oplay_attack(*,a,b,*) Pattern A607a # gf Split pattern. (3.5.3) # gf Revised constraint. (3.5.4) # gf Comment: A607a and A607b could now be merged again but I think # it may be handy for later revisions to keep them apart. XYO there is death in the hane .*. --- :8,s,value(36) XYa b*. --- ;owl_maxeye(b) > 0 && !oplay_attack(*,a) && !obvious_false_xeye(b) Pattern A607b # gf Split pattern and revised constraint. (3.5.3) # gf Reordered constraint for better performance. (3.5.4) .YO there is death in the hane .*. --- :8,s,value(36) .Ya b*. --- ;owl_maxeye(b)>0 && !oplay_attack(*,a) && !obvious_false_xeye(b) Pattern A607c # gf New pattern. (3.1.12) # gf Reordered constraint for better performance. (3.5.4) xYO the push is also deadly .*O --- :8,-,value(55) xYa b*a --- ;owl_eyespace(b) && !oplay_attack(*,b,a) Pattern A607d # gf New pattern. (3.5.4) # gf Comment: A607a and A607b could now be merged again but I think # it may be handy for later revisions to keep them apart. ?XYO there is death in the hane o.*. ---- :8,s,value(36) dXYa cb*. ---- ;owl_maxeye(b)==0 ;&& ((o_somewhere(c) && owl_lunch(c)) ; || (o_somewhere(d) && owl_lunch(d))) ;&& !oplay_attack(*,a) && !obvious_false_xeye(b) Pattern A608 xYO hane with atari on more than one stone .*. --- :8,s,value(75) xCa b*. --- ;lib(C)==2 && wormsize(C)>1 && !oplay_attack(*,a) && !obvious_false_xeye(b) Pattern A609 XOY destroy eye .*. --- :8,s,value(35) Pattern A610 X.YO try to damage eyespace in sente .*.? ---- :8,s,value(55) X.Ya .*.? ---- ;!attack(a) Pattern A611 ?Ox? placement where X cannot cut XY.X O.*. ---- :8,-,value(80) ?Ox? AA.X O.*. ---- ;lib(A)==2 Pattern A612 oOY? threaten snapback to destroy eye OX.X *X.O ---- :8,-,value(60) oOY? OX.X *X.a ---- ;lib(a) > 1 Pattern A613 X.X? extra forceful hane ..YO ..*. ---- :8,-,value(65) X.D? .bDO .a*c ---- ;oplay_attack(*,a,b,c,D) Pattern A614 # gf New pattern. (3.1.15) XYO? destroy eyespace when we can't capture ..XO X.*. ---- :8,-,value(65) XYO? .aXO X.*. ---- ;!oplay_attack(a,*,*) Pattern A615 # tm New Pattern (3.1.15) OXYXO attack shortage of liberties ?...? ?.*.? ----- :|,s,value(65) OXAXO ?...? ?.*.? ----- ;lib(A) == 3 # nn Removal candidate (3.3.13) # Success rate in regressions : 0.75 % (2/268) Pattern A616 # tm New Pattern (3.1.15) # tm Modified (3.1.17) ?XOo| special edge collapse ?.Y.| ?x.*| ?x..| :8,s,value(45) ?XCa| ?.Y.| ?b.*| ?x..| ; !attack(C) ; && (!x_somewhere(b) || (x_somewhere(b) && o_somewhere(a))) Pattern A617 # tm New Pattern (3.1.15) OY? threaten snapback. X.X X.O X*. --- :8,s,value(50) OY? A.X X.O X*. --- ; lib(A) == 3 Pattern A618 # tm New Pattern (3.1.17) XYO falsify eye XOX X.* --- :8,-,value(75) XYb XOX XA* --- ; oplay_defend_both(*,A,b,*) Pattern A619 #tm New Pattern (3.1.17) |.Y |.* +-- :8,-,value(75) Pattern A620 #evand New Pattern. (3.3.18) .YO push in to destroy eyespace *Ox --- :8,s,value(65) aYO *Ox --- ;!obvious_false_xeye(a) Pattern A621 # spl added 3.3.22 # gf Revised constraint. (3.5.3) ?YOo? threaten to make ko or nakade X..*. ----- :8,s,value(10) ?AOo? X..*. ----- ;lib(A)<3 && owl_eyespace(*) Pattern A622 # gf New pattern. (3.5.3) # Compare D704b. See nngs3:450. xY.O half eye sometimes missed X.*o ---- :8,-,value(35) bYaO X.*o ---- ; xplay_attack(*,a,a) ; && (x_somewhere(b) || !safe_omove(b)) Pattern A623 # gf New pattern. (3.5.5) |.xY.O |....O monkey jump into the corner |.*... +----- :8,-,value(65) Pattern A626 # gf New pattern. (3.7.3) ??XXO? XX..XO steal an eye .*.X.O ------ :8,s,value(75) ??XXO? XX..XO a*.X.O ------ ;owl_proper_eye(a) ######################################################### # # # Eye reducing moves in the center # # # ######################################################### Pattern A701 ?XOo make atari X.YO x.*. :8,-,value(79) ?AOo X.YO x.*. ;lib(A)>1 Pattern A702 ?XOo make atari X.YO ..*O ??x? :8,-,value(80) ?AOo X.YO ..*O ??x? ;lib(A)>1 Pattern A703 ?XX? push in to limit eyeshape O*.Y ?..x :8,-,value(80) Pattern A704 ?OY? capture one stone OXOX .*.? :8,C,value(80) Pattern A705b ?.? attack eye shape X*Y ?.? :8,C,value(61) ?b? X*Y ?a? ;owl_eyespace(a) && xlib(b) <= 2 && oplay_attack(*,b,b) Pattern A706 ?*? X.X ?Y. :8,C,value(70) ?*? XaA ?Yb ; (owl_topological_eye(a,A)<=2) && (owl_topological_eye(b,A)==2) Pattern A707 ?O? X*X .Y. :8,C,value(70) ?O? X*A aYb ; (owl_topological_eye(a,A)==2) ; && ((owl_topological_eye(b,A)==2) || (owl_topological_eye(b,A)==3)) Pattern A708 ?Y* attack eye with sente x.X ?x? :8,n,value(80) ?Y* xaB ?x? ;owl_topological_eye(a,B)==3 && does_attack(*,B) Pattern A709 xX. half eye sometimes missed Y.* ?x? :8,C,value(45) xXb Aa* ?x? ; owl_topological_eye(a,A)==3 ; && safe_omove(b) && safe_omove(*) && xplay_attack(*,b,b) Pattern A710 ?Y* kill a half eye with an atari x.X ?x? :8,-,value(35) ?A* xba ?x? ; lib(a)==2 && owl_topological_eye(b,A)==3 Pattern A711 O*.X destroy eye X..X xXY? :8,C,value(35) Pattern A712 ?XX? eye stealing tesuji ...Y .*.X oo.? :8,C,value(60) Pattern A713 OO? destroy potential eye X.Y X.X x*x :8,-,value(45) bb? XaY X.X x*x ;!attack(b) && xplay_attack(a,b) Pattern A714 ?XY? capture to spoil eyespace O..X X*.x OX.x :8,C,value(82) ?XY? O..X A*.x OX.x ;lib(A)==1 Pattern A715 # gf New pattern. (3.1.11) # evand Modified. (3.3.18) ?*YX attack eye shape and possibly threaten to cut x..x ?xXO :8,-,value(60) ?*YX x..x ?xXa ;!owl_proper_eye(*) && !attack(a) Pattern A716 # gf New pattern. (3.1.12) O*x destroy eye in reverse sente X.X xYx :8,C,value(50) a*x X.X xYx ;xplay_attack(*,a) Pattern A717 # tm New Pattern (3.1.17) ?.?? XO*Y ?X.X :8,Cs,value(75) ?.?? XO*Y ?XAb ; owl_big_eyespace(A) ; && oplay_attack(*,b) Pattern A718 # tm New Pattern (3.1.22) (see trevorc:1360) # see related general defense pattern D309a xYx? reduce eye space x.*O xXx? :8,C,value(50) xYx? x.*A xXx? ; 1 || oplay_attack(*,A) Pattern A719 # gf New pattern. (3.3.20) # gf Revised constraint. (3.5.2) ?XYO reduce eye space X.*X ?XX. :8,s,value(50) ?XYc Xa*X ?XXb ;owl_mineye(*)==1 && xlib(b)==2 && !oplay_attack(*,c) && !oplay_attack(*,a,b,b) Pattern A719b # gf New pattern. (3.3.20) |XYO reduce eye space |.*X |XX. :8,s,value(50) |XYc |a*X |XXb ;xlib(b)==2 && !oplay_attack(*,c) && !oplay_attack(*,a,b,b) Pattern A720 # evand New pattern (3.3.20) ?.?? Y..x Bamboo connection to reduce eyespace X*Ox ?... ?OO? :8,C,value(40) ?c?? Ya.x X*Ox ?... ?OO? ;(owl_eyespace(a) || owl_eyespace(c)) ;&& oplay_attack(a,a) && xplay_attack(*,a) Pattern A721 ?XX. Y.*. ?XX. :8,s,value(45) ?XXe Yd*c ?AAb ;lib(A) == 3 && !obvious_false_xeye(d) ;&& oplay_defend(*,b,c,*) && oplay_defend(*,e,c,*) ;&& oplay_defend_both(*,c,b,d,e,b,e) ######################################################### # # # Invade the eye space # # # ######################################################### # # # These are patterns where a live stone # # is played where the opponent might get # # an eye. They do not include sacrifice # # patterns. # # # ######################################################### Pattern A801 ?xYx attack chimera xX.X X.*O ---- :8,n,value(80) Pattern A802 xYx destroy eye X.X .*O --- :8,n,value(50) Pattern A803 # tm modified(3.1.16) xxX? connect under oOYO ..*. ---- :8,-,value(80) xxX? oAYO ..*. ---- ; attack(A) && !oplay_attack(*,A) Pattern A804 .YO? connect out on first line O*oo ---- :8,-,value(45) .YO? A*oo ---- ; does_attack(*,A) Pattern A805 XxxX? connect under .oOYO ...*. ----- :8,-,value(60) Pattern A806 O..Y clamp OX*. .... ---- :8,C,value(75) Pattern A807 ?X. connect under OY* .O. --- :8,-,value(65) Pattern A808 |.OYO avoid leaving ko by connecting on the outside |*XO. +---- :8,-,value(60) Pattern A809 XX.O? connect out O.YO? O.*.. ----- :8,-,value(80) XX.O? A.YO? A.*.. ----- ; lib(A)>2 Pattern A810 # This looks a little weird. /ab ?O? X.Y safe invasion into eye ?*? :8,-,value(45) ?O? X.Y ?*? ;owl_eyespace(*) Pattern A811 #tm New Pattern (3.1.17) .X? X.Y .*X :8,s,value(65) aX? XbC .*X ; lib(C) <= 3 ; && owl_proper_eye(a) ; && owl_proper_eye(b) Pattern A812 .Y? clamp to invade eyespace ..O *XO ..o --- :8,C,value(40) .Y? ..O *XO ..o --- ;owl_eyespace(*) Pattern A813 #spl added 3.5.1 see century2002:80 # gf Revised constraint. (3.5.1) X*. OYO sacrifice to eliminate eye .X. --- :8,Cs,value(85) X*. aYb cXd --- ;(!attack(a) && olib(d)>=3) ;|| (!attack(b) && olib(c)>=3) Pattern A814 # gf New pattern. (3.7.2) # See ld_owl:321. X.. try to squeeze eyespace OY* ?X. --- :8,s,value(35) X.. OB* ?Ba --- ;lib(B) == 3 && owl_big_eyespace(*) && olib(*)>2 && olib(a)>1 ######################################################### # # # Nakade patterns # # # ######################################################### # # # These are patterns where a sacrifice stone # # is played in the opponent's eye space to # # prevent two eyes. Use the s (sacrifice) # # classification # # # ######################################################### Pattern A901 |X??? |OXYX connect corner ko to make nakade |*O.X +---- :8,s,value(70) Pattern A902 XOY nakade trick O*O --- :8,s,value(70) XbY a*c --- ;lib(a)==1 && lib(b)==1 && lib(c)<=2 Pattern A902b XOY nakade trick O*O --- :8,s,value(30) XbY a*c --- ;lib(a)<=2 && lib(b)==1 && lib(c)<=2 Pattern A903 |xYX? |.O.X try to make nakade |..*. +---- :8,s,value(35) Pattern A904 |OX? try to form nakade |XOY |*.x +--- :8,s,value(55) |aB? |XOY |*.x +--- ;lib(a) == 1 && lib(B) > 1 Pattern A905 # gf Increased value slightly. (3.1.14) |O.X try to form nakade |XOY |*.. +--- :8,s,value(36) Pattern A906a # gf New pattern. (3.5.3) # See seki:303. |X??? |.YX? |XO.X try to make ko |*.O. +---- :8,s,value(32) |Xa?? |.YX? |XO.X |*.O. +---- ;!o_somewhere(a) || !defend(a) Pattern A906b # gf New pattern. (3.5.3) # See seki:303. |X??? |.YX? |.OXX try to make ko |*.O. +---- :8,s,value(32) |Xa?? |.YX? |.OXX |*.O. +---- ;!o_somewhere(a) || !defend(a) Pattern A907 |.X?? |OYX? critical point, might kill |*.Xx |.... +---- :8,s,value(65) |.X?? |aYX? |*.Xx |.... +---- ;!defend(a) Pattern A908 |X??? nakade if ko can be won |OYX? |.OX? |O*.X +---- :8,s,value(35) |X??? |OYX? |.OX? |O*aX +---- ;xlib(a) == 2 Pattern A909 |.X? capture to form nakade |OYX |XOX |*O. +--- :8,s,value(35) Pattern A910 # gf Revised constraint. (3.5.3) XYX| try nakade in corner .*.| ---+ :8,s,value(25) XYX| a*.| ---+ ;!obvious_false_xeye(a) && owl_maxeye(*)>1 Pattern A911 Y.Xo| try nakade X.*.| ----+ :8,s,value(25) A.Xo| A.*.| ----+ ;lib(A)==2 Pattern A912 OYOo destroy eyespace X.XO .*.. ---- :8,s,value(35) Pattern A913 XY.X try sente eyeshape reduction X.*. ---- :8,s,value(80) AAbX A.*. ---- ;lib(A)==2 && !safe_omove(b) Pattern A914 XY.X try nakade X.*. ---- :8,s,value(25) XYaX X.*. ---- ;!safe_omove(a) Pattern A915 X.Yoo destroy eyespace .*.Xo ..... ----- :8,s,value(85) X.Yao .*.Xb ..... ----- ;o_somewhere(a,b) Pattern A916 ??Yx play inside to kill one eye XX.X ..*. ---- :8,s,value(65) Pattern A917 ?X?? always worth considering X.Y? ?*.X ??X? :/,s,value(45) Pattern A918 # gf New pattern. (3.1.14) ?X?? always worth considering X.Y? ?*.X ???? :8,s,value(40) Pattern A919 # evand New pattern. (3.3.20) o?XX?? OX..Y? ..*..x ------ :8,s,value(35) Pattern A920 # evand New pattern. (3.3.20) ?XX?? X..Y? xO*.x ----- :8,s,value(35) Pattern A921 # gf New pattern. (3.7.1) # See ld_owl:320. ?XX?? X.*Y? xO..x ----- :8,s,value(30) ?XX?? X.*A? xO..x ----- ;oplay_defend(*,A)!=WIN ######################################################### # # # Cuts # # # ######################################################### Pattern A1001 YO cut if safe *X :8,Cn,value(80) Ba *C ;(owl_escape_value(B)>0 || owl_escape_value(C)>0) ;&& !oplay_attack_either(*,*,a) Pattern A1001b # Sometimes cut of small useless tail # i.e.: gq -l games/niki.sgf -L 158 --decide-dragon S8 -o x.sgf YO cut if safe *X :8,Cn,value(50) Ya *X ; !oplay_attack_either(*,*,a) Pattern A1002 ???? ?*.X threaten to cut ??YO :8,C,value(75) ???? ?*aX ??Yc ; !safe_omove(a) && !oplay_attack_either(*,?,a,a,c) && !oplay_attack(*,a,*) Pattern A1003 ???? ?*.X threaten to cut ??YO :8,C,value(55) ???? ?*aX ??Yc ; !safe_omove(a) && !oplay_attack_either(*,?,a,a,c) Pattern A1005 Y? cut! *O .X :8,C,value(90) Y? *b aC ;owl_escape_value(C)>0 && xplay_attack_either(*,a,a,b) Pattern A1005b # gf Need to consider both directions. (3.3.13) X? cut! *O .Y :8,C,value(90) C? *b aY ;owl_escape_value(C)>0 && xplay_attack_either(*,a,a,b) Pattern A1006 XOY push out .*. ?.? :8,C,value(70) Pattern A1006b # gf New pattern. (3.1.12) XOY push out in reverse sente .*. ?.? :8,C,value(75) XaY .*. ?.? ;lib(a) <= 2 Pattern A1008 X*Y stop connection ?O? :8,C,value(80) a*b ?O? ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern A1008b # tm Modified (3.1.22) (see trevorc:810) ooo X*Y stop connection O.? :8,C,value(80) ooo a*b Oc? ;(owl_escape_value(a)>0 || owl_escape_value(b)>0) ; && oplay_attack(*,c,c) Pattern A1009 XO*Y stop connection underneath .... ---- :8,C,value(55) XO*Y .a.. ---- ;xplay_attack(*,a,a) Pattern A1010 Y.O cut and capture to destroy eyespace .*X ... --- :8,C,value(75) YaO .*B ... --- ;oplay_attack(*,a,B) Pattern A1011 XOY stop connection underneath x*x --- :8,C,value(80) aOb x*x --- ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern A1012 X.?? cut OY*O oOX? :8,C,value(45) Xa?? OY*O obX? ; !safe_omove(a) && lib(b)>1 Pattern A1013 # tm New pattern. (3.1.13) # see owl:229 ?O? enclose! Y.. X*? :8,-,value(10) ?c? YAb X*? ; owl_escape_value(b)>0 ; && oplay_defend_both(*,A,b,c,b) ; && oplay_defend_both(*,A,b,b,*) Pattern A1014 # gf New pattern. (3.1.14) xx..Ox stop connection underneath ...*Y. ------ :8,C,value(55) AB..Ox ...*Y. ------ ;x_somewhere(A,B) && owl_escape_value(A) + owl_escape_value(B) > 0 Pattern A1015 X.*Y cut! X..X :8,C,value(75) Ae*B AfgB ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && oplay_defend_both(*,g,f,e,f,*) Pattern A1015a Y.*X cut! X..X :8,C,value(75) Ae*B AfgB ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && oplay_defend_both(*,g,f,e,f,*) Pattern A1016 # gf New pattern. (3.1.22) # Converse to D1376. See lazarus:114 for an example. YxO? o.*X ---- :8,C,value(75) Bde? oc*A ---- ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && ((x_somewhere(d) && xplay_attack_either(*,c,c,e)) ; || (!x_somewhere(d) && !xplay_defend_both(*,c,d,c,e))) Pattern A1016a # gf New pattern. (3.1.22) # Converse to D1376. See lazarus:114 for an example. XxO? o.*Y ---- :8,C,value(75) Bde? oc*A ---- ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) ; && ((x_somewhere(d) && xplay_attack_either(*,c,c,e)) ; || (!x_somewhere(d) && !xplay_defend_both(*,c,d,c,e))) Pattern A1017 # nn New pattern (3.3.11) # gf Revised constraint, see owl1:354. (3.7.3) X.*o threaten to cut and mess up opponent's shape xY.X :8,C,value(65) X.*b xYaC ;!oplay_attack(*,a,*) ;&& (o_somewhere(b) || !oplay_attack(*,b,*)) ;&& !attack(C) Pattern A1018 # nn New pattern (3.3.11) O.Y separate .*. X.o :8,C,value(35) Pattern A1019 # nn New pattern (3.3.11) .o.O cut / prevent escape X... .*.Y :8,C,value(65) .fgO Xbde .*cA ;!owl_goal_dragon(A) && !oplay_attack_either(*,b,c,d,e,c,e) ;&& (o_somewhere(f) || !oplay_attack_either(*,d,b,f,g,b,g)) Pattern A1020 # nn New pattern (3.3.11) # FIXME: constraint is ugly ooooo try to cut off and kill the moyo reducing stone ....o ....o .Y..o *...o :/,-,value(45) abcde ....f ....g .Y..h *...i ;(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) + (owl_escape_value(f)>0) ;+(owl_escape_value(g)>0) + (owl_escape_value(h)>0) ;+(owl_escape_value(i)>0) < 2 Pattern A1021 # gf New pattern. (3.3.17) ??O cut off from friendly stone Y*X ?O. :8,-,value(45) ??O B*A ?O. ;!owl_goal_dragon(A) && !oplay_connect(*,A,B) Pattern A1022 # evand New pattern. (3.3.18) oY.O ..*. .X.X ...o :8,C,value(55) oA.O ..*. .X.B ...o ;!oplay_connect(*,A,B) Pattern A1023 # evand New pattern. (3.3.18) ?Xx? O*.? ?..? xYxx :8,C,value(45) ?Bx? O*a? ?..? xCxx ;oplay_disconnect(*,a,B,C) Pattern A1024a # gf New pattern. (3.5.4) # gf Revised pattern. (3.7.3) # Converse to D1386a YO.? connect along edge to strong dragon x*.X ---- :8,CEb,value(90) AO.? x*.B ---- ;owl_strong_dragon(B) && !xplay_disconnect(*,A,B) Pattern A1024b # gf New pattern. (3.5.4) # Converse to D1386a XO.o connect along edge to strong dragon x*.Y ---- :8,Eb,value(90) BO.o x*.A ---- ;owl_strong_dragon(B) && !xplay_disconnect(*,A,B) ######################################################### # # # Reinforce the perimeter # # # ######################################################### # # # Patterns where the perimeter is already in place # # but has a defect which needs repair. # # # ######################################################### Pattern A1100 #tm New Pattern (3.1.22) (see pattern D1100) # gf Fixed diagram inconsistency. (3.1.23) XO defend connect out .* OY :8,-,value(90) cb a* OY ;owl_escape_value(c)>0 && xplay_attack_either(*,a,a,b) Pattern A1101 ... O*O ?Y? :|,-,value(93) .a. b*c ?Y? ; xplay_break_through(*,a,b,a,c) == WIN Pattern A1101b ... O*O ?Y? :|,-,value(94) .a. b*c ?Y? ; lib(b)<=4 && lib(c)<=4 && xplay_break_through(*,a,b,a,c) == WIN Pattern A1101c # New Pattern (before 3.1.20 - when?) # see strategy3:150 for wasted move. # see also lazarus:5 # tm Modified (3.1.22) O*O connect against threat ?Y? :8,-,value(81) A*B ?Y? ; vital_chain(A) && vital_chain(B) ; && !xplay_defend_both(*,A,B) Pattern A1102 ..X O*O ?Y? :8,C,value(95) baX c*O ?Y? ;!xplay_defend_both(*,a,b,a,c) Pattern A1104 OYO connect to prevent double atari XO* ... :8,C,value(85) OYB AO* .a. ; xplay_attack(*,a,B) && !oplay_defend(*,A) Pattern A1105 # gf Added n classification. (3.3.20) O.. XO* connect against double threat xYO x.. --- :8,Cn,value(85) Oa. XO* xAb x.. --- ;!attack(A) && xplay_attack(*,a,b) Pattern A1106 OO.? XOX* capture cutting stone to defend xYO. xx.. ---- :8,C,value(70) OO.? XOB* xAa. xx.. ---- ;!attack(A) && attack(a) && !oplay_defend(*,B) # tm Moved to owl_vital_apats (3.1.17) # tm copied back from owl_vital_apats (3.1.22) # suspect that vital_chain works differently called from there??? -tm # see 13x13:52 --decide-dragon K10 Pattern A1107 # spl never on edge (3.3.23) ??? defend the surrounding chain O*? YO? :/,-,value(95) ??? a*? Yb? ; vital_chain(a) && vital_chain(b) ; && !xplay_defend_both(*,a,b) Pattern A1107b # gf New pattern. (3.1.9) # tm Modified (3.1.17) - took away from edge ?? defend the surrounding chain *. O. YO :8,-,value(96) ?? *. ba Yc ;lib(c)>2 && vital_chain(b) && vital_chain(c) ;&& oplay_attack(*,a,a) && !xplay_defend_both(a,b,c) # nn Removal candidate (3.3.13) # Success rate in regressions : 0.9 % (23/2562) Pattern A1107c # tm New pattern. (3.1.17) # tm Modified (3.1.20) - reduced value (see nngs:320) .* defend the surrounding chain O. YO :8,-,value(60) .* ba Yc ;lib(c)>2 && vital_chain(b) && vital_chain(c) ;&& oplay_attack(*,a,a) && !xplay_defend_both(a,b,c) Pattern A1108 ?XO don't let defender capture to escape *OY :8,-,value(80) ?BO *aY ;owl_escape_value(B) > 0 && does_defend(*,a) Pattern A1109 ?Xx?? connect underneath ?OYoo O.*.. ..... ----- :8,C,value(65) ?Xx?? ?cYab O.*.. ..... ----- ; o_somewhere(a,b) && attack(c) Pattern A1110 o..YO? connect underneath O.*Ooo ------ :8,-,value(50) Pattern A1111 ?.x..| defend bottom while emphasizing top .OXX.| .*OY.| ?..O.| ??...| :8,-,value(65) Pattern A1112 # Strict speaking we should not need patterns # like this X.*O save lunch YO.. .... ---- :8,-,value(50) X.*O Ya.. .... ---- ; attack(a) Pattern A1113 # gf New pattern. (3.1.9) xYO.? reinforce ?*..? O.O.? ...x? ????? :8,-,value(70) xYO.? ?*..b O.O.? ...x? ?a??? ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern A1114 # gf New pattern. (3.1.9) xxO.? reinforce ?Y*.? O.O.? ...x? ????? :8,-,value(81) xxO.? ?Y*.b O.O.? ...x? ?a??? ;owl_escape_value(a)>0 || owl_escape_value(b)>0 Pattern A1115 # gf New pattern. (3.1.9) xxO. reinforce ?YXO O*O. ...x :8,-,value(81) Pattern A1116 # gf New pattern. (3.1.9) ?X? Reinforce OYO *OX xxx :8,C,value(90) ?X? aDO *bX xCx ;owl_escape_value(C)>0 && owl_goal_dragon(D) && !xplay_defend_both(*,a,b) Pattern A1117 # gf New pattern. (3.1.11) X*O don't let defender cut and capture to escape ?OY :8,Cn,value(80) X*b ?aY ;!xplay_defend_both(*,a,b) Pattern A1117a # Same as A1117; different anchor. Y*O don't let defender cut and capture to escape ?OX :8,Cn,value(80) Y*b ?aX ;!xplay_defend_both(*,a,b) Pattern A1118 # tm New pattern (3.1.17) YO? defend OX* ... --- :8,-,value(75) YO? AX* ... --- ; attack(A) && !oplay_attack(*,A) Pattern A1119 # tm New Pattern (3.1.17) # analog to defense pattern D1348 # tm Modified (3.1.18) (see trevorc:100) # tm Modified (3.1.22) (see trevorc:810) Y*? cut off escape route. o.X :8,Cn,value(36) a*E Dcb ;(owl_escape_value(a)>0 || owl_escape_value(b)>0) ;&& ((o_somewhere(E) || x_somewhere(E)) || owl_escape_value(a) < 0) ;&& !oplay_attack_either(*,c,D,*,D) Pattern A1121 # tm New Pattern (3.1.20) # see also Pattern D1361 (both this and that are too generic) # see trevorc:550, trevor:1050 # gf Added constraint. (3.1.32) O.O block to protect weakness Y*. ?O? :8,C,value(35) a.b Y*. ?c? ;!same_string(a,b) && (lib(a) <= 4 || lib(b) <= 4 || lib(c) <= 4) Pattern A1122 # tm New Pattern (3.1.22) # see -l games/trevor/auto/d02.sgf -L 142 --decide-dragon P2 # gf Revised constraint. (3.7.11) Y. *. .X :8,-,value(75) a. *. .b ;!owl_goal_dragon(b) && !oplay_connect(*,a,b) Pattern A1122a # same as A1122 - different anchor. # gf Revised constraint. (3.7.11) X. *. .Y :8,-,value(75) a. *. .b ;!owl_goal_dragon(a) && !oplay_connect(*,a,b) Pattern A1122b # gf New Pattern. (3.7.11) Y. *. .X :8,C,value(76) a. *. .b ;lib(a) == 2 && !oplay_connect(*,a,b) Pattern A1123 # tm New Pattern (3.1.22) (see D1376) # FIXME: duplicate of A1016 YxO? o.*X ---- :8,-,value(75) bdE? oc*a ---- ; (owl_escape_value(a) > 0 || owl_escape_value(b) > 0) ; && xplay_attack_either(*,c,d,c,E) Pattern A1123a # Same as A1123 - different anchor. XxO? o.*Y ---- :8,-,value(75) bdE? oc*a ---- ; (owl_escape_value(a) > 0 || owl_escape_value(b) > 0) ; && xplay_attack_either(*,c,d,c,E) Pattern A1124 # tm New Pattern (3.1.22) (see nngs:770 decide-dragon K4) # see also D1140 # ab Revised constraint. (3.3.10) ?OY ?.* ??? :8,-,value(70) ?AY bd* ?c? ;(owl_escape_value(c) > 0 ; || owl_escape_value(b) > 0) ;&& oplay_defend_both(*,d,A,*) Pattern A1124a # tm New Pattern (3.1.22) (see nngs:770 decide-dragon K4) # see also D1140 # gf Revised. Might still be too general. (3.5.4) # spl revised (3.5.5) ?OY x*. xxx :8,-,value(70) ?AY b*e cdx ;(owl_escape_value(d) > 0 ; || owl_escape_value(b) > 0 ; || owl_escape_value(c) > 0) ;&& !oplay_defend_both(e,*,A,e) Pattern A1124b # gf New pattern. (3.5.4) (see nngs:770 decide-dragon K4) ?OY x.* xx? :8,C,value(70) ?OA be* cd? ;(owl_escape_value(d) > 0 ; || owl_escape_value(b) > 0 ; || owl_escape_value(c) > 0) ;&& xplay_connect(e,*,e,A) ;&& oplay_disconnect(*,e,e,A) Pattern A1125 # tm New Pattern (3.1.22) (see D1118) xxx? defend threaten of escape O*O? XOYo ?X.? :8,C,value(76) Pattern A1126 # tm New Pattern (3.1.23) # gf Revised constraint. (3.5.3) # See also D1378. O*O prevent breakout & attack ?Y? :|,-,value(55) a*b ?Y? ; vital_chain(a) && vital_chain(b) ; && xplay_attack_either(*,a,b) && !xplay_connect(*,a,b) Pattern A1127 # tm New Pattern (3.1.23) (see Pattern D1001) # Note: there's no reason to cut the goal dragon up. O*X prevent connection ?YO :8,n,value(70) O*b ?cA ; (attack(A) != WIN || (wormsize(A)<=2 && does_attack(*,A))) ; && (!owl_goal_dragon(b) || !owl_goal_dragon(c)) Pattern A1127a # Same as A1127 - different anchor. O*Y prevent connection ?XO :8,n,value(70) O*b ?cA ; (attack(A) != WIN || (wormsize(A)<=2 && does_attack(*,A))) ; && (!owl_goal_dragon(b) || !owl_goal_dragon(c)) Pattern A1128 # tm New Pattern (3.1.23) # see also CB14 OY*X cut off from home X.X. :8,C,value(80) Ob*a XcXd ; owl_escape_value(a) > 0 ; && oplay_attack(*,b) ; && !oplay_attack(*,c,d,d) Pattern A1129 # tm New Pattern (3.1.23) (see D1123) xO*x stop break through XYO. XO.. O..? :8,C,value(86) xB*x XYOa XO.. O..? ;xplay_attack(*,a,B) Pattern A1130 # nn New pattern (3.3.11) # FIXME: should be constrained ...o? to be considered in crosscut cases like this ...Ox .*.OX ..XYO ...o? :8,C,value(65) Pattern A1131 # gf New pattern. (3.3.18) XO.Y ?*.? ---- :8,-,value(90) AO.B ?*.? ---- ;owl_strong_dragon(A) && !xplay_disconnect(*,A,B) Pattern A1132 # gf New pattern. (3.3.18) |.O?? save one lunch and make one a false eye |OYX? |*OXX |..OX +---- :8,-,value(70) Pattern A1133a # evand New pattern. (3.3.20) ?O.Y ?..x ?.*. ?..O ???? :8,-,value(65) ?O.Y ?..x a.*. b..O cd?? ;owl_escape_value(a) + owl_escape_value(b) + ;owl_escape_value(c) + owl_escape_value(d) > 0 Pattern A1133b # evand New pattern. (3.3.20) ?O.Y ?.*. ?... ?..O ???? :8,-,value(45) ?O.Y ?.*. a... b..O cd?? ;owl_escape_value(a) + owl_escape_value(b) + ;owl_escape_value(c) + owl_escape_value(d) > 0 Pattern A1134 # pp New pattern (3.5.3). See trevorb:120. # FIXME: is it better to do this algorithmically with owl boundaries? # gf Added explicit anchoring. (3.5.3) XOY prevent escaping by capturing .*O --- :8,C,value(75) BOY .*a --- ; lib(a) == 1 && owl_escape_value(B) > 0 Pattern A1134b # gf New pattern. (3.5.3). YOX prevent escaping by capturing .*O --- :8,C,value(75) YOB .*a --- ; lib(a) == 1 && owl_escape_value(B) > 0 Pattern A1134c # gf New pattern. (3.5.3). XOY prevent escaping by capturing .*O --- :8,C,value(40) XOY .*a --- ; lib(a) == 1 Pattern A1134d # gf New pattern. (3.5.3). # See 13x13b:23 YOX prevent escaping by capturing .*O --- :8,C,value(40) YOX .*a --- ; lib(a) == 1 Pattern A1135 # gf New pattern. (3.5.3) ..OY X.*. ---- :8,-,value(75) ..OB A.*. ---- ;owl_escape_value(A)>0 && !xplay_disconnect(*,A,B) && !oplay_connect(*,A,B) Pattern A1136 # gf New pattern. (3.5.3) ?Y? O*O ..? ?X? :8,-,value(75) ?B? O*O ..? ?A? ;owl_escape_value(A)>0 && !xplay_disconnect(*,A,B) && !oplay_connect(*,A,B) Pattern A1137 # gf New pattern. (3.5.3) # Converse to D1125. xxx? ...x .*O. ?YXO :8,-,value(79) abc? ...x .*O. ?YXO ;owl_escape_value(a) + owl_escape_value(b) + owl_escape_value(c) > 0 Pattern A1138 # gf New pattern. (3.5.5) xx.?? xx.O? ..*OY ...X. ----- :8,-,value(30) Pattern A1139 # gf New pattern. (3.5.7) .OYx *XOX o..O ??O? :8,-,value(60) .dYx *XOX oabc ??O? ;oplay_attack(b,d) && oplay_attack(*,a,a) ;&& oplay_attack(*,b,?,a,a) && !oplay_attack(*,b,c) Pattern A1140a # gf New pattern. (3.7.4) # See gunnar:73. ?XOY XO*o ---- :8,-,value(40) ?AOB XO*o ---- ;owl_escape_value(A) > 0 && xplay_disconnect(*,A,B) != WIN Pattern A1140b # gf New pattern. (3.7.4) # See gunnar:76. ?YOX XO*o ---- :8,-,value(40) ?AOB XO*o ---- ;owl_escape_value(B) > 0 && xplay_disconnect(*,A,B) != WIN Pattern A1141 # gf New Pattern. (3.7.11) OO? Y.O *.o .X? :8,C,value(76) OO? a.O *.o .b? ;!oplay_connect(*,a,b) Pattern A1141b # gf New Pattern. (3.7.11) OO? X.O *.o .Y? :8,C,value(76) OO? a.O *.o .b? ;!oplay_connect(*,a,b) ######################################################### # # # Kill or threaten a worm of the dragon # # # ######################################################### Pattern A1201 ?O? capture one stone to rescue *YO :8,-,value(75) ?a? *BO ; (lib(a)==1) && (lib(B)==1) Pattern A1203 ?*? capture 3 stones OYO :8,s,value(80) ?*? OAO ;wormsize(A)>3 && lib(A)==1 Pattern A1204 ?*? capture 1 or two stones OYO :8,s,value(30) ?*? OAO ;wormsize(A)<=3 && lib(A)==1 && olib(*) > 1 Pattern A1205 *Y kill one string! XO :8,s,value(75) *Y AO ;wormsize(A)>3 && does_attack(*,A) Pattern A1206 *Y kill one string, possibly with ko! XO :8,Cs,value(30) *Y AO ;wormsize(A)<=3 && does_attack(*,A) ;&& (olib(*) > 1 || ko(*)) Pattern A1207 ..X attack one stone .*Y .XO :8,C,value(45) ..X .*Y .AO ; does_attack(*,A) Pattern A1208 ?Ooo cut off one stone Y..o .*XO .... ---- :8,C,value(40) Pattern A1209 OYX* .O.. ---- :8,-,value(65) OYX* .O.. ---- ;owl_proper_eye(*) Pattern A1210 # gf New pattern. (3.7.1) # See ld_owl:318. ?O? not always found as lunch defense Y*X :8,-,value(65) ?a? B*C ;attack(a) && !oplay_attack(*,a) && !oplay_defend_both(*,B,C) ######################################################### # # # Specific corner attacks # # # ######################################################### Pattern A1301 |..o??? |.Oooo? kill corner |.XOO.o |.XY..O |...*.. |...... +------ :8,-,value(90) |..a??? |.Oboo? |.XOO.o |.XY..O |...*.. |...... +------ ; o_somewhere(a,b) Pattern A1302 |..X? corner clamp, often resourceful |.*YO |.... +---- :8,s,value(30) Pattern A1303 #tm - modified (3.1.15) (see ld_owl:152) |..X? obligatory corner attack |X.Yo |.*.? +---- :8,s,value(90) Pattern A1303b |..X? followup |X*YO |.OX? +---- :8,s,value(50) Pattern A1303c # gf New pattern. (3.5.3) |..X? variation |XOYo |.*.? +---- :8,s,value(85) |..X? |XaYo |.*.? +---- ;defend(a) != WIN Pattern A1304 # gf Revised constraint. (3.1.18) |.YO throw in threatening to destroy two corner eye vertices |.*X +--- :8,s,value(60) |bYO |.*A +--- ;lib(A)==2 && !obvious_false_xeye(b) Pattern A1305 |XXY? try to kill corner formation |.*.X |...X +---- :8,s,value(90) Pattern A1305b |XY.? try to kill corner formation |.*.X |...X +---- :8,s,value(35) Pattern A1306 |XXY? try to make ko in corner |...X |.*.X +---- :8,s,value(85) Pattern A1307 |XxY? kill one eye |.X.X |.O*X +---- :8,s,value(85) Pattern A1308 |Xx?? attack bent four in the corner |.YXx |.*.X +---- :8,s,value(90) Pattern A1309 |.YxX try to damage corner eye space |.*Ox +---- :8,s,value(90) |bYxX |.*ax +---- ;lib(a)>1 && !obvious_false_xeye(b) Pattern A1310 |*X.Y try to make ko or bent four in the corner |.OOx +---- :8,s,value(30) Pattern A1310b |XxX? |.Y.X better to kill without ko if we can |*OOX +---- :8,s,value(31) Pattern A1311 |.XY? |XO.X set up corner ko |..*. +---- :8,s,value(80) Pattern A1311b # gf New pattern. (3.3.13) |.XY?? |XO.XO kill without ko |.*..? +----- :8,s,value(81) Pattern A1312 |OX?? |.YX? try to kill corner formation |.*.X |...x +---- :8,s,value(35) Pattern A1313 |.??Ooo attack 3-3 invasion |.xY.oo |...*.. |...... +------ :8,-,value(50) Pattern A1314 # gf Added constraint. (3.5.5) |x.X? sometimes correct attack in corner |..YO |.*.o +---- :8,s,value(45) |x.X? |..Ya |.*.o +---- ;!attack(a) Pattern A1315 |.XO? attack corner eye space |..Y? |.X*O |.... +---- :8,-,value(55) Pattern A1316 |.XY? try to make ko in corner |.*.X |..OX +---- :8,s,value(35) Pattern A1317 |..X? try to make ko in corner |.XYO |.*.O +---- :8,s,value(55) |..A? |.AAO |.*.O +---- ;lib(A) == 4 && attack(A) != WIN Pattern A1318 |..X? create ko |*XYO |.OXO +---- :8,s,value(55) |..A? |*AAO |.OXO +---- ;lib(A) == 2 && attack(A) != WIN Pattern A1319 |.XO? critical point, might give ko |*.Y? |..Xx |.... +---- :8,s,value(61) |.AO? |*.Y? |..Xx |.... +---- ;!attack(A) Pattern A1319b |.XO critical point, might kill |O.Y |*.X |... +--- :8,s,value(30) Pattern A1319c # gf New pattern. (3.1.11) |.XO? critical point, might give ko |O.Y? |X*Xx |.... +---- :8,s,value(61) |.AO? |O.Y? |X*Xx |.... +---- ;!attack(A) Pattern A1320 |X?? try to make nakade instead of playing ko |OYX |*O. +--- :8,s,value(80) Pattern A1321 |X?? prevent throwin for ko |.YX |*O. +--- :8,s,value(45) Pattern A1322 |X.X sometimes correct attack point |..Y |.*. +--- :8,s,value(40) Pattern A1323 |XXO eye stealing move might kill |..Y |*.X |... +--- :8,s,value(50) Pattern A1324 |oo??? |..O.. even if another attack works, try this first |...O. |..Y*. |..... |..... +----- :8,-,value(90) Pattern A1325 # This pattern could be generalized OOO.| kill the eye .X*.| X.Y.| ?X..| ----+ :8,-,value(50) Pattern A1326 +----- block to kill |..... |...X* |..Y.O |..OO. |oo??? :8,-,value(85) Pattern A1327 +----- try to kill without ko |..... |.*.XO |..Y.O |.XOO. |oo??? |oo??? :8,Cs,value(85) Pattern A1328 |xX?? almost certain life if defender plays here |xoY? |.*oX |..xx +---- :8,s,value(45) Pattern A1329 |X?? try to make nakade |OY? |*Ox |Oox +--- :8,s,value(45) Pattern A1330 |XX? take ko to maybe kill |*YX |XOX |OoO +--- :8,s,value(75) |AA? |*AA |XaA |OoO +--- ;lib(A)<=3 && defend(a) != WIN Pattern A1331 |*Y? capture to deny X trivial life |XOX |O.O +--- :8,s,value(55) |*Y? |XOX |OaO +--- ;oplay_attack(a,a) Pattern A1332 |xYx? make nakade or escape |O.*X |.X.x +---- :8,s,value(55) |xYx? |Oa*X |.X.x +---- ;oplay_defend(*,a,*) Pattern A1333 |XXY? try to get ko |.*.X |XOOX |...X +---- :8,s,value(55) |XXYa |.*.B |XOOB |...B +---- ;!x_somewhere(a) || (lib(B) <= 6) Pattern A1334 |XXY? try to get ko |XO.X |XOOX |..*X +---- :8,s,value(55) Pattern A1335 |..X? vital point |*.YO |.XOO +---- :8,s,value(41) |..X? |*aYb |.Xbb +---- ;oplay_attack(a,a) != 0 && !oplay_attack(a,b) Pattern A1335b # gf New pattern. (3.1.1) |..X? vital point |*OYO |.X.O +---- :8,s,value(41) |..X? |*cYO |.XaO +---- ;oplay_attack(a,c) != 0 || oplay_attack(a,a) Pattern A1336 |XXYO very special pattern |...X |*XO. +---- :8,s,value(35) |XXYO |acbX |*Xd. +---- ;!oplay_attack(*,a,b,b) && oplay_defend(*,c,d) Pattern A1337 |XXx? kill without ko |.OYx |XOOX |.*oX +---- :8,s,value(35) Pattern A1338 |OOo |OXO kill without ko |X.X |.Yx |*OX +--- :8,s,value(35) Pattern A1339 |xXx strange things happen at the 1-2 point |X.Y |.*x +--- :8,s,value(75) Pattern A1340 # gf New pattern. (3.1.13) |X.X? destroy eyespace |.OYx |.*.X +---- :8,s,value(40) Pattern A1341 # tm new pattern 3.1.13 # Useful for manyfaces:8 ?X?| vital corner point X.X| Y..| X.*| ...| ---+ :8,s,value(40) Pattern A1342 # tm new pattern (3.1.14) |.XO |..X |*.X |.YX |.O? :8,Cs,value(50) Pattern A1343 # gf New pattern. (3.1.14) # tm modified (3.1.15) (cho1:150) |xxx? destroy eyespace |..YX |.*.x +---- :8,s,value(46) Pattern A1344 # tm new pattern (3.1.15) (see cho1:150) # This pattern shouldn't be necessary. It's definitely a vital move # for the eyespace. XXY? consolidate or destroy eyespace X.*O ---- :8,s,value(46) Pattern A1345 # tm new pattern (3.1.15) (see cho1:160) |.X.O special corner shape |.*YO |...O +---- :8,s,value(46) Pattern A1346 # tm new pattern (3.1.15) (see cho1:200) ??Xx| important 1-2 attack. XY.x| x.*.| ----+ :8,s,value(75) Pattern A1347 # gf New pattern. (3.1.15) |xx? |..X destroy eyespace |*.Y |OX? +--- :8,s,value(35) Pattern A1348 # gf New pattern. (3.1.15) |xX? fighting ko is only chance to kill |OxX |OYX |X*X +--- :8,s,value(75) |xX? |axB |aBB |X*B +--- ;lib(a)==1 && lib(B)<=3 && defend(a)!=WIN Pattern A1349a # gf New pattern. (3.3.20) |.O? only chance to kill, sometimes tesuji |.XO |X.Y |..X |*.X |.X? +--- :8,s,value(75) |.O? |.XO |X.Y |..X |*.X |.A? +--- ;!attack(A) Pattern A1349b # gf New pattern. (3.3.20) |oO? only chance to kill, sometimes tesuji |OXO |.XO |X.Y |..X |*.X |.X? +--- :8,s,value(75) |oO? |OXO |.XO |X.Y |..X |*.X |.A? +--- ;!attack(A) Pattern A1350 # gf New pattern. (3.3.20) # See ld_owl:68. |XXX? try to kill without ko |O.X? |X.YX |.*.O +---- :8,s,value(75) |AAA? |O.A? |X.AA |.*.O +---- ;lib(A)==3 Pattern A1351 # mh New Pattern (3.5.4) # see ld_owl:406-412 |OO?? better than capturing |XOX? |.Y.X |*.X? |..X? +---- :8,s,value(75) Pattern A1352a # gf New pattern. (3.7.3) |?X?? destroy eyespace |X.Y? |.*YX |...x +---- :8,s,value(55) |?X?? |XaY? |.*YX |...x +---- ;proper_eye(a) Pattern A1352b # gf New pattern. (3.7.3) |?X?? destroy eyespace |X.Y? |.*YX |...x +---- :8,s,value(75) |?X?? |XaY? |c*YX |.b.x +---- ;proper_eye(a) && oplay_defend(*,b,c,*) ######################################################### # # # Invasion patterns # # # ######################################################### # # # These are not ordinary owl attack patterns. # # # ######################################################### Pattern A1401 # nn Increased value a bit (3.3.12) Y...| don't let opponent live easily in the corner .*..| ....| ....| ----+ :\,-,value(46) Pattern A1403 #evand new pattern 3.3.13 Y.O.| .*..| o...| ....| ----+ :8,-,value(55) ######################################################### # # # Ko patterns # # # ######################################################### Pattern A1501 # Necessary to have one O stone in the pattern to identify the goal. # The helper is reused from a similar defense pattern. ?O fill outer liberty in two-step ko Y* :8,-,value(35) ?O A* ;lib(A)==2 && olib(*)>1 && finish_ko_helper(A) Pattern A1502 # Necessary to have one O stone in the pattern to identify the goal. # The helper is reused from a similar defense pattern. Y*O fill outer liberty in two-step ko :-,-,value(35) A*O ;lib(A)==2 && olib(*)>1 && finish_ko_helper(A) Pattern A1503 OX? capture ko to stop escape Y*X OXO ?O? :8,Cs,value(75) OX? A*B OXO ?O? ;owl_escape_value(A) > 0 || owl_escape_value(B) > 0 Pattern A1503a #Same as 1503 - differnt anchor. OX? capture ko to stop escape X*Y OXO ?O? :8,Cs,value(75) OX? A*B OXO ?O? ;owl_escape_value(A) > 0 || owl_escape_value(B) > 0 Pattern A1504 # nn New pattern (3.3.13) # redundant, as long as A1107c isn't removed OXXXO threaten to take an eye by ko .OY.X *..X. ----- :8,-,value(60) OXXXa bcY.X *..X. ----- ;!attack(a) && !xplay_defend(b,c) ######################################################### # # # Specific edge attacks # # # ######################################################### Pattern A1601 ?xx Y.. .*X --- :8,s,value(35) ?xx Yac b*X --- ;!safe_omove(a) && oplay_defend(*,a,*) && !oplay_attack(*,b,c,c) Pattern A1602 .YO? peep to destroy eyeshape *.XO .X.? ---- :8,Cs,value(55) aYO? *bCO .X.? ---- ;!oplay_defend(*,a,b,C) Pattern A1603 .YO? peep to destroy eyeshape *.XO ..X? ---- :8,Cs,value(55) aYO? *bCO ..X? ---- ;!oplay_defend(*,a,b,C) Pattern A1604 ?XYO? peep to destroy eyeshape O*.XO ..X.? ----- :8,Cs,value(55) ?XYO? O*aBO ..X.? ----- ;!oplay_defend(*,?,a,B) Pattern A1605 ?XYO? peep to destroy eyeshape O*.XO ...X? ----- :8,Cs,value(55) ?XYO? O*aBO ...B? ----- ;!oplay_defend(*,?,a,B) Pattern A1606 XYO? peep to destroy eyeshape *.XO .X.? ---- :8,Cs,value(35) XYO? *aBO .X.? ---- ;!oplay_defend(*,?,a,B) Pattern A1607 XYO? peep to destroy eyeshape *.XO ..X? ---- :8,s,value(35) XYO? *aBO ..X? ---- ;!oplay_defend(*,?,a,B) Pattern A1608 XYO? throw in to destroy eyespace .*XO .X.O ---- :8,s,value(45) Pattern A1608b xXYO? atari to reduce eyespace, with further reduction as followup ...XO ..X*O ----- :8,s,value(50) # nn Removal candidate (3.3.13) # Success rate in regressions : 0% (0/35) Pattern A1609 ?OOY? O.X.X OX.*. ----- :8,s,value(35) Pattern A1610 # gf New pattern. (3.1.11) OXYX? edge tesuji X...O .X.*. ----- :8,-,value(45) bAAA? XedfO .Xc*. ----- ;lib(A)==3 && !attack(b) && !oplay_attack(*,c,d,e,f,f) Pattern A1611 # gf New pattern. (3.1.12) OXYXx? edge tesuji X...XO ..*... ------ :8,-,value(35) OXYXx? X.edXf .a*cb. ------ ;oplay_attack(*,a,b,c,d,e,e) && !oplay_attack(*,f) Pattern A1612 # tm New pattern (3.1.15) ?*Y?? ?X.X. ?.X.O ----- :8,-,value(45) ?*Y?? ?eDX. ?BXCA ----- ;lib(A) > 2 && !oplay_defend(*,?,B,?,C,?,D,e) Pattern A1613 # tm New Pattern (3.1.17) ?XY? XO.x OX*X ---- :8,s,value(75) ######################################################### # # # Threats to capture # # # ######################################################### Pattern AC01 # pp New pattern (3.5.5). xXO threaten a snapback x.Y *.X --- :8,cs, threatens_to_capture(A), value(25) xXB x.A *.A --- ; lib(A) == 2 && lib(B) > 1 && olib(*) > 1 ######################################################### # # # Threats to destroy eyes # # # ######################################################### Pattern AE01 # pp New pattern (3.5.5). |OXx threaten to destroy the eye in ko |X.X |.Yx |.*. +--- :8,cs, threatens_eye(a), value(20) |BXx |XaX |.Yx |.*. +--- ; owl_proper_eye(a) && !attack(B) ######################################################### # # # Reverse sente attacking moves # # # ######################################################### # END OF FILE