Initial commit of GNU Go v3.8.
[sgk-go] / patterns / patterns.db
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# This is GNU Go, a Go program. Contact gnugo@gnu.org, or see #
# http://www.gnu.org/software/gnugo/ for more information. #
# #
# Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, #
# 2008 and 2009 by the Free Software Foundation. #
# #
# This program is free software; you can redistribute it and/or #
# modify it under the terms of the GNU General Public License #
# as published by the Free Software Foundation - version 3, #
# or (at your option) any later version. #
# #
# This program is distributed in the hope that it will be #
# useful, but WITHOUT ANY WARRANTY; without even the implied #
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR #
# PURPOSE. See the GNU General Public License in file COPYING #
# for more details. #
# #
# You should have received a copy of the GNU General Public #
# License along with this program; if not, write to the Free #
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, #
# Boston, MA 02111, USA #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#
# The Pattern Database.
#
# Further documentation may be found in the Texinfo documentation
#
# First there is a pattern title of the form: Pattern [string]. The
# string is used for identifying the pattern while tuning or debugging.
#
# Then a block of the following characters representing the pattern
# itself.
#
# ? : don't care
# . : empty
# X : your piece,
# O : my piece,
# x : your piece or empty
# o : my piece or empty
# * : my next move
# -, | : edge of board
# + : corner of board
#
# If a pattern must not match at the edge of the board,
# an extra row of ?'s in the pattern may be added. (This
# will not add to the time taken to check the pattern.)
#
#################
#
# After the pattern, some supplementary information in the format:
#
# :trfno, classification, [values], helper_function
#
# These and other aspects of the pattern database are documented
# in the Texinfo documentation.
#
#################
#
# Any line beginning with #, or any part of a line following
# whitespace is a comment.
#
# The patterns are classified into a number of different categories:
#
# CC center cut/connection
# EC edge cut/connection
# CS center splitting
# ES edge splitting
# EB edge block/expand
# CB center block/expand
# ED edge defend/attack
# CD center defend/attack
# CM center miscellaneous
# (F fuseki) moved to fuseki.db
# (J joseki) moved to fuseki.db
# EJ edge joseki
# S seki
# HH high handicap
# LE large endgame
#
# The patterns are grouped in the file by category. New patterns
# should be added close to a similar pattern or at the end of the
# category where it belongs. When a new pattern is added, the names
# of later patterns in the category should usually not be changed.
# This can be accomplished by introducing names like CC35b and so on.
#
attribute_map general
goal_elements none
# FIXME: try to make callback_data pattern category specific
callback_data XOxo
##########################
#
# Cutting and Connecting patterns
#
# Mainly patterns which actually guarantee a cut or a connection are
# accepted. Occasionally patterns which threaten to make a cut or
# connection. These patterns are given the C or B classification.
#
# See ConnXXX and CutXXX for a new set of cutting and connecting patterns.
#
##########################
#
# Center Cuts and Connections
#
##########################
Pattern CC1
?.?? connect
O*.O
.X..
:8,c
Pattern CC2
?.X connect against peep (not on edge)
O*O
?X?
:8,nBC
?aX
b*c
?X?
;xplay_attack_either(*,a,a,b) || xplay_attack(*,a,c)
Pattern CC3
?O? break connection
X*X
?O?
:+,OB
?a?
X*X
?b?
;alive(a) || alive(b)
Pattern CC4
# More accurate helper needed.
O.? break connection
X*X
?O?
:8,B
a.?
X*X
?b?
;lib(a)>1 && (alive(a) || alive(b))
Pattern CC5
??? push in
...
X*X
?O?
:|,OB
Pattern CC6
?xxx? straight extension to connect
XOO*?
O...?
:8,C
?xxx?
XOO*?
Oa..?
;xcut(a) && odefend_against(*,a)
Pattern CC7
OX? cut
X*.
?.?
:\,OB
aX?
X*.
?.?
;lib(a)>2 && lib2(a)>3
Pattern CC8
??X? push through to cut
?OXx
O.O*
???X
:8,OB
??A?
?OAx
O.O*
???B
;!xplay_attack(*,A) && !xplay_attack(*,B)
Pattern CC9
?O? cut through
XO?
.*X
:8,OB
Pattern CC10
O.X three crows
.*.
X..
:\,OB
Pattern CC10b
O.X three crows
.*.
X..
:\,OXe
Pattern CC11
o.X separate the opponent
?*O
?X?
:8,nOB
o.A
?*O
?B?
;!attack(A) && !attack(B)
Pattern CC12
?.X cut!
O*.
?XO
:8,B
?.X
a*B
?Xc
;(alive(a) || alive(c)) && oplay_defend(*,B,c);
Pattern CC13
# tm modified (3.1.10)
# (compare Conn315)
# gf Added n classification. (3.3.16)
# gf Revised constraint. (3.5.4)
O? cut!
*X
XO
:8,Bn,shape(2)
O?
*A
Bc
;lib(c)>1 && oplay_attack_either(*,A,B)
Pattern CC13b
# gf New pattern. (3.5.3)
O? cut!
*X
XO
:8,e
a?
*X
XO
;alive(a)
Pattern CC14
# This connection is bad shape. Should have a helper to verify
# that it's necessary.
.O. Connect
...
X*.
?OO
:8,OC
Pattern CC15
?X.O break connection
O*.X
:8,B
?Xac
d*bX
;(alive(c) || alive(d))
;&& (!oplay_attack_either(*,a,b,b,c) || !oplay_attack_either(*,b,a,*,a))
Pattern CC16
X.O break connection
*.X
Ox?
:8,B
Xac
*bX
dx?
;(alive(c) || alive(d))
;&& (!oplay_attack_either(*,a,b,b,c) || !oplay_attack_either(*,b,a,*,a))
Pattern CC17
?X.O break connection
.*.X
O.??
:8,B
?Xac
.*bX
d.??
;(alive(c) || alive(d))
;&& (!oplay_attack_either(*,a,b,b,c) || !oplay_attack_either(*,b,a,*,a))
Pattern CC19
.O. defend cut
X*.
...
OO.
:8,OC
Pattern CC20
.O.? try to connect
...?
.*.X
?.O?
:8,C
.O.?
d..?
c*aX
?bO?
;!omoyo(c) || !omoyo(d) || !xplay_attack(a,*,b,b)
Pattern CC21
?X.? connect!
.*.O
O..O
??X?
:8,C
Pattern CC22
?O.? connect!
..*X
X...
?.O?
:8,C
Pattern CC23
?O.O connect!
..*X
X...
?.O?
:8,C
Pattern CC24
?X.? connect!
.OXO
O.*O
??X?
:8,C
Pattern CC25
?X.O break connection
..*.
O.XO
:8,B
?X.a
..*.
O.XO
;alive(a)
Pattern CC26
?X.o? break connection
..*.O
O.XO?
:8,B
?X.o?
..*.b
O.Xa?
;lib(a)>1 && alive(b)
Pattern CC27
??.? connection helper
O*.O
?XO?
:8,nC
??.?
O*aO
?XO?
;oplay_attack(*,a,a) == WIN
Pattern CC28
O..X? separate
..*.?
X...o
....?
???O?
:8,a
Pattern CC29
?.O atari to connect
X*.
O.?
:8,C
?.O
A*.
a.?
;lib(a)>1 && lib(A)==2
Pattern CC30
# gf Revised pattern. (3.3.16)
?O* double connection
X.O
?O.
:8,nC
?b*
XaO
?c.
;!xplay_connect(a,b,c)
Pattern CC31
# gf Revised pattern. (3.3.16)
?O. double connection
X*O
?O.
:-,C
?a.
X*O
?b.
;!xplay_connect(*,a,b)
Pattern CC32
?X. double break
O*X
?X.
:-,-
?ca
O*d
?eb
;oplay_defend_both(*,a,b,*,b) && oplay_defend_both(*,b,a,*,a)
>add_cut_move(c,d);
>add_cut_move(c,e);
>add_cut_move(d,e);
Pattern CC33
XO.? hane to break connection
*..x
.X??
:8,OB
BO.?
*A.x
.X??
;oplay_attack(*,A,B)
Pattern CC34
....
O.*O
..X?
:8,C
Pattern CC35
O?? break connection
..X
X*X
?O?
:8,OB
O??
baX
X*X
?O?
;!oplay_attack(*,a,b,*) && !oplay_attack(*,a,b,b)
Pattern CC36
?Oo?? connection pattern
o.O.?
x*X.x
?.O??
:8,XC
?Oo??
odO.?
x*Xbx
?ca??
;lib(a)>1 && oplay_attack(*,b,c,d,d)
Pattern CC37
?Oo? connection pattern
o.OX
?*X.
?.O?
:8,XC
?Oo?
odOX
?*Xb
?ca?
;lib(a)>1 && oplay_attack(*,b,c,d,d)
Pattern CC38
?Oo? connection pattern
o.O.
?*X.
?.OX
:8,XC
?Oo?
odO.
?*Xb
?caX
;lib(a)>1 && oplay_attack(*,b,c,d,d)
Pattern CC39
# This pattern guarantees a strong connection.
# The constraint is asymmetric.
?O. Connect
.X*
?O.
:8,C
?fb
aD*
?ec
;lib(e)>1 && lib(f)>1
;&& (!oplay_defend(*,D) || oplay_attack_either(*,a,b,c,D,c))
Pattern CC40
?O*x Connect on the right side
XXOX
?O.?
:8,C
?O*x
XXOX
?Oa?
;odefend_against(*,a)
Pattern CC41
?XX? Cut or threaten to cut
O.*O
o.X?
:8,OB
Pattern CC42
O.X.O warikomi
oo*oo
O.X.O
:|,OB
Pattern CC43
# This pattern caused a problem at move 52 in ego.sgf
XO
*.
.X
:8,OB
Xb
*a
.X
;oplay_defend_both(*,a,*,b)
Pattern CC44
# May be too risky.
O.X boldly cut before connecting
XO*
?X.
:8,OB
baX
dO*
?c.
;oplay_attack(*,a,a) || oplay_attack(*,a,d)
;|| (oplay_attack(*,a,c) && !oplay_attack(*,a,b))
Pattern CC45
# B classification is somewhat incorrect, but does convey the urgency
# of the move.
.... connect to contain
O*OX
?XXO
:8,BC
....
c*OX
?AAb
;lib(A)>1 && lib(b)>1 && alive(c)
Pattern CC46
.XO Cut
.*.
OXO
:8,OB
.XO
b*a
cXO
;oplay_attack(*,a,a) && !oplay_attack(*,b,a,c)
Pattern CC47
.*.X separate the opponent
X..X
?OO?
:8,OB
.*cX
XabX
?dO?
;!oplay_attack(*,a,b,c,d) && !oplay_attack(*,a,b,c,*)
Pattern CC48
X*. Cut
O..
O.X
:8,OB
B*.
Oa.
O.X
;oplay_attack_either(*,a,a,B)
Pattern CC49
?..X Cut
O*..
?X..
:8,OB
?..X
O*ac
?Xbd
;!xarea(d) && !oplay_attack_either(*,a,b,*,b)
;&& !oplay_attack_either(*,b,a,c,d,a,d)
Pattern CC50
o.X.? Cut
O.*.?
oOX.?
:8,OB
o.Xce
Ob*af
oOXdg
;(!xarea(f) || !(xarea(e) && xarea(g)))
;&& !oplay_attack_either(*,a,b,c,d,d,b)
;&& !oplay_attack_either(*,a,b,d,c,c,b)
Pattern CC51
O*.O
?XO?
:8,nC
O*aO
?XO?
;odefend_against(*,a)
Pattern CC52a
# Constraint probably needs revision.
OX.. connect if invaded
.*.O
:8,C
Odbe
c*aO
;oplay_attack(*,a,b,d) && oplay_attack(*,a,b,a)
;&& oplay_attack(*,a,b,e,e) && oplay_attack(*,a,b,c,c)
Pattern CC52b
# ab New pattern. (3.3.10)
?????
.OX.? keep loose connection
..*.O
?..oo
:8,c
?????
.aX.?
..*.b
?..oo
;!same_dragon(a,b) && (alive(a) || alive(b))
Pattern CC53
XXO cut
O*.
??X
:8,B
XXb
c*a
??X
;alive(c) && oplay_defend_both(*,a,*,b)
Pattern CC54
# This is a very conservative estimate of the chances to connect.
# Other patterns are more accurate.
# We really would need tactical reading functions for determining
# whether a connection holds.
OXO block opponent
.*.
?.?
:|,C
OXO
a*c
?b?
;!oplay_defend(*,a,b,c,a) && !oplay_defend(*,a,b,c,c)
Pattern CC55
# Analogous to the previous one.
XOX push out
.*.
?.?
:|,OB
AOB
.*.
?.?
;!xplay_break_through(*,A,*,B)
Pattern CC57
# gf Removed obsolete add_connect_move actions. (3.3.16)
??XO? connect three stones
..*.o
O..O?
?..??
:8,C
??Xc?
..*.o
a..b?
?..??
;lib(a)>2 && lib(b)>2 && lib(c)>3
Pattern CC58
X... attach
XO*X
....
..O.
:8,OB
Pattern CC59
?X?? cut the knight's move
..*O
O.XO
:8,OB
Pattern CC60
?X?? cut the knight's move
.*OO
OXXO
:8,OB
Pattern CC61
X.OO break connection
X..X
.*.?
:8,OB
Pattern CC62
O.X block off area
.*.
X.O
:X,OB
Pattern CC63
?O? cut through
XO?
.*X
:8,OB
Pattern CC64
O.. three crows
.*.
x.O
:/,C
O..
.*.
x.O
;!omoyo(*)
Pattern CC65
..Xx separate the opponent
.*.?
X.O?
x???
:\,OB
Pattern CC66
..X. Attach to defend connection
O.*.
....
O.O.
?X??
:8,C
..X.
O.*.
.a..
ObO.
?X??
;!oplay_defend(*,a,b,a)
Pattern CC67
O*X cut!
X..
X.O
:8,OB
O*X
Xab
Xcd
;!oplay_attack_either(*,a,b,*,b) && oplay_defend_both(*,b,a,c,a,d)
Pattern CC68
?O.. cut!
..*X
.X..
...O
:8,OB
?O..
..*X
.Xab
..cd
;!oplay_attack_either(*,a,b,*,b) && oplay_defend_both(*,b,a,c,a,d)
Pattern CC69
?.? break through
OXO
.*.
oXO
:8,OB
Pattern CC70
?O.x Cut
.X*X
?O..
:8,B
?fbx
aX*E
?gcd
;(alive(f) || alive(g)) && !oplay_defend_both(*,a,b,c,d,c,E)
Pattern CC71
# This connection is a bit sloppy but if we can't connect
# we do at least capture an opponent worm. Assume we are allowed
# to connect if the worm is at least as large as our dragon.
?O.x Connect
.X*X
?O..
:8,C
?Obx
aX*E
?fcd
;!oplay_defend_both(*,a,b,c,d,c,E) && (dragonsize(f) <= wormsize(E))
Pattern CC72
?.... atari
.OX*X
..O..
?...?
:8,OB
Pattern CC73
# gf Reduced shape value. (3.5.2)
?X?? connect!
o.*O
O..X
?.O?
:8,scad,shape(3)
Pattern CC74
# gf Split pattern. (3.1.7)
.O*. connect and constrain X
OXXO
:8,C
aO*b
OXXO
; oplay_attack(*,a,a) && oplay_attack(*,b,b)
Pattern CC74b
# gf Split pattern. (3.1.7)
# Only shape bonus if X stones can't be attacked.
.O*. connect and constrain X
OXXO
:8,C,shape(2)
aO*b
OCCO
;oplay_attack(*,a,a) && oplay_attack(*,b,b)
;&& !(attack(C) && oplay_defend(*,C))
Pattern CC75
...*O connect out
O...X
..O??
:8,Xc
Pattern CC76
..*O connect out
O..X
.O??
:8,Xc
Pattern CC77
# tm: reduced shape value from 8 to 3 (3.1.18)
X? prevent connection
*O
.X
:8,OB,shape(3)
C?
*b
aD
; !same_dragon(C,D) && xplay_attack_either(*,a,a,b)
Pattern CC78
..OX connect
O*.O
?Xo?
:8,C
..OX
O*ba
?Xo?
;lib(a)>1 && xplay_attack(b,b)==3
Pattern CC79
# ab modified (3.3.10)
# gf Reduced shape value. (3.5.2)
?O.xx
XO.*.
XXO..
.....
:8,XCad,shape(3)
?a.xx
Xa.*.
XXO..
.....
; lib(a)>=3 && !omoyo(*)
Pattern CC80
# db added (3.1.4)
O*X
XO?
:8,B
a*X
XO?
; does_attack(*,a)
Pattern CC81
# db added (3.1.4)
O*X
XO?
?O?
:8,B,shape(3)
a*X
XO?
?O?
; does_attack(*,a)
Pattern CC82
..?? reverse sente connection
.OXX
X*O.
...?
:8,ECad,shape(3)
..??
.AXX
X*B.
...?
; !dead(A) && (xplay_attack(*,B) || xplay_attack(*,A))
Pattern CC83
# gf New pattern. (3.1.23)
# See strategy3:142.
O...
X.*.
?X.O
:8,XC
Oac.
Xb*.
?X.O
;!oplay_defend(*,a,b,a) && oplay_attack(*,b,a,c,c)
Pattern CC84
# Formerly called EC37
XO?? prevent double nozoki
O.O?
?*.O
??OX
:8,nC
Pattern CC85
# Formerly called EC38
?XO? prevent ko
.O*O
O..X
?XXX
:8,C
Pattern CC86
# Formerly called EC39
??o? connect out
X..O
O.*X
?.??
:8,C
??o?
X..O
O.*A
?.??
; lib(A)==2
Pattern CC87
# Formerly called EC40
??o? connect out
X*.O
O.OX
?.??
:8,C
Pattern CC88
# Formerly called EC41
.O. cut!
.*X
X..
..O
:8,OB
##########################
#
# General Edge Connections
#
##########################
Pattern EC1
# gf Removed obsolete add_connect_move actions. (3.3.16)
O.XO? connect under
..*.O
.....
-----
:8,C
ObEO?
ca*dO
.....
-----
;odefend_against(*,d)
;&& !oplay_defend_both(*,a,b,a,E)
;&& oplay_attack_either(*,b,a,c,b,c)
Pattern EC2
# gf Removed obsolete add_connect_move actions. (3.3.16)
OXXO? connect under
O.*.O
.....
-----
:8,C
eXXO?
ea*dO
.b...
-----
;odefend_against(*,d) && !oplay_attack(*,a,b,e)
Pattern EC4
?X.? connect underneath
O*.O
....
----
:8,C
?X.?
d*ac
..b.
----
;odefend_against(*,a) || !oplay_attack_either(*,a,b,c,d)
Pattern EC5
?O.? break connection
X*.X
....
----
:8,OB
?O.?
D*aC
..b.
----
;xdefend_against(*,a) || !xplay_attack_either(*,a,b,C,D)
Pattern EC6
?O.O break connection
X.*X
....
----
:8,OB
?OaO
Xd*X
.cbe
----
;odefend_against(*,a) && !oplay_attack(*,b,c,d,e,e)
Pattern EC7
# Probably redundant
?O.X break connection
X*..
....
----
:8,OB
?DbX
X*ac
....
----
;!xplay_defend_both(*,a,b,a,D) && xplay_attack_either(*,b,a,c,b,c)
Pattern EC8
# gf Revised constraint. (3.5.3)
?X.O connect
O*..
....
----
:8,XC,shape(2)
?X.b
a*..
....
----
;oplay_disconnect(a,b) && !oplay_disconnect(*,a,b)
Pattern EC8a
??xx? connect
O.xx?
.?X.O
.O*..
.....
-----
:8,t
??ab?
O.cd?
.?X.O
.O*..
.....
-----
; x_alive_somewhere(a,b,c,d)
Pattern EC9
# Probably redundant
??O? break connection
?X*X
O..?
----
:8,OB
Pattern EC10
?OX.? connection pattern
?*...
....O
....O
-----
:8,C
Pattern EC11
?OX.? connection pattern
?OX..
..*.O
....O
-----
:8,C
Pattern EC12
..OXX? Break connection.
X.*.xx
.....?
------
:8,OB
Pattern EC13
XXO? Stop connection.
.O*X
----
:8,B
XXa?
.O*A
----
;!dead(a) && lib(A)>2
Pattern EC14
??O? Connect under
X*.O
O...
----
:8,C
Pattern EC15
XO? separate the opponent
.*X
...
---
:8,OB
Pattern EC16
?..O? hanging connection
.*.OX
o.OXX
.....
-----
:8,C
Pattern EC16a
# gf Reduced shape value. (3.5.2)
?..O? hanging connection is best
.*.OX
o.OXX
.....
-----
:8,C,shape(3)
?..O?
.*bOX
o.OXX
..a..
-----
; !oplay_attack(a,b,b)
> antisuji(a);
> antisuji(b);
Pattern EC17
OO? Get up from first line.
.*X
.OO
---
:8,C
OO?
.*X
.Oa
---
;lib(a)==2
Pattern EC18
X.OX? Prevent connection
..*xX
.....
-----
:8,OB
Pattern EC19
?X? Prevent connection
x.?
.*O
..X
---
:8,OB
Pattern EC20
.X? Try to prevent connection
.*O
...
.XX
---
:8,OB
Pattern EC21
o.o
XOX
.*.
...
---
:|,OB
o.o
aOb
.*.
...
---
;!xplay_break_through(*,a,*,b)
Pattern EC22
?O?
XOX
.*.
...
---
:|,OB
?O?
aOb
.*.
...
---
;!xplay_break_through(*,a,*,b)
Pattern EC23
x.x
OXO
.*.
...
---
:|,c
x.x
aXb
.*.
...
---
;lib(a)>1 && lib(b)>1
Pattern EC24
# This move does not secure a connection without a constraint, see
# e.g. nicklas1:502.
?X?
OXO
.*.
...
---
:|,c
?X?
aXb
.*.
...
---
;lib(a)>1 && lib(b)>1
Pattern EC25
O.X Stop connection
XO*
X..
---
:8,OB
ebX
cO*
cad
---
;!xplay_defend_both(*,a,b,a,e)
;&& xplay_attack_either(*,b,a,d,d,b)
;&& oplay_attack_either(*,b,b,c)
;&& oplay_attack_either(*,a,d,b,b,c)
Pattern EC26
# Smaller endgame profit than EC25.
O*X Stop connection
XO.
X..
---
:8,OB
d*X
XOa
Xbc
---
;(!xplay_defend(a,b,*,b) || !xplay_defend(a,b,*,d))
;&& xplay_attack(a,*,b,c,c)
Pattern EC27
# gf Removed obsolete add_connect_move action. (3.3.16)
# gf Reduced shape value. (3.5.2)
?X*O Use edge to stay connected.
?XOX
...O
....
----
:8,-,shape(3)
?X*O
?XOB
..aO
....
----
; !attack(B) && oplay_attack(*,a,a)
Pattern EC28
# gf Removed obsolete add_connect_move action. (3.3.16)
O.XO? capture to connect
OXOXO
o..*.
-----
:8,-
caXO?
cXOXO
ob.*.
-----
;!oplay_attack(*,a,b,c) && !oplay_attack(*,b,a,c)
Pattern EC29
X..Oo cut
..*X.
.....
-----
:8,OB
X.aOo
..*B.
.....
-----
;oplay_attack_either(*,a,B,a)
Pattern EC30
?O? force X to connect
X*X
...
---
:|,a
Pattern EC31
?..?? Clamp to connect under
X..O?
OX*.O
.....
-----
:8,C
?..??
X..O?
aX*.O
.....
-----
;!attack(a)
Pattern EC32
XO? cut!
.*X
...
---
:8,OB
Pattern EC33
?O? Take an important ko
OXO
X*X
---
:8,B
?b?
OAO
X*X
---
;ko(A) && alive(b)
Pattern EC34
?X? Take an important ko
X*X
OXO
---
:8,C
?X?
X*X
OAO
---
;ko(A)
Pattern EC35
?X? Fill an important ko
XOX
O*O
---
:8,C
?X?
XaX
O*O
---
;ko(a)
Pattern EC36
?O? Fill an important ko
O*O
XOX
---
:8,B
?b?
O*O
XaX
---
;ko(a) && alive(b)
Pattern EC42
..OO? cut
X.*X?
.....
.....
-----
:8,OB
Pattern EC43
..OO? cut
X.OX?
.*X..
.....
-----
:8,OB
Pattern EC44
Oo.X stop connection on edge
X*.X
----
:8,OB
Pattern EC45
..O. descend
....
.O.X
X*..
....
----
:8,OB
Pattern EC46
....? cut after invasion
O.OX?
..X*O
....?
....?
-----
:8,OB
Pattern EC47
X.OX block edge connection
X.*.
----
:8,OB
Pattern EC48
XOXX break connection
X*.?
----
:8,OB
Pattern EC49
.O.. block
X*.X
....
....
----
:8,OB
Pattern EC50
.O.. block
XO.X
.X*.
....
----
:8,OB
Pattern EC51
..*x? Prevent connection
?XO.X
.....
.....
-----
:8,OB
Pattern EC52
.*.O? Prevent connection
?XO.X
.....
.....
-----
:8,OB
Pattern EC53
?.O??
X.OX?
.*X..
.....
-----
:8,OB
Pattern EC54
..O.. prevent connection
XO.X.
..*..
.....
-----
:8,OB
Pattern EC55
?.O? break connection
.O.X
.X*.
....
----
:8,OB
?ce?
dOaX
bX*.
....
----
;!oplay_attack(*,a,b,c,d,e)
Pattern EC56
# gf The constraint was too inexact, see match at B9 in score2:34.
# Replaced it by a connection constraint. (3.1.32)
X*O? Prevent opponent's connection under
...X
----
:8,OB
B*O?
...A
----
;oplay_connect(A,B) && !oplay_connect(*,A,B)
Pattern EC57
??O?? Connect underneath by attaching
O.X.O
..*..
.....
-----
:|,C
??O??
OdXaO
fe*bc
.....
-----
;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,d,e,f,d,f)
;&& !oplay_defend_both(*,b,a,d,e,b,d)
;&& !oplay_defend_both(*,e,d,a,b,e,a)
Pattern EC58
O.X.O connect!
O.*..
.....
.....
-----
:8,C
OfIaO
Od*bc
hge..
.....
-----
;!oplay_defend_both(*,b,a,b,I) && oplay_attack_either(*,a,b,c,a,c)
;&& oplay_attack_either(*,b,a,d,e,f,g,h,f,h)
;&& !oplay_defend_both(*,b,a,d,e,g,f,g,I)
Pattern EC59
.XO.X hane to prevent connection
.*..X
-----
:8,OB
.Xa.X
.*..X
-----
;!oplay_attack(*,a)
Pattern EC60
# tm added constraint (3.1.18)
# gf Changed B classification to C. (3.1.18)
?O.. protect cut
XO*X
XXO.
....
----
:8,OC
?O..
XO*X
XXcA
...B
----
; xplay_attack(A,B,c) || xplay_attack(*,c)
Pattern EC60a
# tm New Pattern (3.1.18)
# gf Changed B classification to C. (3.1.18)
?O.. indirectly protect cut
XO.X
XXO*
....
----
:8,OC
?b..
XOaX
XXO*
....
----
; oplay_defend_both(*,a,*,b)
Pattern EC61
OoOO? prevent connection
X.X*X
.....
-----
:8,OB
Pattern EC62
.X.?? defend the extension
O*...
....O
.....
.....
-----
:8,C
Pattern EC63
# gf Fixed value removed and constraint revised. (3.5.2)
?X? connect underneath if X can't cut
OXO
.*.
...
---
:|,XC
?X?
aXb
.*.
...
---
;!oplay_disconnect(*,a,b)
Pattern EC64
# gf Removed fixed value. (3.5.2)
..xxx threaten connection
.O.Xx
.*X.O
.....
-----
:8,OXead
..xxx
.O.Xx
.*X.a
.....
-----
; lib(a)>2
Pattern EC65
# gf Reduced shape value. (3.5.2)
ox..o Connect underneath
O*X.O
..O..
.....
-----
:8,XC,shape(3)
Pattern EC66
# gf Reduced shape value. (3.5.2)
OXX.O connect below
.*O..
.....
-----
:8,XCad,shape(3)
OXX.O
b*Oa.
.....
-----
; oplay_attack(*,a,a) && oplay_attack(*,b,b)
Pattern EC67
# gf Reduced shape value. (3.5.2)
OXX.O connect below
.O*..
.....
-----
:8,XCad,shape(3)
OXX.O
bO*a.
.....
-----
; oplay_attack(*,a,a)&&oplay_attack(*,b,b)
Pattern EC68
O.XOo connect underneath
..*.o
.....
-----
:8,XCad
O.Abo
..*.o
.....
-----
; lib(A)<4 && lib(b)>2 && !attack(A)
Pattern EC69
?OXx?
X*..O
..O..
.....
-----
:8,XCad
?OXx?
A*..O
..O..
.....
-----
; does_attack(*,A)
Pattern EC70
# constraint looks for shortage of liberties
oOX.O connect with ko
O.*..
-----
:8,XCd
oOXbO
Oc*ad
-----
; !oplay_attack(*,a,b,c,d,*,c)
Pattern EC71
# constraint looks for shortage of liberties
xXO.X prevent ko connection
X.*..
-----
:8,Ba
xXObX
Xc*ad
-----
; !xplay_attack(*,a,b,c,d,*,c)
Pattern EC73
?OXXX? secure connection
..OO*O
......
------
:8,XC,value(5)
?aXXX?
..OO*O
......
------
; lib(a)==2 && !dead(a)
Pattern EC74
?..ooo connect under
..X.Oo
O.*..o
......
......
------
:8,XCd,shape(2)
Pattern EC75
?..ooo connect under
..X*Oo
O.OX.o
......
......
------
:8,Cd,shape(3)
Pattern EC76
#gf New pattern. (3.1.12)
?..O? cut!
...OX
.XOXX
..*..
-----
:8,B
?..b?
..abX
.XOXX
..*..
-----
;alive(b) && oplay_attack(*,a,a)
Pattern EC77
#tm New Pattern (3.1.16)
#tm modified (3.1.17)
|..x clamp!
|.*.
|.X.
|XOO
:8,OXe
|..x
|.*.
|.A.
|XOO
;oplay_defend(*,A) != WIN
Pattern EC78
#tm New Pattern (3.1.18)
# gf Revised constraint. (3.3.12)
# see trevora:610
#FIXME: There's still a problem here, in that this sacrifice
# is deemed unsafe, and not played....
# gf Is this really a cut pattern? (3.3.13)
OOO block or cut into black's territory.
...
*X.
...
---
:8,sOXe
OOO
a..
*Xb
...
---
; safe_omove(*)
; || !oplay_attack(*,a,b,b)
Pattern EC79
# gf New Pattern (3.3.13)
X.O connect
X*.
O..
---
:8,C
Pattern EC80
# gf New Pattern (3.3.15)
XOOX block edge connection
X.*.
----
:8,OB
XOOX
Xa*.
----
;xplay_attack(*,a,a)
Pattern EC81
# gf New Pattern (3.3.16)
# See nngs1:31
XXX.Ox connect all stones
OO..*X
....O?
......
------
:8,XC
##############################################
# First line, one space, cuts and connections.
##############################################
Pattern EC101
XOX prevent connection
.*.
---
:|,OB
XOX
a*b
---
;xdefend_against(*,a) && xdefend_against(*,b)
Pattern EC102
XOX prevent connection
..*
---
:8,OB
XcX
ab*
---
;xdefend_against(b,a) && xdefend_against(b,*) && !oplay_attack(*,c)
Pattern EC103
XOX? followup
.*OX
----
:8,B
XaX?
.*OX
----
;!dead(a)
Pattern EC104
OXO make connection
.*.
---
:|,C
OXO
a*b
---
;odefend_against(*,a) && odefend_against(*,b)
Pattern EC105
XO? don't allow connection underneath
.*X
---
:8,OB
BO?
a*X
---
;(safe_xmove(*) && xplay_defend_both(*,a,*,B)) || xdefend_against(a,*)
Pattern EC106
XO? don't allow connection underneath
X*X
---
:8,nOB
Pattern EC107
?O? Cut on first line
X*X
---
:8,OB
Pattern EC108
XOX block edge connection
x*x
---
:8,nOB
AOB
x*x
---
;(!attack(A)) && (!attack(B))
Pattern EC109
?X?
O*O
---
:|,nC
Pattern EC110
# Probably redundant
?OX*O connect under
o.O..
-----
:8,C
##############################################
# First line, two spaces, cuts and connections.
##############################################
Pattern EC201
XO.. don't allow connection underneath
.*.X
----
:8,OB
BO..
a*.X
----
;safe_xmove(*) && xplay_defend_both(*,a,*,B)
Pattern EC202
XO*. don't allow connection underneath
...X
----
:8,nOB
BO*.
ac.X
----
;xplay_defend_both(c,a,c,B)
Pattern EC203
XO.. don't allow connection underneath
X*.X
----
:8,nOB
Pattern EC204
XO*. don't allow connection underneath
X..X
----
:8,OB
XO*.
Xa.X
----
;safe_xmove(a)
Pattern EC205
XO.O don't allow connection underneath
x.*X
----
:8,OB
XOaO
xb*X
----
;odefend_against(*,a) && oplay_defend(*,b,*)
Pattern EC206
# Probably redundant
?XO.OX? prevent connection
x.X*..x
-------
:8,C
Pattern EC207
O.XO Connect at edge
..*.
----
:8,nC
ObEO
da*c
----
;oplay_attack_either(*,c,E,c) && oplay_attack_either(*,b,a,d,b,d)
;&& oplay_attack(*,a,b,c,E) == WIN
Pattern EC208
# Followup to EC207
O*XO Connect at edge
.XO.
----
:8,nC
O*BO
.XOa
----
;oplay_attack(*,a,B)
Pattern EC209
# Probably redundant.
X.OX block edge connection
X.*.
----
:8,OB
X.OB
X.*a
----
;xdefend_against(*,a) && !xplay_attack(*,B)
Pattern EC210
X.OX Cut at edge
..*.
----
:8,nOB
XbeX
da*c
----
;xplay_attack_either(*,c,e,c) && xplay_attack_either(*,b,a,d,b,d)
;&& xplay_attack(*,a,b,c,e)
Pattern EC211
# Probably redundant.
X.OO block edge connection
X.*X
----
:8,OB
Pattern EC212
??XoO Defend monkey jump
?O*oo
-----
:8,C
??XoO
?a*oo
-----
;lib(a)>=3
Pattern EC213
?..XO Defend monkey jump
.O.*o
-----
:8,C
Pattern EC214
?xx.. Defend inverse monkey jump
o.XO.
O.*..
-----
:8,C
Pattern EC215
??OO? Cut through monkey jump.
X..O?
..*Xx
-----
:8,OB
Pattern EC216
?X..O Monkey jump edge connection
O*..o
-----
:8,C
?X..O
a*..o
-----
;lib(a)>=3
Pattern EC217
?O??
X*.X
----
:8,OB
?O??
B*aC
----
;lib(B)>1 && lib(C)>1 && xplay_attack(*,a,a)
Pattern EC218
??o? Connect underneath
OX.X
.*.O
----
:8,C
######################################################################
#
# Splitting and other strategically attacking (or defending) moves
#
# These patterns do not have the C or B classification but they
# often have an effect on connections.
#
######################################################################
####################################
#
# Center splitting patterns
#
####################################
Pattern CS1
?X?X? pattern to make two partial connections
O.O.O
.....
..*..
?????
:|,Xd
?A?B?
O.O.O
.....
..*..
?????
;lib(A)>1 && lib(B)>1
Pattern CS2
??O. pattern to connect
X..O
.*..
O.??
:8,OXead
Pattern CS3
...X Move out and separate
.*..
X.O?
:8,OXad
Pattern CS4
.X.O.?? pattern to separate the opponent
.....??
...*.??
.....X.
:8,OXad
Pattern CS5
??x?? Play out to separate the opponent
.X.O.
..*..
.....
.....
...X?
:8,OXad
Pattern CS6
??O.? Play out to separate the opponent. Only play if no risk for cut at a below.
.X.O.
..*..
.....
.....
...X?
:8,OXad
??Oa?
.X.O.
..*..
.....
.....
...X?
;!safe_xmove(a)
Pattern CS7
...O?? jump to separate
.X...?
...*..
.....X
:8,OXad
Pattern CS8
...O.. jump to separate
.X...X
...*..
:8,OXad
Pattern CS9
?????? leap to connect
......
O.*..O
......
??????
:8,OXad,jump_out_helper
Pattern CS10
??.?? jump to separate opponent
?.O..
X...X
?.*..
??.??
:8,OXad
Pattern CS11
..X Cut across large knight's move
...
.*O
.X?
:8,OXad
b.X
...
.*a
.X?
;!weak(a) || !xmoyo(b)
Pattern CS12
?OO? jump across
...X
X*..
:8,OXad
Pattern CS13
.X.. attach
.*.O
....
..X.
:8,OXad
Pattern CS14
??.?? jump to separate opponent
?.O..
X.*.X
?....
?oO??
:8,OXad
Pattern CS15
.O..
X*.X
....
oO??
:8,OXa
Pattern CS16
# gf Revised constraint. (3.5.3)
# See gifu03:308.
?O.x
X*.X
:8,OXa
?c.x
A*dB
;!same_dragon(A,B) && (weak(c) || xplay_connect(*,d,A,B))
Pattern CS17
xXx Even a computer answers a peep.
O*O
...
:8,OXd
xXx
b*c
.a.
;xplay_break_through(*,a,b,a,c)
Pattern CS18
?...?
O.*.O
o...o
?XxX?
:|,OXad
Pattern CS19
# gf Corrected symmetry. (3.1.23)
X...
O.*.
O..X
:8,OXad
Pattern CS20a
# gf Corrected symmetry. (3.1.23)
# gf Split pattern. (3.3.16)
X..
O*.
?xX
:8,OXa
Pattern CS20b
# gf Corrected symmetry. (3.1.23)
# gf Split pattern. (3.3.16)
X..
O*.
?xX
:8,OXd
A..
O*.
?xB
;!oplay_connect(*,A,B)
Pattern CS21
OOXX cutting tesuji
.X..
.*..
..O?
:8,OXa
aaXX
.X..
.*..
..O?
;lib(a)>2
Pattern CS22
?..?? when caught in a crosscut, extend
.OX.?
?XO*.
??..?
:8,OXad
Pattern CS23
?.X. good relationship
?O*.
....
X...
?.O?
:8,OXad
Pattern CS24
# This is part of a standard sequence in 4 stone games
...O.
.....
O.*X.
.....
.....
:8,OXd
...O.
.....
O.*A.
.....
.....
;!weak(A)
Pattern CS25
...O.
.....
O.OX.
..X*.
.....
:8,sOXd
Pattern CS26
?X?? make shape
.O.?
...?
.*..
?..?
:8,OX,shape(1)
####################################
#
# Edge splitting patterns
#
####################################
Pattern ES1
....O attach
O.X..
..*.O
.....
-----
:8,Xd
Pattern ES2
....O attach
O*X..
.XO.O
.....
-----
:8,Xd
Pattern ES3a
# gf New pattern. (3.5.3)
..O..
....X invade with support from above
X.*..
.....
.....
-----
:8,OEa
..a..
....X
X.*..
.....
.....
-----
;weakness(a)<0.7
Pattern ES3b
# gf New pattern. (3.5.3)
..O..
....X invade with support from above
X.*..
.....
.....
-----
:8,Oea
..a..
..b.X
X.*..
.....
.....
-----
;!weak(a) && oplay_connect(*,b,*,a)
######################################################################
#
# Edge block/expand patterns
#
# Moves that expand own position along the edge in some way or stops
# opponent from expanding his position. This includes monkey jump,
# various sliding moves, blocks, some extensions along the edge. This
# category contains very many patterns and may need to be split sooner
# or later. Some extensions along the edge can be found in the fuseki
# category.
#
# These patterns are further subdivided into the following classes:
#
# Slides
# Jumping underneath
# Center expansions
# Checking extensions
# Edge expansions
# Third and fourth line blocks
# Second line blocks
# First line blocks
# Monkey jump and other intrusions on first and second lines
# Third line push or extend
# Second line push or extend
# First line push
# Third line hane
# Second line hane
# First line hane
# Hane on top
# Attach
# Strengthen stones
# Block intrusion from above
# Draw back
# Miscellaneous
#
######################################################################
########
# Slides
########
Pattern EB4
?X?o. slide
...O.
.*...
.....
-----
:8,OXed
?X?o.
..ac.
.*b..
.....
-----
;!oplay_attack(*,a,b,c)
Pattern EB5
# gf Constraint added. See gunnar:86. (3.7.10)
??..X? long slide
oO....
....*.
......
------
:8,OXed
??..X?
oca...
..b.*.
......
------
;!oplay_disconnect(*,a,b,*,c)
Pattern EB6
...?? slide toward opponent's position
.O..X
...*.
.....
-----
:8,OXe
Pattern EB7
?XX.. slide
OO..X
...*.
.....
-----
:8,OXe
Pattern EB8
# tm added d class (3.1.20)
.X.. slide
O..X
..*.
....
----
:8,OXed
Pattern EB9
# tm added d class (3.1.20)
.X.?? slide
...OO
.*...
.....
-----
:8,OXed
Pattern EB10
# tm added d class (3.1.20)
?...X? large slide
?O...?
O...*.
.....?
------
:8,OXed
Pattern EB11
?.X... play beneath
?....O
..*...
......
......
------
:8,OXed
####################
# Jumping underneath
####################
Pattern EB102
?XX.?? Jump underneath
oO.*.?
O....?
.....?
------
:8,OXed
Pattern EB104
?.X.o jump under a stone on 4-th row
.*..o
....O
....o
-----
:8,OXed
Pattern EB105
..... knight's move for defense
.X...
..*..
O....
.....
.....
-----
:8,OXed
Pattern EB106
......? knight's move for defense
.X.....
...*...
.O.....
.......
.......
-------
:8,OXed
Pattern EB107
.X.. knight's move to come out
..*.
O...
....
----
:8,OXead
Pattern EB108
..... jump under
.*.XO
...O.
.....
-----
:8,OXe
Pattern EB109
?.X.. jump under
O..*.
O....
.....
-----
:8,OXed
Pattern EB110
?X?.?? jump under
O..*.?
O....?
o....?
------
:8,OXed
Pattern EB111
# if EB110 does not defend, this one may
?X?.? jump under
O.*oo
O....
o....
-----
:8,OXed
Pattern EB112
|oOO? jump under
|...X
|..*?
|....
|...?
+----
:8,OXed
Pattern EB113
XX.. jump out to defend
O.*o
O...
....
----
:8,OXe
Pattern EB114
??X..?
O....?
O..*.?
.....?
.....?
------
:8,OXed
###################
# Center expansions
###################
Pattern EB201
..... jump when stone on third row is approached
.*...
.....
.O.X.
.....
.....
-----
:8,OXd
Pattern EB202
..... Jump out!
..*..
.....
X.O.X
.....
.....
-----
:8,OXd
Pattern EB203
....?? knight's move to come out
..*.X?
.....O
...O..
......
------
:8,Oe
Pattern EB204
.... match opponent's jump
X.*.
....
X.O.
....
....
----
:8,OE
Pattern EB205
.*.. jump into center
...X
.O..
...O
....
----
:8,OXd
Pattern EB206
??.?? jump out
?.*.?
X...?
..O.X
.....
.....
-----
:8,OXd
Pattern EB207
......? push up to expand
.......
..X*...
X.XO..X
XOO....
.......
.......
-------
:8,OXd
Pattern EB208
..... attach
..X*.
O....
..O..
.....
.....
-----
:8,OXd
Pattern EB209
ooo...... low approach
ooo....X.
ooo..*...
.........
.........
---------
:8,j,shape(-2)
Pattern EB210
??????x?? high approach deemed bad
?????..??
oo...*.X?
ooo....xx
.......??
........?
---------
:8,-,shape(-8)
Pattern EB211
??????x?? far high approach deemed bad
?????..??
oo..*..X?
ooo....xx
.......??
........?
---------
:8,-,shape(-8)
#####################
# Checking extensions
#####################
Pattern EB301
...... defend to prevent peep
.O.O..
.....X
....*.
......
------
:8,OXed
Pattern EB302
.O.X expand shape
O.*.
....
....
----
:8,OXe
Pattern EB303
....xx jump toward opponent's position
.O.*.X
......
......
------
:8,OXe
Pattern EB304
O.... extend
..*.X
.....
.....
-----
:8,OXe
Pattern EB305
X.... extend
..*.O
.....
.....
-----
:8,OXe
Pattern EB306
# gf Don't attach a weak stone. (3.1.18)
??.? extend and attach
X*.O
....
....
----
:8,OXe
??.?
A*.O
....
....
----
;!weak(A)
Pattern EB307
??O? extend and attach
X*.O
....
....
----
:8,OXe
Pattern EB308
O... block on third line
.*.X
....
....
----
:8,OXe
Pattern EB309
.O.. diagonal attachment on 3-rd line
..*X
....
....
----
:8,OXe
Pattern EB310
X..O. expand base
.*..O
.....
.....
-----
:8,OXe
Pattern EB311
........ extend
.O......
O....*.X
........
........
--------
:8,OXe
Pattern EB312
....?
O....
..*.X
.....
.....
-----
:8,OXe
Pattern EB313
?X.O? double sente kosumi
?.*.?
?...?
-----
:8,OXe
?X.O?
b.*.a
?...?
-----
;omoyo(a) && xmoyo(b)
Pattern EB314
?o?? extend towards opponent
X..O
.*..
....
....
----
:8,OXe
Pattern EB315
O....
..*.X
.....
.....
-----
:8,OXe
Pattern EB316
XOO... prevent opponent's slide
O..*X.
......
......
------
:8,OXe
Pattern EB317
...oo block extension if X is weak
X..oo
X.*.o
....o
....o
-----
:8,OXea
...oo
A..oo
A.*.o
....o
....o
-----
;weak(A)
#################
# Edge expansions
#################
Pattern EB401
O...? jump along edge
..*.?
....?
-----
:8,Oe,jump_out_far_helper
Pattern EB402
....x
O.*.x jump along edge
....?
....?
-----
:8,Oe,jump_out_far_helper
....a
O.*.b
....?
....?
-----
; x_alive_somewhere(a,b)
Pattern EB403
?..xx jump along edge
O...x
...*.
.....
-----
:8,Oe,jump_out_far_helper
?..dx
Oa..e
cb.*.
.....
-----
;oplay_attack(*,a,b,c,c) && x_alive_somewhere(d,e)
Pattern EB404
oO... jump along edge
O..*.
.....
-----
:8,Oe,jump_out_helper
Pattern EB405
OO... jump along edge
...*.
.....
-----
:8,Oe,jump_out_helper
Pattern EB406
??x.? jump along edge
OO.*.
.....
.....
-----
:8,Oe,jump_out_helper
Pattern EB407
# gf Added constraint. (3.5.3)
oO.... jump along edge
O...*.
......
------
:8,Oe,jump_out_helper
oa....
O...*.
......
------
;!oplay_disconnect(*,*,a)
Pattern EB408
o..? jump along edge
O.*.
....
----
:8,Oe,jump_out_helper
Pattern EB409
o.... jump along edge
O..*.
.....
-----
:8,Oe,jump_out_helper
o....
O..*.
.....
-----
;oarea(*)
Pattern EB410
...??? defend cut
O....?
XO*..?
XXO..?
.....?
.....?
------
:8,ad
Pattern EB411
# gf Reduced shape value. (3.5.2)
...??oo
O....oo
XO*..oo
XXO..oo
.....oo
.....oo
-------
:8,ead,shape(3)
...??oo
O....oo
XO*..ab
XXO..cd
.....oo
.....oo
-------
; o_alive_somewhere(a,b,c,d)
Pattern EB412
# db added (3.1.8)
# gf Added OX classification. (3.3.3)
X??? push along the edge
OXX.
.O*.
....
----
:8,OXed,shape(3)
##############################
# Third and fourth line blocks
##############################
Pattern EB501
# gf Reduced shape value. (3.5.2)
....? hane if attached
.*X.X
..O..
.....
.....
-----
:8,ed,shape(3)
Pattern EB501a
# gf Reduced shape value. (3.5.2)
?..X.? push in to stabilize
..OX.X
...O*.
......
......
------
:8,ed,shape(3)
Pattern EB502
..O.X. block if attached
.*X...
......
......
------
:8,Oe,followup(5)
Pattern EB503
..O..X block if attached
.*X...
......
......
------
:8,Oe
Pattern EB504
?.O.o block
xX*.o
.....
.....
-----
:8,Oe
Pattern EB505
??.?? hane on the 4-th line
.*X..
O.OO.
?....
?....
-----
:8,Oe
Pattern EB506
??.?? hane on the 4-th line
.*X..
x.OO.
?....
?....
-----
:8,Oe
??.??
.*B..
xaOO.
?....
?....
-----
;oplay_attack_either(*,a,a,B)
Pattern EB507
# tm Reduced shape value from 4 to 3 (3.1.20)
# gf Removed shape value. (3.3.16)
?o??
?O.. block
X*..
....
....
----
:8,Oe
Pattern EB507a
# tm New Pattern (3.1.20) (see strategy:26)
# gf Reduced shape value. (3.5.2)
?o??
?O.. block
X*..
O...
....
----
:8,Oe,shape(3)
Pattern EB508
# gf FIXME: This pattern seems to need more context or a constraint. (3.3.12)
..O. Block opponent's extension on third line
....
.*.X
...?
....
----
:8,OE
Pattern EB509
?... block to prevent incursion
XO.O
X*..
....
....
----
:8,Oe
Pattern EB510
.O.O blocking is very large
X*..
....
....
----
:8,Oe
Pattern EB511
.O.? endgame move
O.*X
....
....
----
:8,OXe
Pattern EB512
..*X attach to immobilize 1-st line stone
?O..
X...
----
:8,Oe
Pattern EB513
...... bend is urgent
X.X*..
.XOO..
......
......
------
:8,Oe
Pattern EB514
?O.? connect against peep (third line)
X*..
?O.?
....
....
----
:8,ne
Pattern EB515
?OO?? jump down and block
?....
..*.X
.....
.....
-----
:8,Oe
Pattern EB516
o.....o kosumi block
O.....o
.*.X.O.
.......
.......
-------
:8,Oe
Pattern EB517
?O.O? block
..*XX
.....
.....
-----
:8,OXe
Pattern EB518
o.o block
x*.
XO.
X..
---
:8,OXe
Pattern EB519
|...O block in corner
|..*.
|...X
|....
+----
:8,OXe
Pattern EB520
..... block
XO...
.*...
.....
.....
-----
:8,Oe
.....
XO...
.*..a
.....
.....
-----
;omoyo(a)
Pattern EB521
# gf FIXED: This fixed value looks dangerous. (3.3.12)
# gf Removed fixed value and E classification. (3.5.2)
..O? urgent atari
..OX
.*XO
....
....
----
:8,Xd
..O?
..OX
.*Xa
....
....
----
; attack(a) && !defend(a)
####################
# Second line blocks
####################
Pattern EB601
?Oo? block on second line
XO.?
.X*o
...?
----
:8,OXead
Pattern EB602
?Oo? block on second line
XO.?
..*o
.X.?
----
:8,OXe
Pattern EB603
?.O block on second line if safe from cut and clamp
.*X
?..
---
:8,OXea
?aO
b*D
?c.
---
;oplay_attack_either(*,a,a,D)
;&& (oplay_attack(*,b,D) || oplay_attack_either(*,b,c,a,a,D))
Pattern EB604
?.O block on second line if safe from cut
O*X
?..
---
:8,OXe
?aO
O*X
?..
---
;odefend_against(*,a)
Pattern EB605
?.O block on second line if safe from cut
X*X
?..
---
:8,OXe
?.O
A*X
?..
---
;does_attack(*,A)
Pattern EB606
?OOO block on second line
X*..
....
----
:8,OXed
Pattern EB608
OO? block on second row
.*X
..?
---
:8,OXe
Pattern EB609
X.O. Block off the edge
.X*.
....
----
:8,OXe
Pattern EB610
O..O?
O..*X
.....
-----
:8,OXe
Pattern EB611
OOXX block on second line
*X..
....
----
:8,OXe
Pattern EB612
????
.O..
XXO.
..*.
....
----
:8,OXe
???b
.Oa.
XXO.
..*.
....
----
;odefend_against(*,a) || omoyo(b)
Pattern EB615
.O? Prevent monkey jump or other incursion
.*X
...
---
:8,OXe
Pattern EB615b
# gf New pattern. (3.3.13)
.O? Prevent monkey jump or other incursion
.*X
...
---
:8,OXed
.O?
a*X
...
---
;omoyo_opposite(a)
Pattern EB616
?o.O?
?.*.X
o...X
-----
:8,OXe
Pattern EB617
# gf Revised pattern. (3.1.9)
oO.? Prevent monkey jump or other incursion
o.*X
....
----
:8,OXe
Pattern EB618
oO.? Prevent monkey jump or other incursion
.*.X
...X
----
:8,OXe
Pattern EB619
oO.? Prevent monkey jump or other incursion
..*X
...X
----
:8,OXe
oOa?
..*X
...X
----
;oplay_attack(*,a,a)
Pattern EB624
# gf Unified with EB625. (3.3.12)
?O?? block
?.OX
.*X.
....
----
:8,Oe
?b??
?.aX
.*X.
....
----
;lib(a)>1 && !oplay_disconnect(*,*,b)
Pattern EB626
X?O?? block after attachment
X.O.?
..X*.
.....
-----
:8,Oe
Pattern EB627
?O.... block
XO.X..
X*....
......
------
:8,Oe
Pattern EB628
.O.. prevent incursion
....
.*.X
....
----
:8,OXe
Pattern EB629
..?? don't let the opponent undermine
.OX?
.*.X
....
----
:8,Oe
Pattern EB630
..O.OX stop incursion
.*..OX
..X.X.
------
:8,Oe
Pattern EB631
oO.?? clamp on second
o..O?
o*XOX
o..X.
-----
:8,Oe
oOb??
o.ac?
o*XcX
o..X.
-----
;!oplay_attack(*,a,b,c)
Pattern EB632
# gf Revised pattern. (3.3.12)
?oO?? clamp on second
?O..X
XOX*.
.X...
-----
:8,Oe
?oO??
?a..X
XaX*.
.X...
-----
;!oplay_disconnect(*,*,a)
Pattern EB633
O.O. seal opponent in
?O..
?X*.
?X..
----
:8,OXe
Pattern EB634
...Oo? Fend off territory (hopefully)
....O?
.....X
...*.X
.....x
------
:8,OXe
Pattern EB635
?OOOX? Stop eye-stealing move
X*..OO
......
------
:8,Xd
Pattern EB637
?o.? stop intrusion on first line
.*.O
..XX
----
:8,OXe
?od?
e*cO
baXX
----
;!oplay_attack_either(*,a,b,*,b) && oplay_attack_either(*,a,b,c,d,e,a,e)
Pattern EB638
?O..Oo defend eye space
.X*..o
......
------
:8,OXed
?Oa.Oo
.X*..o
......
------
;oplay_attack(*,a,a)
Pattern EB639
?OoO block on edge
X...
X.*.
....
----
:8,OXead
?OoO
Xba.
Xc*.
....
----
;oplay_attack(*,a,b,c,a)
Pattern EB640a
Ooo block on edge
x*.
X..
---
:8,OXe
Ooo
x*.
Xab
---
;!oplay_attack_either(*,a,b,*,b)
Pattern EB640b
# db modified (3.3.5)
.Oo block on edge
x*.
X..
---
:8,OXe,shape(3)
.Oo
x*.
Xab
---
;!oplay_attack_either(*,a,b,*,b)
Pattern EB640c
..O block on edge
x*.
X..
---
:8,OXe
..O
x*.
Xab
---
;!oplay_attack_either(*,a,b,*,b)
Pattern EB641a
?Oo? block on edge
x.*.
X...
----
:8,OXe
Pattern EB641b
?.O? block on edge
x.*.
X...
----
:8,OXe
Pattern EB641c
?..O block on edge
x.*.
X...
----
:8,OXe
Pattern EB642
|XOO
|X*.
|...
+---
:8,OXe,reverse_followup(6)
Pattern EB643
# gf New pattern. (3.5.3)
# See gifu03:506.
?.O block on edge
O*.
X..
---
:8,OXe
###################
# First line blocks
###################
Pattern EB701
|.OX Descending in the corner for profit and eyespace
|.OX
|.*.
+---
:8,OXe
Pattern EB702a
# tm modified (3.1.20) (see endgame:102)
??o??? prevent incursion
?XO.??
..X*.?
------
:8,OXe,reverse_followup(6)
??o???
?Xab??
.cX*.?
------
;lib(a)>2
;|| !oplay_attack_either(*,b,c,*,a)
Pattern EB702b
??o??| prevent incursion
?XO.?|
..X*.|
-----+
:8,OXe,reverse_followup(2.5)
??o??|
?Xa.?|
..X*.|
-----+
;lib(a)>2
Pattern EB703
# gf Added O classification. (3.1.32)
?O? block on edge
O.O
X*.
---
:8,OXe
Pattern EB704
?oO block on edge. Sometimes better to fall back...
XO.
.X*
---
:8,OXe
Pattern EB705
# FIXME: (see trevorc:1040)
?????
?O... prevent incursion
X*...
-----
:8,OXe
?????
?b...
X*a..
-----
;xplay_attack(*,a,a) || weak(b)
Pattern EB706
??Oo??? prevent incursion with sente
..XO...
..X*...
-------
:8,OXe
??Oo???
..AO...
..A*...
-------
;oplay_attack(*,A)
Pattern EB707
|..? prevent incursion with sente
|..?
|XXO
|*Oo
|..?
|..?
+---
:8,OXe,followup(8)
|..?
|..?
|AAO
|*Oo
|..?
|..?
+---
;oplay_attack(*,A)
Pattern EB708
O? seal off at edge
.O
*X
--
:8,OXe
Pattern EB709
|.XO extending in the corner is huge: double sente
|*O.
|...
+---
:8,OXe,reverse_followup(3)
Pattern EB709b
# gf New pattern. (3.1.14)
|*XO if this move can't be captured and O is already alive, we prefer
|.O. hane to the descent
|...
+---
:8,OXe,reverse_followup(3)
Pattern EB710
# gf Removed fixed value. (3.5.2)
o.OOX? block
.*XX.X
------
:8,OXe
Pattern EB711
o.OO block
.*XX
----
:8,OXe,followup(4)
o.bb
.*AA
----
;oplay_attack(*,A) && !oplay_attack(*,b)
Pattern EB712
# Probably bigger reverse followup in reality
# tm Modified (3.1.17)
# tm Modified (3.1.20)
?O.. block
XO..
X*..
----
:8,OXe,reverse_followup(6)
?O..
XOb.
X*a.
----
; !xplay_attack_either(*,a,b,*,b)
Pattern EB712b
# gf New pattern. (3.7.10)
# Probably bigger reverse followup in reality
# See trevora:340 and trevorb:370.
?*O.. block on top
OXO..
.X...
-----
:8,Xe,reverse_followup(6)
?*d..
eXdb.
.Xca.
-----
;alive(d) && !xplay_attack_either(c,a,b,c,b) && oplay_attack(*,c,c)
;&& !oplay_connect(c,*,d,e)
Pattern EB713
# tm modified (3.1.17)
# FIXME: (see trevorc:1040)
?O.. block
X*..
----
:8,OXe,reverse_followup(3)
?Ob.
X*a.
----
;!xplay_attack_either(*,a,b,*,b)
Pattern EB714
XO.X
.X*.
----
:8,B
XO.A
.X*.
----
;oplay_attack(*,A)
Pattern EB715
# ab added (3.1.14)
O.* jump if blocking is impossible
X..
---
:8,OXe
ac*
Xbd
---
;!oplay_defend_both(b,c,a,b) && !oplay_defend_both(c,b,d,*,c,d)
Pattern EB716
# ab added (3.1.14)
O*. pull back if blocking is impossible
X..
---
:8,OXe
a*c
Xbd
---
;!oplay_defend_both(b,*,a,b) && oplay_defend_both(*,b,d,c,a,d)
Pattern EB717
# tm New Pattern (3.1.18)
# gf FIXME: lib(A)==2 is always true in this pattern. (3.1.23)
?OO.. prevent incursion
.XX*.
-----
:8,sOXe
?OB..
.AA*.
-----
; lib(A) == 2
; && !oplay_attack_either(*,B,*)
Pattern EB718
# tm New Pattern (3.1.20)
# compare to EB715 - slightly different.
O.* jump back to block
X..
---
:8,OXe
ac*
Xb.
---
;!oplay_defend_both(b,c,a,b) && oplay_defend_both(*,c,a,*)
Pattern EB719
# gf New pattern. (3.5.3)
# Inexact followup but usually big.
.XXO block
XOO*
----
:8,Xe,followup(6)
aBBd
Cee*
----
;alive(d) && critical(e) && !oplay_defend_both(*,?,a,B,C)
############################################################
# Monkey jump and other intrusions on first and second lines
############################################################
Pattern EB801
# Not to first line.
O.X.? jump under on second line
.O.*?
....?
-----
:8,Oe
Pattern EB802
# gf Revised pattern and constraint. (3.3.12)
??xxxx monkey jump
?O....
o...*.
------
:8,OXe
bcEFGx
da....
o...*.
------
;!weak(a) && o_alive_somewhere(b,c,d) && x_alive_somewhere(E,F,G)
;&& !oplay_disconnect(*,*,a)
Pattern EB803
?xX.. inverse monkey jump
O..*.
O....
-----
:8,OXe
Pattern EB804
?Xx.. inverse monkey jump
O..*.
O....
-----
:8,OXe
Pattern EB805
??X.? jump up
O..*.
oO...
-----
:8,OXe
Pattern EB806
??X..? jump up
O...*.
oO....
------
:8,OXe
Pattern EB808
# tm added defend_against_atari
?xxx? jump out on first line
OX..?
.O.*.
-----
:8,OXe
?xxx?
aX..?
bC.*.
-----
;!weak(a) && oplay_attack(*,b,b)
>defend_against_atari(C)
###########################
# Third line push or extend
###########################
Pattern EB909
?????X.? defense is becoming urgent
.X.O..*.
.....O..
........
--------
:8,d
Pattern EB910
?.X.. follow up the slide with diagonal move (another slide could be broken)
x*..O
..O..
?....
-----
:8,Oe
Pattern EB911
X.XX.. extend to 3 since B hane would be severe.
.*O..O
...O..
......
------
:8,Oe
Pattern EB912
?XX? extend to defend slide
..O*
O...
....
----
:8,Oe
Pattern EB913
# gf Unified with EB916. (3.3.12)
??X. don't let opponent block
?O*.
o...
....
----
:8,OXe
Pattern EB913b
??X. don't let opponent block
?O*.
....
....
----
:8,Xd
Pattern EB914
# gf Removed fixed value. (3.5.2)
?O??X. an exception to the preceeding pattern
*XOO..
......
......
------
:8,d
?O??X.
*AOOa.
......
......
------
; does_attack(*,A) && oplay_defend(a,A)
> antisuji(a);
Pattern EB915
# gf Removed fixed value. (3.5.2)
?O??X. exception, continued
OXOO..
*X....
......
------
:8,d
?O??X.
OAOOa.
*X....
......
------
; does_attack(*,A) && oplay_defend(a,A)
> antisuji(a);
Pattern EB917
??X..?? leap out
?OX.*..
OoO....
.......
-------
:8,Oe
Pattern EB918
..XX atari to expand
*XOO
.O..
....
----
:8,Oe,followup(6)
..XX
*AOO
.O..
....
----
;!attack(A)
Pattern EB919
..XX? extend along the edge
.*OX?
...OO
.....
-----
:8,OXe
Pattern EB920
????..? Two space extension
.....O?
.*..OXO
......O
.......
-------
:8,Oe
Pattern EB921
|oooX?? take corner
|..*.X?
|....OO
|......
+------
:8,e
Pattern EB922
??Xx? override solid connection
XXO*.
OO...
.....
-----
:8,OXe
Pattern EB923
XO? separate!
.*X
...
...
---
:8,Oe
Pattern EB924
.... extend on third line
O.*.
....
....
----
:8,Oe
....
O.*a
....
....
----
;!omoyo(a)
Pattern EB924a
XX...x extend on third line
O.O.*.
......
......
------
:8,O,shape(-3)
Pattern EB924b
XX...x extend on third line
O.O...
....*.
......
------
:8,O,shape(-3)
Pattern EB925
# gf Removed fixed value and E classification, revised constraint. (3.5.2)
XX...x extend on third line
O.O*.x
......
......
------
:8,d,shape(3)
XX...x
a.O*.x
......
......
------
; !dead(a) && !oplay_disconnect(*,a,*)
############################
# Second line push or extend
############################
Pattern EB1001
.X.O extend to undermine opponent
*O..
....
----
:8,OXe
Pattern EB1003
XX.. move out on second line
OO*.
....
----
:8,OXe
Pattern EB1004
# We should climb to third line if safe. Need helper.
# see EB1005
??.XX push out
?.*OO
?....
.....
-----
:8,OXe
Pattern EB1005
??o?? hane
?o*XX
?..OO
?....
.....
-----
:8,OXe
??o??
?o*XX
?.aOO
?....
.....
-----
;odefend_against(*,a)
Pattern EB1006
?..X? push once
.XXOO
.*O..
.....
-----
:8,OXe
Pattern EB1007
X.. overrides 113
O*.
...
---
:8,OXe
Pattern EB1008
..X. Double sente, do it early!
.O*.
....
----
:8,OXe
Pattern EB1008b
# gf Added n classification. See gifu03:105. (3.5.3)
?..X. Double sente, do it early!
x.O*.
.....
-----
:8,OXn,reverse_followup(2)
Pattern EB1008c
# gf Added n classification. See gifu03:105. (3.5.3)
?..X. Double sente, do it early!
x.O*.
.....
-----
:8,OXn,reverse_followup(5)
?..X.
x.a*.
.....
-----
;xplay_attack(*,a)
Pattern EB1009
OX. magari on second line
O*.
...
---
:8,OXe
Pattern EB1011
?XX.?? reverse sente extend
OOX...
..O*..
......
------
:8,OXe
Pattern EB1012
X.?X extend on second line
O*.?
....
----
:8,OXe
Pattern EB1013
X.?? extend on second line
O*.X
....
----
:8,OXe
Pattern EB1014
X.X extend on second line
O*.
...
---
:8,OXe
Pattern EB1015
?OXX Reverse sente push
..O*
....
----
:8,OXe
Pattern EB1016
?OX.. extend on second line -- reverse sente
OXO*.
.....
-----
:8,Oe
?OA..
aXO*.
.....
-----
;!attack(a) && !dead(A)
Pattern EB1017
X... double sente push
..XX
O.O*
o...
----
:8,Oe
Pattern EB1018
??O.X. undermine the opponent and threaten two eyes
XOoO*.
oooo..
------
:8,OXed
Pattern EB1019
.XxoO? make eye and undermine opponent
.*O.OX
...OXX
------
:8,OXed
Pattern EB1020
|.... Double sente, do it early!
|.O.X
|.*X.
|....
|....
+----
:8,OXe
Pattern EB1021
?XX. push to get one eye
OO*.
O...
----
:8,OXed
Pattern EB1022
# db New pattern (3.1.28)
?Xxx?? simply extend to avoid bad aji
oOX.x?
o.O*..
......
------
:8,O,shape(2)
?Xxd??
ocX.e?
obO*a.
......
------
; oplay_attack(a,b,*,c) || x_alive_somewhere(d,e)
> replace(a,*)
#################
# First line push
#################
Pattern EB1101
?x?? big push in sente
?X..
O*..
----
:8,OXe
?x??
?X.a
O*..
----
;xmoyo(a)
#################
# Third line hane
#################
Pattern EB1201
?XO?.. hane underneath
.*.O..
......
......
------
:8,OXe
Pattern EB1202
# gf Removed fixed value. (3.5.2)
?...? hane
O.X*.
..O.?
....?
-----
:8,OXeCad
Pattern EB1203
# gf Added constraint. (3.3.12)
# gf Removed fixed value. (3.5.2)
?..X. extend to defend and connect
O.XO*
..O..
.....
-----
:8,OXeCad
?..X.
a.XO*
..O..
.....
-----
;!oplay_disconnect(*,*,a)
##################
# Second line hane
##################
Pattern EB1301
..XX hane underneath
.XOO
.*..
....
----
:8,OXe
Pattern EB1302
XOX hane on second line
O.*
...
---
:8,OXe
XaX
O.*
...
---
;lib(a)>1
Pattern EB1303
?XX? block
.XO?
.*.O
....
----
:8,OXe
Pattern EB1304
..XX. hane
O..OX
..O.*
.....
-----
:8,OXe
Pattern EB1305
?.XX.. hane on second line
.XO..O
.*.O..
......
------
:8,OXe
Pattern EB1306
?XO? hane to claim space on second line
.*.O
....
----
:8,OXe
Pattern EB1307
# gf Removed shape bonus. (3.3.18)
?..?? hane to undermine the opponent
..XOo
..*.o
....o
-----
:8,OXead
?..??
..Xao
..*.o
....o
-----
; lib(a)>2
Pattern EB1308
?....
?....
OX...
OX...
.*...
.....
-----
:8,OXed
Pattern EB1309
# gf Reduced shape value. (3.5.2)
??.o??? urgent hane
?.XO..O
..*....
.......
-------
:8,-,shape(3)
Pattern EB1310
# gf Removed fixed value. (3.5.2)
?..X? after hane opponent must fall back
..XOO
..*.o
....o
-----
:8,OXead
?.cX?
.bXOO
da*eo
.f..o
-----
; !oplay_defend(*,a,b,c,d,e,f,f)
Pattern EB1311
# gf Removed fixed value. (3.5.2)
?..X? double sente
.XXOO
.*O.o
....o
-----
:8,OXead
#################
# First line hane
#################
Pattern EB1401
# gf Removed fixed value. (3.5.2)
|.XO? large endgame move
|.XO?
|.*.o
+----
:8,OXe
Pattern EB1402
?.X?? hane
..XO?
x.*.o
-----
:8,OXe
Pattern EB1403
# gf Revised pattern. (3.1.3)
# gf Revised constraint. (3.3.13)
# ab Removed followup value (handled by influence code). (3.3.20)
?oX?? sente hane
..XO?
?.*.o
-----
:8,Xe
?oX??
b.Xa?
?.*..
-----
;alive(a) && xmoyo(b)
Pattern EB1404a
# Followup to previous pattern.
#
# No need to check for sente. If we found the hane to be worth
# playing, we should continue with the tsugi too. (Unless we can
# follow up with a ko or nakade pattern or something similar, but
# those should have higher values.)
#
# In practice this pattern doesn't always kick in at a high enough
# value to guarantee that EB1403 will be followed up.
#
# gf Revised pattern. (3.1.3)
# eb revised constraint (3.3.13)
# see nngs3:1110
# ab FIXME: Is this still necessary?
?oX?? Connect after hane.
..XO?
?XO*o
-----
:8,Xe,followup_value(8)
?oX??
..Xa?
?BO*o
-----
;!dead(a) && !attack(B)
Pattern EB1404c
#cut followup to sente hane
#evand new pattern (3.3.13)
# gf Fixed value removed. (3.5.2)
?oX??
.*XO?
?XO.o
-----
:8,Xe
?oX??
c*Xa?
?BO.o
-----
;!dead(a) && xmoyo(c) && !oplay_defend(*,B) && !oplay_attack_either(*,*,a)
Pattern EB1405
?..X? sente hane
..XO?
?.*.o
-----
:8,OXe,followup_value(8)
?..X?
ecDO?
?a*bo
-----
;xmoyo(e) && !oplay_defend_both(*,a,b,?,c,a,D) && !oplay_attack(*,a,b,c,*)
#############
# Hane on top
#############
Pattern EB1501
??oo? Hane atop opponent's attachment on third line
..*..
..XO.
.....
.....
-----
:8,OXEad
Pattern EB1502
?oooo?? hane is urgent
ooo*.??
o.OX.o?
o.OX.o?
o....??
o....??
-------
:8,OXead
Pattern EB1503
...? extend instead of hane
x*..
.OX.
.OX.
....
....
----
:8,OXed
########
# Attach
########
Pattern EB1601
...... attach underneath
.X.O.O
.*....
......
------
:8,OXe
Pattern EB1603
?...? top attachment
.O.*.
...X.
.....
.....
-----
:8,OXE
Pattern EB1604
# The attachment is beneficial even if captured except
# in the case where the opponent pushes below leading
# leading to a complicated fight. If this happens
# O3X it is unclear who will come out better. (O can
# 421 retaliate in various ways depending on surroundings
# ... and fighting strength.) Attaching is preferred
# --- to EB313 if it works.
#
# The final position could be:
#
# O
# OOXX
# OX.X
# ..X.
# ----
#
# or:
#
# O
# OOXO
# .XXX
# ..X.
# ----
#
# It can backfire if X pushes below. That is not always possible.
????.? attach on second line
?....?
oO.X.o
o..*.?
.....?
------
:8,OXe
????.?
?....?
oO.A.o
o..*.?
.....?
------
;!weak(A)
Pattern EB1605
????.? attach on second line in sente
?....?
oO.X.o
o..*.?
.....?
------
:8,OXe,followup(5)
????.?
?....?
oO.Dco
o.b*a?
.....?
------
;!weak(D) && !oplay_attack(*,a,b,?,c,c)
Pattern EB1606
# Explicit followup.
???.? attach on second line
....?
O.X.o
.*OX?
....?
-----
:8,e
Pattern EB1606b
# Explicit followup.
???.? threat to cut
....?
O.X.o
.*OX?
....?
-----
:8,-,followup(8)
???.?
....?
O.Xao
.*OX?
....?
-----
;!oplay_attack(*,?,a,a)
Pattern EB1607
X... attach to expand
..X.
O.*.
....
----
:8,OXe
Pattern EB1608
O..X. attach below
oO.*.
o....
-----
:8,OXe
Pattern EB1609
..x.. attach to connect
.....
O.X.O
..*..
.....
-----
:|,OXcad
..x..
.....
O.X.O
.a*b.
.....
-----
>antisuji(a);
>antisuji(b);
Pattern EB1610
# gf Reduced shape value. (3.5.2)
..x.. followup
.....
O*X.O
.XO..
.....
-----
:8,cad,shape(3)
Pattern EB1611
# gf Reduced shape value. (3.5.2)
..x.. followup
..*..
OOX.O
.XOX.
.....
-----
:8,cad,shape(3)
###################
# Strengthen stones
###################
Pattern EB1701
.*X? strengthen stone to prevent undermining hane
.OX.
....
....
----
:8,OXd
Pattern EB1702
.*.X jump up when kicked
.OX.
....
....
----
:8,OXd,shape(3)
Pattern EB1702b
# gf New pattern. (3.1.17)
...*.X jump up when kicked
...OX.
......
......
------
:8,OXa,reverse_followup(8)
Pattern EB1703
O.*X Strengthen stone on second line
..OX
....
----
:8,OXed
Pattern EB1704
?*.? Stand on third line
XO.?
...?
----
:8,nOXed
Pattern EB1705
??o? Stand to defend connection
O.*X
..OX
....
----
:8,OXed
Pattern EB1706
??X? Draw back to defend connection
O*.X
..OX
....
----
:8,OXed
Pattern EB1707
..?? stand after attachment
.*..
.OXX
....
....
----
:8,OXed
Pattern EB1708
# If we are strong we prefer to connect solidly
?.O? Defend after hanetsugi
*.OX
.OXX
----
:8,OXe
?.O?
*acX
bOXX
----
;xcut(a) || xplay_attack(a,b,c)
Pattern EB1709
X*.O? make eye and reach for center
xO.OX
..OXX
-----
:8,OXd
Pattern EB1710
# Sometimes better to hane. But under which constraints?
.....? contact instability
..X..?
..O*.?
.....?
.....?
------
:8,OXed
Pattern EB1711
# gf Shape bonus reduced. (3.1.12)
.O.X prevent slide
.*X.
....
....
----
:8,OXead,shape(1)
#############################
# Block intrusion from above
#############################
Pattern EB1801
..*.. connect
O...O
.....
-----
:8,Oe
..*..
O...O
.....
-----
;!omoyo(*)
Pattern EB1802
..X.. connect
O.*.O
.....
-----
:8,OXec
Pattern EB1803
o..Xx defend!
O.*..
....O
.....
.....
-----
:8,OXec
Pattern EB1804
??.?? defend!
O.*..
....O
.....
.....
-----
:8,Oec
??.??
O.*..
....O
.....
.....
-----
;!omoyo(*)
Pattern EB1805
??.?? defend!
O.*.O
.....
.....
.....
-----
:8,Oec
??.??
O.*.O
.....
.....
.....
-----
;!omoyo(*)
Pattern EB1806
?.X.?? block intrusion into wide extension
......
O.*..O
......
......
------
:8,OXec
Pattern EB1807
?XO don't accept position being split
O*.
...
...
---
:8,OXec
Pattern EB1808
# evand added shape value -0.5 (3.5.4)
??.?? defend!
O.*.O
.....
.....
-----
:8,OXec,shape(-0.5)
??.??
O.*.O
.....
.....
-----
;!omoyo(*)
Pattern EB1808a
??.?? defend!
O...O
..*..
.....
-----
:8,OXec
??.??
O...O
..*..
.....
-----
;!omoyo(*)
Pattern EB1809
..X.. secure fourth line territory
o.O*o
o....
.....
.....
-----
:8,OXe
..X..
o.O*o
o....
..a..
.....
-----
;safe_xmove(*) && oterri(a)
Pattern EB1810
?X? block below
OXO
.*.
...
---
:|,OXeC
?X?
bXa
.*.
...
---
;!oplay_break_through(*,a,*,b)
###########
# Draw back
###########
Pattern EB1901
?X?? draw back
XO.O
XO*.
?X?.
----
:8,OXe
Pattern EB1902
.O*. draw back if opponent plays below
XX..
....
----
:8,OXe
.O*.
XXa.
....
----
;!odefend_against(a,*)
Pattern EB1903
.... draw back
.*OX
..X.
....
----
:8,OXed
Pattern EB1904
..... draw back
..*OO
...XX
.....
-----
:8,OXe
Pattern EB1905
oo.O?? draw back
o.*OX?
o..X.X
------
:8,OXe
oo.c??
o.*cX?
o.aXbX
------
;xplay_attack_either(b,a,a,c)
>antisuji(a);
Pattern EB1906
O... draw back if clamp is impossible
.*O.
.XOX
..Xx
----
:8,OXe
Oab.
.*O.
.XOX
..Xx
----
;!xplay_attack(*,a,b,b)
###############
# Miscellaneous
###############
Pattern EB2001
X... space odyssey
.*X.
O.OX
o...
----
:8,OXed
Pattern EB2002
# gf Reduced shape value. (3.5.2)
?..... don't jump if the edge is open
.*....
......
O.....
......
......
......
------
:8,-,shape(-3)
Pattern EB2003
# With a sufficiently strong position directly to the right of the
# diagram, this may be a good move to build a moyo.
# gf Reduced shape value. (3.5.2)
?...... don't jump if the edge is open
.*.....
?......
?O.....
?......
?......
?......
-------
:8,-,shape(-3)
######################################################################
#
# Center block/expand patterns
#
# Moves that expand own position in the center in some way or stops
# opponent from expanding his position. This includes moves like
# block, bend, hane, and various extensions into empty space or
# opponent's area. This category contains very many patterns and may
# need to be split sooner or later.
#
######################################################################
#################################################
# safe jump out patterns, cannot (usually) be cut
#################################################
Pattern CB1
# gf Removed d classification (pattern too general). (3.3.13)
???????? jump into empty space
.......?
.O.O.*.?
.......?
????????
:-,OE,jump_out_helper
Pattern CB2
# gf Removed d classification (pattern too general). (3.3.13)
?????? jump into empty space
?....x
?.*.OO
?....x
??????
:8,OE,jump_out_helper
Pattern CB3
?.OO. extend
?....
?....
?.*..
?....
?????
:8,OEd,jump_out_helper
Pattern CB4
# gf Removed d classification (pattern too general). (3.3.13)
????? Jump out if starting to get surrounded
?...?
?.*.?
?...?
?.OO?
:8,Oe,jump_out_helper
Pattern CB5
# gf Removed d classification (pattern too general). (3.3.13)
????? jump out
?...O
?.*.O
??..?
?????
:8,Oe,jump_out_helper
Pattern CB6
# gf Removed d classification (pattern too general). (3.3.13)
?????? jump out
?...Oo
?.*..o
??..Oo
??????
:8,Oe,jump_out_helper
Pattern CB7
???.o? jump out
?....O
?.*..O
??...?
??????
:8,OEd,jump_out_helper
Pattern CB8
???.??? jump out
?....Oo
?.*...o
??...Oo
???????
:8,OEd,jump_out_helper
Pattern CB9
??O..O
?....O
?.*...
??.???
??????
:8,OEd,jump_out_helper
Pattern CB10
OoOo? jump out!
...??
....?
O.*.?
??.??
?????
:8,OEd,jump_out_helper
Pattern CB12
.... atari to break X connection
.*XO
X.O.
:8,OXeBad,shape(2)
..a.
.*XO
XbOc
; oplay_attack(*,a,b,c,c)
Pattern CB13
???? jump out to reduce and possibly expand
x..O
.*.O
x..o
????
:8,Oe,jump_out_helper
Pattern CB14
?o?? attach
...O
.*..
.X.O
...?
:8,OXEd,shape(2)
?o??
..bO
.*ac
.XdO
...?
; oplay_attack(*,a,b,c,a) || oplay_attack(*,a,d,b,a)
Pattern CB14a
?o?? followup
...O
.OX.
.X*O
...?
:8,OXed,shape(3)
?o??
..aO
.OX.
.X*O
...?
; oplay_attack(*,a,a)
Pattern CB14b
?o?? followup
..*O
.OX.
.X.O
...?
:8,OXed,shape(2)
?o??
..*O
.OXa
.X.O
...?
; oplay_attack(*,a,a)
Pattern CB15
.xO. prevent push in
xx*.
xXO.
xxXO
:8,Oed,shape(2)
.bO.
ac*.
xXO.
xxXO
; x_alive_somewhere(a,b,c)
######################################
# unsafe jump out patterns, can be cut
######################################
Pattern CB101
O.....? extend
?...*.?
?.....?
???????
:8,OE,shape(-1),jump_out_far_helper
Pattern CB103
O....? extend
?..*.?
?....?
??????
:8,OE,shape(-3),jump_out_far_helper
Pattern CB104
???O??? extend
??...??
??...??
??.*.??
??...??
???????
:|,OE,shape(-3),jump_out_far_helper
Pattern CB105
O...? extend
?.*.?
?...?
?????
:8,OE,jump_out_far_helper
Pattern CB105b
# gf New pattern, see 9x9:540. (3.7.8)
?O...? extend
?..*.?
?....?
??????
:8,OE
?O...?
?..*.?
?a...?
??????
;xarea(*) && oarea(a)
Pattern CB106
???O??? extend
??...??
??.*.??
??...??
???????
:|,OE,shape(2),jump_out_far_helper
########################
# Connect attacked keima
########################
Pattern CB207
# gf Merge with CB208. (3.1.23)
??x threaten connection
O*.
.XO
:8,nOXea,shape(2)
??x
O*.
.ba
;(lib(a)>1) && (!attack(b) || defend(b))
Pattern CB209
??O connect
O*.
.XO
:8,nOXe
??a
O*.
.Xb
;lib(a)>1 && lib(b)>1
Pattern CB210
??.? connect
O*.O
?XO?
:8,nOXea
??.?
O*.O
?Xa?
;lib(a)>1
Pattern CB217
?.O block
.*X
?OX
:8,OXecd
?.a
.*X
?OX
;lib(a)>1
Pattern CB217a
?.O block attacking
.*X
?OX
:8,a
?.O
.*A
?OA
; owl_threatens(*,A)
Pattern CB277
.*O connect or threaten to connect
OX?
:8,nOXed
.*O
aX?
;lib(a)>1
Pattern CB327
# gf Reduced shape value. (3.1.23)
# See nngs:1750
# ab increased shape value (3.1.29)
# gf Added constraint. (3.3.3)
?.? seal opponent in
...
.*O
OX?
:8,OXecd,shape(3)
?.?
...
.*O
OA?
;!attack(A) || !oplay_defend(*,A)
Pattern CB328
#ab Revised constraint (3.3.3)
# gf Reduced shape value. (3.5.2)
?.? seal opponent in and connect
...
.*O
OX?
:8,OXC,shape(3)
?.?
...
a*O
OB?
; oplay_attack_either(*,a,a,B) && (!attack(B) || does_attack(*,B))
######
# Hane
######
Pattern CB202
?o.? hane if attached
..*.
.OX.
....
..X.
:8,OXE
Pattern CB212
# constraint is complementary to CB213.
.X.O.? hane to defend
...X*.
:8,OXd
.X.Oa?
...B*.
;!oplay_attack_either(*,a,a,B)
Pattern CB213
.X.O.? extra value if X can't cut
...X*.
:8,OXed,shape(2)
.X.Oa?
...B*.
;oplay_attack_either(*,a,a,B)
Pattern CB216
OX.. connect if invaded
.*.O
...?
:8,OXecd
aX..
.*.b
...?
;lib(a)>=2 && lib(b)>=2
Pattern CB219
....O hane
..O..
.*X.X
.....
:8,OXE
Pattern CB220
# gf Added missing '-' placeholder for classification. (3.1.18)
*.
XO hane at head of two stones.
XO
..
:8,-,shape(2)
Pattern CB221
????O? hane
.XOO..
..XX*?
??..??
:8,OXe
Pattern CB223
ooo form eye to protect
O.O
.*X
:8,OXed
ooo
O.a
.*X
;lib(a)>1
Pattern CB231
?ooo form eye to protect
?O.*
o.OX
?o??
:8,OXed
Pattern CB232
?ooo form eye to protect
?O.*
o.OX
?OXX
:8,OXed,shape(1)
Pattern CB236
XX*. block! this can be life or death
?O.O
??O?
:8,OXed
Pattern CB240
.. block off area
.*
OX
:8,OXe
ab
.*
cD
;!xarea(a) && !xarea(b) && lib(c)>2 && lib(D)<3
Pattern CB241a
.. block off area
.*
OX
O?
:8,OXe
..
a*
OX
O?
;odefend_against(*,a)
Pattern CB241b
.. block off area
.*
OX
.x
:8,OXe
..
a*
OX
.x
; odefend_against(*,a)
Pattern CB244
?...? hane at the head of three stones
OXXX*
?OOO.
:8,OXe
Pattern CB245
# tm modified (3.1.18)
# see trevorb:750
?..?? hane at the head of two stones
OXX*?
?OO.?
:8,OXe
?..??
cXe*F
?bbAD
; lib(c)>1
; && !oplay_attack(*,b)
; && oplay_defend_both(*,A,*,b)
; && (oplay_attack(*,A,e) || !x_alive_somewhere(D,F))
Pattern CB247
?O.. hane
XO..
.X*.
....
:8,OXe
Pattern CB262
..o? hane is urgent
.*..
.XOO
..XO
:8,OXe
Pattern CB271
?OX.? hane is urgent
..OX.
?O.*.
??...
:8,OXe
Pattern CB275
?.X make shape
?..
O.O
X*.
?..
?.O
:8,OXecd
Pattern CB281
O.?? block!
O.??
X*.?
...?
Ooo?
:8,OXe
Pattern CB288
?... block and expand
..*.
OOX.
?X..
:8,OXe
Pattern CB296
Oooo block
.*.o
OX??
:8,OXe
Pattern CB297
# gf Added a classification. (3.5.3)
Oooo block in sente
.*.o
OX??
:8,OXea,followup(5)
Oooo
.*.o
OA??
;!attack(A) && oplay_attack(*,A)
Pattern CB298
O.Oo protect by drawing back
XO..
XX*O
:8,nOXed
Pattern CB307
X..? atari
OX*.
XO..
:8,-,followup(5)
X..?
aX*.
Xb..
; dead(a) && !dead(b)
Pattern CB309
?..XO hane, threatening atari
..XOo
..*.O
?...?
:8,OXed
Pattern CB310
?..? hane
.*X.
..O?
?Oo?
:8,OXed
Pattern CB313
?.O.. block!
X.X*.
.....
:8,OXE
Pattern CB323
O.? block
X*O
:8,OXe
Pattern CB329a
# db added (3.3.6)
?.?? atari
.*.?
OX.X
oOX?
:8,OXe,followup(5),shape(2)
Pattern CB335
# gf New pattern. (3.1.18)
x.O block
X*.
O.o
:8,OXe
Pattern CB339
# gf New pattern. (3.3.4)
?x?
x.O
.*X
:8,OXe
?x?
xaO
c*B
;xterri(c) && oplay_attack_either(*,a,a,B)
########
# Kosumi
########
Pattern CB205
..... kosumi to claim space
.....
.*...
O....
?X...
:8,OXe
Pattern CB225
# Move out diagonally instead
????? diagonal move to reduce
.....
.....
..*..
.O.X.
.....
:8,OXe
?????
.....
ab...
..*..
.O.X.
.....
;xarea(a) || xarea(b)
Pattern CB235
..X. extend and block
O...
.*..
?...
:8,OXe
Pattern CB251
..O? diagonal move
.*..
...X
...X
:8,OXe
Pattern CB256
..O diagonal extension if nothing better
.*.
..X
:8,OXe
Pattern CB257
X..O move out
..*.
...X
:8,OXea
Pattern CB260
.... Take opponent's vital point for moving out
O...
X.*.
X..O
:8,OXea
Pattern CB267
OXOX prevent sealing
XO..
X.*.
:8,Oed
Pattern CB289
..O. reinforce and block
.*.O
.X.?
:8,OXed
###############
# Miscellaneous
###############
Pattern CB203
..O. extend and peep
.OXX
.*..
..X.
:8,Xea,followup(20)
.ae.
.fXX
.*bc
..Xd
;(alive(e) || alive(f)) && oplay_attack(*,a,a) && !oplay_attack(*,?,b,c,d,d)
Pattern CB204
# Kosumi is better if GNU is going to go back and defend anyway.
..... knight's move to claim space
.....
..*..
O....
?X...
:8,OXE
e....
.....
cb*..
da...
?X...
;!xmoyo(e) && oplay_defend(*,a,b,c,d)
Pattern CB204b
# ab removed shape value (3.1.28)
..... knight's move to claim space
.....
..*..
O....
?X...
:8,OXEd
e....
.....
cb*..
Oa...
?X...
;!xmoyo(e) && oplay_attack(*,a,b,c,c)
Pattern CB206
..... block solid to claim space --
..... not so good if X (easily) can play double hane.
.....
O*...
?X...
:8,OXe
.....
.....
.dc..
O*a..
?Xb..
;!oplay_attack(*,a,b,b) || !oplay_attack(*,a,c,d,*)
Pattern CB214
O.X.. connect if invaded
..*.O
?...?
:8,OXecd
Pattern CB215
..X.. connect if invaded
O.*.O
o...?
:8,OXecd
Pattern CB218
?.? extend
.*.
.OX
OX?
OX?
:8,OXe
?.?
.*.
.OA
OX?
OX?
;!attack(A) || does_attack(*,A)
Pattern CB224
????? knight's move to claim space
.....
..*..
.....
.O.X.
.....
:8,OXE
?????
.....
ab*..
.....
.O.X.
.....
;!xarea(a) && !xarea(b)
Pattern CB226
????? one space jump to reduce
.....
.*...
.....
.O.X.
.....
:8,OXE
?????
.....
a*...
.....
.O.X.
.....
;xarea(a) || xarea(*)
Pattern CB227
# gf Reduced shape value. (3.5.2)
?OO. bend around
XX*.
....
:8,OXead,shape(3)
Pattern CB228
# gf Sometimes it's better shape to jump. See nngs:1180. (3.3.7 )
?XX. prevent bend
OO*.
....
:8,OXe,shape(3)
?AAb
OO*.
....
; !does_attack(b,A)
Pattern CB229
xXO extend after hane
XO.
.*.
...
:8,OXed,reverse_followup(5)
Pattern CB230
?.... knight's move with good shape
.*..O
...O.
??XXO
:8,OXed
Pattern CB233
..X. extend and block
O...
..*.
?...
:8,OXed
..X.
Obc.
da*.
e...
;omoyo(e) || (oplay_attack(*,a,b,c,a) && oplay_attack_either(*,b,a,d,b,d))
Pattern CB234
..X. extend and block
O...
O.*.
?...
:8,OXe
Pattern CB237
# tm Modified (3.1.23)
# gf Corrected constraint. (3.3.12)
??x? extend
O..X
..*.
?.o?
:8,OXe
??x?
a..X
..*.
?.o?
; !oplay_disconnect(*,*,a)
Pattern CB238
..? block off area
O*o
?X?
:8,OXe
Pattern CB239
# db added (3.3.3)
# see nngs1:50
# gf Revised to avoid bad shape. Constraint revised. (3.5.3)
..x connect to reinforce and attack
O*O
?X?
:8,Xeda
..x
a*b
?X?
; !same_dragon(a,b) && (alive(a) || alive(b))
Pattern CB241c
.. block off area
*.
OX
.O
:8,OXe
..
*.
OX
bO
;odefend_against(*,b)
Pattern CB242
?..? default if previous pattern is not feasible
?*.?
?OX?
:8,OXe
Pattern CB243
#evand new (3.5.4)
?oo? extend in center
...?
.*.?
?OX?
?ox?
:8,OXead
Pattern CB243b
# gf New pattern. (3.7.4)
# See gunnar:79.
?oo? block in center
...?
..*O
?OX?
?Ox?
:8,OXead
?oo?
...?
.a*O
?OX?
?Ox?
;oplay_attack(*,a,a)
Pattern CB246
.O.O.? block opponent
.....?
..X.*.
.....?
:8,OXed
Pattern CB248
?.XX? extend
.*OOX
....X
:8,OXed
Pattern CB250
??.O Here X has 3 liberties.
?O.?
.*X?
?..?
:8,OXed
??.O
?O.?
.*A?
?..?
;lib(A)==3
Pattern CB252
# gf Merged with CB253. (3.1.23)
... bend around
O*.
OX?
:8,OXe
Pattern CB254
# gf Revised classification and constraint. (3.1.14)
# db added shape value (3.1.28)
..O
o*X
..O
:-,Xead,shape(3)
..a
o*X
..b
;(alive(a) || alive(b)) && !oplay_attack(*,a) && !oplay_attack(*,b)
Pattern CB255
O.XO bend around
..*O
??x?
:8,OXe
Pattern CB258
# gf Added constraint. (3.3.13)
?????? jump! (But not down to second line)
?....?
oO.*.?
?....?
?X...?
:8,OXd
??????
?....?
oa.*.?
?....?
?X...?
;is_surrounded(a)
Pattern CB259
# gf Removed d classification (pattern too general). (3.3.13)
?.... jump!
oO.*.
?....
?X.X.
:8,OX
Pattern CB261
?O.? knight's move to block center
XO..
X...
X.*.
:8,OXea
Pattern CB263
?x.? jump abreast
.*.O
...O
?X??
:8,OXed
Pattern CB263b
# gf New pattern. (3.7.4)
# See gunnar:74.
?x.? jump and attach
...O
.*.O
OX??
:8,OXed
?x.?
...O
a*.O
OX??
;oplay_attack(*,a,a)
Pattern CB264
..O?? knight's move block
...X?
.O..?
...*.
???.?
:8,OXea
a.O??
...X?
.O..?
...*.
b??.?
;omoyo(a) && omoyo(b)
Pattern CB265
O.??? seal the opponent in
..X??
.*..?
....O
:8,OXea
Pattern CB266
....O build fence
..*.O
O..XO
:8,OXea
Pattern CB268
O.... sketch a connection
...*.
?....
??..O
:8,OEcd,jump_out_helper
a....
...*.
?....
??..b
;!attack(a) && lib(a)>2 && !attack(b) && lib(b)>2
Pattern CB269
O..? seal the opponent
..*.
?X..
??.O
:8,OXEa
Pattern CB270
O... attach to make shape
..*.
O.X?
OX??
X???
:8,OXed
Pattern CB272
# gf Not on the edge without more support, see 9x9:540. (3.7.8)
?..O. block jump
?....
?....
?.*.X
?....
?????
:8,OXEa
Pattern CB273
# See global:8, global:9
# tm modified (3.1.22)
??O? jump out
?XOo
X...
..*o
????
:8,OXe
??O?
?XOa
Xecd
..*b
????
; o_alive_somewhere(a,b)
; || oplay_attack(*,c,d,e,b,a)
; || oplay_attack(*,c,d,e,a,b)
Pattern CB274
?????? extend (urgent)
?..XX?
?.*OOX
?....?
:8,OXed
Pattern CB276
?...? knight's move expansion
O..*.
oO..?
?XX??
:8,OXe
Pattern CB278
OXO block opponent
.*.
?.?
:|,OXed
aXb
.*.
?.?
;lib(a)>1 && lib(b)>1
Pattern CB279
XOX push out
.*.
?.?
:|,OXe
aOb
.*.
?.?
;lib(a)>1 && lib(b)>1
Pattern CB280
?.? extend to defend
.*.
XO?
X.?
XO?
:8,OXe
Pattern CB282
.......? block opponent in center
X.X.*..?
.......?
:-,E
.......?
X.X.*..?
.......?
;!xmoyo(*)
Pattern CB283
..x? bend around
O*..
OX..
X..?
:8,OXe
Pattern CB284
.O.X.? make shape to enclose
....OO
..*...
......
:8,OXeca
Pattern CB285
..... vital point for both
..*..
O...O
?X.X?
:|,OXEc
Pattern CB286
..... vital point for both
..*..
X...X
?O.O?
:|,OXe
Pattern CB287
..O pattern to enclose
...
...
.*.
..X
O.?
:8,OXEca
Pattern CB290
?.... jump out
?.*.X
....?
.XOO?
?.XO?
:8,OXed
Pattern CB291
# gf Shape value removed. (3.1.9)
.OX?? extend
..OX?
..*.?
?..??
:8,OXed
.OX??
.aOX?
..*.?
?..??
; oplay_attack(*,a,a)
Pattern CB292
.O??? jump and block
..O??
....?
.*.X?
...??
:8,OXE
Pattern CB293
# db reduced shape value (3.1.8)
# gf Revised constraint. (3.3.12)
?O.. knight's move
?O..
X...
..*.
?x.?
:8,OXead,shape(3)
?a..
?a..
X...
..*.
?x.?
;!oplay_disconnect(*,*,a)
Pattern CB294
XOO?? push
.XO??
.X*..
.....
....?
:8,OXe
Pattern CB295
oOo? attach
...?
.*X.
...?
:8,OXE
Pattern CB299
OoO make good shape
Ox.
X*O
:8,OXe
Pattern CB300
... bend around
O*.
OXX
:8,OXe
Pattern CB301
X..
.*.
XO.
?O.
:8,OXead
Pattern CB302
..O. seal the opponent
....
.*..
..X.
O...
:8,OXEca
Pattern CB303
?.X? make shape - reverse sente
.*OX
?..?
?OO?
:8,OXe,followup(3)
?.A?
.*OX
?..?
?OO?
;!xplay_attack(*,A)
Pattern CB304
?X.. extend out
OO*.
?X..
:-,OXe
Pattern CB305
?OX.. extend out
o.O*.
?OX..
:-,OXe
Pattern CB306
?oX.. extend out
O.O*.
?OX..
:8,OXe
Pattern CB308
?.?? Push, threatening atari -- Don't play if block at a
...? doesn't leave a cut at b.
O*..
?X..
:8,OXe,followup(5)
?.??
...?
O*a.
?Ab.
;lib(A)==3 && !xdefend_against(a,b)
Pattern CB311
.... prevent escape
O*..
X...
?.O.
:8,OXeca
Pattern CB312
?.X. extend to defend
O.OX
..*.
????
:8,OXe
Pattern CB314
# tm modified (3.1.23)
# FIXED: See global:8 for unexpected match.
xX.. jump!
?...
O.*.
?o??
:8,OXe
xX..
?...
A.*.
?o??
; !oplay_disconnect(*,A,*)
Pattern CB315
??XO? connect three stones
..*.o
O..O?
?..??
:8,OXe
Pattern CB316
?OO make bamboo joint
X..
.*O
O.?
:8,OXe
?aa
X..
.*O
O.?
;lib(a)<4
Pattern CB317
xX.. urgent extension
XO*.
O..X
ooo?
:8,OXed
Pattern CB318
o.X break out
O*.
X..
:8,OXed
o.X
O*.
Cba
;!xmoyo(a) && !oplay_attack(b,C)
Pattern CB319
?.X? breakout
.*.O
?..O
?.XO
??.X
:8,OXed
Pattern CB320
X.O.? jump to move out and separate
....X
o.*.?
oo.o?
?????
:8,OXad
Pattern CB321
# gf No moyo building on the second line, see 9x9:540. (3.7.8)
???????
??....? block to build moyo
xxX.*.?
??....?
???????
:-,XE
???????
??....?
xxX.*.a
??....?
???????
;!xmoyo(*) && !xarea(a)
Pattern CB322
#FIXME: Pattern needs revision see nngs:860
??.ooo? block to attack
??....?
xxX.*.?
??....?
??.ooo?
:-,XE
??.ooo?
??....?
xxA.*.?
??....?
??.ooo?
;!xterri(*) && weak(A)
Pattern CB322a
# gf Corrected symmetry. (3.1.23)
??.ooo? block to attack
??.ooo?
??....?
xxX.*.?
??....?
??.ooo?
:8,XEa
??.bcd?
??.efg?
??....?
xxA.*.?
??....?
??.ooo?
;!xterri(*) && weak(A) && o_alive_somewhere(b,c,d,e,f,g)
Pattern CB324
xxX? block
O*..
...O
:8,OXe
Pattern CB325
*O block
.X
.X
:8,nOXe
Pattern CB326
# gf Reduced shape value. (3.5.2)
?.?? seal opponent in
....
O.*.
OXXO
:8,OXe,shape(3)
?.??
.bc.
Ba*d
BAAO
;lib(A)<=3 && lib(B)>=3 && oplay_attack(*,a,b,c,d,?,A)
Pattern CB330
# tm removed 'd' attribute (3.1.20) (see arend:3)
?.? push
...
X*X
?O?
:|,OXe,shape(3)
Pattern CB331
?.? push
...
X*X
o.O
:8,OXe
?.?
...
X*X
oaO
;oplay_attack(*,a,a)
Pattern CB332
?xX..O expand and block
?.....
?.*..O
?....o
:8,OXE
Pattern CB333
# db added (3.1.7)
# shape only --- other patterns matched give other attributes
?.? prevent X from pushing out
OXO
.*.
?.?
:8,OX,shape(3)
?a?
BXC
.*.
?.?
; !safe_omove(a) && lib(B)>1 && lib(C)>1
Pattern CB334
# db added (3.1.8)
...O magnificent shape
...O
.*OX
O.Xx
:8,OX,shape(2)
Pattern CB337
# db added (3.3.3)
# see nngs1:47
.X. Don't get sealed!
...
O*.
X..
:8,OXeda,shape(3)
Pattern CB338
# gf New pattern. (3.3.3)
# see e.g. trevorb:440
# The diagonal move is potentially very problematic since X often
# can play either b or c threatening to cut off *. If that move
# simultaneously threatens something more, we're in trouble. This
# pattern has a very conservative constraint, where it is required
# that neither b nor c is a threat against the connection.
xxx diagonal push
.*x
O.x
:/,OXe
def
c*g
abh
;(x_alive_somewhere(d,e,f,g,h) || xarea(f))
;&& !oplay_disconnect(*,b,*,a) && !oplay_disconnect(*,c,*,a)
Pattern CB338b
# gf New pattern. (3.3.16)
# Another safe variation of the diagonal move. See comment for CB338.
?xxx diagonal push
?.*x
OO.x
?oO?
:8,OXe
?def
?.*g
aach
?ib?
;(x_somewhere(d,e,f,g,h) || xarea(f))
;&& (same_string(a,b) || oplay_attack(*,c,?,i,i))
Pattern CB340
# db added (3.3.14)
# compare CB242
X... extend to prevent hane
..X.
O.O*
o...
:8,OXda,shape(3)
Pattern CB341
# db added (3.3.14)
# compare CB242
..X. extend to prevent hane and split
O.O*
o...
..X.
:8,OXda,shape(3)
Pattern CB342
# gf New pattern. (3.5.3)
?.X.? extend to prevent hane and split
O..*.
o....
oooOo
:8,OXe
Pattern CB343
# evand New pattern. (3.7.1)
# Is there a better way to do this than r_followup, followup, and terri?
# See gifu03:202.
xX..
..*.
....
..Oo
....
:8,OXe,reverse_followup(2),followup(1),terri(3)
xXde
..*.
....
..Oo
.abc
;omoyo(a) && omoyo(b) && omoyo(c) && xmoyo(d) && xmoyo(e)
Pattern CB344a
# evand New pattern. (3.7.1)
# see endgame:850
?X??
.*.o
O..O
?..?
:8,OXe
?X??
.*.o
O..O
?ab?
;omoyo(a) || omoyo(b)
Pattern CB344b
# evand New pattern. (3.7.1)
# see endgame:850
?X??
*..o
O..O
?..?
:8,OXe
?X??
*..o
O..O
?ab?
;omoyo(a) || omoyo(b)
Pattern CB344c
# evand New pattern. (3.7.1)
# see endgame:850
?X??
..*o
O..O
?..?
:8,OXe
?X??
..*o
O..O
?ab?
;omoyo(a) || omoyo(b)
######################################################################
#
# Edge defend/attack patterns
#
# Moves that threaten to capture, cut, or destroy eyes, and moves
# defending against this or preventing such moves. Also moves that
# actually do capture or destroy eyes are included here.
#
######################################################################
Pattern ED1
?XX? Avoid opponent's push between two stones on second line
.O*O
....
----
:8,OXad
Pattern ED2
.O.O.. capture 2 stones
......
O.X.*.
.OX...
......
------
:8,OXa
Pattern ED3
X.?? prevent severe attachment
..O.
O.*X
....
----
:8,OXd
Pattern ED4
???.?.x Block to defend
?XO.O.x
OO..*.x
.......
.......
-------
:8,OXd
???.?.x
?XO.O.a
OO..*.b
.......
.......
-------
;x_alive_somewhere(a,b)
Pattern ED6
?X? connect against peep (on edge)
O*O
?.?
---
:|,OXd
Pattern ED7
|??O? Make sente throw in to kill eye in corner
|XXOX
|.*X.
+----
:8,sOXa
|??a?
|XXaX
|.*X.
+----
;!oplay_attack(*,a)
Pattern ED8
XXXOX sente throw in to kill eye on the edge
X.*X.
-----
:8,sOXa
XXXaX
X.*X.
-----
;!oplay_attack(*,a)
Pattern ED9
??X? Prevent capture of 2 stones, or forcing sequence
OO*O
....
----
:8,OXd
Pattern ED10
??O? Capture 2 stones, or force opponent
XX*X
....
----
:8,OXa
Pattern ED11
xxxx???? if attached, cut!
.......?
.X.O..Oo
..*X...o
........
--------
:8,sOXBd,shape(3)
Pattern ED12
# bad to intercept in this case
..O.??? block!
.......
.X.O..O
...X*..
.......
-------
:8,OXed,shape(3)
..O.???
.......
.X.O..O
..aX*..
.......
-------
>antisuji(a);
Pattern ED13
# Add followup value if this is sente.
.O.??? block!
......
X.O..O
..X*..
......
------
:8,OX,followup(7)
.O.???
......
X.Ob.O
.aX*..
......
------
;oplay_attack(*,a,b,b)
Pattern ED14
?...Ooo block!
X.O...o
.*X..oo
.......
-------
:8,OXBd,shape(2)
Pattern ED15
??.? atari improves our group
.*XO
..OO
....
----
:8,OXd
Pattern ED16
oOX? Make atari to kill eye
OX.X
.*..
----
:8,OXa
Pattern ED17
??OOO enclose two stones
?OX..
oOX.*
o??..
-----
:8,OXa
Pattern ED18
?OOO? threatens capture
OXX*.
OX.X.
O....
-----
:8,OXa,followup(8)
?OOO?
bAA*.
bA.X.
b....
-----
;oplay_attack(*,A) && !oplay_attack(*,b)
Pattern ED19
?XXXO oki --- sacrifice helper because defend2 doesn't see the tesuji
OX..X
..*..
-----
:8,sOXa
?XXXO
cX.bX
.a*..
-----
;!oplay_attack(*,c) && !oplay_defend(*,a,b,a)
Pattern ED20
?O? force X to connect
X*X
...
---
:|,OXa
Pattern ED21
?OO. atari!
XOX*
.X..
----
:8,OXa
Pattern ED22
# gf Added b classification. (3.1.18)
# gf Split pattern and revised constraint. (3.3.3)
??*X sente endgame (maybe rather middle game) move
..XO
..X?
----
:8,OXed,followup(5)
??*X
..Ab
..A?
----
;oplay_attack(*,A) && !oplay_attack_either(*,*,b)
Pattern ED22b
# gf Added b classification. (3.1.18)
# gf Split pattern and revised constraint. (3.3.3)
??*. sente endgame (maybe rather middle game) move
..XO
..X?
----
:8,OXed,followup(5)
??*c
..Ab
..A?
----
;oplay_attack(*,A) && oplay_defend_both(*,c,*,b)
Pattern ED23
# gf Added b classification. (3.1.18)
??*O sente endgame (maybe rather middle game) move
..X?
..X?
----
:8,OXed,followup(5)
??*O
..A?
..A?
----
;oplay_attack(*,A)
Pattern ED24
??*O sente endgame (maybe rather middle game) move
..XX
..xx
----
:8,OXd,followup(7)
??*O
..AA
..xx
----
;oplay_attack(*,A)
Pattern ED25
X.OX Avoid peep.
.*.O
....
----
:8,OXd
X.OA
.*.O
....
----
;!attack(A)
Pattern ED26
oOOo?? Capture some stones
OX.*.?
OX....
?X....
------
:8,OXa
Pattern ED27
oOO*. Punish X's weak shape
OXOX.
.XX..
-----
:8,OXad
Pattern ED28
?XO..
?XO..
..*.X
..X..
.....
-----
:8,OXea
Pattern ED29
OXO Sacrifice a second stone tesuji
XOX
.*.
---
:|,sa
aAb
BOC
.*.
---
;lib(A)<=2 && lib(B)>1 && lib(C)>1
;&& !oplay_attack(*,a) && !oplay_attack(*,b)
;&& oplay_attack(*,A) && oplay_attack(*,B) && oplay_attack(*,C)
Pattern ED30
|.o?? hane is big, often urgent
|.*X?
|..OO
|....
+----
:8,OXd
Pattern ED31
xxX.o extend to defend
..O*.
O....
.....
-----
:8,OXead
Pattern ED31b
x.xXx extend to defend
O.*O.
.....
.....
-----
:8,OXed
Pattern ED31c
x.X*.. hane
o.O..O
o.....
......
------
:8,OXed
Pattern ED32
X.X.. useful kikashi
OX.*.
.....
.....
-----
:8,-,followup(10)
X.X..
aX.*.
.....
.....
-----
;lib(a)>2
Pattern ED33
|xXx??? slide to live
|.OXX??
|.OO..x
|....*.
|......
+------
:8,OXd
Pattern ED34
|xXx??? hane to live
|.OXX??
|.OOX.x
|...*..
|......
+------
:8,OXd
Pattern ED35
|..XX?? hane to live
|.OOX.x
|...*..
|......
+------
:8,OXd
Pattern ED36
# this can be aji keshi because 1 point above is also sente
?XXOo atari on edge
?..XO
.X.*.
-----
:8,OXa
Pattern ED37
# This should not need be a sacrifice pattern, and the constraint
# on the O stones should be superfluous, if only the tactical reading
# could understand a double snapback.
O???O double snapback
X.X.X
X.*.X
-----
:8,sX
c???d
A.X.B
A.*.B
-----
;lib(A)==2 && lib(B)==2 && lib(c)>1 && lib(d)>1
>test_attack_either_move(A,B);
Pattern ED38
XXOXX swallow either side
..X*.
.....
-----
:8,s
DDOCC
.aX*.
..b..
-----
;oplay_attack(*,b,C) && oplay_attack(a,b,D)
>test_attack_either_move(C,D);
Pattern ED39
# This is almost always a good idea.
?XXO decrease eye space in sente (unless it kills)
X.*X
----
# helper sets followup value
:8,sXa,throw_in_atari_helper
?bba
Xc*A
----
;lib(A)==2 && lib(a)>1 && !alive(b) && proper_eye(c)
Pattern ED40
OXO decrease eye space in sente (unless it kills)
X*X
X.X
---
# helper sets followup value
:8,sXa,throw_in_atari_helper
aAb
X*X
X.X
---
;lib(A)==2 && lib(a)>1 && lib(b)>1
Pattern ED41
|XXO decrease eye space in sente (unless it kills)
|.*X
+---
# helper sets followup value
:8,sXa,throw_in_atari_helper
|XXa
|.*A
+---
;lib(A)==2 && lib(a)>1
Pattern ED42
?XX... jump out
OO.*..
......
......
------
:8,OXead
?XX.g.
HHA*..
.EbCd.
...f..
------
; lib(H)>4 || !oplay_defend(*,A,b,C,d,E,f,E)
>antisuji(g);
Pattern ED43
# gf Reduced shape value. (3.5.2)
?OO..o push through and cut!
XX*X.o
.....o
.....?
------
:8,OXad,shape(3)
?OO..o
AA*B.o
.fcdeo
...g.?
------
; oplay_attack(*,c,d,f,B) && oplay_attack(*,c,d,e,f,g,A)
Pattern ED44
# gf Reduced shape value. (3.5.2)
O.... capture one stone
O..*.
O.X.O
.....
.....
-----
:8,OXecad,shape(3)
Pattern ED45
# gf Fixed value removed. (3.5.2)
?XX... defense is urgent
OO.O*.
?.....
?.....
------
:8,OXead
?XX...
OOaO*.
?cbd..
?.....
------
; xplay_defend(a,b,c,d,c)
Pattern ED46
# gf Removed fixed value. (3.5.2)
?X... jump to take territory on 4-th line
.....
O.*..
.....
.....
.....
-----
:8,OXead
Pattern ED47
# gf Reduced shape value. (3.5.2)
X.O...x
xXO.*.x
?XXO...
.......
-------
:8,OXed,shape(3)
Pattern ED48
# gf Reduced shape value. (3.5.2)
?... break ponnuki, threaten to cut
?.*O
.XOX
?.X.
?...
----
:8,OXead,shape(3)
?...
?.*O
.XOA
?.X.
?...
----
; lib(A)==2
Pattern ED49
# gf Reduced shape value. (3.5.2)
??..? push to stabilize O
?.X..
..*O.
.....
.....
-----
:8,OXead,shape(3)
Pattern ED49b
oo....? push to stabilize O and (probably) make territory
oo..X..
oo..*O.
.......
.......
-------
:8,OXJ
oo....?
bc..X..
de..*a.
.......
.......
-------
;weak(a) && o_alive_somewhere(b,c,d,e)
Pattern ED50
# gf Removed fixed value. (3.5.2)
..... don't get sealed in!
..*Xx
X.O..
....O
.....
.....
-----
:8,OeBad
Pattern ED51
# gf Reduced shape value. (3.5.2)
......... block to build influence
o.....*Xx
oo....O..
oo......O
.........
.........
---------
:8,OXead,shape(3)
Pattern ED52
# gf Removed fixed value. (3.5.2)
?..... attach in sente
......
..X.X.
..*..O
...O..
......
......
------
:8,OXad
Pattern ED53
# gf Removed fixed value, added B classification. (3.5.2)
?OO... push through and cut
XX*X..
?.....
?.....
------
:8,OXBead
?OO...
EE*D..
?bac..
?.....
------
; oplay_attack(*,a,b,c,E) && oplay_attack(*,a,c,D)
Pattern ED54
# gf Removed fixed value. (3.5.2)
?OO... cut
XXOX..
.*X...
?.....
------
:8,sOXBad
?OO...
AAOB..
.*Xd..
?.....
------
; oplay_attack(*,d,A) && oplay_attack(d,B)
Pattern ED55
# gf Removed fixed value. (3.5.2)
?OO... cut
XXOX..
XOX*..
?.....
------
:8,Bad
?OO...
XXOB..
XOX*..
?a....
------
; oplay_attack(*,a,B)
Pattern ED56
# tm modified (3.1.20) (nngs:1170)
...X.? extend to defend if attached
O..O*.
......
......
------
:8,OXCad,shape(3)
Pattern ED57
# gf Reduced shape value. (3.5.2)
OOXX?? push to defend
.XOX..
..O*..
......
------
:8,-,shape(3)
OOXX??
.AOX..
..O*..
......
------
; does_attack(*,A)
Pattern ED58
# gf Removed fixed value and revised constraint. (3.5.2)
??X?? connect to defend everything
?OXO?
.*OX.
.....
-----
:8,BCad
??G??
?cGO?
.*OAd
..bef
-----
; alive(G) && !oplay_defend(*,A) && xplay_attack(*,b,c)
> antisuji(b);
> antisuji(d);
> antisuji(e);
> antisuji(f);
Pattern ED59
??X?? capture to defend everything
?OXO?
..OX*
.....
-----
:8,Xad
??X??
?OXA?
caOX*
deb..
-----
; (lib(A)>1) && !oplay_defend(*,a,b,a) && oplay_attack(a,A)
> antisuji(a);
> antisuji(c);
> antisuji(d);
> antisuji(e);
Pattern ED61
??.?? follow up ED59
?.O.?
.OXOX
..X*.
.....
-----
:8,J
Pattern ED62
# gf Reduced shape value. (3.5.2)
....? if double hane is not reasonable, extend
OO..?
XXO*.
..X..
.....
-----
:8,OXead,shape(3)
....?
OOb.?
FFO*.
.dXac
...e.
-----
; !oplay_attack(a,*,b,c,d,e,F)
Pattern ED63
oOXx capture one stone---don't descend!
OXOX
.*..
----
:8,ad,shape(2)
oOXx
OXOX
.*a.
----
> antisuji(a);
Pattern ED64
..... connect solidly
.O*..
XXO..
.....
.....
-----
:8,OXead,shape(2)
..a..
.O*..
XXO..
.....
.....
-----
> antisuji(a);
Pattern ED65
# gf Removed fixed value. (3.5.2)
?o..? pull back to stabilize
?O..?
XXO*.
?xX..
xxx..
-----
:8,OXad
Pattern ED68
# tm Modified (3.1.20) (see nngs:1130)
?O*Xx reinforce
o..OO
.....
.....
-----
:8,OXed
?O*Xx
o.aOO
.....
.....
-----
; xplay_defend(a,*,a)
Pattern ED69
O..x connect under
.*.X
...O
....
----
:8,Cad,shape(3)
O..x
.*cA
..bO
....
----
; !attack(A) && !oplay_defend(*,b,c,b)
Pattern ED70
# Threaten to capture some stones.
O*X
OX.
:8,OXe,followup(6)
O*C
OBa
;xterri(a) && !attack(B) && !attack(C) && !oplay_attack(*,?,a,a)
;&& !oplay_defend_both(*,?,a,B,C)
Pattern ED71
O*.X capture correctly
OXOX
....
----
:8,Cad,shape(1)
O*.X
OXOX
..a.
----
>antisuji(a)
Pattern ED72
?OXO?
..O*X
.....
-----
:8,Xd,shape(3)
?OXB?
.aO*X
.....
-----
;xplay_attack(*,a,B)
Pattern ED73
?OXO??
..O.X*
......
------
:8,-,shape(-3)
?OXO??
..OaB*
......
------
; !oplay_attack(*,a,B)
Pattern ED74
O*. connect solid if descent is impossible
XOX
...
---
:8,d,shape(3)
O*.
AOX
.a.
---
; !attack(A) && !oplay_attack(a,*,*)
Pattern ED75
O.. don't descend if X can cut
XOX
.*.
---
:8,-,shape(-3)
Oa.
XOX
.*.
---
; !oplay_attack(*,a,a)
Pattern ED76
# gf The negative shape value is a temporary measure to avoid
# overvaluation. (3.1.17)
# tm Added right hand side check (3.1.20) (see strategy4:195)
# db removed 'a' classification and reduced negative shape.
oOo??? stop expansion and undermine
o..X??
o.*.x?
....??
------
:8,OXe,shape(-2)
oOo???
obaX?g
oc*.xf
....??
------
;oplay_attack_either(*,a,b,c,a,c)
;&& !oarea(f) && !oarea(g)
Pattern ED77
# gf Reduced shape value. (3.5.2)
?XX? defend cut
O*O.
....
....
----
:8,OXead,shape(3)
?XX?
O*Oc
.ab.
....
----
;xplay_attack_either(*,a,b,c,a,c)
Pattern ED78
# gf Reduced shape value. (3.5.2)
?OO? push through and cut
X*X.
....
....
----
:8,OXead,shape(3)
?OO?
X*Xc
.ab.
....
----
;oplay_attack_either(*,a,b,c,a,c)
Pattern ED79
# avoid does_defend since some levels GNU may not see attack on B
?OXX avoid a stupid defense
..OX
..*O
----
:8,X,shape(-2)
?OXX
.aOX
..*B
----
; does_attack(a,B) && !xplay_attack(a,B)
Pattern ED80
# descending at 'a' is almost always bad
?x?? defend correctly
x.Oo
XOX*
....
----
:8,d
?x??
x.Oo
XOX*
.a..
----
> antisuji(a);
Pattern ED81
.?.??? give up one stone
...O..
...*XX
....OX
......
------
:8,-
.?.???
..cO..
.db*XX
...aOX
......
------
; oplay_defend(a,*,b,c,d,c)
>antisuji(a);
Pattern ED82
# gf Reduced shape value. (3.5.2)
|..... atari is usually a better way to use the dead stone
|..*..
|.....
|..XOO
|..OX?
:8,-,shape(-3)
|.....
|..*..
|.....
|..XOO
|..aX?
; dead(a)
Pattern ED83
|xXX?
|XOOX
|.*.x
|..O?
:8,ed,shape(2)
|xXX?
|XOOX
|a*.x
|..O?
> antisuji(a)
Pattern ED84
# db added (3.1.7)
# gf Changed antisuji action to replace action. (3.1.14)
|xXXx fall back to defend territory
|XOOX
|..OX
|.*.O
|...o
:8,OXd,shape(2)
|xXXx
|XOOX
|a.OX
|.*.O
|...o
>replace(a,*)
Pattern ED85
# gf New pattern. (3.1.14)
|...... attach at 3-3 to defend
|..X.O.
|..*...
|......
|......
+------
:8,Xd
Pattern ED86
# gf New pattern. (3.1.14)
# This is not redundant in the presence of ED85, since it also infers
# a strategical defense of the stone on the fifth line. If the two O
# stones are not amalgamated, this makes a difference.
|..x.O.
|...... attach at 3-3 to defend
|..X.O.
|..*...
|......
|......
+------
:8,Xd
Pattern ED87
# db New pattern (3.1.28)
ooOo? Don't leave aji
...*X
...OX
.....
-----
:8,-,shape(2)
ooOo?
...*X
...OX
..ba.
-----
>replace(a,*);
>replace(b,*);
Pattern ED87a
# db New pattern (3.1.28)
ooOX? Don't leave aji
..*.X
...OX
.....
-----
:8,-,shape(2)
ooOX?
..*.X
...OX
..ba.
-----
>replace(a,*);
>replace(b,*);
Pattern ED88
# db New pattern (3.1.28)
# gf Corrected the replace action. (3.1.30)
??...X? take territory on the fourth line
oo..*OX
oo....O
......o
.......
-------
:8,-,shape(2)
??...X?
oo..*OX
oo..b.a
......o
.......
-------
; lib(a)>2
> replace(b,*)
Pattern ED89
# db New pattern (3.1.28)
# It is difficult to give an exact criterion for when it is good to
# fight this ko. But it is bad to lose it, may even threaten the
# life of the O dragon. See nngs1:11
??XxOo? Don't fight an unfavorable ko!
..XO.Oo
.XO*O.?
-------
:8,-
??XxOo?
.aXO.bo
.XO*O.?
-------
; alive(b)
> replace(a,*)
Pattern ED90
# db New pattern (3.1.28)
# ab d classification added (3.1.29)
???..o? Jump under on the third line
???X.oo
?O..*.o
?O....o
o......
-------
:8,dj
???..o?
???X.oo
?hfa*.o
?hcbd.o
o.e....
-------
; oplay_attack(*,a,b,c,d,e,e) && !oplay_attack(*,a,b,c,d,f,e,h)
> replace(b,*)
Pattern ED91
# db New pattern (3.1.28)
# gf Changed to connection pattern. (3.7.2)
??XXoo Extend after the push
O..O*.
O....o
......
------
:8,C
??XXoo
a..O*.
a....o
......
------
;!oplay_disconnect(*,*,a)
Pattern ED92
# db New pattern (3.1.30)
# See nngs1:18, where * is found as an owl defense
oOXx?? don't do this!
..OXx?
...*.x
.....?
------
:8,-,shape(-3)
oOXx??
..OAx?
...*.x
.....?
------
; lib(A)>2
Pattern ED93
# db new pattern (3.3.6)
# see century2002:120
# ab Added e classification (3.3.20)
.....X? don't make the wrong atari
..X...?
...*XO?
....Ooo
.......
-------
:8,edO
.....X?
..X.a.?
...*XO?
....Ooo
.......
-------
> replace(a,*)
Pattern ED94
# gf New pattern. (3.3.13)
oo.O? Significant improvement of eyespace.
.*.OX Often sufficient for local life.
..OXX
-----
:8,dX
oo.O?
.*aOB
..OBB
-----
;!attack(B) && safe_xmove(a)
Pattern ED95
# gf New pattern. (3.3.14)
# gf Added constraint. (3.3.17)
...xx
.O.Xx fourth line sente kosumi
..*..
.....
.....
-----
:8,OXea
...xx
.a.Xx
..*..
.....
.....
-----
;!weak(a)
Pattern ED96
# ab New pattern (3.3.20)
# See arend2:120
?....
O*.X.
..OX.
.....
-----
:8,OXe
?....
f*.X.
hgeXd
..cab
-----
;!oplay_connect(a,b,c,d,?,g,?,h,e,f)
> replace(a,*)
Pattern ED97
# gf New pattern. (3.5.3)
# See gifu03:401
........
x..O.*.X
x.......
........
........
--------
:8,OXeda
........
c..a.*.B
d.......
........
........
--------
;weak(a) && weak(B) && x_somewhere(c,d)
Pattern ED98
# evand new Pattern (3.5.4)
.....
O.*.x
O...x
.....
.....
-----
:8,OXed
.....
A.*.b
A...c
.....
.....
-----
;x_alive_somewhere(b,c) && weak(A)
Pattern ED99a
# pp New pattern (3.5.8)
|..X.? stabilize the corner in double sente
|..XO.
|.XO.O
|.*...
+-----
:8,OXd,reverse_followup(3)
|..X.?
|..XA.
|.XO.O
|.*...
+-----
; weak(A)
Pattern ED100
# gf New pattern. (3.7.8)
..... cut through to weaken
X.O..
.XOX.
..*..
.....
-----
:8,OXae
Pattern ED101
# gf New pattern. (3.7.9)
|oo?
|.O?
|.*X
+---
:8,Xd
|oo?
|.a?
|.*X
+---
;weak(a)
#####################################################################
#
# Center defend/attack patterns
#
# Moves that threaten to capture, cut, or destroy eyes, and moves
# defending against this or preventing such moves. Also moves that
# actually do capture or destroy eyes are included here.
#
######################################################################
Pattern CD1
?xx? protect by drawing back
XO*.
XX.O
:8,nOXd
Pattern CD3
??? Usually better to atari on this side.
.*.
.XO
XO?
:8,X,followup(5)
???
.*.
.Xa
XO?
;!oplay_attack(*,a)
Pattern CD7
?X? attack eye
X.X
.*.
:|,Xa
?X?
A.B
.*.
;weak(A) || weak(B) || !xterri(*)
Pattern CD28
xXO? urgent to attack and defend
XOX.
.O*.
....
.X.?
:8,ad
Pattern CD31
?.X? vital point
.*.X
X.X?
?X??
:8,Xa
Pattern CD39
?Oo? vital point
OX.X
OX?*
?O..
?..?
:8,OXa
Pattern CD40
?X?? trap
.*..
OX..
?XO.
:8,X
?D??
.*b.
cEa.
?EO.
;lib(E)==2 && !oplay_attack(*,c) && !oplay_defend_both(*,a,b,E,D)
>test_attack_either_move(D,E);
# Pattern CD41
# # gf Too general, removed. See gunnar:87. (3.7.10)
#
# ?o? don't double atari if it backfires
# ?..
# .OX
# OX*
# ?.?
#
# :8,-
#
# ?o?
# ?.b
# ceX
# dX*
# ?a?
#
# ;!oplay_defend_both(*,a,b,c,d,e)
#
# >antisuji(*);
Pattern CD43
.X.X kosumi tesuji
.*.X
X.O?
:8,OXa
.X.B
a*.B
X.O?
;!attack(B) && oplay_attack(*,a,B)
Pattern CD48
?xX?? prevent trouble
..X.O
O.O*.
.....
.....
:8,OXed
Pattern CD49
?Xx?? prevent trouble
..X.O
O.O*.
.....
.....
:8,OXed
Pattern CD55
?... Double peep
X.X.
o*..
OoX?
:/,OXa
Pattern CD56
.... Double peep
X.X.
.*..
O.X.
:8,OXad
gf..
ibX.
.*cd
O.he
;oplay_attack(*,b,c,d,e,d) && oplay_attack(*,b,c,d,e,h)
;&& oplay_attack(*,c,b,f,g,f) && oplay_attack(*,c,b,f,g,i)
Pattern CD64
# Converse to ED68
?XXO decrease eye space in sente (unless it kills)
X.*X
?XXO
# helper sets followup value
:8,sXa,throw_in_atari_helper
?XXa
Xc*A
?XXb
;lib(A)==2 && lib(a)>1 && lib(b)>1 && proper_eye(c)
Pattern CD67
# Sometimes the cap or another move in the area kills.
# Always advisable to move out.
??X? avoid cap
?O..
X.*.
?...
:\,OXd
??X?
?a..
X.*.
?...
;lib(a)==3
Pattern CD76
XOo atari (not aji keshi)
OX*
?.o
:8,X
Xao
bX*
?.o
;attack(b) && !defend(b) && !oplay_attack(*,a)
# Estimate a followup value
>threaten_to_save(b);
Pattern CD77
?oo atari (not aji keshi)
X*o
OXO
?.o
:8,X
?oo
X*o
aXb
?.o
;attack(a) && !defend(a) && !dead(b)
# Estimate a followup value
>threaten_to_save(a);
Pattern CD79
# even if X can't cut, this prevents getting sealed
# this pattern works on second or third line also
?OXX. tiger's mouth
..O..
.*...
.....
..X..
:8,OXed
Pattern CD82
# Hard to value accurately. Wild guess that it may be worth 20 points.
# gf Inappropriate when scoring, disabled in that case. (3.7.2)
?xxxx capture ladder to eliminate aji
?xxxx
O*.xx
OXO.?
?O???
:8,O,value(20)
?xxxx
?xxxx
O*.xx
aCb.?
?O???
;!doing_scoring && (!same_dragon(a,b) || potential_cutstone(C))
Pattern CD83
?OOX? tesuji to break out
X..X?
?*...
??..?
:8,OXed
?AOX?
Xabf?
?*cd.
??e.?
;(lib(A)>1) && oplay_attack(*,a,b,c,d,e,f)
Pattern CD87
# gf Reduced shape value. (3.5.2)
.XO create cutting points
.*.
.XO
:-,OXad,shape(3)
cXO
a*b
dXO
# The second move by X at a is intentional and has the effect of X passing.
;oplay_attack(*,b,b)
;&& !oplay_attack(*,a,b,a,c,c) && !oplay_attack(*,a,b,a,d,d)
Pattern CD88
#tm removed shape bonus (3.1.22) (see nngs:700)
X*.. attack 1 stone to defend and probably connect
O..O
:8,OXcad
a*..
O..O
; does_attack(*,a)
Pattern CD89
# gf Reduced shape value. (3.5.2)
?OXoo prevent ponnuki
.XO*o
?.Xoo
:8,OXead,shape(3)
?OAoo
.XO*o
?.Xoo
;lib(A)>1 || !oplay_defend(*,A)
Pattern CD90
# gf Reduced shape value. (3.5.2)
OXx extending usually better than capturing, but not at edge
XOX
?*.
???
:8,OXead,shape(3)
bXx
AOX
?*.
???
; lib(A)==1 && lib(b)>1 && does_attack(*,A)
Pattern CD91
# gf Revised constraint. (3.3.18)
# gf Reduced shape value. (3.5.2)
?XO. atari to prevent opponent's expansion
OOX.
..*.
:8,XEd,shape(3)
?Xa.
bbX.
..*.
; alive(b) && attack(a) && !defend(a)
Pattern CD92
# tm Modified (3.1.20) - added constraint
.X. ponnuki is worth thirty points
XO*
.XO
:8,ad,shape(3)
.X.
XO*
.aO
; !attack(a)
Pattern CD92a
# db added X class (3.3.5)
.O. ponnuki is worth thirty points
OX*
.Ox
:8,OXead,shape(1)
Pattern CD92b
.O. ponnuki, preventing threat to cut
OX*
.OX
:8,Oead,shape(3),reverse_followup(8)
aO.
OX*
.OX
; !xplay_attack_either(*,?,a,*,a)
Pattern CD93
# gf Removed fixed value and reduced shape. (3.5.2)
?OX. break through one way or the other
?*..
X.X.
...O
:8,XBad,shape(3)
?OF.
?*be
DcE.
.d.O
; oplay_break_through(*,b,c,d,D,d,E) && oplay_break_through(*,c,b,e,F,e,E)
Pattern CD94
# gf Split and revised. (3.3.14)
# gf Reduced shape value. (3.5.2)
???????? jump out
????????
........
..*.....
X...????
x.O..???
:8,OXEad,shape(3)
????????
????????
........
..*.....
X...abcd
x.O..???
; x_alive_somewhere(a,b,c,d)
Pattern CD94b
# gf Split and revised. (3.3.14)
# gf Reduced shape value. (3.5.2)
???????? jump out
????????
........
..*.....
X...????
O.O..???
:8,OXEad,shape(3)
????????
????????
........
..*.....
Xe..abcd
f.O..???
; x_alive_somewhere(a,b,c,d) && oplay_connect(*,e,*,f)
Pattern CD95
# One point to the left is sometimes better
oO.. seal the opponent
....
X.*.
....
oO..
:-,OXEad,shape(2)
Pattern CD96
.O? hane, threatening capture
...
X*.
O.X
:8,OXad,shape(3)
.O?
...
B*.
OaX
; oplay_attack(*,a,B)
Pattern CD99
# gf Revised constraint. (3.1.14)
# gf Added !doing_scoring since this can generate a losing ko threat.
# We might want to take it out entirely. (3.3.17)
OX if a cutting stone can't be caught,
X* play in opponent's territory
:8,OX,followup_value(3)
OA
B*
;!doing_scoring && !attack(A) && !attack(B) && xterri(*)
# FIXME: The two following patterns may be superfluous due to the
# atari_atari code.
Pattern CD102
*X? don't help the opponent cut
O.O
...
:8,OX,shape(-3)
*X?
OaO
cb.
; xplay_attack(a,b,c,c) && !oplay_attack(*,a,b,c,c)
Pattern CD104a
# gf Revised constraint.
# gf Split pattern. We can't have eE classification unless b is alive. (3.1.32)
... atari using dead stone
.*.
OX.
XO?
:8,Ed
...
.*.
bX.
XA?
;lib(b)>1 && alive(b) && attack(A) && !defend(A)
Pattern CD104b
# gf Revised constraint.
# gf Split pattern. We can't have eE classification unless b is alive. (3.1.32)
... atari using dead stone
.*.
OX.
XO?
:8,d,shape(3)
...
.*.
bX.
XA?
;lib(b)>1 && attack(A) && !defend(A)
Pattern CD105
?.X? eliminate aji and danger of misreading!
O.*O
x...
xxxx
:8,Ot
?.A?
O.*b
x...
xxxx
; dead(A) && effective_size(A)>8 && lib(b)<=4
Pattern CD107
# db added (3.1.8)
# gf Added O classification. (3.1.12)
# evand modified (3.5.4)
?x.??
xX..? good shape keima
..*.?
O...?
:8,OXead
?x.??
xX..?
.a*.?
Abc.?
; !dead(A) && oplay_attack(*,a,b,c,c)
Pattern CD108
# db added (3.1.8)
# Exception to CD107
?xX.. bad shape keima
O..*.
XO...
:8,-,shape(-3)
Pattern CD109
# gf New pattern. (3.3.18)
.OX defend cut to attack
.*O
.OX
:-,Xa,shape(2)
.cX
.*a
.bX
;lib(a)==1 && (alive(b) || alive(c))
;&& (xplay_attack(*,b) || xplay_attack(*,c))
######################################################################
#
# Edge joseki patterns.
#
# Standard invasions of wide extensions, sequences following
# attachment under edge stones, and other standard patterns
# often warranting a j or J classification.
#
######################################################################
Pattern EJ1
?.... sacrifice cut
oO*X.
o.XO.
.....
-----
:8,sEdJ
Pattern EJ2
?.... hane if attached under fourth line stone
x.O..
?.X*.
?....
?....
-----
:8,OedJ
Pattern EJ2b
..... create cutting points while strengthening own stones
.O.O.
.X*X.
.....
.....
-----
:8,edJ
Pattern EJ3
?...? block on top if 2 space extension is invaded
..*..
O.XO.
.....
.....
-----
:8,EadJ
Pattern EJ4
#tm modified (3.1.18)
# added ? column.
...*.? continuation -- never play 'a' here
.OOX.o
..XOX?
.....?
------
:8,Edj
...*.?
.OOX.o
.aXOX?
.....?
------
>antisuji(a);
Pattern EJ6
...O.? continuation
.OOX*.
..X.X.
...X.?
------
:8,Eaj
Pattern EJ7
?????...?
........?
.O..O.X.o
......*..
.........
---------
:8,ed
?????...?
........?
.O..O.A.o
......*..
.........
---------
;!weak(A)
Pattern EJ7b
#gf New pattern. (3.1.12)
?????...?
........?
.O..O.X.o
.....*OX.
.........
---------
:8,ed
Pattern EJ8
??X..... extend from tsukenobi
X.XO....
XOO...*.
........
........
--------
:8,ed
Pattern EJ9
..*.? tsukenobi shape
O.OX?
..X.x
....?
....?
-----
:8,Ed
Pattern EJ12
# Invade if we have two ladders on our side.
ooooo invade
.oooo
...oo
X....
..*.X
.....
.....
-----
:8,I
ooooo
.oooo
.e.oo
IcB..
gD*FX
..H..
.....
-----
;oplay_attack(*,B,c,D,e,B) && oplay_attack(*,B,c,D,e,F,g,H,I);
Pattern EJ13
..... invade
.....
.....
X.*.X
.....
.....
-----
:8,I
.....
..a..
.....
X.*.X
.....
.....
-----
;!xmoyo(a)
Pattern EJ13b
# gf New pattern. (3.3.13)
o...... invade
o......
O.X.*.X
o......
o......
-------
:8,Ia
o......
o......
a.X.*.X
o......
o......
-------
;!weak(a)
Pattern EJ14
...... invade
......
......
X.*..X
......
......
------
:8,I
......
..a...
......
X.*..X
......
......
------
;!xmoyo(a)
Pattern EJ15
??....? cap stone on third line
..*....
.......
..X..O.
.......
.......
-------
:8,Ea
??....?
..*....
.......
a.X..O.
.......
.......
-------
;!xmoyo(a)
Pattern EJ17
..... cut!
.X*O.
.OX..
.....
.....
-----
:8,adJ
Pattern EJ18
# Override capturing single X stone.
?oXXOOo Connect underneath.
oOXOX.o
o.*O..o
o.....o
-------
:8,ed
?oXXOOo
oOXOXao
o.*Ob.o
o..c..o
-------
>antisuji(a);
>antisuji(b);
>antisuji(c);
Pattern EJ19
# Override capturing single X stone.
???.??? Punish overplay.
?o*XOOo
oOXOX.o
o.XO..o
o.....o
-------
:8,ad
???.???
?o*XOOo
oOXOXao
o.XOb.o
o..c..o
-------
>antisuji(a);
>antisuji(b);
>antisuji(c);
Pattern EJ20
?x.XOOo Connect underneath.
oOXOX.o
o.*O..o
o.....o
-------
:8,ed
?x.XOOo
oOXOXao
o.*Ob.o
o..c..o
-------
>antisuji(a);
>antisuji(b);
>antisuji(c);
Pattern EJ21
....? tsukeosae shape
O.OX?
.*X.x
....?
....?
-----
:8,ed
Pattern EJ22
oo.X.? continuation
?..*..
?OOX.O
?.XOX.
?.....
------
:8,a
Pattern EJ23
oo.X.? continuation
?..O*.
?OOXXO
?.XOX.
?.....
------
:8,a
Pattern EJ24
XX.. extend on fourth line if pushed
.O*.
....
....
....
----
:8,ed
Pattern EJ25
XXX.. extend on fourth line if pushed
.OO*.
.....
.....
.....
-----
:8,ed
Pattern EJ26
XXXX.. extend on fourth line if pushed
.OOO*.
......
......
......
------
:8,ed
Pattern EJ27
........ wedge in after invasion
...X*X..
.X.O....
........
........
--------
:8,d
Pattern EJ28
....X... follow up
..XXOX..
.X.OO*..
........
........
--------
:8,ed
Pattern EJ29
....X... follow up
..XXOXX.
.X.OOO*.
........
........
--------
:8,ed
Pattern EJ30
oo.X.? continuation
?.....
?O.X*O
?..OX.
?.....
------
:8,a
oo.D.?
?.....
?a.C*b
?.eOX.
?.....
------
>add_connect_move(a,b);
>add_cut_move(C,D);
>antisuji(e);
Pattern EJ31
??..???? connect out beneath
xxX.....
x.O*.X.O
x.......
?.......
--------
:8,ed
?a..?b??
xxX.....
x.O*.X.O
x.......
?.......
--------
;!oarea(a) && !xmoyo(b)
Pattern EJ32
??..???? connect out beneath, continuation
xxXX....
x.OO*X.O
x.......
?.......
--------
:8,ed
?a..?b??
xxXX....
x.OO*X.O
x.......
?.......
--------
;!oarea(a) && !xmoyo(b)
Pattern EJ33
# gf Sometimes it's better to play one step to the left. See
# nngs:1180. (3.3.7)
# gf Revised classification. (3.5.2)
...XX common important follow up
.O.*O
.....
.....
-----
:8,XCd
Pattern EJ34
....O. break through
.X.OX.
...X*.
......
......
------
:8,J
Pattern EJ35
....O. break through
.X.OXX
..*XO.
......
......
------
:8,J
Pattern EJ37
..X... hane after attachment
......
.XO..O
.*....
......
------
:8,J
Pattern EJ39
# sometimes the solid connection would be better
# gf Removed fixed value, added d classification. (3.5.2)
?.XX.O draw back to defend
.O.O*.
......
......
------
:8,d
?.XX.O
.O.O*.
a.....
......
------
> antisuji(a)
Pattern EJ40
# This pattern is sometimes too general. But more often than not, this is
# worth doing.
XXx?? push to prevent opponent's block
OOXX?
..O*.
.....
-----
:8,OXt
Pattern EJ41
?..O? solid connection
xX*OX
..OXX
.....
-----
:8,OJ
?..O?
xX*OX
.aOXX
.....
-----
>antisuji(a);
Pattern EJ42
.....
..*.. jump
....X
X.O.x
.....
.....
-----
:8,t
Pattern EJ43
# gf Revised. (3.3.16)
?...? connect after peep
x.O.x
x.*Xx
x.O.x
?...?
?...?
-----
:8,OJ
Pattern EJ44
# gf Reduced shape value. (3.5.2)
...... almost an antisuji
oO.X..
..XO*.
......
......
------
:8,-,shape(-3)
Pattern EJ45
?....? hane making shape in the center
?.*..?
?.XOOo
?..XX?
?....?
?....?
------
:8,J
?....?
?.*..?
?.XBBo
?.aXX?
?....?
?....?
------
; !safe_omove(a) && !oplay_attack(*,B)
Pattern EJ46
# tm modified (3.1.23) (see arend:3)
.X. Defend after the peep
O*O
...
...
...
---
:8,XeCd
Pattern EJ47
........... invade on the third line
...........
.........xx
X...*....xx
...........
...........
-----------
:8,t,shape(2)
...........
...........
.........ab
X...*....cd
...........
...........
-----------
; x_alive_somewhere(a,b,c,d)
Pattern EJ49b
# Actually 'a' is often playable
..*.. connect on the outside
OOX.O
.XOX.
.....
.....
-----
:8,sEj
..*..
OOX.O
bXOX.
..a..
.....
-----
>antisuji(a);
>antisuji(b);
Pattern EJ50
# tm Modified (3.1.22) (see nngs:1740)
??.....?? good extension
?.O.....x
OO....*.x
.........
.........
---------
:8,sed,shape(3)
Pattern EJ51
...... connection is urgent for local shape
......
.O*...
.XO...
X.....
......
------
:8,J
......
......
.O*...
.AO...
X.....
......
------
; !attack(A)
Pattern EJ52
..... extend to stabilize shape
..*.O
xXO..
xxX.O
.....
.....
-----
:8,J
Pattern EJ53
.......xxx extend to stabilize group
......OO.X
..*...OXXx
..........
..........
----------
:8,J
Pattern EJ54
......| block the corner
X.O...|
..OX..|
.*X...|
......|
------+
:8,J
Pattern EJ55
....... tiger's mouth
..X.O..
..*.OX.
...OXxx
.....x.
-------
:8,J
.......
..X.O..
..*.OX.
...OXab
.....c.
-------
; x_alive_somewhere(a,b,c)
Pattern EJ56
.......? pull back to stabilize group
..OX..oo
..XO*.oo
.......o
........
--------
:8,J
.......?
..OX..ab
..XO*.cd
.......o
........
--------
; o_alive_somewhere(a,b,c,d)
Pattern EJ57
??.x? stop effective cut and probably connect
OOX*O
.XO..
.....
-----
:8,cJ
??.x?
OOA*O
.XO..
.....
-----
;!attack(A)
Pattern EJ58
....... urgent! attach at the top
oo.*.O?
oO.X.oo
o......
.......
-------
:8,J
Pattern EJ59
o... seal with sente
o.*O
oOXX
....
....
----
:8,J
o...
o.*O
oOAA
....
....
----
; owl_threatens(*,A)
Pattern EJ60
# sometimes the double hane is better
..oOO extend with sente
.*OXX
..X..
.....
-----
:8,J
..oOO
.*OAA
..X..
.....
-----
; owl_threatens(*,A)
Pattern EJ62a
# gf Split and revised. (3.5.2)
XX... push to expand threatened dragon
OOX..
..*..
.....
-----
:8,OJ
XX...
aaX..
..*..
.....
-----
;owl_threatens(*,a)
Pattern EJ62b
# gf Split and revised. (3.5.2)
XX... push to expand threatened dragon
OOX..
..*..
.....
-----
:8,d,followup(8)
XX...
aaX..
..*..
.....
-----
;critical(a)
Pattern EJ63a
# gf Split and revised. (3.5.2)
XX.... push again to expand threatened dragon
OOXX..
..O*..
......
------
:8,J
XX....
aaXX..
..O*..
......
------
;owl_threatens(*,a)
Pattern EJ63
# gf Split and revised. (3.5.2)
XX.... push again to expand threatened dragon
OOXX..
..O*..
......
------
:8,d,followup(8)
XX....
aaXX..
..O*..
......
------
;critical(a)
Pattern EJ64
XX.... atari after double hane
OOX*..
..OX..
......
------
:8,J
BBa...
OOX*..
..OX..
......
------
; !oplay_attack(a,*,B)
Pattern EJ65
?X........ extend from ponnuki to make a base
?XO....*.x
XO.O......
..O.......
----------
:8,J
?X........
?XO....*.x
aO.O......
..O.......
----------
; !attack(a)
Pattern EJ66
?X......x extend from ponnuki to make a base
?XO...*.x
XO.O.....
..O......
---------
:8,J
?X......x
?XO...*.x
aO.O.....
..O......
---------
; !attack(a)
Pattern EJ67
........ standard move to break connection and move out
........
....*...
.X.O....
.....X..
........
........
--------
:8,J
Pattern EJ68
........ standard move to break connection and move out
........
....O...
.X.O....
..*X.X..
........
........
--------
:8,J
Pattern EJ69
........ standard move to break connection and move out
........
....O...
.XXO....
..OX*X..
........
........
--------
:8,J
Pattern EJ71
........ standard move to break connection and move out
........
....O...
.XXO....
..OXOX..
...X*...
........
--------
:8,J
Pattern EJ72
# If the right edge is the fourth line this is
# not too good because it provokes X to make territory
# but there is no really good move in this case.
..... jump again
..*..
....X
..O..
....X
X.O..
.....
.....
-----
:8,J
Pattern EJ73
x.......... invade open space
x..........
X..........
x.....*....
...........
...........
-----------
:8,t
Pattern EJ74
??X... defend cut
xXXO..
XOO.*.
......
......
------
:8,J
Pattern EJ75
#tm modified (3.1.22) (see trevorc:420)
#FIXME: Pattern still seems a bit too general
# consider adding appropriate constraint.
.X.?? connect under
O*.oo
.....
.....
-----
:8,XeE
.X.??
O*.ab
.....
.....
-----
; o_alive_somewhere(a,b)
Pattern EJ76
..X... tsukenobi
X.XO..
.*O...
......
......
------
:8,j
Pattern EJ77
??oo... connection is urgent
?XO....
?XO*X..
xxXO...
x?.....
-------
:8,j
??ab...
?XO....
?XO*X..
cdXO...
e?.....
-------
; o_alive_somewhere(a,b) && x_alive_somewhere(c,d,e)
Pattern EJ78
..... seal the side
....O
.*O.?
O.XX?
.....
.....
-----
:8,j
Pattern EJ79
|..X??x make a base
|.O.X.x
|.....x
|..O...
|......
|..*...
|......
|..xxx?
:8,j
|..X??b
|.O.X.a
|.....x
|..O...
|......
|..*...
|......
|..cdx?
; x_alive_somewhere(a,b) && x_alive_somewhere(c,d)
Pattern EJ80
# db generalized (3.1.25)
|...O.x even a computer connects after nozoki
|..X*.x
|...O.x
|....??
|..x.??
:8,J
Pattern EJ81
# db added (3.1.4)
# gf Revised. (3.3.14)
?....x.. seal the side
?O.O....
o..*.X.x
........
........
--------
:8,j
?....x..
?O.O....
o..*.Abx
........
........
--------
;x_visible_along_edge(A,b)
Pattern EJ81b
# gf New pattern. (3.3.14)
?....X.... seal the side to attack
?O.O...ooo
o..*.X.ooo
..........
..........
----------
:8,j
?....X....
?O.O...def
o..*.X.abc
..........
..........
----------
;o_somewhere(a,b,c,d,e,f)
Pattern EJ81c
# gf New pattern. (3.3.14)
# FIXME: May wish to prefer other pincers in some situations.
?......... pincer
?O.O......
o....X.*..
..........
..........
----------
:8,j
?.........
?O.O......
o....Ab*..
..........
..........
----------
;o_visible_along_edge(A,b)
Pattern EJ82
# db added (3.1.4)
?oO.. answer the peep!
XXO..
?O*X.
.....
-----
:8,j
?oA..
XXA..
?O*X.
.....
-----
; !dead(A)
Pattern EJ84
# gf Made pattern more powerful. (3.1.9)
# gf Added one more replacement point. (3.1.10)
...... Atari before connecting
..*...
X.XO..
.XO...
......
......
------
:8,J,reverse_followup(10)
......
..*c..
X.XO..
.XObe.
.fad..
......
------
>replace(a,*);
>replace(b,*);
>replace(c,*);
>replace(d,*);
>replace(e,*);
>replace(f,*);
Pattern EJ85
# db added (3.1.8)
??O.X? Important sente block
?XO...
..X*..
......
------
:8,OJ
Pattern EJ86
# db added (3.1.9)
?..... extend automatically
xX..oo
XO*.oo
?.....
?.....
------
:8,XJ
?.....
xX..ab
XO*.cd
?.....
?.....
------
; o_alive_somewhere(a,b,c,d)
Pattern EJ87
#db added (3.1.9)
??.... extend after the top attachment
..X...
..O*..
......
......
......
------
:8,J
Pattern EJ88
# gf New pattern. (3.1.17)
...... connect after invasion
......
.O.*.O
...X.O
......
......
------
:8,J
Pattern EJ89
# gf New pattern. (3.1.17)
...... connect after invasion
......
.O.X.O
...*.O
......
......
------
:8,J
Pattern EJ90
# db New pattern (3.1.26)
?XX.... extend on the fourth line
..O*...
O......
.......
.......
-------
:8,J
Pattern EJ91
# db New pattern (3.1.26)
# gf Demoted from J to j. See e.g. trevorc:1180 and nngs4:485. (3.7.1)
?..... large block affecting stability of both
..O.oo
.X*..o
......
......
------
:8,j
Pattern EJ92
# db new pattern (3.1.28)
oo......... extend to build moyo
oo.....*...
oooo...OXX.
ooo.....O.X
.........ox
...........
-----------
:8,j
oo.........
oo.....*...
abcg..iOXX.
def.....O.X
.........hx
...........
-----------
; o_alive_somewhere(a,b,c,d,e,f,g)
> replace(h,*);
> replace(i,*)
Pattern EJ93
# db new pattern (3.1.32)
# db modified (3.3.9)
|..xx....... stand to defend
|...........
|...X.*..xxx
|....XO..xxx
|...........
|...........
+-----------
:8,j
|..xx.......
|...........
|...X.*..xxx
|....XO..xxx
|....cba....
|...........
+-----------
> replace(a,*);
> replace(b,*);
> replace(c,*)
Pattern EJ94
# db new pattern (3.3.3)
# See nngs1:53
..... Block!
..O..
..X*.
.X.O.
.....
.....
-----
:8,j
.....
.aO..
..X*.
.X.O.
.....
.....
-----
> replace(a,*)
Pattern EJ95
# db added (3.3.6)
.....? attach below
..X.O?
O.*.oo
......
......
------
:8,j
Pattern EJ96
# db added (3.3.6)
..XXOO Don't allow the cut with sente!
.OXOX.
..*O..
......
------
:8,j
..XXOO
.OXOA.
..*O..
......
------
; !oplay_defend(*,A)
Pattern EJ97
# db added (3.3.6)
...... seal the opponent, connecting loosely
oo.*O.
ooo.XX
......
......
------
:8,j
......
ab.*O.
cde.XX
......
......
------
; o_alive_somewhere(a,b,c,d,e)
Pattern EJ98
# db added (3.3.7)
O..X.? connect
O..*O.
......
......
------
:8,j
Pattern EJ99
# db added (3.3.14)
# see nngs3:330 where GNU thinks e is an owl attack
........ seal the opponent
oooO*.oo
ooOXX.oo
o.......
........
--------
:8,j,shape(3)
........
oooO*.ab
ooOXX.cd
o.e.....
........
--------
; o_somewhere(a,b,c,d)
> replace(e,*)
Pattern EJ100
# db added (3.3.14)
|...O... seal the opponent
|.......
|...X*..
|...XO..
|..XOO..
:8,jda
Pattern EJ101
# gf New pattern. (3.5.3)
# See nngs:1020.
......X
.O..OX.
.....*O
.......
-------
:8,jcd
######################################################################
#
# Seki patterns.
#
# Patterns to reduce territory into sekis.
#
# seki_helper(a) verifies that no string surrounding a can be
# captured.
#
######################################################################
Pattern S1
# With no supporting stones, a 5 points gote seki.
# If X does not reply, the corner point makes ko.
# but this is not a good ko because it takes 4 moves
# to remove the X stones, while O loses the seki
# if it loses the ko. Moreover if X immediately plays
# atari at one 1-2 point we have to answer at the second
# 1-2 point, after which X can leave it without aji. So
# this move is gote and no folloup value is assigned.
|XX??
|.XX?
|o*XX
|.o.X
+----
:/,sXe,terri(5)
|AA??
|.AA?
|o*AA
|.o.A
+----
;lib(A)==3 && seki_helper(A)
Pattern S2
# With no enemy stones, 5 points gote to defend territory.
|OO??
|.OO?
|*xOO
|.x.O
+----
:8,Oe,terri(6)
|aa??
|.aa?
|*xaa
|.x.a
+----
;lib(a)<=3 && seki_helper(a)
Pattern S3
# 7 points sente seki. If X does not answer, we can kill,
# which at the very least is worth another 20 points.
|XXXXX
|..*.X
|....X
+-----
:8,sXe,terri(7),followup(20)
|AAAAA
|..*.A
|.b..A
+-----
;lib(A)==5 && seki_helper(A)
>replace(b,*)
Pattern S4
# 7 points reverse sente to defend territory.
|OOOOO
|..*.O
|....O
+-----
:8,Oe,terri(7),reverse_followup(20)
|aaaaa
|..*.a
|....a
+-----
;lib(a)==5 && seki_helper(a)
Pattern S5
# Explicit followup to S4.
|OOOOO
|.*O.O
|.X..O
+-----
:8,Oe,terri(7)
|aaaaa
|.*a.a
|.X..a
+-----
;lib(a)==5 && seki_helper(a)
Pattern S6
# 6 points seki. Whether this is gote or sente depends on
# the ko threat situation.
|XX??
|.XXX
|.*.X
|...X
+----
:8,sXe,terri(6),followup(14)
|AA??
|.AAA
|.*.A
|...A
+----
;lib(A)==4 && seki_helper(A)
Pattern S6b
# 6 points seki. Explicit followup to S6.
|XX??
|.XXX
|XO.X
|.*.X
+----
:8,sXe,terri(6),followup(14)
|AA??
|.AAA
|XO.A
|.*.A
+----
;lib(A)==3 && seki_helper(A)
Pattern S6c
# Eliminate a potential 1000-year ko for the life of the entire
# corner. This moves secures a seki.
|OO??
|.OOO
|OX.O
|.X*O
+----
:8,Oe,terri(14)
|aa??
|.aaa
|OX.a
|.X*a
+----
;lib(a)==3 && seki_helper(a)
Pattern S7
# 6 points seki. See S6.
|OO??
|.OOO
|.*.O
|...O
+----
:8,Oe,terri(6),reverse_followup(14)
|aa??
|.aaa
|.*.a
|...a
+----
;lib(a)==4 && seki_helper(a)
Pattern S8
# gf New pattern. (3.5.3)
# 7 points gote seki. See seki:301.
|XX???
|.XXX?
|.*.XX
|....X
+-----
:8,sXe,terri(7)
|AA???
|.AAA?
|.*.AA
|....A
+-----
;lib(A)==4 && seki_helper(A)
Pattern S9
# gf New pattern. (3.5.3)
# 7 points seki. Compare S8. See seki:302
|OO???
|.OOO?
|.*.OO
|....O
+-----
:8,sXe,terri(7)
|aa???
|.aaa?
|.*.aa
|....a
+-----
;lib(a)==4 && seki_helper(a)
Pattern S10
# gf New pattern. (3.5.3)
# 8 points (mostly) sente seki. See seki:801.
|XXX??
|..XX?
|.*.XX
|....X
+-----
:8,sXe,terri(8),followup(16)
|AAA??
|..AA?
|.*.AA
|....A
+-----
;lib(A)==4 && seki_helper(A)
Pattern S10b
# gf New pattern. (3.5.3)
# Best way to secure seki. See seki:803.
|OOO??
|..OO?
|.X*OO
|....O
+-----
:8,sXe,terri(8),reverse_followup(16)
|aaa??
|..aa?
|bX*aa
|....a
+-----
;lib(a)==4 && seki_helper(a)
>replace(b,*);
Pattern S10c
# gf New pattern. (3.5.3)
# Make seki in sente, not gote. See seki:808.
|XXX??
|..XX?
|.O*XX
|..X.X
+-----
:8,sXe,terri(8),followup(16)
|AAA??
|..AA?
|bO*AA
|.cX.A
+-----
;lib(A)==4 && seki_helper(A)
>replace(b,*);
>replace(c,*);
Pattern S10d
# gf New pattern. (3.5.3)
# Make seki in sente, not gote. See seki:810.
# Only replace pattern here. The seki_helper doesn't apply and the
# semeai code should find either a or * if there's a chance to make seki.
|XXX??
|*.XX?
|.OOXX
|.XX.X
+-----
:8,sX
|XXX??
|*.XX?
|aOOXX
|.XX.X
+-----
>replace(a,*);
Pattern S11
# gf New pattern. (3.5.3)
# 8 points (mostly) reverse sente seki. Compare S10. See seki:802.
|OOO??
|..OO?
|.*.OO
|....O
+-----
:8,sXe,terri(8),reverse_followup(16)
|aaa??
|..aa?
|.*.aa
|....a
+-----
;lib(a)==4 && seki_helper(a)
Pattern S12
# gf New pattern. (3.5.3)
# 9 points gote seki. See seki:901.
|XXXX?
|...X?
|.*.XX
|....X
+-----
:8,sXe,terri(9)
|AAAA?
|...A?
|.*.AA
|....A
+-----
;lib(A)==5 && seki_helper(A)
Pattern S13
# gf New pattern. (3.5.3)
# 9 points seki. Compare S12. See seki:902.
|OOOO?
|...O?
|.*.OO
|....O
+-----
:8,sXe,terri(9)
|aaaa?
|...a?
|.*.aa
|....a
+-----
;lib(a)==5 && seki_helper(a)
Pattern S14b
# gf New pattern. (3.5.3)
# Make sente seki. See seki:905.
|OOOO?
|.X.O?
|.XOOO
|..*.O
+-----
:8,sX
|OOOO?
|.X.O?
|.XOOO
|.a*.O
+-----
> replace(a,*);
Pattern S15
# gf New pattern. (3.7.12)
# 9 points gote seki. See seki:1201.
|XX???
|.XX??
|..XX?
|.*.XX
|....X
+-----
:8,sXe,terri(9)
|AA???
|.AA??
|..AA?
|.*.AA
|....A
+-----
;lib(A)==4 && seki_helper(A)
Pattern S16
# gf New pattern. (3.7.12)
# 9 points gote seki. Compare S15. See seki:1202.
|OO???
|.OO??
|..OO?
|.*.OO
|....O
+-----
:8,sXe,terri(9)
|aa???
|.aa??
|..aa?
|.*.aa
|....a
+-----
;lib(a)==4 && seki_helper(a)
######################################################################
#
# High handicap patterns.
#
# Patterns to place additional handicap stones when white starts by
# passing. After white's first move these patterns are not considered
# any more, due to the high_handicap_helper.
#
######################################################################
Pattern HH1
....... Add stone where the distance is large.
.......
O..*..O
.......
.......
:+,-,value(40),high_handicap_helper
Pattern HH2
# gf Corrected symmetry. (3.1.23)
....... Add stone where the distance is large.
.......
...*...
O.....O
.......
.......
:|,-,value(40),high_handicap_helper
Pattern HH3
?..o..? Make iron pillar.
?.....?
?..*..?
?..O..?
?.....?
?.....?
-------
:|,-,value(30),high_handicap_helper
Pattern HH4
..o.. Make iron pillar.
.....
..O..
..*..
.....
.....
-----
:|,-,value(30),high_handicap_helper
Pattern HH5
..... Jump towards center.
..*..
.....
..O..
.....
.....
-----
:|,-,value(30),high_handicap_helper
Pattern HH6
|...... Corner enclosure from 3-3.
|......
|..O.*.
|......
|......
+------
:8,-,value(30),high_handicap_helper
Pattern HH7
..... Jump into nowhere
.....
..*..
.....
.....
ooOoo
:8,-,value(20),high_handicap_helper
Pattern HH8
..... Yet another third line stone.
O...o
o.*.o
.....
.....
-----
:8,-,value(10),high_handicap_helper
Pattern HH9
..... Yet another fourth line stone.
.....
o.*.o
O...o
.....
.....
-----
:8,-,value(10),high_handicap_helper
Pattern HH10
..... Jump
.....
O.*..
.....
.....
:-,-,value(5),high_handicap_helper
Pattern HH11
..... Keima
O....
..*..
.....
?????
:8,-,value(5),high_handicap_helper
Pattern HH12
o.... Extend
.....
.O*.o
.....
o....
:-,-,value(2),high_handicap_helper
Pattern HH13
o.... Extend
....o
.O*..
....o
oo...
:8,-,value(3),high_handicap_helper
Pattern HH14
|..O... Solidify corner still more.
|...O..
|...*.O
|......
|......
+------
:8,-,value(1),high_handicap_helper
Pattern HH15
|....oo Solidify corner still more.
|..O.oo
|..*.oo
|......
|......
+------
:8,-,value(1),high_handicap_helper
Pattern HH16
|..ooo Solidify corner still more.
|....o
|..O.o
|..*..
|.....
+-----
:8,-,value(1),high_handicap_helper
Pattern HH17
|..... Solidify corner still more.
|...O.
|..*..
|.....
|.....
+-----
:8,-,value(1),high_handicap_helper
######################################################################
#
# Reinforcement patterns.
#
######################################################################
#
# Early in high handicap games, especially on small boards, it may
# happen that the lonely white stones are all thought to be dead.
# These patterns are used in such positions to reinforce possible
# weaknesses that the owl code has failed to take into account.
#
# All these patterns have s classification. For performance reasons,
# the move safety is tested in the helper instead.
#
######################################################################
Pattern Reinforce1
?...?
..*..
O...O
.....
.....
-----
:|,s,value(5),reinforce_helper
Pattern Reinforce2
.....
O.*.O
.....
.....
-----
:|,s,value(3),reinforce_helper
Pattern Reinforce3
X..
.*.
X..
:-,s,value(2),reinforce_helper
Pattern Reinforce4
xx
*O
X.
:8,s,value(1),reinforce_helper
Pattern Reinforce5
?xx
.*O
X..
:8,s,value(1),reinforce_helper
######################################################################
#
# Reinforcement patterns for the middle game
#
######################################################################
Pattern Reinforce102
# FIXME: This pattern should be contingent on being clearly ahead.
# gf In any case, don't play it while scoring. (3.7.2)
.......
O..O..O Eliminate invasion point
...*...
.......
.......
-------
:8,O,value(8)
.......
O..O..O
...*...
.......
.......
-------
;!doing_scoring
######################################################################
#
# Large Endgame moves
#
# Endgame patterns of value < 6 are in endgame.db
#
# "A point with sente is worth 2 with gote."
#
######################################################################
Pattern LE1
O.Xx fourth line sente kosumi
.*..
....
....
----
:8,OXe
Pattern LE2
# gf Added e classification. (3.5.2)
????? third line sente kosumi
O.Xxx
.*...
.....
-----
:8,OXe
Pattern LE3
# gf Added e classification. (3.5.2)
xXx expand territory
...
.*.
O..
o..
:8,OXe
Pattern LE5
# gf Added e classification and constraint. (3.5.2)
?Xxx
O...
..*.
....
----
:8,OXe
?Xxx
ca..
.b*.
....
----
;!oplay_disconnect(*,a,b,*,c)
Pattern LE6
# At move 96 of ego.tst, this is matched at J8.
# tm - revised (3.1.15) (see trevora:330)
# added left-hand ?s
# gf Revised. (3.1.20)
# see also trevora:280, arend:23
# tm Revised. (3.1.20)
?oo???
?..*.x
?....X
?..O??
:8,OXeE
?ocbd?
?..*.x
?a...X
?..O??
; omoyo(a) && !(o_alive_somewhere(b) && o_alive_somewhere(c,d))
Pattern LE8
# gf Changed fixed value to e classification, removed constraint. (3.5.2)
?OOo prevent monkey jump
X*..
....
----
:8,OXe
Pattern LE9
# gf Added e classification. (3.5.2)
oo..? good local sente
..O.x
O*X..
....X
.....
-----
:8,OXe
Pattern LE10
# gf Revised constraint. (3.1.14)
OX cut with sente and try to live inside opponent's territory
X*
:\,OXW,followup_value(5)
OB
A*
;xmoyo(*) && !attack(A) && !attack(B)
;&& safe_omove(*) && oplay_attack_either(*,A,B)
Pattern LE12
# gf Changed fixed value to e classification, removed constraint. (3.5.2)
?O.. seal the edge
X*..
....
----
:8,OX
Pattern LE13
# gf Changed fixed value to e classification, added reverse followup. (3.5.2)
|??o? take the corner
|...O
|..OX
|..*X
|....
+----
:8,OXe,reverse_followup(5)
|??o?
|..aO
|..OX
|..*X
|....
+----
; oplay_attack(*,a,a)
Pattern LE15
# tm decreased value (3.1.20) (see nngs:1150 move G4)
# gf Don't bother with this inside own territory. (3.1.29)
xxx jump towards moyo
x.x
.*.
...
...
OoO
?o?
:|,OE
xxx
x.x
.*.
...
...
OoO
?o?
;!oterri(*)
Pattern LE16
+---- it's better to bend around
|..O.
|.*XO
|?.X?
:8,OX,terri(3),followup(2)
+----
|.aO.
|.*XO
|?.X?
> replace(a,*)
######################################################################
#
# Replacement patterns
#
# Patterns using the "replace" autohelper macro for when
# "this move is better than that move"
#
######################################################################
Pattern RE1
# db added (3.1.11)
XOO? better to make an eye
O*.O
XO.O
?OO?
:8,-
XOO?
A*aO
XO.O
?OO?
; lib(A)==1
> replace(a,*)
Pattern RE2
# gf New pattern. (3.1.12)
# See test case niki:1 for an example.
..O... connect solidly
XO....
XO*X..
XXO...
......
------
:8,-
..O...
XO....
XO*X..
XXOa..
......
------
> replace(a,*)
Pattern RE3
# gf New pattern. (3.1.12)
# Common invasion in handicap games. Attaching on top better than
# capping.
.......
.......
.O.*.O.
...X...
.......
.......
-------
:|,-
.......
...a...
.O.*.O.
...X...
.......
.......
-------
> replace(a,*)
# Pattern RE4
# # tm New Pattern (3.1.17)
# # gf This is too general as gunnar:95 shows. Removed. (3.7.10)
#
# ?O.| push before blocking
# *XX|
# OO.|
#
# :8,-
#
# ?O.|
# *BX|
# OOa|
#
# ; oplay_attack(*,a,B)
#
# > replace(a,*)
# Pattern RE5
# # tm New pattern (3.1.18) (see trevorb:440)
# # gf This pattern can cause a crash, see ticket #203. Removed. (3.7.12)
#
# OX? threaten snapback
# X.X
# X.*
# ?O.
# ??o
#
# :8,-
#
# OX?
# B.X
# Xa*
# ?O.
# ??o
#
# ; lib(B) == 2
#
# > replace(a,*)
Pattern RE6
# tm New Pattern (3.1.18) (see trevorb:400)
-----
.*... take it off, don't leave atari followup
OXOX?
?OOX?
:8,-
-----
.*a..
OXOX?
?OBX?
; lib(B) == 1
> replace(a,*)
Pattern RE8
# db new pattern (3.3.6)
# see century-2002:10
?..O?? first line block just helps the opponent
X.*OX?
..OX..
...X..
------
:8,-
?..O??
X.*OX?
..OX..
..aX..
------
> replace(a,*)
Pattern RE9
# db new pattern (3.3.6)
# see century-2002:100
?o.X?? to slide is better than kosumi
.O...?
...*..
......
------
:8,-
?o.X??
.O...?
..a*..
......
------
> replace(a,*)
Pattern RE10
# db new pattern (3.3.6)
# see century-2002:130
xxxx don't allow the cut
...X
x.O*
?XXO
:8,d
xxxx
.a.X
x.O*
?XXb
; !dead(b)
> replace(a,*)
Pattern RE12
# db added (3.3.14)
# See ninestones:20, where hane is a bogus owl defense.
???OX. kosumi defense
O.XO..
....*.
......
------
:8,-,shape(3)
???aX.
O.Ba..
..c.*.
......
------
; lib(a)==2 && lib(B)>=2 && !oplay_attack(*,a)
> replace(c,*)
Pattern RE13
# gf New pattern. (3.3.17)
# See gunnar:20.
?XXO backfill before playing into bamboo joint in gote (dame filling)
O*..
?XXO
:-,OX
?XXO
a*b.
?XXO
;oplay_attack(*,b,*) && oplay_defend(*,b,*)
>backfill_replace(*,a)
Pattern RE14
# gf New pattern. (3.3.22)
# See filllib:35.
+---
|..? fix up corner eye shape to avoid seki or worse
|*.O
|..O
|O.O
|.O?
:8,O
+---
|..?
|*.O
|b.O
|O.O
|aO?
;olib(a)==2 && !oplay_attack(a,b,b)
>replace(a,*)
######################################################################
#
# Thrashing patterns.
#
# Patterns to force early moves when playing white against high
# handicaps instead of passing because all stones look dead.
# These patterns are disabled by the thrash_around_helper when white has
# managed to get living stones or when at least 40% of the board is
# covered.
#
######################################################################
Pattern Th1
.....
X.*.X
.....
.....
-----
:|,-,value(5),thrash_around_helper
Pattern Th2
xxXxx
o...o
o.*.o
.....
.....
-----
:|,-,value(5),thrash_around_helper
Pattern Th3
oo.oo
.X*.x
.....
.....
.....
-----
:8,-,value(3),thrash_around_helper
Pattern Th4
ooXoo
o.*.o
.....
.....
-----
:|,-,value(3),thrash_around_helper
Pattern Th5
X..o
..*.
....
oooo
:8,-,value(1),thrash_around_helper
Pattern Th6
...o
X.*.
....
oooo
:8,-,value(1),thrash_around_helper
Pattern Th7
....x
.X.o.
.*.o.
....x
:8,s,value(4),thrash_around_helper
....x
.X.a.
.*.b.
....x
;o_somewhere(a,b)
Pattern Th8
oo..?
*X.o.
.O.o.
....x
:8,-,value(5),thrash_around_helper
oo..?
*X.a.
.O.b.
....x
;o_somewhere(a,b)
Pattern Th9
....
O.*.
...x
:8,-,value(3),thrash_around_helper
Pattern Th10
?x?
.*x
O.O
?o?
:8,-,value(3),thrash_around_helper
Pattern Th11
?x?
o*?
O.O
?o?
:8,-,value(2),thrash_around_helper
Pattern Th12
?.?
.*.
...
O.O
:|,-,value(3),thrash_around_helper
Pattern Th13
.O.
...
O.*
:8,-,value(3),thrash_around_helper
Pattern Th14
x*O
o..
O.O
:8,-,value(2),thrash_around_helper
Pattern Th15
xO*
o..
O.O
:8,-,value(2),thrash_around_helper
Pattern Th16
?.O.?
x*.O?
??..x
:8,-,value(3),thrash_around_helper
Pattern Th17
# FIXME: Give value to all attack threats.
?O?
*XO
?.?
:8,-,value(4),thrash_around_helper
Pattern Th18
# FIXME: Give value to all attack threats.
?O?
*XO
?.?
:8,s,value(0.5),thrash_around_helper
Pattern Th19
*Ox
O.O
.O.
:8,n,value(1),thrash_around_helper
Pattern Th20
?.o.
.*X.
?...
:8,s,value(0.5),thrash_around_helper
Pattern Th21
.O?
*XO
.Oo
:8,s,value(1),thrash_around_helper
Pattern Th22
..O
*..
...
---
:8,s,value(4),thrash_around_helper
Pattern Th23
?X?
.*O
...
---
:8,s,value(2),thrash_around_helper
Pattern Th24
.*x
.XO
...
---
:8,s,value(3),thrash_around_helper
######################################################################
#
# Mirror breaking patterns.
#
# Patterns to break mirror go strategies being employed by the opponent.
#
######################################################################
Pattern M1
# gf New pattern. (3.5.11)
.....
.....
..X..
..*..
.....
:|,-,value(30)
.mil.
.dbgq
.fAe.
ph*c.
.kjn.
;oplay_attack(*,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q,A) && break_mirror_helper(A)
Pattern M2
# gf New pattern. (3.5.11)
.....
..X..
..X..
..O*.
.....
:8,-,value(40)
.mil.
.dXgq
.fAe.
phO*.
.kjn.
;oplay_attack(*,d,e,f,g,h,i,j,k,l,m,n,p,q,A) && break_mirror_helper(A)
Pattern M3
# gf New pattern. (3.5.11)
.....
.XX..
..X*.
..OO.
.....
:8,-,value(40)
.mil.
.XXgq
.fA*.
phOO.
.kjn.
;oplay_attack(*,f,g,h,i,j,k,l,m,n,p,q,A) && break_mirror_helper(A)
Pattern M4
# gf New pattern. (3.5.11)
.....
.XX*.
.XXO.
..OO.
.....
:8,-,value(40)
.mil.
.XX*q
.XAO.
phOO.
.kjn.
;oplay_attack(*,h,i,j,k,l,m,n,p,q,A) && break_mirror_helper(A)
Pattern M5
# gf New pattern. (3.5.11)
..*..
.XXO.
.XXO.
.XOO.
.....
:8,-,value(40)
.m*l.
.XXOq
.XAO.
pXOO.
.kjn.
;oplay_attack(*,j,k,l,m,n,p,q,A) && break_mirror_helper(A)
Pattern M6
# gf New pattern. (3.5.11)
..O..
.XXO.
.XXO.
.XOO.
.*X..
:8,-,value(40)
.mOl.
.XXOq
.XAO.
pXOO.
.*Xn.
;oplay_attack(*,l,m,n,p,q,A) && break_mirror_helper(A)
Pattern M7
# gf New pattern. (3.5.11)
.*OX.
.XXO.
.XXO.
.XOO.
.OX..
:8,-,value(70)
.*OX.
.XXOq
.XAO.
pXOO.
.OXn.
;oplay_attack(*,n,p,q,A) && break_mirror_helper(A)
Pattern M8
# gf New pattern. (3.5.11)
.OOX.
.XXO.
.XXO.
*XOO.
.OXX.
:8,-,value(60)
.OOX.
.XXOq
.XAO.
*XOO.
.OXX.
;oplay_attack(*,q,A) && break_mirror_helper(A)
# END OF FILE