3714 lines
40 KiB
Plaintext
3714 lines
40 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 #
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
#
|
|
# Second Generation Pattern Database.
|
|
#
|
|
# New patterns that are not from patterns.db
|
|
#
|
|
##############################
|
|
#
|
|
# The patterns are classified into a number of different categories:
|
|
#
|
|
# Conn Connection patterns
|
|
# Cut Cut patterns
|
|
# AS Antisuji patterns (i.e. prohibitted moves)
|
|
# Shape Shape moves
|
|
# Sente Followup moves (add followup or reverse_followup values)
|
|
# DD Double threat moves and defense against double threats
|
|
# Temp Temporary patterns to correct certain misbehaviours.
|
|
#
|
|
##############################
|
|
|
|
|
|
attribute_map general
|
|
|
|
goal_elements none
|
|
# FIXME: try to make callback_data pattern category specific
|
|
callback_data XOxo
|
|
|
|
|
|
##############################
|
|
#
|
|
# Connection of one space jump
|
|
#
|
|
# O.O
|
|
#
|
|
##############################
|
|
|
|
|
|
Pattern Conn101
|
|
|
|
O*O straight connection
|
|
|
|
:+,C
|
|
|
|
|
|
Pattern Conn102
|
|
|
|
O.O tiger connection
|
|
?*?
|
|
|
|
:|,C
|
|
|
|
bac
|
|
?*?
|
|
|
|
;odefend_against(*,a) && !oplay_attack(*,b) && !oplay_attack(*,c)
|
|
|
|
|
|
Pattern Conn103
|
|
|
|
O.O indirect connection
|
|
*..
|
|
|
|
:8,C
|
|
|
|
OaO
|
|
*bc
|
|
|
|
;oplay_attack(*,a,b,c,a) || oplay_attack(*,a,b,c,c)
|
|
|
|
|
|
Pattern Conn104
|
|
|
|
.O.O indirect diagonal connection
|
|
*...
|
|
|
|
:8,C
|
|
|
|
.OaO
|
|
*dbc
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) && !oplay_defend_both(*,a,b,d,c,a,d)
|
|
|
|
|
|
Pattern Conn105
|
|
|
|
OXO defend connection
|
|
.*.
|
|
|
|
:8,C
|
|
|
|
aXb
|
|
.*.
|
|
|
|
;!oplay_break_through(*,a,*,b)
|
|
|
|
|
|
Pattern Conn106
|
|
|
|
??.? indirect connection
|
|
*O.O
|
|
....
|
|
|
|
:8,C
|
|
|
|
??e?
|
|
*OaO
|
|
.dbc
|
|
|
|
;oplay_attack(*,a,b,e,c,d,d)
|
|
|
|
|
|
########################
|
|
#
|
|
# Connection of diagonal
|
|
#
|
|
# O.
|
|
# XO
|
|
#
|
|
########################
|
|
|
|
|
|
Pattern Conn201
|
|
|
|
O* solid connection
|
|
xO
|
|
|
|
:/,C
|
|
|
|
|
|
Pattern Conn202
|
|
|
|
O.* tiger's mouth connection
|
|
xO?
|
|
|
|
:8,C
|
|
|
|
ba*
|
|
xc?
|
|
|
|
;odefend_against(*,a) && !oplay_attack(*,b) && !oplay_attack(*,c)
|
|
|
|
|
|
Pattern Conn203
|
|
|
|
XO? far away connection, might leave much aji
|
|
O.?
|
|
??*
|
|
|
|
:\,C
|
|
|
|
XO?
|
|
Oa?
|
|
??*
|
|
|
|
;odefend_against(*,a)
|
|
|
|
|
|
Pattern Conn204
|
|
|
|
?XO increase liberties to secure connection
|
|
*O.
|
|
|
|
:8,C
|
|
|
|
?XO
|
|
*Oa
|
|
|
|
;odefend_against(*,a)
|
|
|
|
|
|
Pattern Conn205
|
|
|
|
XO* extend to secure connection
|
|
O.?
|
|
|
|
:8,C
|
|
|
|
BO*
|
|
Oa?
|
|
|
|
;oplay_attack_either(*,a,a,B)
|
|
|
|
|
|
Pattern Conn206
|
|
# see trevord:740
|
|
|
|
..O very indirect connection
|
|
.OX
|
|
*X.
|
|
|
|
:8,C
|
|
|
|
.aO
|
|
.OX
|
|
*X.
|
|
|
|
;oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Conn207
|
|
# gf New pattern. (3.7.1)
|
|
# See olympiad2004:102.
|
|
|
|
?.X kikashi to give bad shape before connecting
|
|
..X
|
|
*XO
|
|
.O.
|
|
|
|
:8,C
|
|
|
|
?.X
|
|
..X
|
|
*Xa
|
|
.O.
|
|
|
|
;lib(a)>1
|
|
|
|
|
|
#####################
|
|
#
|
|
# Connection of keima
|
|
#
|
|
# O..
|
|
# ..O
|
|
#
|
|
#####################
|
|
|
|
|
|
Pattern Conn301
|
|
|
|
O*. solid connection
|
|
?.O
|
|
|
|
:8,C
|
|
|
|
|
|
Pattern Conn302
|
|
|
|
O.? bumping connection
|
|
X*O
|
|
|
|
:8,C
|
|
|
|
Oa?
|
|
B*O
|
|
|
|
;oplay_attack_either(*,a,a,B)
|
|
|
|
|
|
Pattern Conn303
|
|
# gf Revised constraint. (3.3.3)
|
|
|
|
O..* kosumi connection
|
|
..O?
|
|
|
|
:8,C
|
|
|
|
Obc*
|
|
eaf?
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,b,a,e,b,e)
|
|
;&& oplay_defend_both(*,c,*,f)
|
|
|
|
|
|
Pattern Conn304
|
|
# gf Revised constraint. (3.3.3)
|
|
|
|
O..* kosumi connection
|
|
X.O?
|
|
|
|
:8,C
|
|
|
|
Obc*
|
|
Eaf?
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) && !oplay_defend_both(*,b,a,b,E)
|
|
;&& oplay_defend_both(*,c,*,f)
|
|
|
|
|
|
Pattern Conn305
|
|
|
|
O..? nobi connection
|
|
..O*
|
|
|
|
:8,C
|
|
|
|
Obc?
|
|
eaO*
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,b,a,e,b,e)
|
|
|
|
|
|
Pattern Conn306
|
|
|
|
O..? nobi connection
|
|
X.O*
|
|
|
|
:8,C
|
|
|
|
Obc?
|
|
EaO*
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) && !oplay_defend_both(*,b,a,b,E)
|
|
|
|
|
|
Pattern Conn307
|
|
|
|
O.X? nobi connection
|
|
..O*
|
|
|
|
:8,C
|
|
|
|
ObD?
|
|
caO*
|
|
|
|
;!oplay_defend_both(*,a,b,a,D) && oplay_attack_either(*,b,a,c,b,c)
|
|
|
|
|
|
Pattern Conn308
|
|
|
|
O.*
|
|
..O
|
|
|
|
:8,C
|
|
|
|
Oa*
|
|
cbO
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c)
|
|
|
|
|
|
Pattern Conn309
|
|
|
|
O.*
|
|
X.O
|
|
|
|
:8,C
|
|
|
|
Oa*
|
|
EbO
|
|
|
|
;!oplay_defend_both(*,a,b,a,E)
|
|
|
|
|
|
Pattern Conn310
|
|
|
|
..*
|
|
O..
|
|
..O
|
|
|
|
:8,C
|
|
|
|
..*
|
|
Obc
|
|
daO
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,b,a,d,b,d)
|
|
|
|
|
|
Pattern Conn311
|
|
|
|
O*.
|
|
?XO
|
|
|
|
:8,C
|
|
|
|
O*a
|
|
?BO
|
|
|
|
;oplay_attack_either(*,a,a,B)
|
|
|
|
|
|
Pattern Conn312
|
|
|
|
O.*
|
|
xXO
|
|
|
|
:8,C
|
|
|
|
Oa*
|
|
xXO
|
|
|
|
;odefend_against(*,a)
|
|
|
|
|
|
Pattern Conn313
|
|
|
|
.O.
|
|
O.*
|
|
xXO
|
|
|
|
:8,C
|
|
|
|
bOc
|
|
Oa*
|
|
xXO
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) || oplay_attack_either(*,a,c,b,a,b)
|
|
|
|
|
|
Pattern Conn314
|
|
|
|
...
|
|
O.*
|
|
xXO
|
|
|
|
:8,C
|
|
|
|
.b.
|
|
ca*
|
|
xXO
|
|
|
|
;!oplay_break_through(*,a,b,c,b,*)
|
|
|
|
|
|
Pattern Conn315
|
|
|
|
O*X cut through to connect
|
|
.XO
|
|
|
|
:8,C
|
|
|
|
O*B
|
|
.AO
|
|
|
|
;!oplay_defend_both(*,A,B)
|
|
|
|
|
|
##############################################
|
|
#
|
|
# Connection of one space jump from two stones
|
|
#
|
|
# O..
|
|
# O.O
|
|
#
|
|
##############################################
|
|
|
|
|
|
Pattern Conn401
|
|
|
|
O..* kosumi connection
|
|
O.O?
|
|
|
|
:8,C
|
|
|
|
Obc*
|
|
OaO?
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c)
|
|
|
|
|
|
Pattern Conn402
|
|
|
|
O..? nobi connection
|
|
O.O*
|
|
|
|
:8,C
|
|
|
|
Obc?
|
|
OaO*
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c)
|
|
|
|
|
|
Pattern Conn403
|
|
|
|
O.O bamboo joint
|
|
O.*
|
|
|
|
:8,C
|
|
|
|
A.O
|
|
A.*
|
|
|
|
;!oplay_attack(*,A)
|
|
|
|
|
|
##############################
|
|
#
|
|
# Connection of two space jump
|
|
#
|
|
# O..O
|
|
#
|
|
##############################
|
|
|
|
|
|
Pattern Conn501
|
|
|
|
O*.O
|
|
|
|
:-,C
|
|
|
|
O*aO
|
|
|
|
;odefend_against(*,a)
|
|
|
|
|
|
Pattern Conn502
|
|
|
|
O*.O
|
|
?...
|
|
|
|
:8,C
|
|
|
|
O*ac
|
|
?.b.
|
|
|
|
;!oplay_break_through(*,a,b,*,b,c)
|
|
|
|
|
|
Pattern Conn503
|
|
|
|
O..O
|
|
*...
|
|
|
|
:8,C
|
|
|
|
OacO
|
|
*bde
|
|
|
|
;oplay_attack_either(*,a,b,c,d,e,c,e) && !oplay_defend_both(*,a,b,d,c,a,d)
|
|
;&& oplay_attack(*,b,a,c,c)
|
|
|
|
|
|
Pattern Conn504
|
|
|
|
O..O
|
|
.*..
|
|
|
|
:8,C
|
|
|
|
OdaO
|
|
e*bc
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c)
|
|
;&& (oplay_attack(*,d,d) || oplay_attack_either(*,d,b,e,d,e))
|
|
|
|
|
|
Pattern Conn505
|
|
# gf Revised constraint. (3.7.2)
|
|
|
|
?..?
|
|
OX.O
|
|
.*..
|
|
|
|
:8,C
|
|
|
|
?..?
|
|
aX.b
|
|
.*..
|
|
|
|
;!oplay_disconnect(*,a,b)
|
|
|
|
|
|
Pattern Conn506
|
|
|
|
OX.O
|
|
*O..
|
|
|
|
:8,C
|
|
|
|
ODbO
|
|
*Oac
|
|
|
|
;!oplay_defend_both(*,a,b,a,D) && !oplay_defend_both(*,b,a,c,b,c)
|
|
|
|
|
|
Pattern Conn507
|
|
|
|
O..O
|
|
X*..
|
|
|
|
:8,C
|
|
|
|
OabO
|
|
X*..
|
|
|
|
;oplay_attack(*,a,a) && oplay_attack(*,b,b)
|
|
|
|
|
|
Pattern Conn508
|
|
|
|
O..O
|
|
?*O?
|
|
|
|
:8,C
|
|
|
|
OabO
|
|
?*O?
|
|
|
|
;oplay_attack(*,a,a) && oplay_attack(*,b,b)
|
|
|
|
|
|
Pattern Conn509
|
|
|
|
o.X?
|
|
OX*O
|
|
....
|
|
----
|
|
|
|
:8,C
|
|
|
|
obX?
|
|
cX*O
|
|
.a..
|
|
----
|
|
|
|
;oplay_attack(*,a,a)
|
|
;&& !oplay_attack_either(*,b,a,*,a) && !oplay_attack_either(*,b,a,c,a)
|
|
|
|
|
|
Pattern Conn509b
|
|
# gf New pattern. (3.3.3)
|
|
|
|
?.X?
|
|
OX*O
|
|
....
|
|
----
|
|
|
|
:8,C
|
|
|
|
?.X?
|
|
aX*b
|
|
....
|
|
----
|
|
|
|
;!oplay_disconnect(*,a,b)
|
|
|
|
|
|
Pattern Conn510
|
|
|
|
O..O
|
|
..*.
|
|
....
|
|
?..O
|
|
|
|
:/,C
|
|
|
|
OADO
|
|
CB*d
|
|
..ba
|
|
?.cO
|
|
|
|
; oplay_attack(*,a,b,c,a) && oplay_attack(*,A,B,C,A)
|
|
; && oplay_attack_either(*,b,a,d,b,d)
|
|
; && oplay_attack_either(*,B,A,D,B,D)
|
|
|
|
|
|
######################
|
|
#
|
|
# Connection of ogeima
|
|
#
|
|
# O...
|
|
# ...O
|
|
#
|
|
######################
|
|
|
|
|
|
Pattern Conn601
|
|
|
|
O*.. Block across large knight's move
|
|
?X.O
|
|
|
|
:8,C
|
|
|
|
O*ac
|
|
?DbO
|
|
|
|
;!oplay_defend_both(*,a,b,a,D) && oplay_attack_either(*,b,a,c,b,c)
|
|
|
|
|
|
Pattern Conn602
|
|
|
|
O...
|
|
*..O
|
|
|
|
:8,C
|
|
|
|
Obde
|
|
*acO
|
|
|
|
;oplay_attack_either(*,a,b,c,d,e,c,e) && !oplay_defend_both(*,a,b,d,c,a,d)
|
|
;&& oplay_attack(*,b,a,c,c)
|
|
|
|
|
|
Pattern Conn603
|
|
|
|
...o Block across large knight's move
|
|
O.*.
|
|
?.XO
|
|
|
|
:8,C
|
|
|
|
.b.o
|
|
ca*.
|
|
?.XO
|
|
|
|
;!oplay_break_through(*,a,b,*,b,c)
|
|
|
|
|
|
Pattern Conn603b
|
|
# gf New experimental pattern. Useful in nngs1:41. (3.1.30)
|
|
|
|
...o Block across large knight's move
|
|
O.*.
|
|
?.XO
|
|
|
|
:8,C
|
|
|
|
...o
|
|
a.*.
|
|
?.Xb
|
|
|
|
;!oplay_disconnect(*,a,b)
|
|
|
|
|
|
Pattern Conn604
|
|
|
|
O...
|
|
.*.O
|
|
|
|
:8,C
|
|
|
|
Ocb.
|
|
d*ae
|
|
|
|
;!oplay_break_through(*,a,b,*,b,e) && !oplay_defend_both(*,c,d,a,b,c,a)
|
|
|
|
|
|
Pattern Conn605
|
|
|
|
O...
|
|
X*.O
|
|
|
|
:8,C
|
|
|
|
Ocb.
|
|
X*ad
|
|
|
|
;!oplay_break_through(*,a,b,*,b,d) && !oplay_defend(*,c,b,c)
|
|
|
|
|
|
Pattern Conn606
|
|
|
|
O*..
|
|
?..O
|
|
|
|
:8,C
|
|
|
|
O*bc
|
|
?daO
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,b,a,d,b,d)
|
|
|
|
|
|
Pattern Conn607
|
|
|
|
O..?
|
|
O.*.
|
|
?X.O
|
|
|
|
:8,C
|
|
|
|
Obc?
|
|
Oa*.
|
|
?X.O
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c)
|
|
|
|
|
|
Pattern Conn608
|
|
|
|
...?
|
|
O.*.
|
|
?X.O
|
|
|
|
:8,C
|
|
|
|
.b.?
|
|
ca*.
|
|
?X.O
|
|
|
|
;!oplay_break_through(*,a,b,*,b,c)
|
|
|
|
|
|
Pattern Conn609
|
|
|
|
O.*.?
|
|
..XO.
|
|
.....
|
|
-----
|
|
|
|
:8,C
|
|
|
|
Ob*c?
|
|
eaXOd
|
|
..d..
|
|
-----
|
|
|
|
;!oplay_defend(*,a,b,c,d,a) && oplay_attack_either(*,c,a,b,d,e,b,e)
|
|
|
|
|
|
Pattern Conn610
|
|
|
|
OXX?
|
|
.*.O
|
|
----
|
|
|
|
:8,C
|
|
|
|
dBB?
|
|
e*ac
|
|
----
|
|
|
|
;oplay_attack(*,a,B) && !oplay_attack(*,c) && !oplay_attack(*,d)
|
|
;&& oplay_attack_either(*,e,B,e)
|
|
|
|
|
|
Pattern Conn611
|
|
|
|
OX.o
|
|
.*.O
|
|
----
|
|
|
|
:8,C
|
|
|
|
dB.o
|
|
a*.c
|
|
----
|
|
|
|
;oplay_attack_either(*,a,B,a) && !oplay_attack(*,c) && !oplay_attack(*,d)
|
|
|
|
|
|
##############################################
|
|
#
|
|
# Connection of two space jump from two stones
|
|
#
|
|
# O...
|
|
# O..O
|
|
#
|
|
##############################################
|
|
|
|
|
|
Pattern Conn701
|
|
|
|
O..?
|
|
O.*O
|
|
|
|
:8,C
|
|
|
|
Obc?
|
|
Oa*O
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c)
|
|
|
|
|
|
Pattern Conn702
|
|
|
|
O.X?
|
|
O.*O
|
|
|
|
:8,C
|
|
|
|
ObC?
|
|
Oa*O
|
|
|
|
;!oplay_defend_both(*,a,b,a,C)
|
|
|
|
|
|
Pattern Conn703
|
|
|
|
O.*.
|
|
O.XO
|
|
|
|
:8,C
|
|
|
|
Ob*c
|
|
OaDO
|
|
|
|
;oplay_attack_either(*,a,b,c,a,c) && oplay_attack(*,c,c)
|
|
;&& oplay_attack(*,b,a,c,D)
|
|
|
|
|
|
Pattern Conn704
|
|
|
|
?..*
|
|
O...
|
|
O..O
|
|
|
|
:8,C
|
|
|
|
?..*
|
|
Odbe
|
|
OcaO
|
|
|
|
# This condition is not necessary but should be sufficient.
|
|
;oplay_attack(*,e,b,e) && !oplay_defend_both(*,b,a,c,d,b,c)
|
|
;&& !oplay_defend_both(*,d,c,a,b,d,a)
|
|
|
|
|
|
Pattern Conn705
|
|
|
|
O..*
|
|
O..O
|
|
|
|
:8,C
|
|
|
|
Odb*
|
|
OcaO
|
|
|
|
# This condition is not necessary but should be sufficient.
|
|
;!oplay_defend_both(*,b,a,c,d,b,c)
|
|
;&& !oplay_defend_both(*,d,c,a,b,d,a)
|
|
|
|
|
|
Pattern Conn706
|
|
|
|
OXXO
|
|
O.*.
|
|
....
|
|
----
|
|
|
|
:8,C
|
|
|
|
dXXO
|
|
da*c
|
|
.b..
|
|
----
|
|
|
|
;!oplay_attack(*,a,b,d) && oplay_attack_either(*,a,b,c,a,c)
|
|
|
|
|
|
Pattern Conn707
|
|
|
|
O.XO
|
|
O.*.
|
|
....
|
|
----
|
|
|
|
:8,C
|
|
|
|
OdDO
|
|
Ob*a
|
|
ce..
|
|
----
|
|
|
|
;oplay_attack_either(*,a,a,D) && oplay_attack_either(*,b,a,c,b,D)
|
|
;&& oplay_attack_either(*,b,a,e,b,D) && oplay_attack_either(*,b,a,d,e,c,b,c)
|
|
|
|
|
|
Pattern Conn708
|
|
|
|
O*.. bend around
|
|
OX.O
|
|
|
|
:8,C
|
|
|
|
O*ac
|
|
ODbO
|
|
|
|
;!oplay_defend_both(*,a,b,a,D) && oplay_attack_either(*,b,a,c,b,c)
|
|
|
|
|
|
###########################
|
|
#
|
|
# Miscellaneous connections
|
|
#
|
|
###########################
|
|
|
|
|
|
Pattern Conn801
|
|
|
|
.O*.
|
|
O..O
|
|
|
|
:8,C
|
|
|
|
.O*.
|
|
Oa.O
|
|
|
|
;xcut(a)
|
|
|
|
|
|
#######################
|
|
#
|
|
# Cut of one space jump
|
|
#
|
|
# X.X
|
|
#
|
|
#######################
|
|
|
|
|
|
Pattern Cut101
|
|
|
|
... cut with atari
|
|
X*X
|
|
OoO
|
|
|
|
:|,OB
|
|
|
|
...
|
|
A*B
|
|
aob
|
|
|
|
;lib(a)>1 && lib(b)>1 && (lib(A)==2 || lib(B)==2)
|
|
|
|
|
|
#################
|
|
#
|
|
# Cut of diagonal
|
|
#
|
|
# X.
|
|
# OX
|
|
#
|
|
#################
|
|
|
|
|
|
Pattern Cut201
|
|
|
|
X* cut through diagonal
|
|
OX
|
|
|
|
:/,OB
|
|
|
|
X*
|
|
aX
|
|
|
|
;!oplay_attack_either(*,*,a)
|
|
|
|
|
|
##############
|
|
#
|
|
# Cut of keima
|
|
#
|
|
# X..
|
|
# ..X
|
|
#
|
|
##############
|
|
|
|
|
|
Pattern Cut302
|
|
|
|
X*. cut through keima
|
|
.OX
|
|
|
|
:8,OB
|
|
|
|
X*a
|
|
.bX
|
|
|
|
;!xplay_attack_either(*,a,b,a)
|
|
|
|
|
|
Pattern Cut303
|
|
# gf Pattern and constraint revised. (3.3.3)
|
|
|
|
X*O cut through keima
|
|
?OX
|
|
|
|
:8,B
|
|
|
|
C*a
|
|
?bD
|
|
|
|
;(alive(a) || alive(b)) && !xplay_disconnect(*,C,D) && !oplay_connect(*,C,D)
|
|
|
|
|
|
Pattern Cut304
|
|
# gf New pattern. (3.5.3)
|
|
|
|
?OO
|
|
X.. cut through keima
|
|
?*X
|
|
|
|
:8,OB
|
|
|
|
?OO
|
|
Dab
|
|
?*C
|
|
|
|
;!oplay_defend_both(*,a,b,C,D) && !oplay_connect(*,C,D)
|
|
|
|
|
|
#######################################
|
|
#
|
|
# Cut of one space jump from two stones
|
|
#
|
|
# X..
|
|
# X.X
|
|
#
|
|
#######################################
|
|
|
|
#######################
|
|
#
|
|
# Cut of two space jump
|
|
#
|
|
# X..X
|
|
#
|
|
#######################
|
|
|
|
Pattern Cut501
|
|
|
|
X.OX
|
|
..*.
|
|
....
|
|
----
|
|
|
|
:8,OB
|
|
|
|
XaeX
|
|
cb*d
|
|
....
|
|
----
|
|
|
|
;lib(e)==3 && xplay_attack_either(*,a,b,c,a,c)
|
|
;&& xplay_attack_either(*,a,b,d,a,d) && !xplay_defend(*,b,a,?,d,b)
|
|
|
|
|
|
###############
|
|
#
|
|
# Cut of ogeima
|
|
#
|
|
# X...
|
|
# ...X
|
|
#
|
|
###############
|
|
|
|
|
|
Pattern Cut601
|
|
|
|
XO..
|
|
.*.X
|
|
....
|
|
----
|
|
|
|
:8,OB
|
|
|
|
FOc.
|
|
d*aE
|
|
..b.
|
|
----
|
|
|
|
;!xplay_break_through(*,a,b,*,b,E) && !xplay_attack(*,a,b,d,c,F)
|
|
|
|
|
|
#######################################
|
|
#
|
|
# Cut of two space jump from two stones
|
|
#
|
|
# X...
|
|
# X..X
|
|
#
|
|
#######################################
|
|
|
|
|
|
|
|
####################
|
|
#
|
|
# Miscellaneous cuts
|
|
#
|
|
####################
|
|
|
|
|
|
|
|
###########################
|
|
#
|
|
# Antisuji moves.
|
|
#
|
|
# These are moves which are locally inferior or for some other reason
|
|
# should never be played. Obviously, a certain amount of care must be
|
|
# taken with these patterns.
|
|
#
|
|
###########################
|
|
|
|
Pattern AS1
|
|
# It's tempting to make this usually bad descent an antisuji, but
|
|
# sometimes descending is correct e.g. in the "comb formation"
|
|
#
|
|
# XXX
|
|
# XXOOOXX
|
|
# XO...OX
|
|
# .*...O.
|
|
# --------
|
|
#
|
|
# descending is the *only* move to live. So this should not be an antisuji.
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
?XO don't defend by moving straight down if it gives X a free forcing move
|
|
XO.
|
|
.*.
|
|
---
|
|
|
|
:8,-,shape(-3)
|
|
|
|
?XO
|
|
Xb.
|
|
a*.
|
|
---
|
|
|
|
;attack(b) && !oplay_attack(*,a,a) && oplay_attack(*,a,*)
|
|
|
|
|
|
Pattern AS2
|
|
|
|
?XO don't play double hane at the edge
|
|
XO.
|
|
*..
|
|
---
|
|
|
|
:8,-
|
|
|
|
?XO
|
|
XOa
|
|
*b.
|
|
---
|
|
|
|
;!oplay_attack(*,a,a) && oplay_attack(*,a,b,b)
|
|
|
|
>antisuji(*);
|
|
|
|
|
|
Pattern AS3
|
|
|
|
OOX don't play potentially risky gote move
|
|
*X.
|
|
---
|
|
|
|
:8,sOX
|
|
|
|
OdA
|
|
*Bc
|
|
---
|
|
|
|
;!weak(A) && !weak(B) && oplay_attack(*,c,*)
|
|
|
|
>antisuji(*);
|
|
>backfill_helper(*,c,d);
|
|
|
|
|
|
Pattern AS4
|
|
# gf New pattern. (3.1.2)
|
|
|
|
|*O Connect without leaving bigger ko threat than necessary.
|
|
|OX
|
|
|.O
|
|
+--
|
|
|
|
:8,X
|
|
|
|
|*b
|
|
|OX
|
|
|ac
|
|
+--
|
|
|
|
;alive(b) && attack(c)
|
|
|
|
>replace(a,*);
|
|
|
|
|
|
Pattern AS5
|
|
# gf New pattern. (3.1.3)
|
|
|
|
?XO?
|
|
XO..
|
|
XO*.
|
|
.X..
|
|
----
|
|
|
|
:8,OX
|
|
|
|
?XO?
|
|
XOc.
|
|
XO*.
|
|
bDa.
|
|
----
|
|
|
|
;oplay_attack(a,*,b,c,D,a)
|
|
|
|
>replace(a,*);
|
|
|
|
|
|
Pattern AS6
|
|
# gf New pattern. (3.1.3)
|
|
|
|
|.O if legal, take ko before filling ko
|
|
|OX
|
|
|X*
|
|
+--
|
|
|
|
:8,s
|
|
|
|
|ab
|
|
|OC
|
|
|X*
|
|
+--
|
|
|
|
;alive(b) && alive(C) && legal_omove(*)
|
|
|
|
>replace(a,*);
|
|
|
|
|
|
Pattern AS7
|
|
# pp New pattern (3.3.18)
|
|
# (Work-around problem with NonTerritory11, see valuation of M19 in
|
|
# endgame:830)
|
|
# It is shape-penalized since it can probably be a semeai attack/defense
|
|
# in exceptionally rare cases. But actually it is really an antisuji.
|
|
|
|
?XX? don't play stupid zero point gote
|
|
o*.o
|
|
----
|
|
|
|
:8,X,shape(-10)
|
|
|
|
aXXc
|
|
b*ed
|
|
----
|
|
|
|
; o_alive_somewhere(a,b) && o_alive_somewhere(c,d)
|
|
; && !oplay_attack(*,e,e)
|
|
; && (oplay_attack(*,e,*) || (o_somewhere(c) ? oplay_attack(*,e,c)
|
|
; : oplay_attack(*,e,d)))
|
|
|
|
|
|
###########################
|
|
#
|
|
# Shape moves.
|
|
#
|
|
# The purpose of these patterns is to give a value to the shape
|
|
# obtained locally.
|
|
#
|
|
###########################
|
|
|
|
|
|
Pattern Shape1
|
|
# gf Revised constraint. (3.1.9)
|
|
# gf Revised constraint. (3.3.10)
|
|
|
|
OO empty triangle. Ok if the empty point of the triangle is an eye.
|
|
.*
|
|
|
|
:8,-,shape(-2)
|
|
|
|
OO
|
|
a*
|
|
|
|
;!proper_eye(a) && !o_captures_something(*) && !x_captures_something(*)
|
|
|
|
|
|
Pattern Shape2
|
|
# gf Revised constraint. (3.3.10)
|
|
|
|
O* empty triangle. Ok if the empty point of the triangle is an eye.
|
|
.O
|
|
|
|
:/,-,shape(-2)
|
|
|
|
O*
|
|
aO
|
|
|
|
;!eye(a) && !o_captures_something(*)
|
|
|
|
|
|
Pattern Shape3
|
|
# tm modified (3.1.23) (reduce shape penalty)
|
|
# see blunder:15, trevord:800
|
|
# gf Revised constraint. (3.3.17)
|
|
|
|
O* dango
|
|
OO
|
|
|
|
:/,-,shape(-1)
|
|
|
|
O*
|
|
OO
|
|
|
|
;!ko(*) && !o_captures_something(*)
|
|
|
|
|
|
Pattern Shape4
|
|
|
|
*.O forcing move left behind
|
|
.OX
|
|
xXX
|
|
|
|
:8,-,shape(-2)
|
|
|
|
*.O
|
|
aOX
|
|
xXX
|
|
|
|
;!odefend_against(*,a)
|
|
|
|
|
|
Pattern Shape5
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
?O.O protect against atari or threat to atari
|
|
?.OX
|
|
?*XX
|
|
|
|
:8,-,shape(3)
|
|
|
|
|
|
Pattern Shape6
|
|
# gf Added constraint. (3.1.15)
|
|
|
|
*.O classical good shape, unless it leaves a double atari
|
|
..O
|
|
OOX
|
|
|
|
:\,-,shape(2)
|
|
|
|
*.O
|
|
.aO
|
|
OOX
|
|
|
|
;oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Shape6b
|
|
|
|
*.O secures eye
|
|
..O
|
|
OOo
|
|
|
|
:\,-,shape(1)
|
|
|
|
|
|
Pattern Shape7
|
|
|
|
*.X eye-stealing move
|
|
..X
|
|
XXO
|
|
|
|
:\,-,shape(3)
|
|
|
|
|
|
Pattern Shape8a
|
|
|
|
... ponnuki
|
|
.*.
|
|
OXO
|
|
.O.
|
|
|
|
:|,-,shape(5)
|
|
|
|
|
|
Pattern Shape8b
|
|
|
|
... ponnuki
|
|
.*.
|
|
OXO
|
|
.OO
|
|
|
|
:8,-,shape(5)
|
|
|
|
|
|
Pattern Shape8c
|
|
|
|
... ponnuki
|
|
.*o
|
|
OXO
|
|
.OX
|
|
|
|
:8,-,shape(5)
|
|
|
|
|
|
Pattern Shape8d
|
|
|
|
... ponnuki defense
|
|
o*.
|
|
OXO
|
|
XO.
|
|
xXx
|
|
|
|
:8,-,shape(7)
|
|
|
|
|
|
Pattern Shape9a
|
|
# tm modified (3.1.18)
|
|
# tm modified (3.1.20)
|
|
|
|
ooo don't give opponent ponnuki
|
|
o*o
|
|
XOX
|
|
.X.
|
|
|
|
:|,-,shape(5)
|
|
|
|
bdB
|
|
c*C
|
|
eOf
|
|
.X.
|
|
|
|
; lib(e) > 1 && lib(f) > 1
|
|
; && (o_alive_somewhere(c) + o_alive_somewhere(C) + o_alive_somewhere(d) <= 1)
|
|
; && !(o_alive_somewhere(d) && (o_alive_somewhere(b) || o_alive_somewhere(B)))
|
|
|
|
|
|
Pattern Shape9b
|
|
# tm modified (3.1.18)
|
|
# tm modified (3.1.20)
|
|
# ab I don't understand this pattern. X has already played at LR of
|
|
# the pattern, so ponnuki is slow. Unless * attacks the eye space of X,
|
|
# I see no point in pulling this stone out.
|
|
|
|
ooo don't give opponent ponnuki
|
|
o*o
|
|
XOX
|
|
.XX
|
|
|
|
:8,-,shape(4)
|
|
|
|
bdB
|
|
c*C
|
|
eOf
|
|
.XX
|
|
|
|
; (o_alive_somewhere(c) + o_alive_somewhere(C) + o_alive_somewhere(d) <= 1)
|
|
; && !(o_alive_somewhere(d) && (o_alive_somewhere(b) || o_alive_somewhere(B)))
|
|
; && !attack(e) && !attack(f)
|
|
|
|
|
|
Pattern Shape9c
|
|
# tm modified (3.1.20)
|
|
|
|
ooo don't give opponent ponnuki
|
|
o*o
|
|
XOX
|
|
.XO
|
|
|
|
:8,-,shape(5)
|
|
|
|
bdB
|
|
c*C
|
|
eOA
|
|
.fO
|
|
|
|
; (o_alive_somewhere(c) + o_alive_somewhere(C) + o_alive_somewhere(d) <= 1)
|
|
; && !(o_alive_somewhere(d) && (o_alive_somewhere(b) || o_alive_somewhere(B)))
|
|
; && !attack(A) && !attack(e) && !attack(f)
|
|
|
|
|
|
Pattern Shape10
|
|
|
|
xXx force opponent into bad shape or ko
|
|
..X
|
|
*XO
|
|
oOo
|
|
|
|
:8,-,shape(3)
|
|
|
|
|
|
Pattern Shape11
|
|
# gf Revised constraint. (3.1.3)
|
|
|
|
?..x Don't push from behind with few liberties (want to avoid double hane).
|
|
x.*X
|
|
?.OX
|
|
??X?
|
|
|
|
:8,-,shape(-3)
|
|
|
|
?..x
|
|
x.*X
|
|
?.bX
|
|
??A?
|
|
|
|
;lib(A)>1 && !dead(b)
|
|
|
|
|
|
Pattern Shape12
|
|
|
|
?..x Don't push from behind with few liberties (want to avoid double hane).
|
|
?...
|
|
x.*X
|
|
?.OX
|
|
??OX
|
|
??X?
|
|
|
|
:8,-,shape(-2)
|
|
|
|
?..x
|
|
?...
|
|
x.*X
|
|
?.OX
|
|
??OX
|
|
??A?
|
|
|
|
;lib(A)>1
|
|
|
|
|
|
Pattern Shape12b
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
..x Don't push from behind with few liberties if we have to bend after hane
|
|
.*X
|
|
.OX
|
|
|
|
:8,-,shape(-3)
|
|
|
|
bax
|
|
.*C
|
|
.OC
|
|
|
|
;!oplay_attack_either(*,a,a,C) && oplay_attack(*,a,b,*)
|
|
|
|
|
|
Pattern Shape13
|
|
# Such huge shape values can cause problems. See handtalk12.sgf, move 37
|
|
# (where * is actually an owl defense). -Arend
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
?X? don't set up double cut
|
|
*.O
|
|
.O.
|
|
|
|
:8,-,shape(-3)
|
|
|
|
?X?
|
|
*aB
|
|
cOb
|
|
|
|
;!oplay_attack_either(*,a,b,c,a,c) && !oplay_attack_either(*,a,c,b,a,b) && !alive(B)
|
|
|
|
|
|
Pattern Shape14
|
|
|
|
xXO? better connect solid at once than leaving a kikashi
|
|
.O.x
|
|
xX*?
|
|
|
|
:8,X,shape(-2)
|
|
|
|
xAO?
|
|
aO.x
|
|
xB*?
|
|
|
|
;!oplay_attack(*,a,A) && !oplay_attack(*,a,B) && !oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Shape15
|
|
|
|
xXO? better connect solid at once than leaving a kikashi
|
|
.O.*
|
|
xXx?
|
|
|
|
:8,X,shape(-2)
|
|
|
|
xAO?
|
|
aO.*
|
|
xBx?
|
|
|
|
;!oplay_attack(*,a,A) && !oplay_attack(*,a,B) && !oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Shape16
|
|
# gf Added constraint. (3.3.10)
|
|
# Usually better to capture if either stone in atari.
|
|
|
|
?XO clean cut
|
|
*Oo
|
|
?X?
|
|
|
|
:8,-,shape(1)
|
|
|
|
?BO
|
|
*Oo
|
|
?A?
|
|
|
|
;lib(A)>1 && lib(B)>2
|
|
|
|
|
|
Pattern Shape17
|
|
# The solid connection is better than nothing if the descent doesn't work
|
|
|
|
O*. X can still connect underneath
|
|
XOX
|
|
...
|
|
---
|
|
|
|
:8,-,shape(-2)
|
|
|
|
O*.
|
|
BOC
|
|
.a.
|
|
---
|
|
|
|
;!oplay_attack(*,a,a) && !oplay_attack(*,a,B) && !oplay_attack(*,a,C) && oplay_attack(a,*,*)
|
|
|
|
|
|
Pattern Shape18
|
|
# gf Added n classification. (3.3.20)
|
|
|
|
O.O tiger
|
|
.*X
|
|
|
|
:8,n,shape(2)
|
|
|
|
OaO
|
|
b*X
|
|
|
|
;odefend_against(*,a) && (oplay_attack(*,b,b) || !oplay_attack(*,b,*))
|
|
|
|
|
|
Pattern Shape18b
|
|
# Negate shape bonus if X can force O to fill the tiger's mouth.
|
|
|
|
??. tiger
|
|
O.O
|
|
.*X
|
|
|
|
:8,-,shape(-2)
|
|
|
|
??a
|
|
O.b
|
|
.*C
|
|
|
|
;lib(b)==2 && lib(C)>3 && !oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Shape18c
|
|
# Negate shape bonus if X can connect "beneath".
|
|
# gf New pattern. (3.1.4)
|
|
|
|
?O.O tiger
|
|
X.*X
|
|
....
|
|
|
|
:8,-,shape(-3)
|
|
|
|
?OdO
|
|
Xc*E
|
|
.ba.
|
|
|
|
;oplay_attack(*,a,b,c,d,b) && lib(E)>3
|
|
|
|
|
|
Pattern Shape19
|
|
# gf Revised constraint. (3.3.2)
|
|
|
|
X.X stop enemy tiger
|
|
.*O
|
|
|
|
:8,-,shape(2)
|
|
|
|
XaB
|
|
.*O
|
|
|
|
;lib(B)>1 && xdefend_against(*,a)
|
|
|
|
|
|
Pattern Shape20
|
|
# delta_moyo currently overvalues this move, so we compensate here
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
XO. bad aji
|
|
O..
|
|
..*
|
|
...
|
|
---
|
|
|
|
:8,-,shape(-3)
|
|
|
|
|
|
Pattern Shape21
|
|
# almost always best to capture immediately
|
|
|
|
?XO?
|
|
XOXO
|
|
..*?
|
|
----
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape22
|
|
|
|
O.*X Wrong reinforcement
|
|
..OX
|
|
....
|
|
----
|
|
|
|
:8,-,shape(-2)
|
|
|
|
O.*X
|
|
.cOX
|
|
.bad
|
|
----
|
|
|
|
;oplay_attack(*,a,b,c,d,*)
|
|
|
|
|
|
Pattern Shape23
|
|
|
|
.OXx Usually better to connect solidly
|
|
..OX
|
|
.*..
|
|
----
|
|
|
|
:8,-,shape(-1)
|
|
|
|
|
|
Pattern Shape24
|
|
# delta_terri should see the value of this move, but currently needs help
|
|
|
|
?X?? Usually better to connect solidly
|
|
O*.O
|
|
....
|
|
----
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape25
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
...x
|
|
.*.X Don't cap with weak stone that can be cut off.
|
|
....
|
|
xx.O
|
|
|
|
:8,-,shape(-3)
|
|
|
|
...x
|
|
.*.X
|
|
....
|
|
xx.a
|
|
|
|
;weak(a)
|
|
|
|
|
|
Pattern Shape26
|
|
|
|
XO? Bad shape after atari on first line
|
|
O.*
|
|
...
|
|
---
|
|
|
|
:8,s,shape(-1)
|
|
|
|
XO?
|
|
b.*
|
|
a..
|
|
---
|
|
|
|
;lib(b)==2 && !oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Shape27
|
|
|
|
?XO? Bad shape after atari on first line
|
|
XO..
|
|
...*
|
|
----
|
|
|
|
:8,-,shape(-1)
|
|
|
|
|
|
Pattern Shape28
|
|
|
|
O.XO Avoid diagonal move that allows X to cut.
|
|
.*..
|
|
|
|
:8,X,shape(-4)
|
|
|
|
O.XO
|
|
.*a.
|
|
|
|
;!oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Shape29
|
|
# gf Revised constraint. (3.1.20)
|
|
|
|
O.* Avoid setting up double threat.
|
|
?X?
|
|
|
|
:8,X,shape(-5)
|
|
|
|
ba*
|
|
?X?
|
|
|
|
;(!attack(b) || defend(b)) && !oplay_defend_both(*,a,*,b)
|
|
|
|
|
|
Pattern Shape30
|
|
# In this position any move that defends the lower O stone will be
|
|
# assumed to break the connection, although X might connect
|
|
# underneath. Therefore we give some extra encourage to the real cut.
|
|
# If this move isn't safe, it won't be suggested anyway.
|
|
|
|
?O?
|
|
o.o
|
|
XOX
|
|
.*.
|
|
---
|
|
|
|
:|,X,shape(1)
|
|
|
|
?O?
|
|
o.o
|
|
XaX
|
|
.*.
|
|
---
|
|
|
|
;attack(a)
|
|
|
|
|
|
Pattern Shape31
|
|
|
|
XOo Very seldom the right connection.
|
|
O..
|
|
O*.
|
|
---
|
|
|
|
:8,-,shape(-1)
|
|
|
|
|
|
Pattern Shape32
|
|
|
|
XO? Bad aji.
|
|
x.*
|
|
O.O
|
|
?.X
|
|
|
|
:8,X,shape(-1)
|
|
|
|
Xa?
|
|
x.*
|
|
O.O
|
|
?.X
|
|
|
|
;lib(a)==2
|
|
|
|
|
|
Pattern Shape33
|
|
|
|
?O. Never bad to make an eye.
|
|
O.*
|
|
oO.
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape34
|
|
|
|
?X? Don't descend if we can (and have to) capture.
|
|
XOX
|
|
.*.
|
|
---
|
|
|
|
:8,X,shape(-3)
|
|
|
|
?X?
|
|
BOX
|
|
.*a
|
|
---
|
|
|
|
;lib(B)==1 && !oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Shape35
|
|
|
|
O.O Good shape
|
|
O..
|
|
XO*
|
|
???
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape36
|
|
|
|
OX.O Very inefficient move
|
|
XO..
|
|
.*..
|
|
----
|
|
|
|
:8,-,shape(-2)
|
|
|
|
OB.O
|
|
XOa.
|
|
.*..
|
|
----
|
|
|
|
;oplay_defend(*,B) && oplay_attack(*,a,*)
|
|
|
|
|
|
Pattern Shape37
|
|
|
|
OX.O Good shape
|
|
XO*.
|
|
....
|
|
----
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape38
|
|
|
|
X.O Usually inefficient
|
|
O..
|
|
*..
|
|
---
|
|
|
|
:8,-,shape(-1)
|
|
|
|
|
|
Pattern Shape39
|
|
|
|
O.. good shape
|
|
..O
|
|
O*X
|
|
|
|
:8,-,shape(1)
|
|
|
|
b..
|
|
..a
|
|
O*X
|
|
|
|
;lib(a)>2 && lib(b)>2
|
|
|
|
|
|
Pattern Shape40
|
|
|
|
O.X eye-stealing move
|
|
..X
|
|
XX*
|
|
|
|
:\,-,shape(1)
|
|
|
|
|
|
Pattern Shape41
|
|
# Notice that this pattern gives one more shape point for the previous
|
|
# pattern.
|
|
|
|
O.x eye-stealing move
|
|
..X
|
|
xX*
|
|
|
|
:\,-,shape(1)
|
|
|
|
|
|
Pattern Shape42
|
|
# Sometimes the life and death code comes up with both this move and
|
|
# the more solid move one line higher. Prefer the latter.
|
|
|
|
O.o
|
|
X..
|
|
.*.
|
|
---
|
|
|
|
:8,O,shape(-2)
|
|
|
|
|
|
Pattern Shape43
|
|
|
|
?XO. usually better to connect solidly than leaving peep behind
|
|
xO..
|
|
..*.
|
|
----
|
|
|
|
:8,-,shape(-2)
|
|
|
|
|
|
Pattern Shape44
|
|
# This pattern may be a little too general but is probably good.
|
|
|
|
?...? extend when faced with contact instability
|
|
?.OX?
|
|
?.*.x
|
|
??.??
|
|
|
|
:8,-,shape(2)
|
|
|
|
?...?
|
|
a.OX?
|
|
?.*.x
|
|
??.??
|
|
|
|
;!xmoyo(a)
|
|
|
|
|
|
Pattern Shape45
|
|
# gf Added constraint. (3.1.3)
|
|
|
|
xxx? usually better to connect and block on third line
|
|
O..O
|
|
*...
|
|
....
|
|
----
|
|
|
|
:8,-,shape(-1)
|
|
|
|
CDE?
|
|
a..b
|
|
*...
|
|
....
|
|
----
|
|
|
|
;!same_dragon(a,b) || x_alive_somewhere(C,D,E)
|
|
|
|
|
|
Pattern Shape46
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
?XXO blocking one step to the left usually much superior
|
|
.O.*
|
|
....
|
|
----
|
|
|
|
:8,-,shape(-3)
|
|
|
|
?XXb
|
|
.Oa*
|
|
....
|
|
----
|
|
|
|
;lib(b)>=3 && oplay_attack(a,*,*)
|
|
|
|
|
|
Pattern Shape47
|
|
|
|
x.O too vulnerable to cutting
|
|
O.X
|
|
.*X
|
|
xx?
|
|
|
|
:8,-,shape(-3)
|
|
|
|
|
|
Pattern Shape48
|
|
# gf Added constraint. (3.3.15)
|
|
# gf Revised pattern. (3.3.16)
|
|
|
|
.X. makes it harder for X to make eyes
|
|
*.X
|
|
?xx
|
|
|
|
:8,s,shape(1)
|
|
|
|
.A.
|
|
*.X
|
|
?xx
|
|
|
|
;weak(A)
|
|
|
|
|
|
Pattern Shape49
|
|
|
|
OXx avoid descending if it leaves a kikashi
|
|
XOX
|
|
.OX
|
|
.*.
|
|
---
|
|
|
|
:8,-,shape(-1)
|
|
|
|
OXx
|
|
XOX
|
|
.OX
|
|
.*a
|
|
---
|
|
|
|
;oplay_attack(*,a,*) && !oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Shape50
|
|
|
|
xO.xx connect after nozoki
|
|
X*.xx
|
|
xO.xx
|
|
|
|
:-,OX,shape(5)
|
|
|
|
|
|
Pattern Shape51
|
|
|
|
O.. empty triangle on the edge
|
|
O*.
|
|
---
|
|
|
|
:8,-,shape(-2)
|
|
|
|
|
|
Pattern Shape53
|
|
|
|
?X? good for eyespace and to avoid shortage of liberties
|
|
O*O
|
|
...
|
|
---
|
|
|
|
:|,-,shape(1)
|
|
|
|
|
|
Pattern Shape54
|
|
|
|
?X? often stupid
|
|
O.O
|
|
..*
|
|
---
|
|
|
|
:8,-,shape(-1)
|
|
|
|
|
|
Pattern Shape55
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
O. don't force opponent to cut
|
|
X.
|
|
.*
|
|
|
|
:8,-,shape(-3)
|
|
|
|
a.
|
|
X.
|
|
.*
|
|
|
|
;weak(a)
|
|
|
|
|
|
Pattern Shape56
|
|
|
|
?XO. don't defend by moving straight down if X can peep
|
|
XO..
|
|
.*..
|
|
----
|
|
|
|
:8,O,shape(-3)
|
|
|
|
|
|
Pattern Shape57
|
|
|
|
..O avoid moves at cross purposes
|
|
O.X
|
|
.*.
|
|
|
|
:8,OX,shape(-3)
|
|
|
|
|
|
Pattern Shape58
|
|
|
|
O.XO effective block
|
|
..*O
|
|
..xx
|
|
|
|
:8,-,shape(3)
|
|
|
|
O.AO
|
|
..*O
|
|
..xx
|
|
|
|
;lib(A)==3
|
|
|
|
|
|
Pattern Shape59
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
?X.O usually stupid, other atari or descent generally better
|
|
XOXO
|
|
..*.
|
|
----
|
|
|
|
:8,-,shape(-3)
|
|
|
|
|
|
Pattern Shape60
|
|
|
|
..O? don't connect this way because it leaves bad aji
|
|
...O
|
|
..*o
|
|
----
|
|
|
|
:8,-,shape(-3)
|
|
|
|
|
|
Pattern Shape60b
|
|
# gf New pattern. (3.1.3)
|
|
|
|
..O? this connection on the other hand is usually good
|
|
..*O
|
|
...o
|
|
----
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape60c
|
|
# gf New pattern. (3.1.14)
|
|
|
|
..OX? usually we want to avoid this connection too
|
|
...OX
|
|
...*O
|
|
-----
|
|
|
|
:8,-,shape(-1)
|
|
|
|
|
|
Pattern Shape61
|
|
|
|
xX... connecting preferred to alternative defenses
|
|
XOX..
|
|
O*O..
|
|
.....
|
|
.....
|
|
-----
|
|
|
|
:8,-,shape(3)
|
|
|
|
|
|
Pattern Shape62
|
|
|
|
?OO??
|
|
O...x not so good shape on the edge
|
|
O.*.x
|
|
-----
|
|
|
|
:8,-,shape(-3)
|
|
|
|
|
|
Pattern Shape63
|
|
|
|
??xO. might connect, but horrible amounts of aji
|
|
?X...
|
|
.XO..
|
|
..*..
|
|
-----
|
|
|
|
:8,-,shape(-3)
|
|
|
|
|
|
Pattern Shape64
|
|
|
|
?O.. never correct shape
|
|
O...
|
|
?O*.
|
|
----
|
|
|
|
:8,-,shape(-3)
|
|
|
|
|
|
Pattern Shape65
|
|
|
|
?O.. good solid shape
|
|
O.*.
|
|
?O..
|
|
----
|
|
|
|
:8,-,shape(1)
|
|
|
|
bO..
|
|
O.*.
|
|
aO..
|
|
----
|
|
|
|
;o_alive_somewhere(a,b)
|
|
|
|
|
|
Pattern Shape66
|
|
# db increased negative shape (3.1.7)
|
|
# ab added ??? lines added as jump is often good on 3rd line
|
|
# gf This is way too general. Added constraint. (3.5.3)
|
|
|
|
xX. often bad to leave a gap
|
|
O.*
|
|
...
|
|
???
|
|
???
|
|
|
|
:8,-,shape(-3)
|
|
|
|
xX.
|
|
ca*
|
|
.b.
|
|
???
|
|
???
|
|
|
|
;oplay_disconnect(*,a,b,*,c)
|
|
|
|
|
|
Pattern Shape67
|
|
# gf New pattern. (3.1.3)
|
|
|
|
?XX? when played as a ko threat, this is often inefficient
|
|
X*OX
|
|
..X?
|
|
|
|
:8,sX,shape(-1)
|
|
|
|
?XX?
|
|
X*OX
|
|
..X?
|
|
|
|
;oplay_attack(*,*)
|
|
|
|
|
|
Pattern Shape68
|
|
# gf New pattern. (3.1.3)
|
|
|
|
OXxx usually the right place for a small ko threat in this shape
|
|
X*.x
|
|
XX..
|
|
----
|
|
|
|
:8,sOX,shape(1)
|
|
|
|
OXxx
|
|
A*.x
|
|
AA..
|
|
----
|
|
|
|
;lib(A)==2
|
|
|
|
|
|
Pattern Shape69
|
|
# gf New pattern. (3.1.13)
|
|
|
|
?XXX?? usually the right way to strengthen the position
|
|
XO.O*.
|
|
XO....
|
|
......
|
|
------
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape70
|
|
# gf New pattern. (3.1.14)
|
|
|
|
OX.. better to capture cleanly
|
|
.*..
|
|
----
|
|
|
|
:8,-,shape(-2)
|
|
|
|
OAb.
|
|
.*..
|
|
----
|
|
|
|
;!oplay_defend(b,A)
|
|
|
|
|
|
Pattern Shape71
|
|
# gf New pattern. (3.1.14)
|
|
|
|
?XO.. the descent leaves a peep
|
|
XO...
|
|
.*...
|
|
-----
|
|
|
|
:8,-,shape(-1)
|
|
|
|
|
|
Pattern Shape72
|
|
# gf New pattern. (3.1.14)
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
?XO. don't leave double threat behind
|
|
XO..
|
|
*...
|
|
----
|
|
|
|
:8,-,shape(-3)
|
|
|
|
?Xc.
|
|
Xba.
|
|
*...
|
|
----
|
|
|
|
;!oplay_defend_both(*,a,b,c)
|
|
|
|
|
|
Pattern Shape73
|
|
# gf New pattern. (3.1.14)
|
|
|
|
?OO cancel empty triangle negative shape when we create an eye
|
|
O.*
|
|
OoO
|
|
|
|
:8,-,shape(2)
|
|
|
|
?OO
|
|
Oa*
|
|
OoO
|
|
|
|
;!proper_eye(a)
|
|
|
|
|
|
Pattern Shape73b
|
|
# gf New pattern. (3.1.20)
|
|
# See strategy3:120. This pattern favors C7 to D8.
|
|
|
|
?OO some more shape if opponent could atari to destroy eye
|
|
O.*
|
|
OoO
|
|
|
|
:8,-,shape(1)
|
|
|
|
?AA
|
|
O.*
|
|
OoO
|
|
|
|
;lib(A)==2 && xlib(*)>1
|
|
|
|
|
|
Pattern Shape74
|
|
# gf New pattern. (3.1.14)
|
|
|
|
o..? don't leave cutting points around
|
|
O...
|
|
X.Ox
|
|
?*.x
|
|
oO.?
|
|
|
|
:8,-,shape(-1)
|
|
|
|
|
|
Pattern Shape75
|
|
# gf New pattern. (3.1.15)
|
|
|
|
?Xxx
|
|
.OXx
|
|
..*.
|
|
....
|
|
----
|
|
|
|
:8,-,shape(-1)
|
|
|
|
?XDx
|
|
bOXx
|
|
.a*c
|
|
....
|
|
----
|
|
|
|
;(x_alive_somewhere(D) || oplay_attack(*,?,D,D)) && !oplay_defend(*,a,b,c,*)
|
|
|
|
|
|
Pattern Shape76
|
|
# tm New Pattern. (3.1.16) (see trevor:220)
|
|
# gf Reduced shape value. (3.5.2)
|
|
|
|
----
|
|
....
|
|
....
|
|
O.*.
|
|
|
|
:8,-,shape(-3)
|
|
|
|
----
|
|
....
|
|
CbE.
|
|
DA*.
|
|
|
|
; xlib(A) > 2
|
|
; && oplay_attack(*,A,b,C,D)
|
|
; && oplay_attack(*,A,b,E,C,*)
|
|
|
|
|
|
Pattern Shape77
|
|
# gf New pattern. (3.1.18) (see trevor:382)
|
|
|
|
oOO
|
|
O..
|
|
XO*
|
|
---
|
|
|
|
:8,-,shape(-3)
|
|
|
|
|
|
Pattern Shape78
|
|
# gf New pattern. (3.1.18) (see trevor:382)
|
|
|
|
oOO
|
|
O.*
|
|
XO.
|
|
---
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape79
|
|
# gf New pattern. (3.1.20) (see trevord:610,630,640)
|
|
|
|
OOo Almost always better to block on second line
|
|
X..
|
|
*..
|
|
---
|
|
|
|
:8,O,shape(-2)
|
|
|
|
OOo
|
|
A..
|
|
*..
|
|
---
|
|
|
|
;lib(A)==2
|
|
|
|
|
|
Pattern Shape80
|
|
# tm New Pattern (3.1.22) (see trevora:390)
|
|
|
|
|O.O
|
|
|..O
|
|
|*.O
|
|
|..o
|
|
+---
|
|
|
|
:8,-,shape(1)
|
|
|
|
|
|
Pattern Shape81
|
|
# tm New Pattern (3.1.22) (see trevora:300)
|
|
# FIXME: potentially bad for ko threats.
|
|
|
|
.*o
|
|
O..
|
|
XOO
|
|
|
|
:8,X,shape(1)
|
|
|
|
|
|
Pattern Shape82
|
|
# gf New pattern. (3.1.32) (see trevorb:280)
|
|
|
|
|XXO Prefer this as ko threat since it gives a second one
|
|
|.*X
|
|
|.X?
|
|
|.??
|
|
|
|
:8,sX,shape(2)
|
|
|
|
|AAO
|
|
|.*X
|
|
|.X?
|
|
|b??
|
|
|
|
;!weak(A) && lib(A)==2 && xterri(b)
|
|
|
|
|
|
Pattern Shape83
|
|
# gf New pattern. (3.3.3) (see trevorc:310)
|
|
|
|
*X? don't leave double atari behind
|
|
.OX
|
|
..O
|
|
|
|
:8,sX,shape(-2)
|
|
|
|
*X?
|
|
daX
|
|
.cb
|
|
|
|
;!oplay_defend_both(*,c,a,b) && oplay_attack(d,c,c)
|
|
|
|
|
|
Pattern Shape84
|
|
# gf New pattern. (3.3.3) (see trevorc:1310)
|
|
|
|
OX? connect correctly
|
|
.OX
|
|
.*O
|
|
---
|
|
|
|
:8,sX,shape(-2)
|
|
|
|
OX?
|
|
bOX
|
|
.*a
|
|
---
|
|
|
|
;lib(a)>1 && xlib(b)>1 && oplay_attack(*,b,*)
|
|
|
|
|
|
Pattern Shape85
|
|
# gf New pattern. (3.3.10)
|
|
# Usually less aji when attacking at c rather than *.
|
|
|
|
OOX attack correctly
|
|
*XO
|
|
...
|
|
xxx
|
|
|
|
:8,sX,shape(-1)
|
|
|
|
aaX
|
|
*BO
|
|
.c.
|
|
xxx
|
|
|
|
;(xlib(*)==2 || (lib(a)>2 && xlib(*) < xlib(c)))
|
|
;&& !oplay_defend(c,B)
|
|
|
|
|
|
Pattern Shape86
|
|
# gf New pattern. (3.3.15)
|
|
# Prefer cut to peep as ko threat.
|
|
# gf Revised constraint. (3.3.16)
|
|
|
|
XO ko threat
|
|
*X
|
|
|
|
:/,sX,shape(1)
|
|
|
|
AO
|
|
*B
|
|
|
|
;oplay_attack_either(*,A,B) && !safe_omove(*)
|
|
|
|
|
|
Pattern Shape87
|
|
# gf New pattern. (3.5.3)
|
|
# gf See gifu03:501
|
|
|
|
.OXx usually better to extend than atari in cross cut
|
|
.XO.
|
|
.*..
|
|
|
|
:8,sX,shape(-1)
|
|
|
|
.aXx
|
|
.Xb.
|
|
.*..
|
|
|
|
;!dead(a) && !dead(b) && weak(a) && weak(b) && oplay_disconnect(*,a,b)
|
|
|
|
|
|
Pattern Shape88
|
|
# gf New pattern. (3.7.2)
|
|
# See gunnar:55.
|
|
|
|
?X.X more potential for followup ko threats one step to the right
|
|
X*.X
|
|
?XXO
|
|
|
|
:8,sX,shape(-1)
|
|
|
|
?XbX
|
|
X*.X
|
|
?AAO
|
|
|
|
;lib(A)==2 && olib(*)==1 && olib(b)==1
|
|
|
|
|
|
###########################
|
|
#
|
|
# Followup moves.
|
|
#
|
|
# The purpose of these patterns is to give a rough estimate of the
|
|
# value of followup moves, either to this move or to moves the
|
|
# opponent could continue with if we do not defend now.
|
|
#
|
|
###########################
|
|
|
|
|
|
Pattern Sente1
|
|
|
|
?X? Defend to avoid cutting points
|
|
XOX
|
|
O*o
|
|
|
|
:8,-,reverse_followup(5)
|
|
|
|
?X?
|
|
XOB
|
|
a*o
|
|
|
|
;lib(B)>1 && xplay_attack(*,a)
|
|
|
|
|
|
Pattern Sente1b
|
|
|
|
*X? Capture to avoid cutting points
|
|
XOX
|
|
O.o
|
|
|
|
:8,-,reverse_followup(5)
|
|
|
|
*X?
|
|
COX
|
|
bao
|
|
|
|
;lib(C)==1 && xplay_attack(a,b) && oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Sente1c
|
|
|
|
OX? Capture to avoid cutting points
|
|
XOX
|
|
*.o
|
|
|
|
:8,-,reverse_followup(5)
|
|
|
|
bX?
|
|
COX
|
|
*ao
|
|
|
|
;lib(C)==1 && xplay_attack(a,b) && oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Sente1d
|
|
# gf New pattern. (3.3.10)
|
|
|
|
?OX? Capture to avoid cutting points
|
|
*XOX
|
|
?O.o
|
|
|
|
:8,-,reverse_followup(5)
|
|
|
|
?OX?
|
|
*COX
|
|
?bao
|
|
|
|
;lib(C)==1 && xplay_attack(a,b) && oplay_attack(*,a,a)
|
|
|
|
|
|
Pattern Sente2
|
|
|
|
.X. Defend to create cutting points
|
|
XOX
|
|
O*O
|
|
|
|
:|,-,followup(5)
|
|
|
|
.B.
|
|
AOC
|
|
O*O
|
|
|
|
# Better to capture A or C at once if either in atari
|
|
;oplay_break_through(*,A,B,C) && lib(A)>1 && lib(C)>1
|
|
|
|
|
|
Pattern Sente3
|
|
|
|
?XOO Block on edge.
|
|
XOX*
|
|
....
|
|
----
|
|
|
|
:8,-,followup(6)
|
|
|
|
|
|
Pattern Sente4
|
|
|
|
oOX. Hanetsugi
|
|
.*OX
|
|
----
|
|
|
|
:8,-,followup(6)
|
|
|
|
oOA.
|
|
.*OB
|
|
----
|
|
|
|
;oplay_attack_either(*,A,B) && !attack(B) && !attack(A)
|
|
|
|
|
|
Pattern Sente5
|
|
# The followup value is usually larger in practice.
|
|
|
|
*XX force X to make dango
|
|
X.X
|
|
?XO
|
|
|
|
:8,X,followup(6)
|
|
|
|
*AA
|
|
X.A
|
|
?Xa
|
|
|
|
;lib(A)==2 && lib(a)>1
|
|
|
|
|
|
Pattern Sente6
|
|
# The followup value is usually larger in practice.
|
|
|
|
XXX force X to make dango
|
|
X.X
|
|
*XO
|
|
|
|
:8,X,followup(10)
|
|
|
|
AAA
|
|
A.A
|
|
*Xa
|
|
|
|
;lib(A)==2 && lib(a)>1
|
|
|
|
|
|
Pattern Sente7
|
|
# tm modified (3.1.22) (added oplay_defend)
|
|
|
|
?O?
|
|
.X*
|
|
...
|
|
---
|
|
|
|
:8,X,followup(6)
|
|
|
|
?O?
|
|
.A*
|
|
...
|
|
---
|
|
|
|
;oplay_attack(*,A) && oplay_defend(*,A)
|
|
|
|
|
|
Pattern Sente8
|
|
|
|
O..
|
|
*X.
|
|
...
|
|
---
|
|
|
|
:8,OXd,followup(8)
|
|
|
|
O..
|
|
*A.
|
|
...
|
|
---
|
|
|
|
;oplay_attack(*,A)
|
|
|
|
|
|
Pattern Sente9
|
|
|
|
?X*O Cut
|
|
.OX.
|
|
....
|
|
----
|
|
|
|
:8,-,followup(6)
|
|
|
|
|
|
Pattern Sente10
|
|
# FIXME: The followup value should be related to the size of A.
|
|
|
|
.O.?
|
|
...X
|
|
OXX*
|
|
|
|
:8,-,followup(5),shape(1)
|
|
|
|
.O.?
|
|
...X
|
|
OAA*
|
|
|
|
;lib(A)==3 && oplay_attack(*,A)
|
|
|
|
|
|
Pattern Sente11
|
|
|
|
?OO?
|
|
.XX*
|
|
....
|
|
----
|
|
|
|
:8,X,followup(9)
|
|
|
|
?OO?
|
|
.AA*
|
|
....
|
|
----
|
|
|
|
;oplay_attack(*,A)
|
|
|
|
|
|
Pattern Sente13
|
|
# gf Revised constraint. (3.1.20)
|
|
|
|
*O
|
|
|
|
:-,sO
|
|
|
|
*a
|
|
|
|
;lib(a) == 2 && !attack(a) && safe_xmove(*) && safe_omove(*)
|
|
# Action adds a reverse followup value.
|
|
>defend_against_atari(a)
|
|
|
|
|
|
Pattern Sente13b
|
|
# gf Revised constraint. (3.1.10)
|
|
# gf Revised constraint. (3.3.16)
|
|
# gf Revised constraint. (3.5.3)
|
|
|
|
.O
|
|
*?
|
|
|
|
:8,sO
|
|
|
|
ba
|
|
*c
|
|
|
|
;lib(a) == 2 && !attack(a) && olib(b) > 2 && safe_omove(*)
|
|
;&& (safe_xmove(*) || safe_xmove(b))
|
|
;&& (oplay_attack(*,b,b)==WIN
|
|
; || (x_somewhere(c) && oplay_attack_either(*,b,b,c)))
|
|
# Action adds a reverse followup value.
|
|
>defend_against_atari(a)
|
|
|
|
|
|
Pattern Sente13c
|
|
# gf New pattern. (3.3.16)
|
|
|
|
O.O
|
|
*.O
|
|
|
|
:8,sO
|
|
|
|
Oba
|
|
*ca
|
|
|
|
;lib(a) == 2 && !attack(a) && safe_omove(*)
|
|
;&& (safe_xmove(b) || safe_xmove(c))
|
|
;&& oplay_attack(*,b,b)==WIN
|
|
;&& oplay_attack(*,c,c)==WIN
|
|
# Action adds a reverse followup value.
|
|
>defend_against_atari(a)
|
|
|
|
|
|
Pattern Sente13d
|
|
# gf New pattern. (3.3.17)
|
|
|
|
..X
|
|
*.O
|
|
..O
|
|
oOX
|
|
|
|
:8,sO
|
|
|
|
..X
|
|
*ca
|
|
.ba
|
|
oOX
|
|
|
|
;lib(a) == 2 && !attack(a) && safe_omove(*)
|
|
;&& safe_xmove(*)
|
|
;&& !oplay_defend(*,b,c,b)
|
|
;&& xplay_attack(*,a)
|
|
# Action adds a reverse followup value.
|
|
>defend_against_atari(a)
|
|
|
|
|
|
Pattern Sente13e
|
|
# gf New pattern. (3.7.4)
|
|
# gf Removed O classification and revised constraint. (3.7.10)
|
|
|
|
*.O
|
|
?O?
|
|
|
|
:8,s
|
|
|
|
*ba
|
|
?O?
|
|
|
|
;alive(a) && lib(a) == 2 && !attack(a) && olib(b) > 2 && safe_omove(*)
|
|
;&& safe_xmove(b) && oplay_attack(*,b,b)==WIN
|
|
# Action adds a reverse followup value.
|
|
>defend_against_atari(a)
|
|
|
|
|
|
Pattern Sente14
|
|
|
|
OXx
|
|
.OX
|
|
O.*
|
|
|
|
:8,OX,reverse_followup(5)
|
|
|
|
aBx
|
|
.OC
|
|
Od*
|
|
|
|
;lib(a)>1 && !attack(B) && !attack(C) && xlib(d)>1
|
|
|
|
|
|
Pattern Sente15
|
|
|
|
OX.
|
|
oOX
|
|
oo*
|
|
|
|
:8,OX,followup(5)
|
|
|
|
aBd
|
|
eOC
|
|
fg*
|
|
|
|
;lib(a)>1 && o_alive_somewhere(e,f,g) && !attack(B) && !attack(C)
|
|
;&& !oplay_defend_both(*,?,d,B,C)
|
|
|
|
|
|
Pattern Sente16
|
|
# gf New pattern. (3.1.14)
|
|
# The constraint is unprecise, but correcting it probably
|
|
# require a handwritten helper.
|
|
|
|
.O?
|
|
.*X
|
|
---
|
|
|
|
:8,OX,reverse_followup(5)
|
|
|
|
bO?
|
|
a*X
|
|
---
|
|
|
|
;xplay_attack(*,a,b,*) && xplay_defend_both(*,a,b,*,b)
|
|
|
|
|
|
Pattern Sente17
|
|
# gf New pattern. (3.1.15)
|
|
|
|
.OXx
|
|
.*oX
|
|
----
|
|
|
|
:8,X,reverse_followup(5)
|
|
|
|
cdXx
|
|
a*bX
|
|
----
|
|
|
|
;alive(d) && !xplay_defend_both(*,a,b,?,c,a,d)
|
|
|
|
|
|
Pattern Sente18
|
|
# gf New pattern. (3.3.13)
|
|
# The reverse followup value is probably often bigger than 5 points.
|
|
|
|
X..O..
|
|
XOX*..
|
|
......
|
|
------
|
|
|
|
:8,X,reverse_followup(5)
|
|
|
|
C..b..
|
|
COX*.a
|
|
......
|
|
------
|
|
|
|
;omoyo_opposite(a) && alive(b) && alive(C)
|
|
|
|
|
|
Pattern Sente19
|
|
# gf New pattern. (3.3.16)
|
|
# Usually underestimating the reverse followup, but better than nothing.
|
|
|
|
?oO
|
|
o.*
|
|
?OX
|
|
|
|
:8,OX,reverse_followup(1)
|
|
|
|
?cO
|
|
ba*
|
|
?OX
|
|
|
|
;((!o_somewhere(b) && oterri(b))
|
|
; || (!o_somewhere(c) && oterri(c)))
|
|
;&& safe_xmove(*) && !xplay_attack(*,a,*)
|
|
|
|
|
|
Pattern Sente20
|
|
# gf New pattern. (3.3.16)
|
|
# Usually underestimating the reverse followup, but better than nothing.
|
|
|
|
?.O
|
|
..*
|
|
?OX
|
|
|
|
:8,OX,reverse_followup(2)
|
|
|
|
?cO
|
|
ba*
|
|
?OX
|
|
|
|
;oterri(b) && oterri(c) && safe_xmove(*) && !xplay_attack(*,a,*)
|
|
|
|
|
|
Pattern Sente21
|
|
# gf New pattern. (3.3.16)
|
|
# Usually underestimating the reverse followup, but better than nothing.
|
|
|
|
..O
|
|
..*
|
|
?OX
|
|
|
|
:8,OX,reverse_followup(3)
|
|
|
|
dcO
|
|
ba*
|
|
?OX
|
|
|
|
;oterri(b) && oterri(c) && oterri(d) && safe_xmove(*) && !xplay_attack(*,a,*)
|
|
|
|
|
|
Pattern Sente22
|
|
# pp New pattern, see trevord:950 (3.3.20)
|
|
|
|
?OX?
|
|
O.*.
|
|
?XX?
|
|
|
|
:8,OX
|
|
|
|
?OX?
|
|
Oa*b
|
|
?AA?
|
|
|
|
; oplay_attack(*,A) && oplay_attack(*,a,A) && oplay_attack(*,b,a,A)
|
|
|
|
> good_attack_threat(*,A)
|
|
|
|
|
|
Pattern Sente23
|
|
# gf New pattern. (3.5.4)
|
|
# See trevorc:450.
|
|
|
|
?OX
|
|
O.O
|
|
O*X
|
|
|
|
:8,O
|
|
|
|
?OX
|
|
a.c
|
|
a*B
|
|
|
|
;lib(a)>3 && alive(B) && xplay_attack(*,c)
|
|
|
|
>prevent_attack_threat(c);
|
|
|
|
|
|
Pattern Sente24
|
|
# pp New pattern (3.5.8)
|
|
|
|
?*?
|
|
XO.
|
|
?O.
|
|
---
|
|
|
|
:8,OX,reverse_followup(8)
|
|
|
|
?*?
|
|
XAb
|
|
?A.
|
|
---
|
|
|
|
; lib(A)==3 && safe_xmove(*) && !xplay_defend(*,?,b,A)
|
|
|
|
|
|
########################################################
|
|
#
|
|
# Double threat moves and defense against double threats
|
|
#
|
|
########################################################
|
|
|
|
|
|
Pattern DD1
|
|
# FIXME: This isn't really double atari - just plain old
|
|
# capture also matches here. see nngs:1260
|
|
# Does this matter?
|
|
|
|
*X double atari on you
|
|
XO
|
|
|
|
:\,X
|
|
|
|
*A
|
|
BO
|
|
|
|
>test_attack_either_move(A,B)
|
|
|
|
|
|
Pattern DD2
|
|
|
|
*O double atari on me
|
|
OX
|
|
|
|
:\,nO
|
|
|
|
*a
|
|
bX
|
|
|
|
;!xplay_defend_both(*,a,b)
|
|
|
|
>add_defend_both_move(a,b);
|
|
|
|
|
|
Pattern DD2b
|
|
|
|
*.O double atari on me, defended by hanging connection
|
|
?OX
|
|
|
|
:8,O
|
|
|
|
*ca
|
|
?bX
|
|
|
|
;!xplay_defend_both(c,a,b)
|
|
;&& (oplay_attack(*,c,c) || oplay_defend_both(*,c,a,b))
|
|
|
|
>add_defend_both_move(a,b);
|
|
|
|
|
|
Pattern DD3
|
|
|
|
OXX
|
|
X*.
|
|
X..
|
|
|
|
:8,O
|
|
|
|
OEE
|
|
D*c
|
|
Dba
|
|
|
|
;oplay_attack(*,D) && oplay_attack_either(*,a,D,E)
|
|
;&& !oplay_defend_both(*,b,c,D,E)
|
|
|
|
>test_attack_either_move(D,E)
|
|
|
|
|
|
Pattern DD4
|
|
# gf Revised constraint. (3.5.2)
|
|
|
|
XOO
|
|
O..
|
|
O.*
|
|
|
|
:8,O
|
|
|
|
Xee
|
|
dac
|
|
db*
|
|
|
|
;xplay_attack(a,d) && xplay_attack_either(a,*,d,e)
|
|
;&& !xplay_defend_both(a,b,c,d,e) && !xplay_defend_both(a,c,b,d,e)
|
|
;&& !xplay_connect(a,d,e) && oplay_connect(*,a,d,e)
|
|
|
|
>add_defend_both_move(d,e);
|
|
|
|
|
|
Pattern DD5
|
|
# gf Exclude this pattern when scoring. (3.3.14)
|
|
# This is somewhat wimpy. We should do more exact reading to verify
|
|
# whether it really is necessary.
|
|
|
|
XOO
|
|
O..
|
|
O.*
|
|
|
|
:8,O
|
|
|
|
Xcc
|
|
ba.
|
|
b.*
|
|
|
|
;!doing_scoring
|
|
;&& lib(c)<=4 && xplay_attack(a,b) && safe_xmove(a) && odefend_against(*,a)
|
|
|
|
>add_defend_both_move(b,c);
|
|
|
|
|
|
Pattern DD6
|
|
# al1 Revised symmetry. (3.7.11)
|
|
|
|
?o? Double attack
|
|
X*X
|
|
?o?
|
|
|
|
:+,-
|
|
|
|
?o?
|
|
A*B
|
|
?o?
|
|
|
|
>test_attack_either_move(A,B)
|
|
|
|
|
|
Pattern DD7
|
|
# gf Revised constraint. (3.1.20)
|
|
|
|
*OX
|
|
?XO
|
|
|
|
:8,-
|
|
|
|
*dA
|
|
?Bc
|
|
|
|
;lib(d)<4 && (xlib(*)>1 || lib(d)<3)
|
|
;&& oplay_defend(*,A) && oplay_defend(*,B)
|
|
;&& !oplay_attack(*,c)
|
|
|
|
>test_attack_either_move(A,B)
|
|
|
|
|
|
Pattern DD8
|
|
|
|
O.. extend to connect
|
|
XO*
|
|
|
|
:8,O
|
|
|
|
ca.
|
|
Xb*
|
|
|
|
;safe_xmove(a) && !xplay_defend_both(a,b,c) && oplay_defend_both(*,a,b,c)
|
|
|
|
>add_defend_both_move(b,c);
|
|
|
|
|
|
Pattern DD8b
|
|
# gf Added constraint. (3.3.20)
|
|
# Not a problem if the opponent can't even threaten to cut after the move.
|
|
|
|
O.. extend to connect
|
|
XO*
|
|
?o.
|
|
|
|
:8,O,shape(-1)
|
|
|
|
ba.
|
|
XO*
|
|
?o.
|
|
|
|
;oplay_disconnect(*,a,*,b)
|
|
|
|
|
|
Pattern DD9
|
|
|
|
O.* double atari on me
|
|
XO.
|
|
|
|
:8,O
|
|
|
|
ca*
|
|
Xb.
|
|
|
|
;safe_xmove(a) && !xplay_defend_both(a,b,c) && oplay_defend_both(*,a,b,c)
|
|
|
|
>add_defend_both_move(b,c);
|
|
|
|
|
|
Pattern DD10
|
|
|
|
*O. generalized tsukenobi joseki
|
|
?XO
|
|
|
|
:8,-
|
|
|
|
*ba
|
|
?Xc
|
|
|
|
;(alive(b) || alive(c))
|
|
;&& safe_xmove(a)==WIN && !xplay_defend_both(a,b,c) && oplay_attack(*,a,a)==WIN
|
|
|
|
>add_defend_both_move(b,c);
|
|
|
|
|
|
Pattern DD11
|
|
|
|
X.? double attack
|
|
O*.
|
|
??X
|
|
|
|
:8,-,shape(2)
|
|
|
|
A.?
|
|
O*.
|
|
??B
|
|
|
|
; !attack(A) && !attack(B) && oplay_attack(*,A) && oplay_attack(*,B)
|
|
|
|
>test_attack_either_move(A,B)
|
|
|
|
|
|
Pattern DD12
|
|
# gf Revised. (3.1.9)
|
|
|
|
OX? double attack
|
|
X*.
|
|
X..
|
|
X..
|
|
---
|
|
|
|
:8,-
|
|
|
|
EB?
|
|
A*d
|
|
Ac.
|
|
A..
|
|
---
|
|
|
|
;lib(A)==3 && !oplay_attack(*,E) && oplay_attack(*,d,A)
|
|
;&& !oplay_defend_both(*,c,d,A,B)
|
|
|
|
>test_attack_either_move(A,B)
|
|
|
|
|
|
Pattern DD13
|
|
# gf Revised. (3.1.9)
|
|
|
|
XO? double defense
|
|
O*.
|
|
O..
|
|
O..
|
|
---
|
|
|
|
:8,-
|
|
|
|
eb?
|
|
a*d
|
|
ac.
|
|
a..
|
|
---
|
|
|
|
;lib(a)==3 && !attack(e) && xplay_attack(*,d,a)
|
|
;&& !xplay_defend_both(*,c,d,a,b)
|
|
|
|
>add_defend_both_move(a,b)
|
|
|
|
|
|
###########################
|
|
#
|
|
# Temporary patterns to correct certain misbehaviours.
|
|
#
|
|
###########################
|
|
|
|
|
|
Pattern Temp1
|
|
# This joseki is played far too frequently.
|
|
# existed since at least 3.0.0
|
|
|
|
|........
|
|
|........
|
|
|.....*..
|
|
|...O....
|
|
|.....X..
|
|
|........
|
|
|........
|
|
+--------
|
|
|
|
:8,-,maxvalue(25)
|
|
|
|
|
|
Pattern Temp5
|
|
# Don't make a short jump along the edge before shimari.
|
|
# existed since at least 3.0.0
|
|
# tm Modified (3.1.20)
|
|
|
|
???xxxxx|
|
|
........|
|
|
........|
|
|
........|
|
|
.*..O...|
|
|
........|
|
|
........|
|
|
--------+
|
|
|
|
:8,-
|
|
|
|
???xxxxx|
|
|
........|
|
|
........|
|
|
........|
|
|
.*..O...|
|
|
........|
|
|
........|
|
|
--------+
|
|
|
|
>antisuji(*);
|
|
|
|
|
|
Pattern Temp6
|
|
# Don't make a short extension from san-san in open surroundings.
|
|
# existed since at least 3.0.0
|
|
|
|
.........|
|
|
.........|
|
|
.........|
|
|
.........|
|
|
...*..O..|
|
|
.........|
|
|
.........|
|
|
---------+
|
|
|
|
:8,-
|
|
|
|
.........|
|
|
.........|
|
|
.........|
|
|
..b......|
|
|
...*a.O..|
|
|
.........|
|
|
.........|
|
|
---------+
|
|
|
|
>antisuji(*);
|
|
>antisuji(a);
|
|
>antisuji(b);
|
|
|
|
|
|
Pattern Temp7a
|
|
# Don't make a one space jump along the edge when there is room for a
|
|
# two space jump.
|
|
# existed since at least 3.0.0
|
|
# FIXME: consider using replace instead of antisuji here?
|
|
|
|
......
|
|
......
|
|
..*.O.
|
|
......
|
|
......
|
|
------
|
|
|
|
:8,-
|
|
|
|
>antisuji(*);
|
|
|
|
|
|
Pattern Temp7b
|
|
# Usually stupid
|
|
# existed since at least 3.1.20
|
|
|
|
X...xxx
|
|
XXO.xxx
|
|
OX*....
|
|
.......
|
|
-------
|
|
|
|
:8,-
|
|
|
|
G...abc
|
|
GGO.def
|
|
OG*....
|
|
.......
|
|
-------
|
|
|
|
;!weak(G) && x_alive_somewhere(a,b,c,d,e,f)
|
|
|
|
>antisuji(*);
|
|
|
|
|
|
Pattern Temp8
|
|
# existed since at least 3.1.20
|
|
|
|
.....o Don't crosscut
|
|
.*X.Oo
|
|
.XO..o
|
|
.....o
|
|
......
|
|
------
|
|
|
|
:8,-,shape(-10)
|
|
|
|
|
|
Pattern Temp9
|
|
# gf New pattern. (3.3.6)
|
|
# ab Modified: ok after approach move (3.7.1)
|
|
|
|
|............
|
|
|............
|
|
|............ don't play halfways between hoshi
|
|
|...O.....O..
|
|
|......*.....
|
|
|............
|
|
|............
|
|
+------------
|
|
|
|
:8,-
|
|
|
|
|............
|
|
|............
|
|
|............
|
|
|...O..a..O..
|
|
|......*.....
|
|
|............
|
|
|............
|
|
+------------
|
|
|
|
>antisuji(*);
|
|
>antisuji(a);
|
|
|
|
|
|
# END OF FILE
|