Initial commit of GNU Go v3.8.
[sgk-go] / patterns / endgame.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 Endgame 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.)
#
#################
#
# After the pattern, some supplementary information in the format:
#
# :trfno, classification, [values], helper_function
#
# These and other aspects of the pattern database are documented
# in the Texinfo documentation.
#
#################
#
# Any line beginning with #, or any part of a line following
# whitespace is a comment.
#
# The patterns are classified into a number of different categories:
#
# EE edge endgame
# EF edge followups
# CE center endgame
# CF center followups
# EY eye stealing/saving endgame
#
# The patterns are grouped in the file by category. New patterns
# should be added close to a similar pattern or at the end of the
# category where it belongs. When a new pattern is added, the names
# of later patterns in the category should usually not be changed.
# This can be accomplished by introducing names like CC35b and so on.
#
######################################################################
#
# Edge endgame patterns
#
# These patterns need to be revised.
#
# Moves along the edge with small weights, intended to come into play
# in the endgame.
#
# These patterns are further subdivided into the following classes
#
# first line descents (except in corner)
# first line hanes (except in corner)
# first line pushes (except in corner)
# first line blocks (except in corner)
# first line corner moves
# miscellaneous first line moves
# second line descents
# second line hanes
# second line extensions
# second line clamps
# miscellaneous second line moves
# third line moves
#
######################################################################
attribute_map general
goal_elements none
# Several patterns here have a or d class, so we need these elements.
callback_data XOxo
# first line descents (except in corner)
########################################
Pattern EE1
# gf Removed terri(1) value because move might be inside own territory. (3.3.7)
?OOx block on edge
..*x 1 point gote
----
:8,OXe
?ccx
ba*x
----
;marginal_eye(*) && proper_eye(a) && proper_eye(b) && !xplay_attack(*,c)
Pattern EE1a
?OOx block on edge
..*x 2 point gote
----
:8,OXe,terri(2)
?ccx
ba*x
----
; marginal_eye(*) && proper_eye(a) && proper_eye(b)
; && xplay_attack(*,a,c) && !xplay_attack(*,c)
Pattern EE2
OXXx
xOOX Start by backfilling
*..x At least 1 point gote
----
:8,OX,terri(1)
OXXx
xbbX
*.ax
----
;xplay_attack(a,b)
Pattern EE2b
OXXx
*OOX Start by backfilling
...x At least 1 point gote
----
:8,OX,terri(1)
OXXx
*ddX
cbax
----
;marginal_eye(a) && proper_eye(b) && proper_eye(c) && xplay_attack(a,d)
Pattern EE2c
OXX? Start by backfilling if block is unsafe
*OO? At least 1 point gote
...?
----
:8,OX,terri(1)
OXX?
*OOb
..ac
----
;x_alive_somewhere(b,c) && oplay_attack(a,a) && !oplay_attack(*,?,a,a)
Pattern EE4
XOO.
.X*. one point sente
----
:8,OXe,terri(1),followup(1)
XOO.
.X*.
----
;marginal_eye(*)
Pattern EE5
???
XO? descend to edge
.*? may quite possibly be 0 points gote
---
:8,OXe,terri(0.1)
eab
XOc
.*d
---
;o_somewhere(a,b,c,d,e)
Pattern EE6
.OOOXX
...*..
------
:8,OXe,terri(2)
.OOOXX
..a*bc
------
; proper_eye(a) && !oplay_attack(*,*) && oplay_attack(b,*,a,c,*,a)
; && xplay_attack(*,a,b,a)
Pattern EE7
# tm New Pattern (3.1.19)
# s classification, in case of ko (see trevorc:180)
# pp Revised (3.3.18) the pattern to match on edge only.
?.X?
O.*.
----
:8,sOXe,terri(0.75)
?.X?
O.*a
----
;proper_eye(a) && safe_omove(*)
# first line hanes (except in corner)
#####################################
Pattern EE101
OOXX endgame move
..*. 2 points gote
----
:8,OXe,terri(2)
OOXX
b.*a
----
;proper_eye(a) && proper_eye(b)
Pattern EE102
???X? sente hane
OXX.. 1 or 2 points sente
.*..?
-----
:8,OXe,terri(2),followup(7)
???X?
OAA..
.*..?
-----
;lib(A)==3
Pattern EE103
?OX? one point gote (and a little extra)
?.*.
----
:8,OXe
?OX?
?.*a
----
;proper_eye(a)
Pattern EE104
?OX? two points gote
..*.
----
:8,OXe
?OX?
b.*a
----
;proper_eye(a) && proper_eye(b)
#
# If both EE105 and EE106 match, it's a double sente situation.
# (followup and reverse followup probably bigger in reality.)
#
Pattern EE105
?OX.. three points sente
..*..
-----
:8,OXe
?OE..
bc*a.
-----
;proper_eye(a) && proper_eye(b) && oplay_attack_either(*,a,c,a,E)
Pattern EE106
..OX? three points reverse sente
...*.
-----
:8,OXe,reverse_followup(6)
..dX?
.bc*a
-----
;proper_eye(a) && proper_eye(b) && xplay_attack_either(c,b,*,b,d)
;&& !xplay_attack(c,b,*,*)
Pattern EE107
#tm New Pattern (3.1.16)
# see trevor:163
# FIXME: move this pattern to appropriate place
+-- very special corner position
|.*
|.O
|OX
:8,Oa
+--
|.*
|.O
|OB
; defend(B) && !oplay_defend(*,B) && safe_xmove(*)
Pattern EE108
# pp New pattern (see endgame:890) (3.5.1)
?OX? very small endgame move
O.*.
----
:8,OXes,value(0.5)
?OX?
Oa*b
----
; proper_eye(b) && oplay_attack(*,b,a,a) && oplay_defend(a,*,a)
Pattern EE109
# gf New pattern. (3.5.3)
# Generic hane, let the territorial evaluation determine its value.
OX hane on first line
.*
--
:8,OXe
Pattern EE110
# gf New pattern. (3.5.3)
# Followup value obviously imprecise, usually an underestimation.
OX.O followup to save dead stones
.*..
----
:8,Xe,followup(5)
aX.b
d*c.
----
;alive(a) && dead(b) && oplay_defend(*,c,d,b)
# first line pushes (except in corner)
######################################
Pattern EE201
?XX push on first line.
O*. one point gote (and a little extra)
---
:8,OXe,terri(1)
?XX
O*a
---
;marginal_eye(*) && proper_eye(a) && max_eye_value(a) > 0
Pattern EE201b
# nando New pattern. (3.7.11)
?XX push deeper on first line.
O.*
---
:8,sOXe
?XX
Oa*
---
;marginal_eye(a) && proper_eye(*) && max_eye_value(*) > 0
;&& (safe_omove(*) || oplay_attack(*,a,a))
>if (!safe_omove(*)) known_safe_move(*)
Pattern EE202
OXX. endgame move
.O*. 1 point reverse sente
----
:8,OXe,terri(1),reverse_followup(1)
OXX.
.O*a
----
;marginal_eye(*) && marginal_eye(a)
Pattern EE203
OXX. 1 point double sente
.O*.
----
:8,OXe,terri(1),reverse_followup(2)
ODDc
bO*a
----
;marginal_eye(*) && marginal_eye(a) && marginal_eye(c)
;&& (oplay_attack(*,a,b,a) || oplay_attack(*,a,b,D))
Pattern EE204
?X. endgame move
O*. 2 points gote
---
:8,OXe,terri(2)
?Cb
O*a
---
;marginal_eye(*) && proper_eye(a)
;&& (!oplay_defend(*,a,b,a) || !oplay_defend(*,a,b,C))
Pattern EE205
X.X at least 2 points, possibly more (followup)
O*.
---
:8,OXe,terri(2)
XaX
O*b
---
;marginal_eye(*) && proper_eye(a) && proper_eye(b)
Pattern EE206
# gf New pattern. (3.1.20)
X.
O*
--
:8,OXe
# first line blocks (except in corner)
######################################
Pattern EE301
O. endgame move
X* 1 points gote
--
:8,OXe,terri(1)
Oa
X*
--
;marginal_eye(*) && proper_eye(a) && oplay_attack(*,a,a)
Pattern EE302
# gf Revised constraint. (3.3.10)
O. endgame move
X* 2 points reverse sente
--
:8,OXe,terri(2),reverse_followup(5)
ba
X*
--
;eye(*) && proper_eye(a) && oplay_defend_both(*,a,*,b)
Pattern EE303
# al1 Revised symmetry. (3.7.11)
OXO
.*.
---
:|,OXe,terri(2)
# first line corner moves
#########################
Pattern EE401
# gf Added n classification. (3.5.2)
|.O? big endgame move
|.OX at least 2 points gote
|.*x
+---
:8,nOXed,terri(2)
Pattern EE402
# May look risky, but if it is, the safe_move test will reject it.
|xxXO big endgame move
|.XO. at least 3 points reverse sente
|.*..
+----
:8,OXed,terri(3),reverse_followup(5)
Pattern EE403
|OX endgame move
|.* one point gote
+--
:8,OXe,terri(1)
|OX
|.*
+--
;marginal_eye(*)
Pattern EE404
# gf Revised constraint. (3.3.10)
|OX? endgame move
|.*. half point gote as sacrifice
+---
:8,sOXe,terri(0.5)
|OX?
|.*a
+---
;marginal_eye(*) && proper_eye(a)
Pattern EE404b
# gf New pattern. See nngs:1480. (3.3.7)
|.OX
|OX. endgame move
|.*. at least 1.5 points gote as sacrifice
+---
:8,sOXe,value(1.5)
|.OX
|OX.
|.*.
+---
;marginal_eye(*)
Pattern EE405
# gf Made main diagram consistent with constraint diagram. (3.1.18)
# gf Revised constraint. (3.3.10)
|XO? endgame move
|.*. one point gote
+---
:8,OXe,terri(1)
|XO?
|.*a
+---
;marginal_eye(*) && proper_eye(a)
Pattern EE406
|XO endgame move
|.* possibly only filling dame
+--
:8,OXe,terri(0.1)
Pattern EE407
# gf Increased value. (3.3.14)
# Give it a little more than 0.5 points in order to fill before capturing.
|OX? fill ko at end of game
|*OX 1/2 point gote
+---
:8,X,terri(0.6)
|aX?
|*OX
+---
;!dead(a)
Pattern EE408
# gf Increased value. (3.3.14)
# Give it a little more than 0.5 points in order to fill before capturing.
|XO? fill ko at end of game
|O*O 1/2 point gote
+---
:8,X,terri(0.6)
|Xa?
|O*O
+---
;!dead(a)
Pattern EE409
|OX? take ko at end of game
|X*X 1/2 point
+---
:8,sO,terri(0.5)
|OA?
|X*X
+---
;!dead(A)
Pattern EE410
|XO? take ko at end of game
|*XO 1/2 point
+---
:8,sO,terri(0.5)
|AO?
|*XO
+---
;!dead(A)
Pattern EE411
|*O endgame ko
|XO zero points sente or better
|.X
+--
:8,OX,terri(0.1),followup(0.5)
Pattern EE412
|.X endgame ko
|OX zero points reverse sente or better
|*O
+--
:8,OX,terri(0.1),reverse_followup(0.5)
Pattern EE413
|.X? endgame ko
|OXO 1/2 point
|.O*
+---
:8,OX,terri(0.5)
Pattern EE414
|xX? three points gote
|*OX plus possibly more for the eye in the corner
|.OX
|..O
+---
:8,OXed,terri(3)
Pattern EE415
# pp New pattern (3.3.18)
# Currently necessary (see trevorb:170, where N11 is otherwise rejected
# as "strategically or tactically unsafe) /ab
|*O?
|OXX
|.OX
+---
:8,X,terri(0.1),reverse_followup(2)
|*A?
|OXX
|.OX
+---
;alive(A)
Pattern EE416
# pp New pattern (3.3.18)
|.OO?
|..*X
+----
:8,OXe
|.aa?
|..*X
+----
;xplay_attack(*,a) && !oplay_attack(*,a)
>prevent_attack_threat(a)
# miscellaneous first line moves
################################
Pattern EE501
# gf Increased value. (3.3.14)
# Give it a little more than 0.5 points in order to fill before capturing.
?OX? fill ko at end of game
O*OX 1/2 point gote
----
:8,X,terri(0.6)
?aX?
O*OX
----
;!dead(a)
Pattern EE502
?OX? take ko at end of game
OX*X 1/2 point
----
:8,sO,terri(0.5)
?OA?
OX*X
----
;!dead(A)
Pattern EE504
... jump on the edge
*.O
---
:8,Oe
...
*.O
---
;!omoyo(*)
# second line descents
######################
Pattern EE601
# gf Revised constraint to avoid cyclic redistribution. (3.5.1)
??O? It's better to push down before blocking
.X*X
....
----
:8,OX,terri(3),followup(5)
??O?
aA*X
....
----
; oplay_attack(*,a,A) && !oplay_attack(a,*,A)
> replace(a,*)
# second line hanes
###################
# second line extensions
########################
Pattern EE801
# 1: not really gote and larger than 2.5 points
# 2: Well, without making the pattern more specific we should be
# prepared that the x really is in place and that there is an X two
# steps below * too. Then it is usually gote and about this size.
# We certainly can and should add patterns to deal with the case
# that there is more space below, when it very likely is sente,
# unless such patterns already exist in the EB class.
# gf Actually this pattern doesn't even guarantee a single point, see
# gifu03:204. Removed fixed territorial value. (3.5.3)
|.O? endgame move
|.*X 2.5 points gote
|..x
:8,OXe
Pattern EE802
|.X extend on second line
|.* 2 points gote
|.O
:8,OXe,terri(2)
|bX
|.*
|aO
;proper_eye(a) && proper_eye(b)
Pattern EE803
?xx?
X.*O extend on second line
.... about 2 points gote
----
:8,OXe,terri(2)
?xx?
X.*O
b..a
----
;proper_eye(a) && proper_eye(b)
Pattern EE804
# gf Revised value. (3.3.15)
O*X endgame move
..X not guaranteed to be more than 0 points gote
---
:8,OXe,terri(0.1)
O*X
a.X
---
;marginal_eye(a)
Pattern EE805
XX. extend on second line
OO* not guaranteed to yield a single point
...
---
:8,OXe,terri(0.1)
Pattern EE806
# evand new (3.7.1)
# see kgs:70
|.O??
|.OX.
|.*X.
|....
+----
:8,OXe,terri(3)
|bO??
|.OX.
|.*Xa
|....
+----
;xmoyo(a) && omoyo(b)
# second line extensions
########################
Pattern EE851
Ox. clamp on second line
OX* almost too big to be classified as endgame move
...
---
:8,OXe,terri(8)
Ox.
OX*
.a.
---
;oplay_attack(*,a,a)
# miscellaneous second line moves
#################################
Pattern EE901
# al1 Revised symmetry. (3.7.11)
?.? endgame move
X*X one point reverse sente
O.O
---
:|,OXe,terri(1),reverse_followup(2)
?a?
X*X
O.O
---
;marginal_eye(*) && proper_eye(a)
Pattern EE902
# al1 Revised symmetry. (3.7.11)
# Why does this have followup value? -ab
?.? endgame move
O*O one point sente
X.X
---
:|,OXe,terri(1),followup(2)
?a?
O*O
X.X
---
;marginal_eye(*) && proper_eye(a)
Pattern EE903
# gf New pattern. (3.1.23)
??XO?
?OO*.
X....
-----
:8,OXe
??XO?
?OO*.
Xa...
-----
;!safe_omove(a)
# third line moves
##################
Pattern EE1002
??X? endgame move
?X*O at least one point reverse sente
OO..
....
----
:8,OXe,terri(1),reverse_followup(4)
??X?
?X*O
aa..
....
----
;lib(a)>3
Pattern EE1003
# gf New pattern. (3.1.12)
O*X? at least one point and usually sente
?X.o
?X.o
----
:8,OXe,terri(1)
O*X?
?Abo
?A.o
----
;lib(A)==3 && proper_eye(b)
# reverse followups
######################################
Pattern EF101
# This is the least value for the followup. A more precise value can
# only be had by dynamic reading.
O..
X*.
---
:8,OX,reverse_followup(4)
Oa.
X*.
---
;marginal_eye(*) && proper_eye(a) && oplay_attack(*,a,a)
Pattern EF102
# tm New Pattern (3.1.16)
# tm modified (3.1.17)
# tm modified (3.1.20)
# gf Removed terri(1) value. (3.1.29)
# FIXME: see endgame:218, trevord:1030, trevorc:430
# FIXME: This is no edge pattern, move it.
O.
*O
:8,O,reverse_followup(3)
ac
*b
;proper_eye(c) && oterri(c) && !oplay_attack(*,*)
;&& !xplay_attack(*,*) && xplay_attack_either(*,a,b)
######################################################################
#
# Center endgame patterns
#
# Moves in the center with small weights, intended to come into play
# in the endgame.
#
######################################################################
Pattern CE1
# gf Increased value. (3.3.14)
# Give it a little more than 0.5 points in order to fill before capturing.
?OX? fill ko at end of game
O*OX 1/2 point gote
?OX?
:-,X,terri(0.6)
?OX?
a*OX
?OX?
;!dead(a)
Pattern CE2
?OX? take ko at end of game
OX*X 1/2 point
?OX?
:-,sO,terri(0.5)
?OX?
OX*A
?OX?
;!dead(A)
Pattern CE3
# al1 Revised symmetry. (3.7.11)
... push against opponent
O*X about 1 point gote
...
:-,OXe,terri(1)
Pattern CE4a
# gf Split and revised pattern. (3.3.10)
# gf Revised constraint. (3.3.16)
??X endgame move
O*. about 1 point reverse sente
?.O
:8,OXe,terri(1),reverse_followup(1)
??X
O*.
?aO
;marginal_eye(*) && proper_eye(a) && (!halfeye(a) || false_eye_territory(a))
Pattern CE4b
# gf Split and revised pattern. (3.3.10)
??X endgame move
O*. about 1 point reverse sente
x.O
:8,OXe,terri(1),reverse_followup(2)
??X
O*.
baO
;marginal_eye(*) && proper_eye(a) && proper_eye(b)
Pattern CE6
X? push in
*O 0 points gote
:8,OXe,terri(0.1)
Pattern CE9
# gf Revised constraint. (3.3.15)
.X push in
*O 1 points gote
:8,nOXe,terri(1)
aX
*O
;marginal_eye(*) && max_eye_value(*)>0
;&& !safe_omove(a) && !obvious_false_xeye(a)
Pattern CE12
X*O worth a point in chinese rules
:-,OXe,terri(0.1)
Pattern CE13
# al1 Revised symmetry. (3.7.11)
X.X sometimes double sente endgame move
.*. one point gote
O.O
:|,OXe,terri(1)
XbX
.*.
OaO
;proper_eye(a) || proper_eye(b)
Pattern CE14
# al1 Revised symmetry. (3.7.11)
X.X sometimes double sente endgame move
.*. two points gote
O.O
:|,OXe,terri(2)
XbX
.*.
OaO
;proper_eye(a) && proper_eye(b)
Pattern CE15
.X? sente endgame move
.*. one point sente
X.O
:8,OXe,terri(1)
.X?
a*.
X.O
;marginal_eye(*) && proper_eye(a)
Pattern CE15b
XX? gote endgame move
.*. one point gote
X.O
:8,OXe,terri(1)
XX?
a*.
X.O
;marginal_eye(*) && proper_eye(a)
Pattern CE16
.X? sente endgame move
.*O one point sente
X??
:8,OXe,terri(1)
.X?
a*O
X??
;marginal_eye(*) && proper_eye(a) && olib(*)>2
Pattern CE16b
# gf Revised constraint. (3.3.15)
.O? sente endgame move
.*X one point reverse sente
O??
:8,OXe,terri(1),reverse_followup(2)
.O?
a*X
O??
;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 && xlib(*)>2
Pattern CE17
# gf Revised constraint. (3.3.20)
XO endgame move
.* one point sente
xX
:8,OXe,terri(1)
XO
a*
xX
;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 && olib(*)>2
Pattern CE18
# tm removed reverse_followup value
# see trevorb:700
# gf Revised constraint. (3.3.15)
OX endgame move
.* one point gote.
oO
:8,OXe,terri(1)
OX
a*
oO
;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0
Pattern CE19
# gf Revised constraint. (3.3.15)
?.? endgame move
X*X one point gote
O.O
:|,OXe,terri(1)
?b?
X*X
OaO
;marginal_eye(*) && proper_eye(b) && max_eye_value(b)>0 && oplay_attack(*,a,a)
Pattern CE20a
# gf Split and revised pattern. (3.3.10)
# gf Revised constraint. (3.3.15)
?.? Smallish endgame
O*O one point, possibly reverse sente
?X?
:|,nOXe,terri(1),reverse_followup(1)
?a?
O*O
?X?
;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0
Pattern CE20b
# gf Split and revised pattern. (3.3.10)
?.x Smallish endgame
O*O one point reverse sente
?X?
:8,nOXe,terri(1),reverse_followup(2)
?ab
O*O
?X?
;marginal_eye(*) && proper_eye(a) && proper_eye(b)
Pattern CE20c
# gf Split and revised pattern. (3.3.10)
x.x Smallish endgame
O*O one point reverse sente
?X?
:|,nOXe,terri(1),reverse_followup(3)
cab
O*O
?X?
;marginal_eye(*) && proper_eye(a) && proper_eye(b) && proper_eye(c)
Pattern CE21
# gf Constraint revised. (3.1.8)
*OX Smallish endgame
O.O one point reverse sente
:8,nOXe,terri(1),reverse_followup(2)
*bX
OaO
;proper_eye(a) && lib(b)==2 && !oterri(*)
Pattern CE22
# gf Territory not guaranteed by pattern. Removed terri(1). (3.7.2)
# al1 Revised symmetry. (3.7.11)
?X?
.*. one point gote
O.O
ooo
:|,OXe
Pattern CE23
O??
*Xx endgame move
..X two points gote
xXO
:8,OXe,terri(2)
O??
*Xx
baX
xXO
;proper_eye(a) && proper_eye(b)
Pattern CE24
#tm revised terri from 5 to 4 (3.1.20) (see trevord:180 O6)
??OX rescue one stone making territory
X*.O
?O..
:8,X,terri(4)
??OX
X*.A
?Ob.
; omoyo(b) && lib(A)==2
# Pattern CE25
# # tm New pattern (3.1.15) (see trevora:320)
# # gf Bad pattern, see olympiad2004:121.
# # gf Also no longer needed in trevora:320, removed. (3.7.1)
#
# O*X
# XX.
#
# :8,OX,terri(1)
#
# O*X
# Xa.
#
# ;lib(a)==2
Pattern CE26
# gf New pattern. (3.1.18) (see trevorb:870)
O*O
X.X
:|,OXe
Pattern CE27
# tm New Pattern (3.1.18)
# al1 Revised symmetry. (3.7.11)
... moyo breakin worth a lot.
X*X
?O?
:|,-,terri(3)
.b.
A*C
?O?
; xmoyo(b) && oplay_break_through(*,b,A,b,C) == WIN
Pattern CE28
# tm New Pattern (3.1.20)
# gf Revised constraint. (3.3.10)
OX
.*
O.
:8,nOXe,terri(1)
OX
A*
OB
;proper_eye(A) && oplay_attack(*,B,B)
Pattern CE28b
# gf New pattern. (3.3.10)
OX
.*
O.
:8,nOXe
Pattern CE29
# tm New Pattern (3.1.20) (see trevord:950)
# FIXME: this pattern better in patterns.db?
# gf Added constraint. (3.3.13) (see gunnar:18)
# nando Added s classification and action. (3.7.11)
X*X Wedge
O.X
:8,sOXe
B*X
OaX
;oplay_attack_either(*,a,a,B)
>if (!safe_omove(*)) known_safe_move(*)
Pattern CE31
# gf New pattern. (3.3.6)
X.X
?*?
?O?
:|,OXe,terri(0.1)
Pattern CE32
# gf New pattern. (3.3.17)
X*X
O.o
?O?
:8,OXe
Pattern CE33
# gf New pattern. (3.5.3)
# If both colors are alive this does at best fill a dame.
OOO
O*O
?X?
:8,OX,maxterri(0.1)
Pattern CE34
# gf New pattern. (3.7.4)
# See gunnar:77.
X.*
?O.
??X
:/,OXe
######################################################################
#
# Center followup patterns
#
# Patterns in the center which enhance the precision of the CE patterns.
#
######################################################################
# Pattern CF3
# # tm New Pattern (3.1.23) (see arend:36)
# # FIXME: Perhaps better in patterns.db?
# # gf This pattern is redundant because the followup has already been
# # found by find_worm_threats(). (This was broken in 3.1.23 and 3.1.24.)
# # al1 Remove pattern. (3.7.11)
#
# O*.O threaten to save
#
# :-,-
#
# b*ca
#
# ; dead(a) && !dead(b) && oplay_disconnect(*,*,a) && !oplay_attack(*,?,c,a)
#
# > threaten_to_save(a)
######################################################################
#
# Eye patterns
#
# Moves which steal or save a few points by making eye points false.
#
######################################################################
Pattern EY1
# gf Revised constraint. (3.3.10)
X*O
.X?
:8,nOXe,terri(1)
X*b
aX?
;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) && !weak(b)
Pattern EY2
# gf Revised constraint. (3.3.10)
?.O
X*.
.X?
:/,nOXe,terri(1)
?.b
X*.
aX?
;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) && !weak(b)
Pattern EY3
# gf Revised constraint. (3.3.10)
O*X
.O?
:8,nOXe,terri(1)
O*X
aO?
;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a)
Pattern EY4
# gf Revised constraint. (3.3.10)
?.X
O*.
.O?
:/,nOXe,terri(1)
?.X
O*.
aO?
;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a)
Pattern EY5
# gf Revised constraint. (3.3.10)
?.X
O.*
.O?
:8,nOXe,terri(1)
?.X
Ob*
aO?
;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a)
;&& oplay_attack(*,b,b) == WIN
# END OF FILE