# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# 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