1# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2# This is GNU Go, a Go program. Contact gnugo@gnu.org, or see # 3# http://www.gnu.org/software/gnugo/ for more information. # 4# # 5# Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, # 6# 2008 and 2009 by the Free Software Foundation. # 7# # 8# This program is free software; you can redistribute it and/or # 9# modify it under the terms of the GNU General Public License # 10# as published by the Free Software Foundation - version 3, # 11# or (at your option) any later version. # 12# # 13# This program is distributed in the hope that it will be # 14# useful, but WITHOUT ANY WARRANTY; without even the implied # 15# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # 16# PURPOSE. See the GNU General Public License in file COPYING # 17# for more details. # 18# # 19# You should have received a copy of the GNU General Public # 20# License along with this program; if not, write to the Free # 21# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # 22# Boston, MA 02111, USA # 23# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 24# 25# The Endgame Pattern Database. 26# 27# Further documentation may be found in the Texinfo documentation. 28# 29# First there is a pattern title of the form: Pattern [string]. The 30# string is used for identifying the pattern while tuning or debugging. 31# 32# Then a block of the following characters representing the pattern 33# itself. 34# 35# ? : don't care 36# . : empty 37# X : your piece, 38# O : my piece, 39# x : your piece or empty 40# o : my piece or empty 41# * : my next move 42# -, | : edge of board 43# + : corner of board 44# 45# If a pattern must not match at the edge of the board, 46# an extra row of ?'s in the pattern may be added. (This 47# will not add to the time taken to check the pattern.) 48# 49################# 50# 51# After the pattern, some supplementary information in the format: 52# 53# :trfno, classification, [values], helper_function 54# 55# These and other aspects of the pattern database are documented 56# in the Texinfo documentation. 57# 58################# 59# 60# Any line beginning with #, or any part of a line following 61# whitespace is a comment. 62# 63# The patterns are classified into a number of different categories: 64# 65# EE edge endgame 66# EF edge followups 67# CE center endgame 68# CF center followups 69# EY eye stealing/saving endgame 70# 71# The patterns are grouped in the file by category. New patterns 72# should be added close to a similar pattern or at the end of the 73# category where it belongs. When a new pattern is added, the names 74# of later patterns in the category should usually not be changed. 75# This can be accomplished by introducing names like CC35b and so on. 76# 77 78 79###################################################################### 80# 81# Edge endgame patterns 82# 83# These patterns need to be revised. 84# 85# Moves along the edge with small weights, intended to come into play 86# in the endgame. 87# 88# These patterns are further subdivided into the following classes 89# 90# first line descents (except in corner) 91# first line hanes (except in corner) 92# first line pushes (except in corner) 93# first line blocks (except in corner) 94# first line corner moves 95# miscellaneous first line moves 96# second line descents 97# second line hanes 98# second line extensions 99# second line clamps 100# miscellaneous second line moves 101# third line moves 102# 103###################################################################### 104 105 106attribute_map general 107 108goal_elements none 109# Several patterns here have a or d class, so we need these elements. 110callback_data XOxo 111 112 113# first line descents (except in corner) 114######################################## 115 116Pattern EE1 117# gf Removed terri(1) value because move might be inside own territory. (3.3.7) 118 119?OOx block on edge 120..*x 1 point gote 121---- 122 123:8,OXe 124 125?ccx 126ba*x 127---- 128 129;marginal_eye(*) && proper_eye(a) && proper_eye(b) && !xplay_attack(*,c) 130 131 132Pattern EE1a 133 134?OOx block on edge 135..*x 2 point gote 136---- 137 138:8,OXe,terri(2) 139 140?ccx 141ba*x 142---- 143 144; marginal_eye(*) && proper_eye(a) && proper_eye(b) 145; && xplay_attack(*,a,c) && !xplay_attack(*,c) 146 147 148Pattern EE2 149 150OXXx 151xOOX Start by backfilling 152*..x At least 1 point gote 153---- 154 155:8,OX,terri(1) 156 157OXXx 158xbbX 159*.ax 160---- 161 162;xplay_attack(a,b) 163 164 165Pattern EE2b 166 167OXXx 168*OOX Start by backfilling 169...x At least 1 point gote 170---- 171 172:8,OX,terri(1) 173 174OXXx 175*ddX 176cbax 177---- 178 179;marginal_eye(a) && proper_eye(b) && proper_eye(c) && xplay_attack(a,d) 180 181 182Pattern EE2c 183 184OXX? Start by backfilling if block is unsafe 185*OO? At least 1 point gote 186...? 187---- 188 189:8,OX,terri(1) 190 191OXX? 192*OOb 193..ac 194---- 195 196;x_alive_somewhere(b,c) && oplay_attack(a,a) && !oplay_attack(*,?,a,a) 197 198 199Pattern EE4 200 201XOO. 202.X*. one point sente 203---- 204 205:8,OXe,terri(1),followup(1) 206 207XOO. 208.X*. 209---- 210 211;marginal_eye(*) 212 213 214Pattern EE5 215 216??? 217XO? descend to edge 218.*? may quite possibly be 0 points gote 219--- 220 221:8,OXe,terri(0.1) 222 223eab 224XOc 225.*d 226--- 227 228;o_somewhere(a,b,c,d,e) 229 230 231Pattern EE6 232 233.OOOXX 234...*.. 235------ 236 237:8,OXe,terri(2) 238 239.OOOXX 240..a*bc 241------ 242 243; proper_eye(a) && !oplay_attack(*,*) && oplay_attack(b,*,a,c,*,a) 244; && xplay_attack(*,a,b,a) 245 246 247Pattern EE7 248# tm New Pattern (3.1.19) 249# s classification, in case of ko (see trevorc:180) 250# pp Revised (3.3.18) the pattern to match on edge only. 251 252?.X? 253O.*. 254---- 255 256:8,sOXe,terri(0.75) 257 258?.X? 259O.*a 260---- 261 262;proper_eye(a) && safe_omove(*) 263 264 265# first line hanes (except in corner) 266##################################### 267 268Pattern EE101 269 270OOXX endgame move 271..*. 2 points gote 272---- 273 274:8,OXe,terri(2) 275 276OOXX 277b.*a 278---- 279 280;proper_eye(a) && proper_eye(b) 281 282 283Pattern EE102 284 285???X? sente hane 286OXX.. 1 or 2 points sente 287.*..? 288----- 289 290:8,OXe,terri(2),followup(7) 291 292???X? 293OAA.. 294.*..? 295----- 296 297;lib(A)==3 298 299 300Pattern EE103 301 302?OX? one point gote (and a little extra) 303?.*. 304---- 305 306:8,OXe 307 308?OX? 309?.*a 310---- 311 312;proper_eye(a) 313 314 315Pattern EE104 316 317?OX? two points gote 318..*. 319---- 320 321:8,OXe 322 323?OX? 324b.*a 325---- 326 327;proper_eye(a) && proper_eye(b) 328 329 330# 331# If both EE105 and EE106 match, it's a double sente situation. 332# (followup and reverse followup probably bigger in reality.) 333# 334 335Pattern EE105 336 337?OX.. three points sente 338..*.. 339----- 340 341:8,OXe 342 343?OE.. 344bc*a. 345----- 346 347;proper_eye(a) && proper_eye(b) && oplay_attack_either(*,a,c,a,E) 348 349 350Pattern EE106 351 352..OX? three points reverse sente 353...*. 354----- 355 356:8,OXe,reverse_followup(6) 357 358..dX? 359.bc*a 360----- 361 362;proper_eye(a) && proper_eye(b) && xplay_attack_either(c,b,*,b,d) 363;&& !xplay_attack(c,b,*,*) 364 365 366Pattern EE107 367#tm New Pattern (3.1.16) 368# see trevor:163 369# FIXME: move this pattern to appropriate place 370 371+-- very special corner position 372|.* 373|.O 374|OX 375 376:8,Oa 377 378+-- 379|.* 380|.O 381|OB 382 383; defend(B) && !oplay_defend(*,B) && safe_xmove(*) 384 385 386Pattern EE108 387# pp New pattern (see endgame:890) (3.5.1) 388 389?OX? very small endgame move 390O.*. 391---- 392 393:8,OXes,value(0.5) 394 395?OX? 396Oa*b 397---- 398 399; proper_eye(b) && oplay_attack(*,b,a,a) && oplay_defend(a,*,a) 400 401 402Pattern EE109 403# gf New pattern. (3.5.3) 404# Generic hane, let the territorial evaluation determine its value. 405 406OX hane on first line 407.* 408-- 409 410:8,OXe 411 412 413Pattern EE110 414# gf New pattern. (3.5.3) 415# Followup value obviously imprecise, usually an underestimation. 416 417OX.O followup to save dead stones 418.*.. 419---- 420 421:8,Xe,followup(5) 422 423aX.b 424d*c. 425---- 426 427;alive(a) && dead(b) && oplay_defend(*,c,d,b) 428 429 430# first line pushes (except in corner) 431###################################### 432 433Pattern EE201 434 435?XX push on first line. 436O*. one point gote (and a little extra) 437--- 438 439:8,OXe,terri(1) 440 441?XX 442O*a 443--- 444 445;marginal_eye(*) && proper_eye(a) && max_eye_value(a) > 0 446 447 448Pattern EE201b 449# nando New pattern. (3.7.11) 450 451?XX push deeper on first line. 452O.* 453--- 454 455:8,sOXe 456 457?XX 458Oa* 459--- 460 461;marginal_eye(a) && proper_eye(*) && max_eye_value(*) > 0 462;&& (safe_omove(*) || oplay_attack(*,a,a)) 463 464>if (!safe_omove(*)) known_safe_move(*) 465 466 467Pattern EE202 468 469OXX. endgame move 470.O*. 1 point reverse sente 471---- 472 473:8,OXe,terri(1),reverse_followup(1) 474 475OXX. 476.O*a 477---- 478 479;marginal_eye(*) && marginal_eye(a) 480 481 482Pattern EE203 483 484OXX. 1 point double sente 485.O*. 486---- 487 488:8,OXe,terri(1),reverse_followup(2) 489 490ODDc 491bO*a 492---- 493 494;marginal_eye(*) && marginal_eye(a) && marginal_eye(c) 495;&& (oplay_attack(*,a,b,a) || oplay_attack(*,a,b,D)) 496 497 498Pattern EE204 499 500?X. endgame move 501O*. 2 points gote 502--- 503 504:8,OXe,terri(2) 505 506?Cb 507O*a 508--- 509 510;marginal_eye(*) && proper_eye(a) 511;&& (!oplay_defend(*,a,b,a) || !oplay_defend(*,a,b,C)) 512 513 514Pattern EE205 515 516X.X at least 2 points, possibly more (followup) 517O*. 518--- 519 520:8,OXe,terri(2) 521 522XaX 523O*b 524--- 525 526;marginal_eye(*) && proper_eye(a) && proper_eye(b) 527 528 529Pattern EE206 530# gf New pattern. (3.1.20) 531 532X. 533O* 534-- 535 536:8,OXe 537 538 539# first line blocks (except in corner) 540###################################### 541 542Pattern EE301 543 544O. endgame move 545X* 1 points gote 546-- 547 548:8,OXe,terri(1) 549 550Oa 551X* 552-- 553 554;marginal_eye(*) && proper_eye(a) && oplay_attack(*,a,a) 555 556 557Pattern EE302 558# gf Revised constraint. (3.3.10) 559 560O. endgame move 561X* 2 points reverse sente 562-- 563 564:8,OXe,terri(2),reverse_followup(5) 565 566ba 567X* 568-- 569 570;eye(*) && proper_eye(a) && oplay_defend_both(*,a,*,b) 571 572 573Pattern EE303 574# al1 Revised symmetry. (3.7.11) 575 576OXO 577.*. 578--- 579 580:|,OXe,terri(2) 581 582 583# first line corner moves 584######################### 585 586Pattern EE401 587# gf Added n classification. (3.5.2) 588 589|.O? big endgame move 590|.OX at least 2 points gote 591|.*x 592+--- 593 594:8,nOXed,terri(2) 595 596 597Pattern EE402 598# May look risky, but if it is, the safe_move test will reject it. 599 600|xxXO big endgame move 601|.XO. at least 3 points reverse sente 602|.*.. 603+---- 604 605:8,OXed,terri(3),reverse_followup(5) 606 607 608Pattern EE403 609 610|OX endgame move 611|.* one point gote 612+-- 613 614:8,OXe,terri(1) 615 616|OX 617|.* 618+-- 619 620;marginal_eye(*) 621 622 623Pattern EE404 624# gf Revised constraint. (3.3.10) 625 626|OX? endgame move 627|.*. half point gote as sacrifice 628+--- 629 630:8,sOXe,terri(0.5) 631 632|OX? 633|.*a 634+--- 635 636;marginal_eye(*) && proper_eye(a) 637 638 639Pattern EE404b 640# gf New pattern. See nngs:1480. (3.3.7) 641 642|.OX 643|OX. endgame move 644|.*. at least 1.5 points gote as sacrifice 645+--- 646 647:8,sOXe,value(1.5) 648 649|.OX 650|OX. 651|.*. 652+--- 653 654;marginal_eye(*) 655 656 657Pattern EE405 658# gf Made main diagram consistent with constraint diagram. (3.1.18) 659# gf Revised constraint. (3.3.10) 660 661|XO? endgame move 662|.*. one point gote 663+--- 664 665:8,OXe,terri(1) 666 667|XO? 668|.*a 669+--- 670 671;marginal_eye(*) && proper_eye(a) 672 673 674Pattern EE406 675 676|XO endgame move 677|.* possibly only filling dame 678+-- 679 680:8,OXe,terri(0.1) 681 682 683Pattern EE407 684# gf Increased value. (3.3.14) 685# Give it a little more than 0.5 points in order to fill before capturing. 686 687|OX? fill ko at end of game 688|*OX 1/2 point gote 689+--- 690 691:8,X,terri(0.6) 692 693|aX? 694|*OX 695+--- 696 697;!dead(a) 698 699 700Pattern EE408 701# gf Increased value. (3.3.14) 702# Give it a little more than 0.5 points in order to fill before capturing. 703 704|XO? fill ko at end of game 705|O*O 1/2 point gote 706+--- 707 708:8,X,terri(0.6) 709 710|Xa? 711|O*O 712+--- 713 714;!dead(a) 715 716 717Pattern EE409 718 719|OX? take ko at end of game 720|X*X 1/2 point 721+--- 722 723:8,sO,terri(0.5) 724 725|OA? 726|X*X 727+--- 728 729;!dead(A) 730 731 732Pattern EE410 733 734|XO? take ko at end of game 735|*XO 1/2 point 736+--- 737 738:8,sO,terri(0.5) 739 740|AO? 741|*XO 742+--- 743 744;!dead(A) 745 746 747Pattern EE411 748 749|*O endgame ko 750|XO zero points sente or better 751|.X 752+-- 753 754:8,OX,terri(0.1),followup(0.5) 755 756 757Pattern EE412 758 759|.X endgame ko 760|OX zero points reverse sente or better 761|*O 762+-- 763 764:8,OX,terri(0.1),reverse_followup(0.5) 765 766 767Pattern EE413 768 769|.X? endgame ko 770|OXO 1/2 point 771|.O* 772+--- 773 774:8,OX,terri(0.5) 775 776 777Pattern EE414 778 779|xX? three points gote 780|*OX plus possibly more for the eye in the corner 781|.OX 782|..O 783+--- 784 785:8,OXed,terri(3) 786 787 788Pattern EE415 789# pp New pattern (3.3.18) 790# Currently necessary (see trevorb:170, where N11 is otherwise rejected 791# as "strategically or tactically unsafe) /ab 792 793|*O? 794|OXX 795|.OX 796+--- 797 798:8,X,terri(0.1),reverse_followup(2) 799 800|*A? 801|OXX 802|.OX 803+--- 804 805;alive(A) 806 807 808Pattern EE416 809# pp New pattern (3.3.18) 810 811|.OO? 812|..*X 813+---- 814 815:8,OXe 816 817|.aa? 818|..*X 819+---- 820 821;xplay_attack(*,a) && !oplay_attack(*,a) 822 823>prevent_attack_threat(a) 824 825 826# miscellaneous first line moves 827################################ 828 829Pattern EE501 830# gf Increased value. (3.3.14) 831# Give it a little more than 0.5 points in order to fill before capturing. 832 833?OX? fill ko at end of game 834O*OX 1/2 point gote 835---- 836 837:8,X,terri(0.6) 838 839?aX? 840O*OX 841---- 842 843;!dead(a) 844 845 846Pattern EE502 847 848?OX? take ko at end of game 849OX*X 1/2 point 850---- 851 852:8,sO,terri(0.5) 853 854?OA? 855OX*X 856---- 857 858;!dead(A) 859 860 861Pattern EE504 862 863... jump on the edge 864*.O 865--- 866 867:8,Oe 868 869... 870*.O 871--- 872 873;!omoyo(*) 874 875 876# second line descents 877###################### 878 879Pattern EE601 880# gf Revised constraint to avoid cyclic redistribution. (3.5.1) 881 882??O? It's better to push down before blocking 883.X*X 884.... 885---- 886 887:8,OX,terri(3),followup(5) 888 889??O? 890aA*X 891.... 892---- 893 894; oplay_attack(*,a,A) && !oplay_attack(a,*,A) 895 896> replace(a,*) 897 898 899# second line hanes 900################### 901 902# second line extensions 903######################## 904 905Pattern EE801 906# 1: not really gote and larger than 2.5 points 907# 2: Well, without making the pattern more specific we should be 908# prepared that the x really is in place and that there is an X two 909# steps below * too. Then it is usually gote and about this size. 910# We certainly can and should add patterns to deal with the case 911# that there is more space below, when it very likely is sente, 912# unless such patterns already exist in the EB class. 913# gf Actually this pattern doesn't even guarantee a single point, see 914# gifu03:204. Removed fixed territorial value. (3.5.3) 915 916|.O? endgame move 917|.*X 2.5 points gote 918|..x 919 920:8,OXe 921 922 923Pattern EE802 924 925|.X extend on second line 926|.* 2 points gote 927|.O 928 929:8,OXe,terri(2) 930 931|bX 932|.* 933|aO 934 935;proper_eye(a) && proper_eye(b) 936 937 938Pattern EE803 939 940?xx? 941X.*O extend on second line 942.... about 2 points gote 943---- 944 945:8,OXe,terri(2) 946 947?xx? 948X.*O 949b..a 950---- 951 952;proper_eye(a) && proper_eye(b) 953 954 955Pattern EE804 956# gf Revised value. (3.3.15) 957 958O*X endgame move 959..X not guaranteed to be more than 0 points gote 960--- 961 962:8,OXe,terri(0.1) 963 964O*X 965a.X 966--- 967 968;marginal_eye(a) 969 970 971Pattern EE805 972 973XX. extend on second line 974OO* not guaranteed to yield a single point 975... 976--- 977 978:8,OXe,terri(0.1) 979 980 981Pattern EE806 982# evand new (3.7.1) 983# see kgs:70 984 985|.O?? 986|.OX. 987|.*X. 988|.... 989+---- 990 991:8,OXe,terri(3) 992 993|bO?? 994|.OX. 995|.*Xa 996|.... 997+---- 998 999;xmoyo(a) && omoyo(b) 1000 1001 1002# second line extensions 1003######################## 1004 1005Pattern EE851 1006 1007Ox. clamp on second line 1008OX* almost too big to be classified as endgame move 1009... 1010--- 1011 1012:8,OXe,terri(8) 1013 1014Ox. 1015OX* 1016.a. 1017--- 1018 1019;oplay_attack(*,a,a) 1020 1021 1022# miscellaneous second line moves 1023################################# 1024 1025 1026Pattern EE901 1027# al1 Revised symmetry. (3.7.11) 1028 1029?.? endgame move 1030X*X one point reverse sente 1031O.O 1032--- 1033 1034:|,OXe,terri(1),reverse_followup(2) 1035 1036?a? 1037X*X 1038O.O 1039--- 1040 1041;marginal_eye(*) && proper_eye(a) 1042 1043 1044Pattern EE902 1045# al1 Revised symmetry. (3.7.11) 1046# Why does this have followup value? -ab 1047 1048?.? endgame move 1049O*O one point sente 1050X.X 1051--- 1052 1053:|,OXe,terri(1),followup(2) 1054 1055?a? 1056O*O 1057X.X 1058--- 1059 1060;marginal_eye(*) && proper_eye(a) 1061 1062 1063Pattern EE903 1064# gf New pattern. (3.1.23) 1065 1066??XO? 1067?OO*. 1068X.... 1069----- 1070 1071:8,OXe 1072 1073??XO? 1074?OO*. 1075Xa... 1076----- 1077 1078;!safe_omove(a) 1079 1080 1081# third line moves 1082################## 1083 1084 1085Pattern EE1002 1086 1087??X? endgame move 1088?X*O at least one point reverse sente 1089OO.. 1090.... 1091---- 1092 1093:8,OXe,terri(1),reverse_followup(4) 1094 1095??X? 1096?X*O 1097aa.. 1098.... 1099---- 1100 1101;lib(a)>3 1102 1103 1104Pattern EE1003 1105# gf New pattern. (3.1.12) 1106 1107O*X? at least one point and usually sente 1108?X.o 1109?X.o 1110---- 1111 1112:8,OXe,terri(1) 1113 1114O*X? 1115?Abo 1116?A.o 1117---- 1118 1119;lib(A)==3 && proper_eye(b) 1120 1121 1122# reverse followups 1123###################################### 1124 1125 1126Pattern EF101 1127# This is the least value for the followup. A more precise value can 1128# only be had by dynamic reading. 1129 1130O.. 1131X*. 1132--- 1133 1134:8,OX,reverse_followup(4) 1135 1136Oa. 1137X*. 1138--- 1139 1140;marginal_eye(*) && proper_eye(a) && oplay_attack(*,a,a) 1141 1142 1143Pattern EF102 1144# tm New Pattern (3.1.16) 1145# tm modified (3.1.17) 1146# tm modified (3.1.20) 1147# gf Removed terri(1) value. (3.1.29) 1148# FIXME: see endgame:218, trevord:1030, trevorc:430 1149# FIXME: This is no edge pattern, move it. 1150 1151O. 1152*O 1153 1154:8,O,reverse_followup(3) 1155 1156ac 1157*b 1158 1159;proper_eye(c) && oterri(c) && !oplay_attack(*,*) 1160;&& !xplay_attack(*,*) && xplay_attack_either(*,a,b) 1161 1162 1163###################################################################### 1164# 1165# Center endgame patterns 1166# 1167# Moves in the center with small weights, intended to come into play 1168# in the endgame. 1169# 1170###################################################################### 1171 1172Pattern CE1 1173# gf Increased value. (3.3.14) 1174# Give it a little more than 0.5 points in order to fill before capturing. 1175 1176?OX? fill ko at end of game 1177O*OX 1/2 point gote 1178?OX? 1179 1180:-,X,terri(0.6) 1181 1182?OX? 1183a*OX 1184?OX? 1185 1186;!dead(a) 1187 1188 1189Pattern CE2 1190 1191?OX? take ko at end of game 1192OX*X 1/2 point 1193?OX? 1194 1195:-,sO,terri(0.5) 1196 1197?OX? 1198OX*A 1199?OX? 1200 1201;!dead(A) 1202 1203 1204Pattern CE3 1205# al1 Revised symmetry. (3.7.11) 1206 1207... push against opponent 1208O*X about 1 point gote 1209... 1210 1211:-,OXe,terri(1) 1212 1213 1214Pattern CE4a 1215# gf Split and revised pattern. (3.3.10) 1216# gf Revised constraint. (3.3.16) 1217 1218??X endgame move 1219O*. about 1 point reverse sente 1220?.O 1221 1222:8,OXe,terri(1),reverse_followup(1) 1223 1224??X 1225O*. 1226?aO 1227 1228;marginal_eye(*) && proper_eye(a) && (!halfeye(a) || false_eye_territory(a)) 1229 1230 1231Pattern CE4b 1232# gf Split and revised pattern. (3.3.10) 1233 1234??X endgame move 1235O*. about 1 point reverse sente 1236x.O 1237 1238:8,OXe,terri(1),reverse_followup(2) 1239 1240??X 1241O*. 1242baO 1243 1244;marginal_eye(*) && proper_eye(a) && proper_eye(b) 1245 1246 1247Pattern CE6 1248 1249X? push in 1250*O 0 points gote 1251 1252:8,OXe,terri(0.1) 1253 1254 1255Pattern CE9 1256# gf Revised constraint. (3.3.15) 1257 1258.X push in 1259*O 1 points gote 1260 1261:8,nOXe,terri(1) 1262 1263aX 1264*O 1265 1266;marginal_eye(*) && max_eye_value(*)>0 1267;&& !safe_omove(a) && !obvious_false_xeye(a) 1268 1269 1270Pattern CE12 1271 1272X*O worth a point in chinese rules 1273 1274:-,OXe,terri(0.1) 1275 1276 1277Pattern CE13 1278# al1 Revised symmetry. (3.7.11) 1279 1280X.X sometimes double sente endgame move 1281.*. one point gote 1282O.O 1283 1284:|,OXe,terri(1) 1285 1286XbX 1287.*. 1288OaO 1289 1290;proper_eye(a) || proper_eye(b) 1291 1292 1293Pattern CE14 1294# al1 Revised symmetry. (3.7.11) 1295 1296X.X sometimes double sente endgame move 1297.*. two points gote 1298O.O 1299 1300:|,OXe,terri(2) 1301 1302XbX 1303.*. 1304OaO 1305 1306;proper_eye(a) && proper_eye(b) 1307 1308 1309Pattern CE15 1310 1311.X? sente endgame move 1312.*. one point sente 1313X.O 1314 1315:8,OXe,terri(1) 1316 1317.X? 1318a*. 1319X.O 1320 1321;marginal_eye(*) && proper_eye(a) 1322 1323 1324Pattern CE15b 1325 1326XX? gote endgame move 1327.*. one point gote 1328X.O 1329 1330:8,OXe,terri(1) 1331 1332XX? 1333a*. 1334X.O 1335 1336;marginal_eye(*) && proper_eye(a) 1337 1338 1339Pattern CE16 1340 1341.X? sente endgame move 1342.*O one point sente 1343X?? 1344 1345:8,OXe,terri(1) 1346 1347.X? 1348a*O 1349X?? 1350 1351;marginal_eye(*) && proper_eye(a) && olib(*)>2 1352 1353 1354Pattern CE16b 1355# gf Revised constraint. (3.3.15) 1356 1357.O? sente endgame move 1358.*X one point reverse sente 1359O?? 1360 1361:8,OXe,terri(1),reverse_followup(2) 1362 1363.O? 1364a*X 1365O?? 1366 1367;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 && xlib(*)>2 1368 1369 1370Pattern CE17 1371# gf Revised constraint. (3.3.20) 1372 1373XO endgame move 1374.* one point sente 1375xX 1376 1377:8,OXe,terri(1) 1378 1379XO 1380a* 1381xX 1382 1383;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 && olib(*)>2 1384 1385 1386Pattern CE18 1387# tm removed reverse_followup value 1388# see trevorb:700 1389# gf Revised constraint. (3.3.15) 1390 1391OX endgame move 1392.* one point gote. 1393oO 1394 1395:8,OXe,terri(1) 1396 1397OX 1398a* 1399oO 1400 1401;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 1402 1403 1404Pattern CE19 1405# gf Revised constraint. (3.3.15) 1406 1407?.? endgame move 1408X*X one point gote 1409O.O 1410 1411:|,OXe,terri(1) 1412 1413?b? 1414X*X 1415OaO 1416 1417;marginal_eye(*) && proper_eye(b) && max_eye_value(b)>0 && oplay_attack(*,a,a) 1418 1419 1420Pattern CE20a 1421# gf Split and revised pattern. (3.3.10) 1422# gf Revised constraint. (3.3.15) 1423 1424?.? Smallish endgame 1425O*O one point, possibly reverse sente 1426?X? 1427 1428:|,nOXe,terri(1),reverse_followup(1) 1429 1430?a? 1431O*O 1432?X? 1433 1434;marginal_eye(*) && proper_eye(a) && max_eye_value(a)>0 1435 1436 1437Pattern CE20b 1438# gf Split and revised pattern. (3.3.10) 1439 1440?.x Smallish endgame 1441O*O one point reverse sente 1442?X? 1443 1444:8,nOXe,terri(1),reverse_followup(2) 1445 1446?ab 1447O*O 1448?X? 1449 1450;marginal_eye(*) && proper_eye(a) && proper_eye(b) 1451 1452 1453Pattern CE20c 1454# gf Split and revised pattern. (3.3.10) 1455 1456x.x Smallish endgame 1457O*O one point reverse sente 1458?X? 1459 1460:|,nOXe,terri(1),reverse_followup(3) 1461 1462cab 1463O*O 1464?X? 1465 1466;marginal_eye(*) && proper_eye(a) && proper_eye(b) && proper_eye(c) 1467 1468 1469Pattern CE21 1470# gf Constraint revised. (3.1.8) 1471 1472*OX Smallish endgame 1473O.O one point reverse sente 1474 1475:8,nOXe,terri(1),reverse_followup(2) 1476 1477*bX 1478OaO 1479 1480;proper_eye(a) && lib(b)==2 && !oterri(*) 1481 1482 1483Pattern CE22 1484# gf Territory not guaranteed by pattern. Removed terri(1). (3.7.2) 1485# al1 Revised symmetry. (3.7.11) 1486 1487?X? 1488.*. one point gote 1489O.O 1490ooo 1491 1492:|,OXe 1493 1494 1495Pattern CE23 1496 1497O?? 1498*Xx endgame move 1499..X two points gote 1500xXO 1501 1502:8,OXe,terri(2) 1503 1504O?? 1505*Xx 1506baX 1507xXO 1508 1509;proper_eye(a) && proper_eye(b) 1510 1511 1512Pattern CE24 1513#tm revised terri from 5 to 4 (3.1.20) (see trevord:180 O6) 1514 1515??OX rescue one stone making territory 1516X*.O 1517?O.. 1518 1519:8,X,terri(4) 1520 1521??OX 1522X*.A 1523?Ob. 1524 1525; omoyo(b) && lib(A)==2 1526 1527 1528# Pattern CE25 1529# # tm New pattern (3.1.15) (see trevora:320) 1530# # gf Bad pattern, see olympiad2004:121. 1531# # gf Also no longer needed in trevora:320, removed. (3.7.1) 1532# 1533# O*X 1534# XX. 1535# 1536# :8,OX,terri(1) 1537# 1538# O*X 1539# Xa. 1540# 1541# ;lib(a)==2 1542 1543 1544Pattern CE26 1545# gf New pattern. (3.1.18) (see trevorb:870) 1546 1547O*O 1548X.X 1549 1550:|,OXe 1551 1552 1553Pattern CE27 1554# tm New Pattern (3.1.18) 1555# al1 Revised symmetry. (3.7.11) 1556 1557... moyo breakin worth a lot. 1558X*X 1559?O? 1560 1561:|,-,terri(3) 1562 1563.b. 1564A*C 1565?O? 1566 1567; xmoyo(b) && oplay_break_through(*,b,A,b,C) == WIN 1568 1569 1570Pattern CE28 1571# tm New Pattern (3.1.20) 1572# gf Revised constraint. (3.3.10) 1573 1574OX 1575.* 1576O. 1577 1578:8,nOXe,terri(1) 1579 1580OX 1581A* 1582OB 1583 1584;proper_eye(A) && oplay_attack(*,B,B) 1585 1586 1587Pattern CE28b 1588# gf New pattern. (3.3.10) 1589 1590OX 1591.* 1592O. 1593 1594:8,nOXe 1595 1596 1597Pattern CE29 1598# tm New Pattern (3.1.20) (see trevord:950) 1599# FIXME: this pattern better in patterns.db? 1600# gf Added constraint. (3.3.13) (see gunnar:18) 1601# nando Added s classification and action. (3.7.11) 1602 1603X*X Wedge 1604O.X 1605 1606:8,sOXe 1607 1608B*X 1609OaX 1610 1611;oplay_attack_either(*,a,a,B) 1612 1613>if (!safe_omove(*)) known_safe_move(*) 1614 1615 1616Pattern CE31 1617# gf New pattern. (3.3.6) 1618 1619X.X 1620?*? 1621?O? 1622 1623:|,OXe,terri(0.1) 1624 1625 1626Pattern CE32 1627# gf New pattern. (3.3.17) 1628 1629X*X 1630O.o 1631?O? 1632 1633:8,OXe 1634 1635 1636Pattern CE33 1637# gf New pattern. (3.5.3) 1638# If both colors are alive this does at best fill a dame. 1639 1640OOO 1641O*O 1642?X? 1643 1644:8,OX,maxterri(0.1) 1645 1646 1647Pattern CE34 1648# gf New pattern. (3.7.4) 1649# See gunnar:77. 1650 1651X.* 1652?O. 1653??X 1654 1655:/,OXe 1656 1657 1658###################################################################### 1659# 1660# Center followup patterns 1661# 1662# Patterns in the center which enhance the precision of the CE patterns. 1663# 1664###################################################################### 1665 1666# Pattern CF3 1667# # tm New Pattern (3.1.23) (see arend:36) 1668# # FIXME: Perhaps better in patterns.db? 1669# # gf This pattern is redundant because the followup has already been 1670# # found by find_worm_threats(). (This was broken in 3.1.23 and 3.1.24.) 1671# # al1 Remove pattern. (3.7.11) 1672# 1673# O*.O threaten to save 1674# 1675# :-,- 1676# 1677# b*ca 1678# 1679# ; dead(a) && !dead(b) && oplay_disconnect(*,*,a) && !oplay_attack(*,?,c,a) 1680# 1681# > threaten_to_save(a) 1682 1683 1684###################################################################### 1685# 1686# Eye patterns 1687# 1688# Moves which steal or save a few points by making eye points false. 1689# 1690###################################################################### 1691 1692 1693Pattern EY1 1694# gf Revised constraint. (3.3.10) 1695 1696X*O 1697.X? 1698 1699:8,nOXe,terri(1) 1700 1701X*b 1702aX? 1703 1704;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) && !weak(b) 1705 1706 1707Pattern EY2 1708# gf Revised constraint. (3.3.10) 1709 1710?.O 1711X*. 1712.X? 1713 1714:/,nOXe,terri(1) 1715 1716?.b 1717X*. 1718aX? 1719 1720;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) && !weak(b) 1721 1722 1723Pattern EY3 1724# gf Revised constraint. (3.3.10) 1725 1726O*X 1727.O? 1728 1729:8,nOXe,terri(1) 1730 1731O*X 1732aO? 1733 1734;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) 1735 1736 1737Pattern EY4 1738# gf Revised constraint. (3.3.10) 1739 1740?.X 1741O*. 1742.O? 1743 1744:/,nOXe,terri(1) 1745 1746?.X 1747O*. 1748aO? 1749 1750;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) 1751 1752 1753Pattern EY5 1754# gf Revised constraint. (3.3.10) 1755 1756?.X 1757O.* 1758.O? 1759 1760:8,nOXe,terri(1) 1761 1762?.X 1763Ob* 1764aO? 1765 1766;halfeye(a) && max_eye_value(a)>0 && !false_eye_territory(a) 1767;&& oplay_attack(*,b,b) == WIN 1768 1769 1770# END OF FILE 1771