# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # This is GNU Go, a Go program. Contact gnugo@gnu.org, or see # # http://www.gnu.org/software/gnugo/ for more information. # # # # Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, # # 2008 and 2009 by the Free Software Foundation. # # # # This program is free software; you can redistribute it and/or # # modify it under the terms of the GNU General Public License # # as published by the Free Software Foundation - version 3, # # or (at your option) any later version. # # # # This program is distributed in the hope that it will be # # useful, but WITHOUT ANY WARRANTY; without even the implied # # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # # PURPOSE. See the GNU General Public License in file COPYING # # for more details. # # # # You should have received a copy of the GNU General Public # # License along with this program; if not, write to the Free # # Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # # Boston, MA 02111, USA # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Database of influence patterns. # # ? - don't care # . - empty # O - color to move # Q - same as O, plus sets the pattern anchor # X - opposite color of O # o - O or empty # x - X or empty # , - point which influence can't pass through # A/D patterns: # ! - point where influence gets weakened when passing through # (permeability multiplied by 0.7) # B patterns: # ! - marks an intrusion for the anchor stone with indicated value # # # Four different classes of patterns are used here. # # A - Patterns stopping O influence # D - Patterns stopping X influence # B - Intrusions (where O can intrude into X'x territory) # t - Nonterritory patterns indicating points where one color cannot # get territory # # Constraints are as usual. # B patterns are matched for the color to move, and for the color having # made a move in followup influence, in order to compute the followup # value of this move. (Only patterns including the played move or any # stone saved by this move are taken into account.) # For the followup influence, a pattern is used if the usual constraint # is satisfied, and if the action returns true. See the influence # documentation for explanation and influence.c for details. attribute_map value_only goal_elements none callback_data XO,! ######################################################### # # # Influence blocking patterns (barriers) # # # ######################################################### Pattern Barrier1 O,O :+,D Pattern Barrier1b # gf Corrected symmetry. (3.1.23) o,o O,O :|,D Pattern Barrier2 xxx X,X xxx :+,A Pattern Barrier3 .,. X,X :|,A .b. cad ;!(oplay_break_through(a,b,c,b,d)==WIN) Pattern Barrier4a |,O :-,D |aO ;!oplay_attack(a,a) Pattern Barrier4b |,o? |.OX :8,OD |ao? |.OX ;!oplay_attack(a,a) Pattern Barrier5 xXx x,x --- :|,A Pattern Barrier6 ,X ,. -- :8,A cd ba -- ;oplay_attack_either(a,b,c,a,c) || !oplay_attack_either(a,b,b,d) Pattern Barrier6b # gf New pattern. (3.3.10) # See century2002:85. OX ,. -- :8,A aX ,. -- ;!defend(a) Pattern Barrier7 XX ,, -- :|,A Pattern Barrier8 ,O O, :X,D Pattern Barrier9 ,X X, :X,A Pattern Barrier10 XO O, :\,D Pattern Barrier11 OX X, :\,A Oc ba ;!safe_omove(a) || oplay_defend_both(a,b,c) Pattern Barrier12 O,. ?,O :8,D Pattern Barrier13 X,X X,X :+,A Pattern Barrier14 X,o X,X :8,A Xbo Xac ;!oplay_attack_either(a,b,b,c) Pattern Barrier15 xxx X,x x,X xxx :8,A Pattern Barrier16 X,. .,X :O,A cae fbd ;(oplay_attack_either(a,b,f,a,f) || !oplay_attack_either(a,b,c,d)) ;&& (oplay_attack_either(b,a,e,b,e) || !oplay_attack_either(b,a,c,d)) Pattern Barrier16b X,X .,X :8,A cad fbd ;(oplay_attack_either(a,b,f,a,f) || !oplay_attack_either(a,b,c,d)) ;&& !oplay_attack(b,a,c) Pattern Barrier17 X,. O,X :8,A cae Obd ;!oplay_attack_either(a,b,c,d) ;&& (oplay_attack_either(b,a,e,b,e) || !oplay_attack_either(b,a,c,d)) Pattern Barrier18 X,O O,X :8,A caO Obd ;!oplay_attack_either(a,b,c,d) && !oplay_attack_either(b,a,c,d) Pattern Barrier19 O,,O ...o :8,D dbaO .c.o ;!oplay_break_through(a,b,c,a,c,d) Pattern Barrier20 # gf Corrected symmetry. (3.1.23) O,,O O..o :8,D Obae Ocdo ;!oplay_attack_either(a,b,c,a,c) || !oplay_attack_either(b,a,d,d,e) Pattern Barrier21 ?xx? xxxx X,,X xxxx ?xx? :+,A Pattern Barrier22 x..x X,,X x..x :|,A x..x XdaX xcbx ;!oplay_attack_either(a,b,c,d,b,d) && !oplay_attack_either(d,c,b,a,c,a) Pattern Barrier22a # This pattern could have '|' symmetry, but to improve the chances # that it's matched before the expensive next one, we let it have # '8' symmetry. ?xxxx? xxxxxx xX,,Xx xx,,xx xxxxxx ------ :8,A Pattern Barrier22b X..X x,,x xxxx :|,A XdaX xcbx xxxx ;!oplay_attack_either(a,b,c,d,b,d) && !oplay_attack_either(d,c,b,a,c,a) Pattern Barrier23 # gf Revised. (3.3.17) O,,. .,,O :O,D Oab. .dcO ;oplay_attack_either(a,b,c,d,b,d) || oplay_defend_both(a,b,c,d,a,c) Pattern Barrier24 ?O... oo,,O ?O... :-,D Pattern Barrier25 ?xx? xxxx X,.x x.,X xxxx ?xx? :8,A Pattern Barrier26 # gf Revised pattern. (3.5.3) X,,x x,,X :O,A Xdax xcbX ;!oplay_attack_either(a,b,c,d,b,d) && !oplay_attack_either(d,c,b,a,c,a) Pattern Barrier27 oOo o,o o,o --- :|,D Pattern Barrier28 xXx x,x x,x --- :|,A Pattern Barrier29 ,O ,X -- :8,D ,b aX -- ;!oplay_attack_either(a,a,b) Pattern Barrier30 OO ,X -- :8,D OO aX -- ;!oplay_attack(a,a) Pattern Barrier31 ?.O,o ?.X,o o..,o ----- :8,D Pattern Barrier32 ?Ooo X,,o ..,o ---- :8,D Pattern Barrier33 XOoo .X,o ..,o ---- :8,D XOoo .Bao ..,o ---- ;oplay_attack(a,B) Pattern Barrier34 XOo .,o .,o --- :8,D Pattern Barrier34b XOO .,X .,? --- :8,D XOO .,A .,? --- ;attack(A) Pattern Barrier35 oOoOo o,,,o o,,,o ----- :|,D Pattern Barrier36 xXxXx x,,,x x,,,x ----- :|,A Pattern Barrier37 OXxx .,,x ..,x ---- :8,A OAbx .cdx ..,x ---- ;lib(A)>3 || (!legal_omove(b)) ;|| (lib(A)>2 && (olib(b) <= 2 || oplay_attack_either(c,d,b,b,c))) Pattern Barrier38 OXO ,,? --- :8,D OAO ,,? --- ;lib(A)==1 Pattern Barrier39 oooO? oO..o o.,,o o.,,o ----- :8,D Pattern Barrier40 xxxX? xX..x x.,,x x.,,x ----- :8,A Pattern Barrier41a O.XO .,,O :8,D OcXO .baO ;!oplay_attack_either(a,b,c,a,c) Pattern Barrier41b O.XO .,,. :8,D OcXe .bad ;oplay_defend_both(a,b,c,d,a,e) Pattern Barrier42 OX? .,O :8,D cD? baO ;oplay_attack_either(a,b,b,D) || oplay_defend_both(a,b,a,c) Pattern Barrier43 ?X..O oO,,o o..,o ----- :8,D Pattern Barrier44 ?X.O O,,. ..,o ---- :8,D ?EbO Oacd ..,o ---- ;oplay_attack_either(a,b,c,d,d,b) && !oplay_defend_both(a,c,b,c,E) Pattern Barrier45 X.XX X,,. .,,. ---- :8,A Pattern Barrier46 .X.O O.., .,,o :8,D Pattern Barrier47 ooOoOoo oo,,,oo oo,,,oo oo,,,oo ------- :|,D Pattern Barrier48 xxxxxxx xxXxXxx xx,,,xx xx,,,xx xx,,,xx ------- :|,A Pattern Barrier49 O.? ,,. .,O :/,D Pattern Barrier50 O?? ,,? .,O :/,D Pattern Barrier51 o.?? O,,O :8,D Pattern Barrier52 o.O.? o,X.. .,... ----- :8,sD o.b.? oaX.. .,... ----- ;!oplay_attack(a,b) Pattern Barrier53 ?O? OXO .,x --- :8,sD Pattern Barrier54 xx.xx xXOXx x,,,x ..... ----- :|,A xx.xx xXOXx x,a,x ..... ----- ;oplay_attack(a,a) Pattern Barrier55 OX.O .,,. :8,sD bA.c .,,. ;lib(A)<=3 && lib(b)>=3 && lib(c)>=3 Pattern Barrier56 # ab generalized (3.5.5) xXOo xOX, .x., ---- :8,sD xXbo xOXa .x., ---- ;!oplay_attack(a,b) Pattern Barrier56b xXOo XO., .X., ---- :8,sD xXOo XOa, .X., ---- ;safe_omove(a) Pattern Barrier57 X, O? :8,sD A, O? ;lib(A)==1 Pattern Barrier58 o,o OXO :8,sD o,o bAc ;lib(A)<=2 && lib(b)>1 && lib(c)>1 Pattern Barrier59 ,. XO :8,sD ab XO ;oplay_attack(a,b,b) Pattern Barrier60a .X. ... .!. .!. --- :|,XA Pattern Barrier60b .O. .,. .!. .!. --- :|,OD Pattern Barrier61 |oooooo |!!...o |...O.o |..X..o |....!o |....!o +------ :/,D Pattern Barrier62 ?xX? ...O .!.. :8,OXD Pattern Barrier63 # gf New pattern. (3.3.10) oX.. O,.. .,,. .... ---- :8,D Pattern Barrier64 # gf New pattern. (3.3.10) oX.. O,,. ..,, .... ---- :8,D oXc. Oab. ..,, .... ---- ;!oplay_attack(a,b,c,c) Pattern Barrier65 # ab New (3.3.10) ?O. X,. x,. --- :8,OD ?O. Ca. xb. --- ;oplay_attack(a,b,C) Pattern Barrier66 # gf New pattern. (3.3.13) |..X... |...... |..XO.. |..,,.. |..,... |...... +------ :8,D Pattern Barrier67 # gf New pattern. (3.5.3) ....O O,,,. ..... ..... ----- :8,D ######################################################### # # # Intrusion patterns (secondary influence sources) # # # ######################################################### Pattern Intrusion1 ???x ...X !!.Q ---- :8,B,value(30) ???x ..cX !!ba ---- >return (lib(a)>2 || (lib(a) == 2 && connect_and_cut_helper(a,b,c))); Pattern Intrusion1a |??x |!!X |..Q +--- :8,B,value(30) |??x |.cX |.ba +--- ;safe_omove(c) >return (lib(a)>2 || (lib(a) == 2 && connect_and_cut_helper(a,b,c))); Pattern Intrusion1b xxxx X..X ..!Q ---- :8,B,value(30) xxxx X.cX ..ba ---- >return (lib(a)>2 || (lib(a) == 2 && connect_and_cut_helper(a,b,c))); Pattern Intrusion1c xxxx X..X .!.Q ---- :8,B,value(30) xxxx X.dX .acb ---- ;safe_omove(a) >return (lib(b)>2 || (lib(b) == 2 && connect_and_cut_helper(b,c,d))); Pattern Intrusion1d # ab New pattern (3.1.24). xxxx !!.X ...Q ---- :8,B,value(30) xxxx a!cX ..bQ ---- ;!oplay_defend(a,b,c,b) Pattern Intrusion2 xXx? ...Q !!.. ---- :8,B,value(30) xXx? ..bd a!c. ---- ;!oplay_attack(a,b,c,d) >return (!xplay_attack(b,d)); Pattern Intrusion3 # ab 3.1.22 Constraint added (see 13x13:52) xxX? ...Q !!.. ---- :8,B,value(30) xxX? ..bd a!c. ---- ;!oplay_attack(a,b,c,d) >return (!xplay_attack(b,d)); Pattern Intrusion4 XQOX !!X. !... ---- :8,B,value(30) XdOX baC. !... ---- ;oplay_attack(a,b,C) >return (!xplay_attack(a,d)); Pattern Intrusion5a X.QX .!X. .!.. ---- :8,B,value(30) XbdX .aC. .!.. ---- ;oplay_attack(a,b,C) >return (!xplay_attack(b,d)); Pattern Intrusion5b .QX !X. :8,B,value(30) bfE aDc ;!oplay_defend_both(a,b,c,D,E) >return (!xplay_attack(b,f)); Pattern Intrusion6 ?QX X!! x.. :8,B,value(30) ?aX Xb! x.. >return (!xplay_attack(b,a)); # Pattern Intrusion7a # # QX. # .!! # X.x # # :8,BW,value(30) # # cA. # b!! # X.x # # ;lib(A)==2 # >return (!xplay_attack(b,c)); # Pattern Intrusion7b QX !! :8,B,value(30) cC ba ;oplay_attack_either(a,b,C,b); >return (!xplay_attack(b,c)); Pattern Intrusion8a # ab 3.1.22 revised constraint (see territory valuation in 13x13:2) X.X Q!! ?X. :8,B,value(30) B.X ca! ?X. ;oplay_attack(a,B) && !attack(B) >return (!xplay_attack(a,c)); Pattern Intrusion8b # ab New (3.3.18) ?X Q! X! :8,B,value(30) ?B ca X! ;oplay_attack(a,B) && !attack(B) >return (!xplay_attack(a,c)); Pattern Intrusion9 X. QX .! :8,B,value(30) X. QC ba ;oplay_attack(a,b,C) Pattern Intrusion10 # ab Modified action constraint. (3.3.20) xxx?? ..XO? !!.Q? ----- :8,B,value(30) xxxef ..COg !badh ----- ;oplay_attack_either(a,b,b,C) >return (!xplay_attack(a,d) && o_somewhere(g,e,f,h)); Pattern Intrusion11 # O can intrude on either side. The position of the influence source # here isn't entirely accurate. .Q. .X. .!. ... --- :|,B,value(30) dQb cXa .!. ... --- ;oplay_attack(a,b,b) && oplay_attack(c,d,d) Pattern Intrusion12a # O can intrude on either side. The position of the influence source # here isn't entirely accurate. !Q! !X! ... ... --- :|,B,value(30) dQb cXa ... ... --- ;oplay_attack(a,b,b) || oplay_attack(c,d,d) Pattern Intrusion12b oQo .X! ... :8,OB,value(30) odb .Ca ... ;o_somewhere(b) || oplay_attack_either(a,b,b,C) >return (!xplay_attack(b,d)); Pattern Intrusion13 ?OoQ? X.!X. X.!.. ..... ----- :8,B,value(30) ?boa? X.!X. X.!.. ..... ----- ;lib(a)>=2 && lib(b)>=2 Pattern Intrusion14 ?QO? X!X. .!.. .!.. ---- :8,B,value(30) ?QO? XaXd .bc. .!.. ---- ;oplay_attack_either(a,b,c,d,b,d) Pattern Intrusion15 oQo .XO !.X :8,B,value(30) oeo aXd cbX ;!oplay_attack(a,b,c,a) >return (lib(d)>2 && lib(e)>2 && !xplay_attack(a,e)); Pattern Intrusion16 # ab value decreased (3.1.24) Q!. !!. .xX :8,B,value(20) Pattern Intrusion17 # ab value decreased (3.1.24) Q!. .!. XxX :8,B,value(20) Pattern Intrusion18 xXx o.. Q!! o.. xXx :8,B,value(30) Pattern Intrusion19 X.. Q!. o.. xXx :8,B,value(30) X.. ba. o.. xXx >return (!xplay_attack(a,b)); Pattern Intrusion20 oQ! OX! :8,B,value(30) edc fAb ;lib(A)==2 && !oplay_attack(b,b) >return (!xplay_attack(c,d) && xplay_defend_both(e,d,f)); Pattern Intrusion21 Q.X .!. x.. :8,B,value(30) b.X a!. x.. >return (!xplay_attack(a,b)); Pattern Intrusion21b ooX Q!. x.. :8,B,value(30) ooX ba. x.. >return (!xplay_attack(a,b)); Pattern Intrusion22 Q.X ... .!. :8,B,value(10) b.X a.. .!. >return (!xplay_attack(a,b)); Pattern Intrusion23 Q.. .!! --- :8,B,value(10) eb. dca --- ;oplay_attack_either(a,b,c,d,b,d) >return (!xplay_attack(b,e)); Pattern Intrusion24 O.. Q!! --- :8,B,value(30) ba. Q!! --- >return (!xplay_attack(a,b)); Pattern Intrusion25 !!.O !XQ. .... .... ---- :8,B,value(30) Pattern Intrusion26 !!.O .XQ. ..X! .... ---- :8,B,value(30) Pattern Intrusion27 Q.. .!. .!. ... :8,B,value(30) Pattern Intrusion28 ??Q? x.!X ..!. .... ---- :8,B,value(30) ??Q? xdaX .cb. .... ---- ;oplay_attack_either(a,b,c,d,b,d) Pattern Intrusion29 oooo oooo .Q.o .... .!!. .!.. :8,B,value(30) Pattern Intrusion30 oooo oooo XQ.o .... .!!. .!.. :8,B,value(30) oooo oooo XQfo dbc. .ae. .!.. ;oplay_attack(a,b,c,d,e,f,f) Pattern Intrusion30a ???? ???? oQoo ...X .!.. ???? :8,B,value(30) ???? ???? ocoo .b.X .a.. ???? ;oplay_connect(a,b,a,c) >return (!xplay_attack(b,c)) Pattern Intrusion31 ooo XQ. .!! .!. ?.? :8,B,value(30) ooo Xb. .a! .!. ?.? >return (!xplay_attack(a,b)); Pattern Intrusion32 ooo XQ. .!. ?.? :8,B,value(30) ooo Xb. .a. ?.? >return (!xplay_attack(a,b)); Pattern Intrusion33 oOo XQX .!. ?.? :8,B,value(30) Pattern Intrusion34 o.o XQX .!. ?.? :8,B,value(30) obo XQX .a. ?.? ;oplay_attack(a,b,b) >return 0; Pattern Intrusion35 |..X?? |...Q? |..X!X |...!. |...!. +----- :8,B,value(30) |..X?? |.baQ? |.fXcX |..ed. |...!. +----- ;oplay_attack(a,b,c,d,e,f,d) Pattern Intrusion36 ?X Q! Xx :8,B,value(30) ?X ba Xx ;safe_omove(a) >return (!xplay_attack(a,b)); Pattern Intrusion37 ?X Q! oX :8,B,value(30) ?X ba oX ;safe_omove(a) > return (!xplay_attack(a,b)); Pattern Intrusion38 X? !Q -- :8,B,value(5) X? ab -- ;safe_omove(a) > return (!xplay_attack(a,b)); Pattern Intrusion39 ?Xx Q!. o!X :8,B,value(30) ?Xx ba. o!X ;safe_omove(a) >return (!xplay_attack(a,b)); Pattern Intrusion40 # gf Revised constraint. (3.3.10) X! Q? :8,B,value(30) A! Q? ;lib(A)==1 && attack(A) Pattern Intrusion41 X! Q! :8,B,value(30) A! Q! ;lib(A)==1 Pattern Intrusion42 ?Ooo .XQo .!X. .... ---- :8,B,value(30) ?Oeo bXQo .aDc .... ---- ;(o_somewhere(e) || !safe_xmove(e)) && !oplay_defend(a,b,c,D) Pattern Intrusion43 ??XO ..XQ ?!!o :8,B,value(50) ??AO .cAQ ?dbo ;lib(A)==2 && !attack(A) && !oplay_attack(b,c,d,d) Pattern Intrusion44a # gf New pattern. (3.1.20) .XQ !!o :8,B,value(30) cDf bae ;safe_omove(a) ;&& (o_somewhere(e) || oplay_attack(a,e,e)) ;&& !oplay_defend_both(a,b,c,b,D) >return (!xplay_attack(a,f) && (o_somewhere(e) || (!xplay_attack(e,f)))); Pattern Intrusion44b # ab New pattern. (3.3.5) ..X? .XQo !!o? :8,B,value(30) .dG? eFho cab? ;safe_omove(a) ;&& (o_somewhere(b) || oplay_attack(a,b,b)) ;&& !oplay_defend_both(a,c,d,e,F,G) >return (!xplay_attack(a,h)); Pattern Intrusion45 # gf New pattern. (3.1.20) X.Qo .!X. .... ---- :8,B,value(30) XbQo .aC. .... ---- ;safe_omove(a) && oplay_attack(a,b,C) Pattern Intrusion46 # gf New pattern. (3.1.22) # gf Fixed diagram inconsistency. (3.1.23) # FIXME: This pattern exaggerates the intrusion since X can stop it # on one of the sides, but we don't know which one he will # choose. This may or may not be a problem in practice. x.Q.x .!X!. x...x x...x ----- :|,B,value(10) x.dbx .cXa. x...x x...x ----- ;!oplay_attack(a,b,c,d) Pattern Intrusion47 # gf New pattern. (3.1.23) ??X.? o..!. Q.... ----- :8,B,value(20) ??X.? o..!. a.... ----- ;lib(a)>2 Pattern Intrusion48 # ab New pattern. (3.1.23) # FIXME: This would need a constraint. The one below did not work. # gf Revised. (3.5.3) ?x. ... Q.! ..X :8,B,value(20) # .x. # fce # Oba # .dX # # ;oplay_attack(a,b,c,d,e,f,f) Pattern Intrusion49 # ab added (3.1.24) XQX .!! :8,B,value(30) bcX .a! ;oplay_attack(a,b) && ! attack(b) >return (!xplay_attack(a,c)); Pattern Intrusion50 # ab added (3.1.25) ?.. QX! ... --- :8,OB,value(30) ?c. dXa .b. --- ;!oplay_attack_either(a,b,c,c,d) Pattern Intrusion51a ?Q? X.X .!. :|,B,value(30) ?e? CaD .b. ;oplay_break_through(a,b,C,b,D) >return(!xplay_attack(a,e)); Pattern Intrusion51b # ab New pattern. (3.3.5) # This is a bit incorrect, as usually X can choose on which side the # intrusion is allowed to happen. # Due to reading depth limitations, oplay_break_through == CUT is not # sufficient (see nngs1:40). # pp Revised constraint (3.5.1) # Ko checks prevent 0.5 point "breaks through" with no further threat. ?O? XQX !X! :|,BX,value(20) ?O? aQc dbe ; (oplay_break_through(a,b,c)==WIN ; && (!ko(a) || oplay_attack_either(d,b,c)) ; && (!ko(c) || oplay_attack_either(e,b,a))) Pattern Intrusion52 # gf New pattern. (3.3.3) X.x Q!. .X. :8,B,value(30) X.x ba. .X. >return (!xplay_attack(a,b)); Pattern Intrusion53 # gf New pattern. (3.3.3) X!. QX! :8,B,value(50) Xa. QB! ;!oplay_defend(a,B) Pattern Intrusion54 # ab New pattern (3.3.10) # X cannot play double hane. ..X? .XQo !.oo :8,B,value(40) .eG? fXQb !dac ;(o_somewhere(a) || o_somewhere(b) || o_somewhere(c)) ;&& (o_somewhere(a) || oplay_attack(d,a,a)) && oplay_attack(e,f,G) Pattern Intrusion55 # gf New pattern (3.3.16) ???? xxx? .!.o .!.Q ---- :8,B,value(30) efg? bcd? ...o .a.Q ---- ;x_somewhere(b,c,d,e,f,g) && safe_omove(a) Pattern Intrusion56 # gf New pattern (3.3.16) ???? xxx? !..o !..Q ---- :8,B,value(30) fgh? cde? a..o ...b ---- ;x_somewhere(c,d,e,f,g,h) && !oplay_disconnect(a,a,b) Pattern Intrusion57 # gf New pattern (3.3.16) xX !Q X? :8,B,value(30) xX ab X? ;safe_omove(a) >return !xplay_attack(a,b); Pattern Intrusion58 # gf New pattern (3.3.17) XOoo .XQo ..X! ?..! :8,B,value(30) Xgoo bXfo .aXc ?.de ;!oplay_disconnect(f,g) && !oplay_disconnect(a,b,c,d,e,c,f) Pattern Intrusion59 # New pattern (3.3.20) # It is a little drastic, but see arend2:120 for where it is necessary. |x!xx |.!.x |.X.X |XQO? |.oo? :8,B,value(30) |x!xx |.!.x |.X.B |AQO? |.oo? ;!attack(A) && oplay_disconnect(A,B) && !attack(B) Pattern Intrusion60 #pp New pattern (3.5.1) # gf FIXME: This pattern looks rather likely to introduce more # problems than it solves. We may need to find some other # solution to endgame:880. (3.5.7) OQ? this pattern should prevent attempts to cut bamboo joint X.! OO? :8,B,value(20) Pattern Intrusion61 # gf New pattern. (3.5.2) # This pattern is somewhat questionable. See arend:30 and 13x13:16 for # positions where it helps. |..!? |.X.. |.QXX |.OO? :8,B,value(20) |.a!? |bEc. |.QDD |.OO? ;!oplay_connect(a,b,c,D,E) Pattern Intrusion62 # gf New pattern. (3.5.3) # See gifu03:206 .Xo .Q. !XO :8,B,value(20) .Xo bQa cDO ;oplay_attack(c,b,D) >return !safe_xmove(a) && !oplay_defend_both(c,b,a,b,D); Pattern Intrusion63 # gf New pattern. (3.7.10) # Try to discourage unreasonable hane. See gunnar:85. .oOO? .OX.X .QX.. .X..! ----- :8,B,value(50) .oOO? .OXcD .QX.. aXb.! ----- ;olib(a)>1 && !oplay_connect(a,b,c,b,D) ######################################################### # # # Nonterritory patterns # # # ######################################################### Pattern Nonterritory1 # gf Revised constraint. (3.3.10) OxO XoX :|,t OaO XbX >if (!false_eye_territory(a)) non_oterritory(a); >if (!false_eye_territory(b)) non_xterritory(b); Pattern Nonterritory1b # gf Revised constraint. (3.3.10) # gf Revised constraint. (3.3.17) Ox. XoX :8,t Oxb XaX >if ((halfeye(a) || false_eye(a)) && safe_omove(b) > && !false_eye_territory(a)) non_xterritory(a); Pattern Nonterritory1c # gf Revised constraint. (3.3.10) Xo. OxO :8,t Xo. OaO >if (false_eye(a) > && !false_eye_territory(a)) non_oterritory(a); Pattern Nonterritory2 # gf Revised constraint. (3.3.10) ?xO x.X Ox? :8,t ?xO xaX Ox? >if (!false_eye_territory(a)) non_xterritory(a); Pattern Nonterritory3 # gf Revised constraint. (3.3.10) ?oX o.O Xo? :8,t ?oX oaO Xo? >if (!false_eye_territory(a)) non_oterritory(a); Pattern Nonterritory4 # gf Revised constraint. (3.3.10) |xO |oX :8,t |aO |bX >if (!false_eye_territory(a)) non_oterritory(a); >if (!false_eye_territory(b)) non_xterritory(b); Pattern Nonterritory5 |?O |.. |xX :8,t |?O |ab |xX >non_xterritory(a); >non_xterritory(b); Pattern Nonterritory6 |?X |.. |oO :8,t |?X |ab |oO >non_oterritory(a); >non_oterritory(b); Pattern Nonterritory7 .X? ..O --- :8,t .X? baO --- ;safe_omove(a) >non_xterritory(a); >non_xterritory(b); Pattern Nonterritory7b # gf The old constraint was no good, as can be seen in nngs1:40. After # black R6 this pattern declared S5 non-territory. (3.1.30) .X? ..O --- :8,t cX? baO --- ;safe_omove(a) && oplay_attack(a,b,c,a) && connect_and_cut_helper2(a,b,c) >non_xterritory(c); Pattern Nonterritory7c ..X? ...O ---- :8,t .cD? ebaO ---- ;!oplay_defend_both(a,b,c,b,D) >non_xterritory(b); >non_xterritory(c); >non_xterritory(e); Pattern Nonterritory8 xXO ..o --- :8,t xXO bao --- ;safe_omove(a) >non_xterritory(a); >non_xterritory(b); Pattern Nonterritory8b # gf New pattern. (3.3.7) .XO ... --- :8,t dEO bac --- ;safe_omove(a) && !oplay_defend_both(a,b,c,?,d,b,E) >non_xterritory(d); Pattern Nonterritory9 ...X X..? ?oO? :8,t .cbX X.a? ?oO? ;safe_omove(a) >non_xterritory(b); >non_xterritory(c); Pattern Nonterritory10 ..x ... XOX :8,t edx cab XOX ;safe_omove(a) >non_xterritory(b); >non_xterritory(c); >non_xterritory(d); >non_xterritory(e); Pattern Nonterritory11 oOX OX. .X. --- :8,t oOX OBc aB. --- ;safe_omove(a) && oplay_attack(a,B) >non_xterritory(c); Pattern Nonterritory12 .? O. :/,t bc Oa >non_xterritory(a); >non_xterritory(b); >non_xterritory(c); Pattern Nonterritory13 .? X. :/,t a? Xb >non_oterritory(a); >non_oterritory(b); Pattern Nonterritory14 .? .. OX :8,t c? ab OX ;safe_omove(a) >non_xterritory(a); >non_xterritory(b); >non_xterritory(c); Pattern Nonterritory15 |.? |.. |.. |OX :8,t |ef |cd |ab |OX ;safe_omove(a) >non_xterritory(a); >non_xterritory(b); >non_xterritory(c); >non_xterritory(d); >non_xterritory(e); >non_xterritory(f); Pattern Nonterritory16 |.? |.X |.. |OX :8,t |e? |cd |ab |OX ;safe_omove(a) >non_xterritory(a); >non_xterritory(b); >non_xterritory(c); >non_xterritory(d); >non_xterritory(e); Pattern Nonterritory17 |.. |XO |.X :8,t |ac |Xd |bX ;!oplay_defend_both(a,b,?,c,a,d) >non_oterritory(a); >non_oterritory(c); Pattern Nonterritory17b # gf New pattern. (3.3.7) |O. |XO :8,t |ba |Xc ;!xplay_defend_both(a,b,c) >non_oterritory(a); Pattern Nonterritory18a .XOo ..xO ---- :8,t dEOo bacO ---- ;!oplay_defend_both(a,b,c,?,d,b,E) >non_xterritory(a); >non_xterritory(b); >non_xterritory(d); Pattern Nonterritory18b ..XOo ...xO ----- :8,t fbXOo dcaeO ----- ;!oplay_defend_both(a,b,c,d,e,?,f,d,b) >non_xterritory(a); >non_xterritory(b); >non_xterritory(c); >non_xterritory(d); >non_xterritory(f); Pattern Nonterritory19 # gf New pattern. (3.1.18) .? *X .O :8,t b? *X aO ;oplay_attack(*,a,a) && safe_omove(*) >non_xterritory(*); >non_xterritory(b); Pattern Nonterritory20 # gf New pattern. (3.1.18) *X .O :8,t *X ab ;attack(b) && oplay_attack(*,b) >non_oterritory(a); Pattern Nonterritory21 .. .X O? :8,t cb aX O? ;!oplay_attack(a,b,b) && !oplay_attack(b,a,a) >non_oterritory(a); >non_oterritory(b); >non_oterritory(c); Pattern Nonterritory22 .? *X O? :8,t a? *X O? ;safe_omove(*) >non_xterritory(*); >non_xterritory(a); Pattern Nonterritory23 # tm New Pattern (3.1.20) O. :-,t Oa >non_xterritory(a); Pattern Nonterritory24 # tm New Pattern (3.1.20) X. :-,t Xa >non_oterritory(a); Pattern Nonterritory25 # gf New pattern. (3.1.20) |XO |.. :8,t |AO |bc ;lib(A)==2 && connect_and_cut_helper(A,b,c) >non_oterritory(b); >non_oterritory(c); Pattern Nonterritory26 # gf New pattern. (3.1.20) ?.X OX. ?OX :8,t ?aX OXb ?OX ;safe_omove(a) >non_xterritory(b); Pattern Nonterritory27 # gf New Pattern (3.1.22) O.. :-,t Oab ;safe_omove(a) >non_xterritory(b); Pattern Nonterritory28 # gf New Pattern (3.1.22) O. x. :8,t Oa xb ;safe_omove(a) >non_xterritory(b); Pattern Nonterritory29 # gf New pattern. (3.1.23) ?OO. X... ---- :8,t ?OOc Xab. ---- ;!safe_omove(a) && oplay_attack(b,a,b) >non_oterritory(b); >non_oterritory(c); Pattern Nonterritory30 # gf New pattern. (3.1.23) ?XX. O... ---- :8,t ?EEd Oabc ---- ;oplay_attack(a,b,b) && !oplay_attack(a,c,b,b) && oplay_attack(a,c,b,E) >non_xterritory(c); >non_xterritory(d); Pattern Nonterritory31 # gf New pattern. (3.1.23) ?XXX. O.... ----- :8,t ?XXXd Oabc. ----- ;oplay_attack(a,b,b) && oplay_attack(a,c,b,c) >non_xterritory(c); >non_xterritory(d); Pattern Nonterritory32 # gf New pattern. (3.1.23) # gf This pattern is somewhat problematic. O can often block at d to # secure e or block at b to secure c. The real point of the pattern # is that O can't secure both, but there's no way to express this # accurately. See gunnar:15 for a position where this pattern is # bad. (3.3.17) ..O ... X.. :/,t e.O da. Xbc ;!oplay_attack(a,b,c,d,e,d) >non_oterritory(a); >non_oterritory(c); >non_oterritory(e); Pattern Nonterritory33 # gf New pattern. (3.1.30) X.O ... ..X :/,t X.O ca. dbX ;!oplay_attack(a,b,c,a) && !oplay_attack(a,c,b,a) >non_xterritory(b); >non_xterritory(c); >non_xterritory(d); Pattern Nonterritory34 # gf New pattern. (3.1.30) x.O .XO .xO --- :8,t xaO cXO .bO --- ;safe_omove(a) ;&& ((x_somewhere(b) && oplay_attack(a,b)) ; || (!x_somewhere(b) && oplay_attack(a,b,b))) >non_xterritory(c); Pattern Nonterritory35 # gf New pattern. (3.3.4) ..O ..X :8,t caO dbX ;!oplay_attack(a,b,c,a) && !oplay_attack(a,c,b,a) >non_xterritory(b); >non_xterritory(c); >non_xterritory(d); Pattern Nonterritory36 # gf New pattern. (3.3.7) # gf Revised constraint. (3.3.10) OX? .OX .o? --- :8,t OX? baX .o? --- ;lib(a)==2 && attack(a) >non_oterritory(b); Pattern Nonterritory37 # gf New pattern. (3.3.10) # See trevorb:270. X.? .XO .x? --- :8,t Xa? cBO .x? --- ;lib(B)==3 && safe_omove(a) && oplay_attack(a,B) >non_xterritory(c); Pattern Nonterritory38 # gf New pattern. (3.3.10) # See trevorc:930. OX? .OX ..O :8,t OX? .cX .ab ;!xplay_defend_both(a,b,c) >non_oterritory(a); Pattern Nonterritory39 # gf New pattern. (3.3.10) # See trevorc:930. X.O .XO ..X :8,t XaO .DO .bC ;!oplay_defend_both(a,?,b,C,D) >non_xterritory(b); Pattern Nonterritory40 # gf New pattern. (3.3.10) oX. OX. ... ... --- :8,t oX. OXc dab .e. --- ;!oplay_defend(a,b,c,d,a) >non_oterritory(d); >non_oterritory(e); Pattern Nonterritory41 # gf New pattern. (3.3.13) ?oOo X..O ..X? :8,t ?oOo XabO .cX? ;oplay_attack(a,b,b) >non_xterritory(c); Pattern Nonterritory42 # gf New pattern. (3.3.15) OX .O :8,t bX ac ;!xplay_defend_both(a,b,c) && !adjacent_to_defendable_stone_in_atari(b) ;&& !adjacent_to_defendable_stone_in_atari(c) >non_oterritory(a); Pattern Nonterritory43 # gf New pattern. (3.3.15) oOXx O..X oO.X :8,t oODx OabX oOcX ;!oplay_attack(b,D) && !oplay_attack(b,c,c) >non_oterritory(a); Pattern Nonterritory44 # gf New pattern. (3.3.15) OXXx? .OOXx ..... ----- :8,t OXXx? eccXx ..abd ----- ;oplay_attack(a,b,c) && !oplay_attack(b,d,d) >non_oterritory(e); Pattern Nonterritory45 # gf New pattern. (3.3.16) O.X ?X. :8,t OaX ?Cb ;lib(C)==2 && safe_omove(a) && oplay_attack(a,C) && !oplay_attack(a,b,a) >non_xterritory(b); Pattern Nonterritory46 # gf New pattern. (3.3.17) ??X? O... X... ?.X? :8,t ??X? Oab. Xcef ?dX? ;oplay_defend(a,b,c,d,e,f,a) >non_xterritory(b); >non_xterritory(c); >non_xterritory(d); >non_xterritory(e); >non_xterritory(f); Pattern Nonterritory47 # gf New pattern. (3.3.17) ?ooo? X...X :|,t ?ooo? CaebD ;!oplay_attack(a,C) && !oplay_attack(b,D) >non_oterritory(e); Pattern Nonterritory48 # gf New pattern. (3.5.3) # See gifu03:507. ?.? O.. ?XO :8,t ?d? Oab ?Xc ;!oplay_defend_both(a,b,a,c) >non_oterritory(b); >non_oterritory(d); Pattern Nonterritory49 # gf New pattern. (3.5.3) # See gifu03:205. ?O? ..X ..? :8,t ?O? baX dc? ;!oplay_attack(a,b,c,a) && !oplay_attack(a,c,b,a) >non_xterritory(d); Pattern Nonterritory50 # gf New pattern. (3.5.3) # See gifu03:205. ??O X.. ?.. :8,t ??O Xba ?dc ;!oplay_attack(a,b,c,a) && !oplay_attack(a,c,b,a) >non_xterritory(d); Pattern Nonterritory51 # gf New pattern. (3.5.3) # See gifu03:206. .Ox .X. .OX :8,t .Ox bXa cdX ;!safe_omove(a) && !oplay_defend_both(b,a,?,c,b,d) >non_oterritory(c); Pattern Nonterritory52 # gf New pattern. (3.5.3) # See blunder:17. O?? .XO ?.? :8,t O?? aCb ?d? ;lib(C)==2 && !adjacent_to_stone_in_atari(C) && !oplay_attack_either(a,a,b) >non_xterritory(d); Pattern Nonterritory53 # gf New pattern. (3.5.3) # See gifu03:205. O.O .XO ?.? :8,t Obc aXc ?d? ;oplay_attack(a,b,b) && !oplay_attack_either(a,a,c) >non_xterritory(d); Pattern Nonterritory54 # gf New pattern. (3.5.3) # See nicklas4:1103 OX. ... ... --- :8,t ODc eab ... --- ;oplay_defend_both(a,b,c,D,b) && oplay_attack(a,b,a) >non_oterritory(e); Pattern Nonterritory55 # gf New pattern. (3.5.4) ?.X. O... ---- :8,t ?dX. Ocab ---- ;!oplay_attack(a,b,c,a) && !oplay_attack(a,d,c,a) >non_xterritory(b); Pattern Nonterritory56 # gf New pattern. (3.7.1) # See endgame:920. ... X.O ?O. :8,t eac XbO ?Od ;oplay_attack(a,b,c,d,d) >non_xterritory(e); Pattern Nonterritory57 # gf New pattern. (3.7.1) # See endgame:910. |..X |.XO |... +--- :8,t |.eX |bXO |dac +--- ;safe_omove(a) && oplay_attack(a,b,c,d,b) >non_xterritory(e); Pattern Nonterritory58 # gf New pattern. (3.7.2) # See gunnar:56. XOOOX x...x ----- :|,t DOOOE xabcx ----- ;!oplay_attack_either(a,c,D,c) && !oplay_attack_either(c,a,E,a) >non_oterritory(b); Pattern Nonterritory59 # gf New pattern. (3.7.2) # See gunnar:58. ?OOX X... ?OO? :8,t ?OOE Dabc ?OO? ;!oplay_attack_either(a,c,D,c) && !oplay_attack_either(c,a,E,a) >non_oterritory(b); Pattern Nonterritory60 # gf New pattern. (3.7.2) # See gunnar:57. ??OO X... ??OX :8,t ??OO Ecba ??OD ;!oplay_attack_either(a,c,D,c) && !oplay_attack_either(c,a,E,a) >non_oterritory(b); # END OF FILE