1771 lines
24 KiB
Plaintext
1771 lines
24 KiB
Plaintext
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
# 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
|