Initial commit of GNU Go v3.8.
[sgk-go] / patterns / owl_vital_apats.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 urgent offensive pattern database. These are patterns
# which are always matched. The patterns in owl_attackpats.db
# are not matched if owl_shapes finds that the dragon has two
# eyes. So the patterns in this database are exceptional ones
# corresponding to defects in the optical code.
#
# 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
# ! : your defense move against * (if different)
# -, | : 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.
#
attribute_map value_only
goal_elements Xx
callback_data !
Pattern VA1
?x?? threaten two eyes simultaneously
X.X?
.X*O
X.X?
:8,-,value(75)
?x??
A.d?
cX*a
XbX?
; lib(a)>2 && owl_topological_eye(b,A)==2 && owl_topological_eye(c,A)==2 && oplay_attack(*,d)
Pattern VA2
|XXO? remaining ko potential
|..XO
|*X.X
|..XX
+----
:8,s,value(45)
|AAO?
|..XO
|*X.B
|..BB
+----
;lib(A)==2 && lib(B)==2
Pattern VA3
|XX??? may still be possible to kill through bent four in the corner
|OXx?O
|O.XX*
|.....
+-----
:8,-,value(45)
Pattern VA4
|XX?? may still be possible to kill through bent four in the corner
|OXx?
|O.XX
|.*.X
+----
:8,s,value(45)
Pattern VA5
|X?? take ko for possible nakade
|*X?
|XOx
|Oox
+---
:8,s,value(45)
Pattern VA6
# Workaround for mistake related to false margins.
XXXO?
O.OX*
-----
:8,s,value(45)
XXXO?
a.OX*
-----
;lib(a)==2
Pattern VA7
|XXx bent four in the corner
|O.X
|OXx
|*OX
+---
:8,s,value(45)
Pattern VA8
*Xx
X.X
XXO
:8,s,value(45)
*Xx
A.X
AAO
;lib(A)==2 && olib(*)>1
Pattern VA9
# nn Modified constraint (3.3.14)
X* atari inside eyespace
:-,s,value(45)
A*
;lib(A)==2 && olib(*)>1 && owl_big_eyespace(*)
;&& (owl_eye_size(*) <= 8 || !oplay_attack(*,*))
Pattern VA10
X* atari inside eyespace with ko
:-,s,value(35)
A*
;lib(A)==2 && olib(*)==1 && owl_big_eyespace(*) && oplay_attack(*,*)!=WIN
Pattern VA11
?XX??? chance to get nakade
XOOXXx
!OX*.x
------
:8,s,value(65)
?XX???
XaaXXx
.aX*.x
------
;attack(a) && !defend(a)
Pattern VA12
|xx??
|.X?? try to kill with bent four in the corner
|OXXx
|X*.x
+----
:8,s,value(75)
Pattern VA13
# This is almost identical to attack pattern A1330. It is needed in
# both places.
|XX? take ko to maybe kill
|*XX
|XOX
|O!O
+---
:8,s,value(85)
|AA?
|*AA
|XOA
|OaO
+---
;lib(A)<=3 && oplay_attack(a,a)
# nn Removal candidate (3.3.14)
# Success rate in regressions : 0% (0/131)
Pattern VA14
?OX force X to defend inside own eyespace
OX!
*XO
---
:8,-,value(35)
?bX
ODa
*Dc
---
;lib(b)>1 && lib(c)>1 && owl_eyespace(a) && !attack(D)
Pattern VA15
X.? sacrifice to destroy eye
X*X
OX.
:8,s,value(45)
Ac?
A*X
bXd
;lib(A) == 2 && lib(b) > 1 && !oplay_attack(*,c,d,d)
Pattern VA16
----
.X.X play safely inside eyespace to falsify eye
.*Xx
X..?
:8,-,value(46)
----
.X.X
.*Xx
X..?
;owl_eyespace(*)
Pattern VA17
xXXOo exploit shortage of liberties
!O*XO
.X.Xo
:8,s,value(35)
xXXOo
aO*XO
.X.Xo
; oplay_attack(*,a,a)
Pattern VA18
XX!O throw in to kill an eye
.*X?
XXO?
:8,-,value(35)
XXaO
.*X?
XXO?
; oplay_attack(*,a,a)
Pattern VA19
# gf New pattern. (3.1.11)
OX.x peep at edge
X.*.
XX..
----
:8,s,value(75)
OX.x
A.*.
AA..
----
;lib(A)==2 && owl_big_eyespace(*)
Pattern VA20
# tm New pattern. (3.1.13)
# see trevor:450
?X?
X.X
*X?
X.X
?X?
:-,-,value(75)
?X?
XaX
*C?
XbX
?X?
; owl_topological_eye(a,C) == 2
; && owl_topological_eye(b,C) == 2
Pattern VA21
# gf New pattern. (3.1.14)
# gf Revised pattern. (3.1.17)
XO? bogus eyespace
.*X
...
---
:8,-,value(75)
XO?
.*X
.a.
---
;owl_big_eyespace(a)
Pattern VA22
# gf New pattern. (3.1.14)
x.O bogus eyespace
.*X
...
---
:8,-,value(75)
xaO
.*B
...
---
;owl_big_eyespace(*) && oplay_attack(*,a,B)
Pattern VA23
# gf New pattern. (3.1.14)
??O? bogus eyespace
x.*X
....
....
----
:8,-,value(75)
??O?
xc*X
.ba.
....
----
;owl_big_eyespace(*) && oplay_attack(*,a,b,c,a)
Pattern VA24
# gf New pattern. (3.1.14)
# gf Revise constraint to update for changed olib behaviour. (3.7.8)
X* capture inside eyespace, not ko
:-,-,value(76)
A*
;lib(A)==1 && owl_eyespace(*) && olib(*) > 1
Pattern VA25
# tm New pattern. (3.1.15) (see cho1:161)
?OO| special corner shape.
*X.|
XOX|
XO.|
---+
:8,-,value(76)
Pattern VA26
# gf New pattern. (3.1.15)
??XX? making nakade is only chance to kill, unless we can capture
?XO!X some of the wall
X*XOX
X.OX?
?XX??
:8,s,value(70)
Pattern VA26b
# gf New pattern. (3.1.15)
# This pattern is entirely bogus. VA25 gives the correct attack point
# but currently we also need this pattern to get a second match, which
# is necessary to offset the fact that X is thought to have three
# eyes.
??XX? making nakade is only chance to kill, unless we can capture
?XO.X some of the wall
X.XOX
X*OX?
?XX??
:8,s,value(0)
Pattern VA27
# gf New pattern. (3.1.15)
XX?? not two certain eyes
.*xX
OXOx
----
:8,s,value(45)
XX??
.*AX
OXOB
----
;x_somewhere(A,B)
Pattern VA28
# gf New pattern. (3.1.15)
XX?? not two certain eyes
.OxX
*XOx
----
:8,s,value(45)
XX??
.OAX
*XOB
----
;x_somewhere(A,B)
Pattern VA29
# gf New pattern. (3.1.15)
|XXX? not two certain eyes
|!O.X
|OX*x
+----
:8,s,value(45)
Pattern VA30
# gf New pattern. (3.1.15)
?XX! atari to destroy eye
X.*X
?XX?
:8,s,value(45)
?XXb
Xa*X
?CC?
;lib(C)==2 && owl_eyespace(a) && oplay_attack(*,a,b,b)!=WIN
Pattern VA31
# tm New pattern (3.1.15) (see maeda0:60)
# gf Added constraint. (3.5.5)
?O.|
OX.|
X.X|
X!*|
??.|
:8,s,value(76)
?Oa|
OXb|
X.X|
X!*|
??.|
;!oplay_attack(a,?,b,a)
Pattern VA32
# tm New pattern (3.1.15) (see maeda0:60)
# gf Added constraint. (3.5.5)
?O*|
OX!|
X.X|
XXO|
:8,s,value(76)
?O*|
OXb|
X.X|
XXa|
;lib(a)>1 || !oplay_attack(*,?,b,*)==WIN
Pattern VA33
# tm New pattern (3.1.15)
?X|
XO|
!O|
*X|
:8,-,value(76)
Pattern VA34
# tm New pattern (3.1.15)
# See also VA27
?X?
XOX
!OX
*XO
:8,-,value(76)
?X?
XOX
.OX
*XA
; oplay_defend_both(*,A,*)
Pattern VA35
?XX|
X..|
X*X|
XO.|
---+
:8,s,value(45)
?XX|
XA.|
X*X|
XO.|
---+
; xlib(A)==2
Pattern VA36
?XXX| cut black up
X.OX|
XX*O|
?OX.|
??XX|
:8,s,value(45)
Pattern VA37
# tm New Pattern (3.1.15)
?xXO?
?X.XO
O.X!*
-----
:8,-,value(45)
?xXO?
?X.XO
A.X.*
-----
;lib(A) > 2
Pattern VA38
# gf New pattern. (3.1.15)
# See trevora:25
??O
x!. capture a string at the edge of an eyespace
.*X
...
---
:8,-,value(80)
??O
x..
.*A
...
---
;owl_big_eyespace(*) && !oplay_defend(*,A)
Pattern VA39
# tm New Pattern (3.1.16)
# gf Revised constraint. (3.5.4)
XO*| atari to kill eye
!XX|
XOO|
:8,s,value(95)
XO*|
aXX|
Xbb|
;owl_eyespace(a) && olib(*)>1 && lib(b)>1
Pattern VA40
# tm New Pattern (3.1.16) (see trevora:550)
OXx Threaten snapback inside eyespace.
X..
X.*
X..
:8,s,value(95)
OXx
X..
A.*
X..
; lib(A) == 3
Pattern VA41
# tm New Pattern (3.1.16)
XXO
.*X
!.X
:8,s,value(95)
XBO
.*A
..X
;lib(A) ==2 || lib(B) == 2
Pattern VA42
# tm New Pattern (3.1.16)
X*X double attack on safe eye
.X.
X.X
OXX
:8,-,value(75)
b*c
.X.
X.X
DXX
;!attack(D) && oplay_attack(*,b) && oplay_attack(*,c)
Pattern VA43
# tm New Pattern (3.1.17)
XXX.
.O*.
----
:8,s,value(50)
XXXb
.O*a
----
; !oplay_attack(*,a,b,b)
; && !oplay_attack(*,b,a,a)
Pattern VA44
# tm New Pattern (3.1.17)
# gf Fixed symmetry. (3.3.6)
# nn Modified constraint (3.3.14)
# gf Revised constraint. (3.5.3)
XoX
o*o
:|,s,value(57)
XbX
a*c
; owl_proper_eye(*)
; && (owl_proper_eye(a) + owl_proper_eye(b) + owl_proper_eye(c) > 2)
; && safe_xmove(*)
; && ((owl_eye_size(*) <= 8 && owl_maxeye(*)>1) || !oplay_attack(*,*))
Pattern VA45
# tm New Pattern (3.1.17)
X* cut to create false eye
OX
--
:8,-,value(75)
X*
OX
--
; !ko(*)
Pattern VA46
# tm New Pattern (3.1.17)
# see trevor:650
?X???
X.X??
?X.O*
:8,-,value(75)
?X???
CbX??
?XAO*
; xlib(A) == 1
; && olib(A) == 1
; && owl_topological_eye(b,C) < 4 && owl_topological_eye(b,C) > 0
Pattern VA47a
# tm Moved from owl_attackpats (3.1.17)
# was A1107
# gf Split with respect to ko. (3.7.9)
O* defend the surrounding chain
XO
:/,-,value(95)
a*
Xb
;vital_chain(a) && vital_chain(b) && !ko(*) && !xplay_defend_both(*,a,b)
Pattern VA47b
# tm Moved from owl_attackpats (3.1.17)
# was A1107
# gf Split with respect to ko. (3.7.9)
O* defend the surrounding chain
XO
:/,-,value(65)
a*
Xb
;vital_chain(a) && vital_chain(b) && ko(*) && !xplay_defend_both(*,a,b)
Pattern VA48
# tm New Pattern (3.1.18)
+----
|.*..
|XX!O
:8,s,value(75)
Pattern VA49
# tm New Pattern (3.1.18) (see trevor:430)
# FIXME: This is non-sense if the ataried stone has neighbours
# in atari (see trevorb:360)
X* atari outside eyespace
oX
:8,-,value(35)
X*
AB
; lib(B) <= 2 && owl_eyespace(A)
Pattern VA50
# pp New pattern (3.3.10)
|xx??
|Ox?? try to kill with bent four in the corner
|OXXx
|X*.x
+----
:8,s,value(45)
Pattern VA51
# pp New pattern (3.3.12)
|*Oo start an unfavourable ko
|.XO
|X.X
|.Xx
|.O.
+---
:8,-,value(35)
Pattern VA52a
# gf New pattern. (3.3.20)
|*Oo make X short of liberties
|.XO
|X.X
|..X
|OXX
|.X?
+---
:8,-,value(65)
Pattern VA52b
# gf New pattern. (3.3.20)
|*Oo
|OXO make X short of liberties
|.XO
|X.X
|..X
|OXX
|.X?
+---
:8,-,value(65)
Pattern VA53
# gf New pattern. (3.3.20)
# See ld_owl:68.
|XXX nakade if X cannot squeeze
|O.X
|XOX
|*OX
+---
:8,s,value(75)
|AAA
|O.A
|XOA
|*OA
+---
;lib(A)==2
Pattern VA54
# mh New pattern (3.5.4)
# See ld_owl:413/414
X.X play atari inside one eye to destroy the other eye
*XO
:8,s,value(45)
XaX
*BO
;lib(B)==2 && olib(*)>=2 && owl_proper_eye(*) && owl_maxeye(a)>0
Pattern VA55
# gf New pattern. (3.7.9)
# See ld_owl:406.
?X? force opponent to fill one eye
X.X
.XO
*.?
---
:8,s,value(45)
?X?
X.X
bXO
*a?
---
;xlib(a)==3 && oplay_lib(*,a,b,b)>1
Pattern VA56
# gf New pattern. (3.7.9)
# See ld_owl:326.
xXOo destroy eye
X.XO
OX.*
----
:8,-,value(45)
xXOo
XaXO
OX.*
----
;owl_mineye(a)==1
# END OF FILE