# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# 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 #
# 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 atari_atari attack 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
# x : your piece or empty
# 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.)
# In the second field (classification) the following pattern attributes
# are possible. Friendly stones are 'O', opponent stones are 'X'.
# s : "Sacrifice" pattern. Allow sacrifice through self atari.
# Notice that this is different from the usual meaning of the
# s classification since all but a few moves in an atari_atari
# sequence are expected to be sacrifices.
# c : "Conditional" pattern. Don't accept the move unless it is also
# found by a non-conditional pattern or by one more conditional
# pattern that threatens some other string.
#########################################################
# gf New pattern. (3.5.10)
;safe_omove(*) && oplay_attack_either(*,A,B)
;&& !oplay_connect(*,A,B)
#evand new pattern (3.3.13)
;lib(A) == 2 && xlib(b) <= 2
#evand new pattern (3.3.13)
# gf New pattern. (3.3.16)
# gf New pattern. (3.3.17)
;!oplay_attack(*,e) && oplay_attack(*,a,C) && oplay_attack(b,a,D)
# gf New pattern. (3.3.17)
# gf New pattern. (3.3.17)
# gf New pattern. (3.3.17)
#evand New pattern. (3.3.18)
;lib(A) <= 4 && oplay_attack(*,b,A) && oplay_defend(*,?,*)
# evand New pattern. (3.3.19)
;lib(A) == 3 && lib(B) > 1 && oplay_attack(*,A)
# pp New pattern - see atari_atari:25 and blunder:31 (3.5.1)
; lib(A) == 1 && lib(B) + lib(C) <= 6 && !oplay_defend_both(*,B,C)
# gf New pattern. (3.5.4)
;lib(A)<=3 && lib(B)<=3 && (oplay_attack(*,A) || oplay_attack(*,B))
# pp New pattern, see kgs:490. (3.7.4)
# FIXME: The constraint is not very good.
; lib(B) <= 5 && lib(A) > lib(B) && !oplay_defend(*,?,a,C)