Initial commit of GNU Go v3.8.
[sgk-go] / patterns / owl_attackpats.db
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# 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