Initial commit of GNU Go v3.8.
[sgk-go] / patterns / patterns2.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 #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# 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