diff -N -r -u -X .ignore gnugo-copy/engine/combination.c gnugo/engine/combination.c
|
old
|
new
|
|
| 2 | 2 | * This is GNU Go, a Go program. Contact gnugo@gnu.org, or see * |
| 3 | 3 | * http://www.gnu.org/software/gnugo/ for more information. * |
| 4 | 4 | * * |
| 5 | | * Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005 and 2006 * |
| | 5 | * Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 and 2007 * |
| 6 | 6 | * by the Free Software Foundation. * |
| 7 | 7 | * * |
| 8 | 8 | * This program is free software; you can redistribute it and/or * |
| … |
… |
|
| 144 | 144 | remove_attack_threat_move(ii, a_threatened_groups[l]); |
| 145 | 145 | } |
| 146 | 146 | } |
| 147 | | else if (!defend_both(a_threatened_groups[k], |
| 148 | | a_threatened_groups[l])) { |
| | 147 | else if (defend_both(a_threatened_groups[k], |
| | 148 | a_threatened_groups[l]) != WIN) { |
| 149 | 149 | TRACE("Double threat at %1m, either %1m or %1m attacked.\n", |
| 150 | 150 | ii, a_threatened_groups[k], a_threatened_groups[l]); |
| 151 | 151 | add_either_move(ii, ATTACK_STRING, a_threatened_groups[k], |
diff -N -r -u -X .ignore gnugo-copy/engine/reading.c gnugo/engine/reading.c
|
old
|
new
|
|
| 638 | 638 | int a_savepos; |
| 639 | 639 | int b_savepos; |
| 640 | 640 | int acode = 0; |
| 641 | | int dcode = 0; |
| | 641 | int dcode_a; |
| | 642 | int dcode_b; |
| 642 | 643 | |
| 643 | 644 | int color = board[astr]; |
| 644 | 645 | ASSERT1(IS_STONE(color) , astr); |
| … |
… |
|
| 653 | 654 | bstr = t; |
| 654 | 655 | } |
| 655 | 656 | |
| 656 | | attack_and_defend(astr, &acode, NULL, &dcode, &a_savepos); |
| 657 | | if (acode != 0) { |
| | 657 | attack_and_defend(astr, &acode, NULL, &dcode_a, &a_savepos); |
| | 658 | if (acode != LOSE) { |
| 658 | 659 | a_threatened = 1; |
| 659 | | if (dcode != WIN) |
| 660 | | return 0; /* (astr) already lost */ |
| | 660 | if (dcode_a == LOSE) |
| | 661 | return LOSE; /* (astr) already lost */ |
| 661 | 662 | } |
| | 663 | else |
| | 664 | dcode_a = WIN; |
| 662 | 665 | |
| 663 | | attack_and_defend(bstr, &acode, NULL, &dcode, &b_savepos); |
| 664 | | if (acode != 0) { |
| | 666 | attack_and_defend(bstr, &acode, NULL, &dcode_b, &b_savepos); |
| | 667 | if (acode != LOSE) { |
| 665 | 668 | b_threatened = 1; |
| 666 | | if (dcode != WIN) |
| 667 | | return 0; /* (bstr) already lost */ |
| | 669 | if (dcode_b == LOSE) |
| | 670 | return LOSE; /* (bstr) already lost */ |
| 668 | 671 | } |
| | 672 | else |
| | 673 | dcode_b = WIN; |
| 669 | 674 | |
| 670 | 675 | /* Neither string can be attacked or only one of them, in which case |
| 671 | 676 | * we have time to save it. |
| 672 | 677 | */ |
| 673 | 678 | if (!a_threatened || !b_threatened) |
| 674 | | return WIN; |
| | 679 | return gg_min(dcode_a, dcode_b); |
| 675 | 680 | |
| 676 | 681 | /* If both strings are threatened we assume that one will become lost, |
| 677 | 682 | * unless find_defense() happened to return the same defense point for |
| … |
… |
|
| 682 | 687 | */ |
| 683 | 688 | |
| 684 | 689 | if (a_savepos == b_savepos) |
| 685 | | return WIN; /* Both strings can be attacked but also defended |
| 686 | | * by one move. */ |
| | 690 | return gg_min(dcode_a, dcode_b); /* Both strings can be attacked but |
| | 691 | also defended by one move. */ |
| 687 | 692 | |
| 688 | 693 | /* We also try each of the returned defense points and see whether |
| 689 | 694 | * the other string can still be attacked. This still gives a |
diff -N -r -u -X .ignore gnugo-copy/engine/utils.c gnugo/engine/utils.c
|
old
|
new
|
|
| 1384 | 1384 | && trymove(move, color, "double_atari", NO_MOVE)) { |
| 1385 | 1385 | if (countlib(move) > 1 |
| 1386 | 1386 | && (BOARD(m, n+dn) == EMPTY || BOARD(m+dm, n) == EMPTY |
| 1387 | | || !defend_both(POS(m, n+dn), POS(m+dm, n)))) { |
| | 1387 | || defend_both(POS(m, n+dn), POS(m+dm, n)) != WIN)) { |
| 1388 | 1388 | popgo(); |
| 1389 | 1389 | if (value) { |
| 1390 | 1390 | if (worm[POS(m, n+dn)].effective_size |
diff -N -r -u -X .ignore gnugo-copy/patterns/aa_attackpats.db gnugo/patterns/aa_attackpats.db
|
old
|
new
|
|
| 434 | 434 | ?*? |
| 435 | 435 | BAC |
| 436 | 436 | |
| 437 | | ; lib(A) == 1 && lib(B) + lib(C) <= 6 && !oplay_defend_both(*,B,C) |
| | 437 | ; lib(A) == 1 && lib(B) + lib(C) <= 6 && oplay_defend_both(*,B,C)!=WIN |
| 438 | 438 | |
| 439 | 439 | |
| 440 | 440 | Pattern A25 |
diff -N -r -u -X .ignore gnugo-copy/patterns/barriers.db gnugo/patterns/barriers.db
|
old
|
new
|
|
| 215 | 215 | Oc |
| 216 | 216 | ba |
| 217 | 217 | |
| 218 | | ;!safe_omove(a) || oplay_defend_both(a,b,c) |
| | 218 | ;!safe_omove(a) || oplay_defend_both(a,b,c)==WIN |
| 219 | 219 | |
| 220 | 220 | |
| 221 | 221 | Pattern Barrier12 |
| … |
… |
|
| 406 | 406 | Oab. |
| 407 | 407 | .dcO |
| 408 | 408 | |
| 409 | | ;oplay_attack_either(a,b,c,d,b,d) || oplay_defend_both(a,b,c,d,a,c) |
| | 409 | ;oplay_attack_either(a,b,c,d,b,d) || oplay_defend_both(a,b,c,d,a,c)==WIN |
| 410 | 410 | |
| 411 | 411 | |
| 412 | 412 | Pattern Barrier24 |
| … |
… |
|
| 656 | 656 | OcXe |
| 657 | 657 | .bad |
| 658 | 658 | |
| 659 | | ;oplay_defend_both(a,b,c,d,a,e) |
| | 659 | ;oplay_defend_both(a,b,c,d,a,e)==WIN |
| 660 | 660 | |
| 661 | 661 | |
| 662 | 662 | Pattern Barrier42 |
| … |
… |
|
| 669 | 669 | cD? |
| 670 | 670 | baO |
| 671 | 671 | |
| 672 | | ;oplay_attack_either(a,b,b,D) || oplay_defend_both(a,b,a,c) |
| | 672 | ;oplay_attack_either(a,b,b,D) || oplay_defend_both(a,b,a,c)==WIN |
| 673 | 673 | |
| 674 | 674 | |
| 675 | 675 | Pattern Barrier43 |
| … |
… |
|
| 696 | 696 | ..,o |
| 697 | 697 | ---- |
| 698 | 698 | |
| 699 | | ;oplay_attack_either(a,b,c,d,d,b) && !oplay_defend_both(a,c,b,c,E) |
| | 699 | ;oplay_attack_either(a,b,c,d,d,b) && oplay_defend_both(a,c,b,c,E)!=WIN |
| 700 | 700 | |
| 701 | 701 | |
| 702 | 702 | Pattern Barrier45 |
| … |
… |
|
| 1198 | 1198 | bfE |
| 1199 | 1199 | aDc |
| 1200 | 1200 | |
| 1201 | | ;!oplay_defend_both(a,b,c,D,E) |
| | 1201 | ;oplay_defend_both(a,b,c,D,E)!=WIN |
| 1202 | 1202 | >return (!xplay_attack(b,f)); |
| 1203 | 1203 | |
| 1204 | 1204 | |
| … |
… |
|
| 1486 | 1486 | fAb |
| 1487 | 1487 | |
| 1488 | 1488 | ;lib(A)==2 && !oplay_attack(b,b) |
| 1489 | | >return (!xplay_attack(c,d) && xplay_defend_both(e,d,f)); |
| | 1489 | >return (!xplay_attack(c,d) && xplay_defend_both(e,d,f)==WIN); |
| 1490 | 1490 | |
| 1491 | 1491 | |
| 1492 | 1492 | Pattern Intrusion21 |
| … |
… |
|
| 1894 | 1894 | |
| 1895 | 1895 | ;safe_omove(a) |
| 1896 | 1896 | ;&& (o_somewhere(e) || oplay_attack(a,e,e)) |
| 1897 | | ;&& !oplay_defend_both(a,b,c,b,D) |
| | 1897 | ;&& oplay_defend_both(a,b,c,b,D)!=WIN |
| 1898 | 1898 | >return (!xplay_attack(a,f) && (o_somewhere(e) || (!xplay_attack(e,f)))); |
| 1899 | 1899 | |
| 1900 | 1900 | |
| … |
… |
|
| 1913 | 1913 | |
| 1914 | 1914 | ;safe_omove(a) |
| 1915 | 1915 | ;&& (o_somewhere(b) || oplay_attack(a,b,b)) |
| 1916 | | ;&& !oplay_defend_both(a,c,d,e,F,G) |
| | 1916 | ;&& oplay_defend_both(a,c,d,e,F,G)!=WIN |
| 1917 | 1917 | >return (!xplay_attack(a,h)); |
| 1918 | 1918 | |
| 1919 | 1919 | |
| … |
… |
|
| 2263 | 2263 | cDO |
| 2264 | 2264 | |
| 2265 | 2265 | ;oplay_attack(c,b,D) |
| 2266 | | >return !safe_xmove(a) && !oplay_defend_both(c,b,a,b,D); |
| | 2266 | >return !safe_xmove(a) && oplay_defend_both(c,b,a,b,D)!=WIN; |
| 2267 | 2267 | |
| 2268 | 2268 | |
| 2269 | 2269 | Pattern Intrusion63 |
| … |
… |
|
| 2468 | 2468 | ebaO |
| 2469 | 2469 | ---- |
| 2470 | 2470 | |
| 2471 | | ;!oplay_defend_both(a,b,c,b,D) |
| | 2471 | ;oplay_defend_both(a,b,c,b,D)!=WIN |
| 2472 | 2472 | |
| 2473 | 2473 | >non_xterritory(b); |
| 2474 | 2474 | >non_xterritory(c); |
| … |
… |
|
| 2506 | 2506 | bac |
| 2507 | 2507 | --- |
| 2508 | 2508 | |
| 2509 | | ;safe_omove(a) && !oplay_defend_both(a,b,c,?,d,b,E) |
| | 2509 | ;safe_omove(a) && oplay_defend_both(a,b,c,?,d,b,E)!=WIN |
| 2510 | 2510 | |
| 2511 | 2511 | >non_xterritory(d); |
| 2512 | 2512 | |
| … |
… |
|
| 2675 | 2675 | |Xd |
| 2676 | 2676 | |bX |
| 2677 | 2677 | |
| 2678 | | ;!oplay_defend_both(a,b,?,c,a,d) |
| | 2678 | ;oplay_defend_both(a,b,?,c,a,d)!=WIN |
| 2679 | 2679 | |
| 2680 | 2680 | >non_oterritory(a); |
| 2681 | 2681 | >non_oterritory(c); |
| … |
… |
|
| 2692 | 2692 | |ba |
| 2693 | 2693 | |Xc |
| 2694 | 2694 | |
| 2695 | | ;!xplay_defend_both(a,b,c) |
| | 2695 | ;xplay_defend_both(a,b,c)!=WIN |
| 2696 | 2696 | |
| 2697 | 2697 | >non_oterritory(a); |
| 2698 | 2698 | |
| … |
… |
|
| 2709 | 2709 | bacO |
| 2710 | 2710 | ---- |
| 2711 | 2711 | |
| 2712 | | ;!oplay_defend_both(a,b,c,?,d,b,E) |
| | 2712 | ;oplay_defend_both(a,b,c,?,d,b,E)!=WIN |
| 2713 | 2713 | |
| 2714 | 2714 | >non_xterritory(a); |
| 2715 | 2715 | >non_xterritory(b); |
| … |
… |
|
| 2728 | 2728 | dcaeO |
| 2729 | 2729 | ----- |
| 2730 | 2730 | |
| 2731 | | ;!oplay_defend_both(a,b,c,d,e,?,f,d,b) |
| | 2731 | ;oplay_defend_both(a,b,c,d,e,?,f,d,b)!=WIN |
| 2732 | 2732 | |
| 2733 | 2733 | >non_xterritory(a); |
| 2734 | 2734 | >non_xterritory(b); |
| … |
… |
|
| 3096 | 3096 | .cX |
| 3097 | 3097 | .ab |
| 3098 | 3098 | |
| 3099 | | ;!xplay_defend_both(a,b,c) |
| | 3099 | ;xplay_defend_both(a,b,c)!=WIN |
| 3100 | 3100 | |
| 3101 | 3101 | >non_oterritory(a); |
| 3102 | 3102 | |
| … |
… |
|
| 3115 | 3115 | .DO |
| 3116 | 3116 | .bC |
| 3117 | 3117 | |
| 3118 | | ;!oplay_defend_both(a,?,b,C,D) |
| | 3118 | ;oplay_defend_both(a,?,b,C,D)!=WIN |
| 3119 | 3119 | |
| 3120 | 3120 | >non_xterritory(b); |
| 3121 | 3121 | |
| … |
… |
|
| 3172 | 3172 | bX |
| 3173 | 3173 | ac |
| 3174 | 3174 | |
| 3175 | | ;!xplay_defend_both(a,b,c) && !adjacent_to_defendable_stone_in_atari(b) |
| | 3175 | ;xplay_defend_both(a,b,c)!=WIN && !adjacent_to_defendable_stone_in_atari(b) |
| 3176 | 3176 | ;&& !adjacent_to_defendable_stone_in_atari(c) |
| 3177 | 3177 | |
| 3178 | 3178 | >non_oterritory(a); |
| … |
… |
|
| 3286 | 3286 | Oab |
| 3287 | 3287 | ?Xc |
| 3288 | 3288 | |
| 3289 | | ;!oplay_defend_both(a,b,a,c) |
| | 3289 | ;oplay_defend_both(a,b,a,c)!=WIN |
| 3290 | 3290 | |
| 3291 | 3291 | >non_oterritory(b); |
| 3292 | 3292 | >non_oterritory(d); |
| … |
… |
|
| 3344 | 3344 | bXa |
| 3345 | 3345 | cdX |
| 3346 | 3346 | |
| 3347 | | ;!safe_omove(a) && !oplay_defend_both(b,a,?,c,b,d) |
| | 3347 | ;!safe_omove(a) && oplay_defend_both(b,a,?,c,b,d)!=WIN |
| 3348 | 3348 | |
| 3349 | 3349 | >non_oterritory(c); |
| 3350 | 3350 | |
| … |
… |
|
| 3403 | 3403 | ... |
| 3404 | 3404 | --- |
| 3405 | 3405 | |
| 3406 | | ;oplay_defend_both(a,b,c,D,b) && oplay_attack(a,b,a) |
| | 3406 | ;oplay_defend_both(a,b,c,D,b)==WIN && oplay_attack(a,b,a) |
| 3407 | 3407 | |
| 3408 | 3408 | >non_oterritory(e); |
| 3409 | 3409 | |
diff -N -r -u -X .ignore gnugo-copy/patterns/endgame.db gnugo/patterns/endgame.db
|
old
|
new
|
|
| 547 | 547 | X* |
| 548 | 548 | -- |
| 549 | 549 | |
| 550 | | ;eye(*) && proper_eye(a) && oplay_defend_both(*,a,*,b) |
| | 550 | ;eye(*) && proper_eye(a) && oplay_defend_both(*,a,*,b)==WIN |
| 551 | 551 | |
| 552 | 552 | |
| 553 | 553 | Pattern EE303 |
diff -N -r -u -X .ignore gnugo-copy/patterns/helpers.c gnugo/patterns/helpers.c
|
old
|
new
|
|
| 579 | 579 | if (TRYMOVE(cpos, other)) { |
| 580 | 580 | if (board[bpos] == EMPTY |
| 581 | 581 | || board[epos] == EMPTY |
| 582 | | || !defend_both(bpos, epos)) |
| | 582 | || defend_both(bpos, epos) != WIN) |
| 583 | 583 | result = 1; |
| 584 | 584 | popgo(); |
| 585 | 585 | } |
| … |
… |
|
| 639 | 639 | if (TRYMOVE(cpos, color)) { |
| 640 | 640 | if (board[bpos] == EMPTY |
| 641 | 641 | || board[epos] == EMPTY |
| 642 | | || !defend_both(bpos, epos)) |
| | 642 | || defend_both(bpos, epos) != WIN) |
| 643 | 643 | result = 1; |
| 644 | 644 | popgo(); |
| 645 | 645 | } |
| … |
… |
|
| 663 | 663 | ASSERT1(board[worma] == OTHER_COLOR(color) |
| 664 | 664 | && board[wormb] == OTHER_COLOR(color), move); |
| 665 | 665 | |
| 666 | | if (!defend_both(worma, wormb)) { |
| | 666 | if (defend_both(worma, wormb) != WIN) { |
| 667 | 667 | if (0) |
| 668 | 668 | gprintf("%1m: Reject attack_either_move for %1m, %1m (can't defend both)\n", |
| 669 | 669 | move, worma, wormb); |
| … |
… |
|
| 677 | 677 | gprintf("%1m: Rej. attack_either_move for %1m & %1m (regular attack)\n", |
| 678 | 678 | move, worma, wormb); |
| 679 | 679 | } |
| 680 | | else if (!defend_both(worma, wormb)) |
| | 680 | else if (defend_both(worma, wormb) != WIN) |
| 681 | 681 | add_either_move(move, ATTACK_STRING, find_origin(worma), |
| 682 | 682 | ATTACK_STRING, find_origin(wormb)); |
| 683 | 683 | else { |
diff -N -r -u -X .ignore gnugo-copy/patterns/owl_attackpats.db gnugo/patterns/owl_attackpats.db
|
old
|
new
|
|
| 733 | 733 | .... |
| 734 | 734 | ---- |
| 735 | 735 | |
| 736 | | ;!xplay_defend_both(*,b,c,a,b) |
| | 736 | ;xplay_defend_both(*,b,c,a,b)!=WIN |
| 737 | 737 | |
| 738 | 738 | |
| 739 | 739 | Pattern A218 |
| … |
… |
|
| 881 | 881 | ...x |
| 882 | 882 | ---- |
| 883 | 883 | |
| 884 | | ;xplay_attack(*,a,C) || !xplay_defend_both(*,a,b,a,C) |
| | 884 | ;xplay_attack(*,a,C) || xplay_defend_both(*,a,b,a,C)!=WIN |
| 885 | 885 | |
| 886 | 886 | |
| 887 | 887 | Pattern A227 |
| … |
… |
|
| 1280 | 1280 | Y*.. |
| 1281 | 1281 | ?..? |
| 1282 | 1282 | |
| 1283 | | ; oplay_defend_both(*,a,*,b) && !oplay_attack(*,a,b) |
| | 1283 | ; oplay_defend_both(*,a,*,b)==WIN && !oplay_attack(*,a,b) |
| 1284 | 1284 | |
| 1285 | 1285 | |
| 1286 | 1286 | Pattern A401a |
| … |
… |
|
| 1298 | 1298 | Y*.. |
| 1299 | 1299 | ?..? |
| 1300 | 1300 | |
| 1301 | | ; oplay_defend_both(*,a,*,b) |
| | 1301 | ; oplay_defend_both(*,a,*,b)==WIN |
| 1302 | 1302 | |
| 1303 | 1303 | |
| 1304 | 1304 | Pattern A402 |
| … |
… |
|
| 1332 | 1332 | Aad |
| 1333 | 1333 | OYX |
| 1334 | 1334 | |
| 1335 | | ; oplay_defend_both(*,a,b,c,A,b) && oplay_defend_both(*,b,a,d,*,A) |
| | 1335 | ; oplay_defend_both(*,a,b,c,A,b)==WIN && oplay_defend_both(*,b,a,d,*,A)==WIN |
| 1336 | 1336 | |
| 1337 | 1337 | |
| 1338 | 1338 | Pattern A403b |
| … |
… |
|
| 1351 | 1351 | OYX |
| 1352 | 1352 | |
| 1353 | 1353 | ; owl_escape_value(e)>0 |
| 1354 | | ; && oplay_defend_both(*,a,b,c,A,b) && oplay_defend_both(*,b,a,d,*,A) |
| | 1354 | ; && oplay_defend_both(*,a,b,c,A,b)==WIN && oplay_defend_both(*,b,a,d,*,A)==WIN |
| 1355 | 1355 | |
| 1356 | 1356 | |
| 1357 | 1357 | Pattern A404 |
| … |
… |
|
| 1646 | 1646 | .*Y |
| 1647 | 1647 | Abc |
| 1648 | 1648 | |
| 1649 | | ;owl_escape_value(A)>0 && oplay_defend_both(*,b,*,c) |
| | 1649 | ;owl_escape_value(A)>0 && oplay_defend_both(*,b,*,c)==WIN |
| 1650 | 1650 | |
| 1651 | 1651 | |
| 1652 | 1652 | Pattern A416 |
| … |
… |
|
| 1705 | 1705 | .*A |
| 1706 | 1706 | |
| 1707 | 1707 | ;(owl_escape_value(A)>0) |
| 1708 | | ; && oplay_defend_both(*,c,*,d) |
| | 1708 | ; && oplay_defend_both(*,c,*,d)==WIN |
| 1709 | 1709 | |
| 1710 | 1710 | |
| 1711 | 1711 | Pattern A419b |
| … |
… |
|
| 1720 | 1720 | .*Y |
| 1721 | 1721 | |
| 1722 | 1722 | ;(owl_escape_value(A)>0) |
| 1723 | | ; && oplay_defend_both(*,c,*,d) |
| | 1723 | ; && oplay_defend_both(*,c,*,d)==WIN |
| 1724 | 1724 | |
| 1725 | 1725 | |
| 1726 | 1726 | Pattern A420 |
| … |
… |
|
| 1738 | 1738 | bd*. |
| 1739 | 1739 | xexx |
| 1740 | 1740 | |
| 1741 | | ;owl_escape_value(e)>0 && !xplay_defend_both(*,a,b,c,d) |
| | 1741 | ;owl_escape_value(e)>0 && xplay_defend_both(*,a,b,c,d)!=WIN |
| 1742 | 1742 | |
| 1743 | 1743 | |
| 1744 | 1744 | Pattern A421 |
| … |
… |
|
| 2476 | 2476 | XA* |
| 2477 | 2477 | --- |
| 2478 | 2478 | |
| 2479 | | ; oplay_defend_both(*,A,b,*) |
| | 2479 | ; oplay_defend_both(*,A,b,*)==WIN |
| 2480 | 2480 | |
| 2481 | 2481 | |
| 2482 | 2482 | Pattern A619 |
| … |
… |
|
| 2906 | 2906 | |
| 2907 | 2907 | ;lib(A) == 3 && !obvious_false_xeye(d) |
| 2908 | 2908 | ;&& oplay_defend(*,b,c,*) && oplay_defend(*,e,c,*) |
| 2909 | | ;&& oplay_defend_both(*,c,b,d,e,b,e) |
| | 2909 | ;&& oplay_defend_both(*,c,b,d,e,b,e)==WIN |
| 2910 | 2910 | |
| 2911 | 2911 | |
| 2912 | 2912 | ######################################################### |
| … |
… |
|
| 3696 | 3696 | X*? |
| 3697 | 3697 | |
| 3698 | 3698 | ; owl_escape_value(b)>0 |
| 3699 | | ; && oplay_defend_both(*,A,b,c,b) |
| 3700 | | ; && oplay_defend_both(*,A,b,b,*) |
| | 3699 | ; && oplay_defend_both(*,A,b,c,b)==WIN |
| | 3700 | ; && oplay_defend_both(*,A,b,b,*)==WIN |
| 3701 | 3701 | |
| 3702 | 3702 | |
| 3703 | 3703 | Pattern A1014 |
| … |
… |
|
| 3727 | 3727 | AfgB |
| 3728 | 3728 | |
| 3729 | 3729 | ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) |
| 3730 | | ; && oplay_defend_both(*,g,f,e,f,*) |
| | 3730 | ; && oplay_defend_both(*,g,f,e,f,*)==WIN |
| 3731 | 3731 | |
| 3732 | 3732 | |
| 3733 | 3733 | Pattern A1015a |
| … |
… |
|
| 3741 | 3741 | AfgB |
| 3742 | 3742 | |
| 3743 | 3743 | ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) |
| 3744 | | ; && oplay_defend_both(*,g,f,e,f,*) |
| | 3744 | ; && oplay_defend_both(*,g,f,e,f,*)==WIN |
| 3745 | 3745 | |
| 3746 | 3746 | |
| 3747 | 3747 | Pattern A1016 |
| … |
… |
|
| 3760 | 3760 | |
| 3761 | 3761 | ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) |
| 3762 | 3762 | ; && ((x_somewhere(d) && xplay_attack_either(*,c,c,e)) |
| 3763 | | ; || (!x_somewhere(d) && !xplay_defend_both(*,c,d,c,e))) |
| | 3763 | ; || (!x_somewhere(d) && xplay_defend_both(*,c,d,c,e)!=WIN)) |
| 3764 | 3764 | |
| 3765 | 3765 | |
| 3766 | 3766 | Pattern A1016a |
| … |
… |
|
| 3779 | 3779 | |
| 3780 | 3780 | ; (owl_escape_value(A) > 0 || owl_escape_value(B) > 0) |
| 3781 | 3781 | ; && ((x_somewhere(d) && xplay_attack_either(*,c,c,e)) |
| 3782 | | ; || (!x_somewhere(d) && !xplay_defend_both(*,c,d,c,e))) |
| | 3782 | ; || (!x_somewhere(d) && xplay_defend_both(*,c,d,c,e)!=WIN)) |
| 3783 | 3783 | |
| 3784 | 3784 | |
| 3785 | 3785 | Pattern A1017 |
| … |
… |
|
| 4012 | 4012 | ?Y? |
| 4013 | 4013 | |
| 4014 | 4014 | ; vital_chain(A) && vital_chain(B) |
| 4015 | | ; && !xplay_defend_both(*,A,B) |
| | 4015 | ; && xplay_defend_both(*,A,B)!=WIN |
| 4016 | 4016 | |
| 4017 | 4017 | |
| 4018 | 4018 | Pattern A1102 |
| … |
… |
|
| 4027 | 4027 | c*O |
| 4028 | 4028 | ?Y? |
| 4029 | 4029 | |
| 4030 | | ;!xplay_defend_both(*,a,b,a,c) |
| | 4030 | ;xplay_defend_both(*,a,b,a,c)!=WIN |
| 4031 | 4031 | |
| 4032 | 4032 | |
| 4033 | 4033 | Pattern A1104 |
| … |
… |
|
| 4102 | 4102 | Yb? |
| 4103 | 4103 | |
| 4104 | 4104 | ; vital_chain(a) && vital_chain(b) |
| 4105 | | ; && !xplay_defend_both(*,a,b) |
| | 4105 | ; && xplay_defend_both(*,a,b)!=WIN |
| 4106 | 4106 | |
| 4107 | 4107 | |
| 4108 | 4108 | Pattern A1107b |
| … |
… |
|
| 4122 | 4122 | Yc |
| 4123 | 4123 | |
| 4124 | 4124 | ;lib(c)>2 && vital_chain(b) && vital_chain(c) |
| 4125 | | ;&& oplay_attack(*,a,a) && !xplay_defend_both(a,b,c) |
| | 4125 | ;&& oplay_attack(*,a,a) && xplay_defend_both(a,b,c)!=WIN |
| 4126 | 4126 | |
| 4127 | 4127 | # nn Removal candidate (3.3.13) |
| 4128 | 4128 | # Success rate in regressions : 0.9 % (23/2562) |
| … |
… |
|
| 4142 | 4142 | Yc |
| 4143 | 4143 | |
| 4144 | 4144 | ;lib(c)>2 && vital_chain(b) && vital_chain(c) |
| 4145 | | ;&& oplay_attack(*,a,a) && !xplay_defend_both(a,b,c) |
| | 4145 | ;&& oplay_attack(*,a,a) && xplay_defend_both(a,b,c)!=WIN |
| 4146 | 4146 | |
| 4147 | 4147 | |
| 4148 | 4148 | Pattern A1108 |
| … |
… |
|
| 4282 | 4282 | *bX |
| 4283 | 4283 | xCx |
| 4284 | 4284 | |
| 4285 | | ;owl_escape_value(C)>0 && owl_goal_dragon(D) && !xplay_defend_both(*,a,b) |
| | 4285 | ;owl_escape_value(C)>0 && owl_goal_dragon(D) && xplay_defend_both(*,a,b)!=WIN |
| 4286 | 4286 | |
| 4287 | 4287 | |
| 4288 | 4288 | Pattern A1117 |
| … |
… |
|
| 4296 | 4296 | X*b |
| 4297 | 4297 | ?aY |
| 4298 | 4298 | |
| 4299 | | ;!xplay_defend_both(*,a,b) |
| | 4299 | ;xplay_defend_both(*,a,b)!=WIN |
| 4300 | 4300 | |
| 4301 | 4301 | |
| 4302 | 4302 | Pattern A1117a |
| … |
… |
|
| 4310 | 4310 | Y*b |
| 4311 | 4311 | ?aX |
| 4312 | 4312 | |
| 4313 | | ;!xplay_defend_both(*,a,b) |
| | 4313 | ;xplay_defend_both(*,a,b)!=WIN |
| 4314 | 4314 | |
| 4315 | 4315 | |
| 4316 | 4316 | Pattern A1118 |
| … |
… |
|
| 4454 | 4454 | |
| 4455 | 4455 | ;(owl_escape_value(c) > 0 |
| 4456 | 4456 | ; || owl_escape_value(b) > 0) |
| 4457 | | ;&& oplay_defend_both(*,d,A,*) |
| | 4457 | ;&& oplay_defend_both(*,d,A,*)==WIN |
| 4458 | 4458 | |
| 4459 | 4459 | |
| 4460 | 4460 | Pattern A1124a |
| … |
… |
|
| 4476 | 4476 | ;(owl_escape_value(d) > 0 |
| 4477 | 4477 | ; || owl_escape_value(b) > 0 |
| 4478 | 4478 | ; || owl_escape_value(c) > 0) |
| 4479 | | ;&& !oplay_defend_both(e,*,A,e) |
| | 4479 | ;&& oplay_defend_both(e,*,A,e)!=WIN |
| 4480 | 4480 | |
| 4481 | 4481 | |
| 4482 | 4482 | Pattern A1124b |
| … |
… |
|
| 4987 | 4987 | ?a? |
| 4988 | 4988 | B*C |
| 4989 | 4989 | |
| 4990 | | ;attack(a) && !oplay_attack(*,a) && !oplay_defend_both(*,B,C) |
| | 4990 | ;attack(a) && !oplay_attack(*,a) && oplay_defend_both(*,B,C)!=WIN |
| 4991 | 4991 | |
| 4992 | 4992 | |
| 4993 | 4993 | ######################################################### |
diff -N -r -u -X .ignore gnugo-copy/patterns/owl_defendpats.db gnugo/patterns/owl_defendpats.db
|
old
|
new
|
|
| 4252 | 4252 | A* |
| 4253 | 4253 | OB |
| 4254 | 4254 | |
| 4255 | | ;vital_chain(A) && vital_chain(B) && !ko(*) && !oplay_defend_both(*,A,B) |
| | 4255 | ;vital_chain(A) && vital_chain(B) && !ko(*) && oplay_defend_both(*,A,B)!=WIN |
| 4256 | 4256 | |
| 4257 | 4257 | |
| 4258 | 4258 | Pattern D1100b |
| … |
… |
|
| 4266 | 4266 | A* |
| 4267 | 4267 | OB |
| 4268 | 4268 | |
| 4269 | | ;vital_chain(A)>1 && vital_chain(B)>1 && !oplay_defend_both(*,A,B) |
| | 4269 | ;vital_chain(A)>1 && vital_chain(B)>1 && oplay_defend_both(*,A,B)!=WIN |
| 4270 | 4270 | |
| 4271 | 4271 | |
| 4272 | 4272 | Pattern D1101 |
| … |
… |
|
| 4402 | 4402 | eOODf |
| 4403 | 4403 | ..... |
| 4404 | 4404 | |
| 4405 | | ; !oplay_defend_both(*,f,a,B,C) && oplay_attack(*,D) && !safe_xmove(e) |
| | 4405 | ; oplay_defend_both(*,f,a,B,C)!=WIN && oplay_attack(*,D) && !safe_xmove(e) |
| 4406 | 4406 | |
| 4407 | 4407 | |
| 4408 | 4408 | Pattern D1108b |
| … |
… |
|
| 4419 | 4419 | .aaXX |
| 4420 | 4420 | ..... |
| 4421 | 4421 | |
| 4422 | | ;owl_goal_dragon(a) && !oplay_defend_both(*,B,C) |
| | 4422 | ;owl_goal_dragon(a) && oplay_defend_both(*,B,C)!=WIN |
| 4423 | 4423 | |
| 4424 | 4424 | |
| 4425 | 4425 | Pattern D1109 |
| … |
… |
|
| 4732 | 4732 | OAc |
| 4733 | 4733 | B*? |
| 4734 | 4734 | |
| 4735 | | ;lib(A)==2 && owl_escape_value(c)>0 && !oplay_defend_both(*,A,B) |
| | 4735 | ;lib(A)==2 && owl_escape_value(c)>0 && oplay_defend_both(*,A,B)!=WIN |
| 4736 | 4736 | |
| 4737 | 4737 | |
| 4738 | 4738 | Pattern D1125 |
| … |
… |
|
| 4957 | 4957 | aO |
| 4958 | 4958 | Ob |
| 4959 | 4959 | |
| 4960 | | ; (owl_escape_value(*) > 0) && !oplay_defend_both(*,a,b) |
| | 4960 | ; (owl_escape_value(*) > 0) && oplay_defend_both(*,a,b)!=WIN |
| 4961 | 4961 | |
| 4962 | 4962 | |
| 4963 | 4963 | Pattern D1140 |
| … |
… |
|
| 5121 | 5121 | *.O |
| 5122 | 5122 | Boo |
| 5123 | 5123 | |
| 5124 | | ; lib(A)==2 && !oplay_defend_both(*,A,B) |
| | 5124 | ; lib(A)==2 && oplay_defend_both(*,A,B)!=WIN |
| 5125 | 5125 | |
| 5126 | 5126 | |
| 5127 | 5127 | Pattern D1202 |
| … |
… |
|
| 5835 | 5835 | dab. |
| 5836 | 5836 | ofoo |
| 5837 | 5837 | |
| 5838 | | ;owl_escape_value(f)>0 && !oplay_defend_both(*,a,b,c,d,a,E) |
| | 5838 | ;owl_escape_value(f)>0 && oplay_defend_both(*,a,b,c,d,a,E)!=WIN |
| 5839 | 5839 | |
| 5840 | 5840 | |
| 5841 | 5841 | Pattern D1331 |
| … |
… |
|
| 5852 | 5852 | bD*. |
| 5853 | 5853 | oeoo |
| 5854 | 5854 | |
| 5855 | | ;owl_escape_value(e)>0 && !oplay_defend_both(*,a,b,C,D) |
| | 5855 | ;owl_escape_value(e)>0 && oplay_defend_both(*,a,b,C,D)!=WIN |
| 5856 | 5856 | |
| 5857 | 5857 | |
| 5858 | 5858 | Pattern D1332 |
| … |
… |
|
| 5887 | 5887 | *BO |
| 5888 | 5888 | oco |
| 5889 | 5889 | |
| 5890 | | ;owl_escape_value(c)>0 && owl_goal_dragon(d) && !oplay_defend_both(*,A,B) |
| | 5890 | ;owl_escape_value(c)>0 && owl_goal_dragon(d) && oplay_defend_both(*,A,B)!=WIN |
| 5891 | 5891 | |
| 5892 | 5892 | |
| 5893 | 5893 | Pattern D1333b |
| … |
… |
|
| 5969 | 5969 | dc*. |
| 5970 | 5970 | ofoo |
| 5971 | 5971 | |
| 5972 | | ;owl_escape_value(f)>0 && !oplay_defend_both(*,a,b,c,d,c,E) |
| | 5972 | ;owl_escape_value(f)>0 && oplay_defend_both(*,a,b,c,d,c,E)!=WIN |
| 5973 | 5973 | |
| 5974 | 5974 | |
| 5975 | 5975 | Pattern D1338 |
| … |
… |
|
| 5986 | 5986 | baO. |
| 5987 | 5987 | odoo |
| 5988 | 5988 | |
| 5989 | | ;owl_escape_value(d)>0 && !oplay_defend_both(*,a,b,a,C) |
| | 5989 | ;owl_escape_value(d)>0 && oplay_defend_both(*,a,b,a,C)!=WIN |
| 5990 | 5990 | |
| 5991 | 5991 | |
| 5992 | 5992 | Pattern D1339 |
| … |
… |
|
| 6707 | 6707 | |
| 6708 | 6708 | ; (owl_escape_value(a) > 0 || owl_escape_value(b) > 0) |
| 6709 | 6709 | ; && ((o_somewhere(d) && oplay_attack_either(*,c,c,E)) |
| 6710 | | ; || (!o_somewhere(d) && !oplay_defend_both(*,c,d,c,E))) |
| | 6710 | ; || (!o_somewhere(d) && oplay_defend_both(*,c,d,c,E)!=WIN)) |
| 6711 | 6711 | |
| 6712 | 6712 | |
| 6713 | 6713 | Pattern D1377 |
diff -N -r -u -X .ignore gnugo-copy/patterns/owl_vital_apats.db gnugo/patterns/owl_vital_apats.db
|
old
|
new
|
|
| 615 | 615 | .OX |
| 616 | 616 | *XA |
| 617 | 617 | |
| 618 | | ; oplay_defend_both(*,A,*) |
| | 618 | ; oplay_defend_both(*,A,*)==WIN |
| 619 | 619 | |
| 620 | 620 | |
| 621 | 621 | Pattern VA35 |
| … |
… |
|
| 841 | 841 | a* |
| 842 | 842 | Xb |
| 843 | 843 | |
| 844 | | ;vital_chain(a) && vital_chain(b) && !ko(*) && !xplay_defend_both(*,a,b) |
| | 844 | ;vital_chain(a) && vital_chain(b) && !ko(*) && xplay_defend_both(*,a,b)==LOSE |
| 845 | 845 | |
| 846 | 846 | |
| 847 | 847 | Pattern VA47b |
| … |
… |
|
| 857 | 857 | a* |
| 858 | 858 | Xb |
| 859 | 859 | |
| 860 | | ;vital_chain(a) && vital_chain(b) && ko(*) && !xplay_defend_both(*,a,b) |
| | 860 | ;vital_chain(a) && vital_chain(b) && ko(*) && xplay_defend_both(*,a,b)!=WIN |
| 861 | 861 | |
| 862 | 862 | |
| 863 | 863 | Pattern VA48 |
diff -N -r -u -X .ignore gnugo-copy/patterns/patterns.db gnugo/patterns/patterns.db
|
old
|
new
|
|
| 553 | 553 | O*d |
| 554 | 554 | ?eb |
| 555 | 555 | |
| 556 | | ;oplay_defend_both(*,a,b,*,b) && oplay_defend_both(*,b,a,*,a) |
| | 556 | ;oplay_defend_both(*,a,b,*,b)==WIN && oplay_defend_both(*,b,a,*,a)==WIN |
| 557 | 557 | |
| 558 | 558 | >add_cut_move(c,d); |
| 559 | 559 | >add_cut_move(c,e); |
| … |
… |
|
| 716 | 716 | *a |
| 717 | 717 | .X |
| 718 | 718 | |
| 719 | | ;oplay_defend_both(*,a,*,b) |
| | 719 | ;oplay_defend_both(*,a,*,b)==WIN |
| 720 | 720 | |
| 721 | 721 | |
| 722 | 722 | Pattern CC44 |
| … |
… |
|
| 889 | 889 | c*a |
| 890 | 890 | ??X |
| 891 | 891 | |
| 892 | | ;alive(c) && oplay_defend_both(*,a,*,b) |
| | 892 | ;alive(c) && oplay_defend_both(*,a,*,b)==WIN |
| 893 | 893 | |
| 894 | 894 | |
| 895 | 895 | Pattern CC54 |
| … |
… |
|
| 1056 | 1056 | Xab |
| 1057 | 1057 | Xcd |
| 1058 | 1058 | |
| 1059 | | ;!oplay_attack_either(*,a,b,*,b) && oplay_defend_both(*,b,a,c,a,d) |
| | 1059 | ;!oplay_attack_either(*,a,b,*,b) && oplay_defend_both(*,b,a,c,a,d)==WIN |
| 1060 | 1060 | |
| 1061 | 1061 | |
| 1062 | 1062 | Pattern CC68 |
| … |
… |
|
| 1073 | 1073 | .Xab |
| 1074 | 1074 | ..cd |
| 1075 | 1075 | |
| 1076 | | ;!oplay_attack_either(*,a,b,*,b) && oplay_defend_both(*,b,a,c,a,d) |
| | 1076 | ;!oplay_attack_either(*,a,b,*,b) && oplay_defend_both(*,b,a,c,a,d)==WIN |
| 1077 | 1077 | |
| 1078 | 1078 | |
| 1079 | 1079 | Pattern CC69 |
| … |
… |
|
| 1098 | 1098 | aX*E |
| 1099 | 1099 | ?gcd |
| 1100 | 1100 | |
| 1101 | | ;(alive(f) || alive(g)) && !oplay_defend_both(*,a,b,c,d,c,E) |
| | 1101 | ;(alive(f) || alive(g)) && oplay_defend_both(*,a,b,c,d,c,E)!=WIN |
| 1102 | 1102 | |
| 1103 | 1103 | |
| 1104 | 1104 | Pattern CC71 |
| … |
… |
|
| 1116 | 1116 | aX*E |
| 1117 | 1117 | ?fcd |
| 1118 | 1118 | |
| 1119 | | ;!oplay_defend_both(*,a,b,c,d,c,E) && (dragonsize(f) <= wormsize(E)) |
| | 1119 | ;oplay_defend_both(*,a,b,c,d,c,E)!=WIN && (dragonsize(f) <= wormsize(E)) |
| 1120 | 1120 | |
| 1121 | 1121 | |
| 1122 | 1122 | Pattern CC72 |
| … |
… |
|
| 1387 | 1387 | ----- |
| 1388 | 1388 | |
| 1389 | 1389 | ;odefend_against(*,d) |
| 1390 | | ;&& !oplay_defend_both(*,a,b,a,E) |
| | 1390 | ;&& oplay_defend_both(*,a,b,a,E)!=WIN |
| 1391 | 1391 | ;&& oplay_attack_either(*,b,a,c,b,c) |
| 1392 | 1392 | |
| 1393 | 1393 | |
| … |
… |
|
| 1475 | 1475 | .... |
| 1476 | 1476 | ---- |
| 1477 | 1477 | |
| 1478 | | ;!xplay_defend_both(*,a,b,a,D) && xplay_attack_either(*,b,a,c,b,c) |
| | 1478 | ;xplay_defend_both(*,a,b,a,D)!=WIN && xplay_attack_either(*,b,a,c,b,c) |
| 1479 | 1479 | |
| 1480 | 1480 | |
| 1481 | 1481 | Pattern EC8 |
| … |
… |
|
| 1770 | 1770 | cad |
| 1771 | 1771 | --- |
| 1772 | 1772 | |
| 1773 | | ;!xplay_defend_both(*,a,b,a,e) |
| | 1773 | ;xplay_defend_both(*,a,b,a,e)!=WIN |
| 1774 | 1774 | ;&& xplay_attack_either(*,b,a,d,d,b) |
| 1775 | 1775 | ;&& oplay_attack_either(*,b,b,c) |
| 1776 | 1776 | ;&& oplay_attack_either(*,a,d,b,b,c) |
| … |
… |
|
| 2150 | 2150 | ----- |
| 2151 | 2151 | |
| 2152 | 2152 | ;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,d,e,f,d,f) |
| 2153 | | ;&& !oplay_defend_both(*,b,a,d,e,b,d) |
| 2154 | | ;&& !oplay_defend_both(*,e,d,a,b,e,a) |
| | 2153 | ;&& oplay_defend_both(*,b,a,d,e,b,d)!=WIN |
| | 2154 | ;&& oplay_defend_both(*,e,d,a,b,e,a)!=WIN |
| 2155 | 2155 | |
| 2156 | 2156 | |
| 2157 | 2157 | Pattern EC58 |
| … |
… |
|
| 2170 | 2170 | ..... |
| 2171 | 2171 | ----- |
| 2172 | 2172 | |
| 2173 | | ;!oplay_defend_both(*,b,a,b,I) && oplay_attack_either(*,a,b,c,a,c) |
| | 2173 | ;oplay_defend_both(*,b,a,b,I)!=WIN && oplay_attack_either(*,a,b,c,a,c) |
| 2174 | 2174 | ;&& oplay_attack_either(*,b,a,d,e,f,g,h,f,h) |
| 2175 | | ;&& !oplay_defend_both(*,b,a,d,e,g,f,g,I) |
| | 2175 | ;&& oplay_defend_both(*,b,a,d,e,g,f,g,I)!=WIN |
| 2176 | 2176 | |
| 2177 | 2177 | |
| 2178 | 2178 | Pattern EC59 |
| … |
… |
|
| 2229 | 2229 | .... |
| 2230 | 2230 | ---- |
| 2231 | 2231 | |
| 2232 | | ; oplay_defend_both(*,a,*,b) |
| | 2232 | ; oplay_defend_both(*,a,*,b)==WIN |
| 2233 | 2233 | |
| 2234 | 2234 | |
| 2235 | 2235 | Pattern EC61 |
| … |
… |
|
| 2632 | 2632 | a*X |
| 2633 | 2633 | --- |
| 2634 | 2634 | |
| 2635 | | ;(safe_xmove(*) && xplay_defend_both(*,a,*,B)) || xdefend_against(a,*) |
| | 2635 | ;(safe_xmove(*) && xplay_defend_both(*,a,*,B)==WIN) || xdefend_against(a,*) |
| 2636 | 2636 | |
| 2637 | 2637 | |
| 2638 | 2638 | Pattern EC106 |
| … |
… |
|
| 2704 | 2704 | a*.X |
| 2705 | 2705 | ---- |
| 2706 | 2706 | |
| 2707 | | ;safe_xmove(*) && xplay_defend_both(*,a,*,B) |
| | 2707 | ;safe_xmove(*) && xplay_defend_both(*,a,*,B)==WIN |
| 2708 | 2708 | |
| 2709 | 2709 | |
| 2710 | 2710 | Pattern EC202 |
| … |
… |
|
| 2719 | 2719 | ac.X |
| 2720 | 2720 | ---- |
| 2721 | 2721 | |
| 2722 | | ;xplay_defend_both(c,a,c,B) |
| | 2722 | ;xplay_defend_both(c,a,c,B)==WIN |
| 2723 | 2723 | |
| 2724 | 2724 | |
| 2725 | 2725 | Pattern EC203 |
| … |
… |
|
| 5302 | 5302 | Xbd |
| 5303 | 5303 | --- |
| 5304 | 5304 | |
| 5305 | | ;!oplay_defend_both(b,c,a,b) && !oplay_defend_both(c,b,d,*,c,d) |
| | 5305 | ;oplay_defend_both(b,c,a,b)!=WIN && oplay_defend_both(c,b,d,*,c,d)!=WIN |
| 5306 | 5306 | |
| 5307 | 5307 | |
| 5308 | 5308 | Pattern EB716 |
| … |
… |
|
| 5318 | 5318 | Xbd |
| 5319 | 5319 | --- |
| 5320 | 5320 | |
| 5321 | | ;!oplay_defend_both(b,*,a,b) && oplay_defend_both(*,b,d,c,a,d) |
| | 5321 | ;oplay_defend_both(b,*,a,b)!=WIN && oplay_defend_both(*,b,d,c,a,d)==WIN |
| 5322 | 5322 | |
| 5323 | 5323 | |
| 5324 | 5324 | Pattern EB717 |
| … |
… |
|
| 5353 | 5353 | Xb. |
| 5354 | 5354 | --- |
| 5355 | 5355 | |
| 5356 | | ;!oplay_defend_both(b,c,a,b) && oplay_defend_both(*,c,a,*) |
| | 5356 | ;oplay_defend_both(b,c,a,b)!=WIN && oplay_defend_both(*,c,a,*)==WIN |
| 5357 | 5357 | |
| 5358 | 5358 | |
| 5359 | 5359 | Pattern EB719 |
| … |
… |
|
| 5370 | 5370 | Cee* |
| 5371 | 5371 | ---- |
| 5372 | 5372 | |
| 5373 | | ;alive(d) && critical(e) && !oplay_defend_both(*,?,a,B,C) |
| | 5373 | ;alive(d) && critical(e) && oplay_defend_both(*,?,a,B,C)!=WIN |
| 5374 | 5374 | |
| 5375 | 5375 | |
| 5376 | 5376 | ############################################################ |
| … |
… |
|
| 6337 | 6337 | ?a*bo |
| 6338 | 6338 | ----- |
| 6339 | 6339 | |
| 6340 | | ;xmoyo(e) && !oplay_defend_both(*,a,b,?,c,a,D) && !oplay_attack(*,a,b,c,*) |
| | 6340 | ;xmoyo(e) && oplay_defend_both(*,a,b,?,c,a,D)!=WIN && !oplay_attack(*,a,b,c,*) |
| 6341 | 6341 | |
| 6342 | 6342 | |
| 6343 | 6343 | ############# |
| … |
… |
|
| 7706 | 7706 | |
| 7707 | 7707 | ; lib(c)>1 |
| 7708 | 7708 | ; && !oplay_attack(*,b) |
| 7709 | | ; && oplay_defend_both(*,A,*,b) |
| | 7709 | ; && oplay_defend_both(*,A,*,b)==WIN |
| 7710 | 7710 | ; && (oplay_attack(*,A,e) || !x_alive_somewhere(D,F)) |
| 7711 | 7711 | |
| 7712 | 7712 | |
| … |
… |
|
| 9665 | 9665 | ..A? |
| 9666 | 9666 | ---- |
| 9667 | 9667 | |
| 9668 | | ;oplay_attack(*,A) && oplay_defend_both(*,c,*,b) |
| | 9668 | ;oplay_attack(*,A) && oplay_defend_both(*,c,*,b)==WIN |
| 9669 | 9669 | |
| 9670 | 9670 | |
| 9671 | 9671 | Pattern ED23 |
| … |
… |
|
| 10449 | 10449 | OBa |
| 10450 | 10450 | |
| 10451 | 10451 | ;xterri(a) && !attack(B) && !attack(C) && !oplay_attack(*,?,a,a) |
| 10452 | | ;&& !oplay_defend_both(*,?,a,B,C) |
| | 10452 | ;&& oplay_defend_both(*,?,a,B,C)!=WIN |
| 10453 | 10453 | |
| 10454 | 10454 | |
| 10455 | 10455 | Pattern ED71 |
| … |
… |
|
| 11185 | 11185 | cEa. |
| 11186 | 11186 | ?EO. |
| 11187 | 11187 | |
| 11188 | | ;lib(E)==2 && !oplay_attack(*,c) && !oplay_defend_both(*,a,b,E,D) |
| | 11188 | ;lib(E)==2 && !oplay_attack(*,c) && oplay_defend_both(*,a,b,E,D)!=WIN |
| 11189 | 11189 | |
| 11190 | 11190 | >test_attack_either_move(D,E); |
| 11191 | 11191 | |
| … |
… |
|
| 11207 | 11207 | # dX* |
| 11208 | 11208 | # ?a? |
| 11209 | 11209 | # |
| 11210 | | # ;!oplay_defend_both(*,a,b,c,d,e) |
| | 11210 | # ;oplay_defend_both(*,a,b,c,d,e)!=WIN |
| 11211 | 11211 | # |
| 11212 | 11212 | # >antisuji(*); |
| 11213 | 11213 | |
diff -N -r -u -X .ignore gnugo-copy/patterns/patterns2.db gnugo/patterns/patterns2.db
|
old
|
new
|
|
| 99 | 99 | .OaO |
| 100 | 100 | *dbc |
| 101 | 101 | |
| 102 | | ;oplay_attack_either(*,a,b,c,a,c) && !oplay_defend_both(*,a,b,d,c,a,d) |
| | 102 | ;oplay_attack_either(*,a,b,c,a,c) && oplay_defend_both(*,a,b,d,c,a,d)!=WIN |
| 103 | 103 | |
| 104 | 104 | |
| 105 | 105 | Pattern Conn105 |
| … |
… |
|
| 280 | 280 | eaf? |
| 281 | 281 | |
| 282 | 282 | ;oplay_attack_either(*,a,b,c,a,c) && oplay_attack_either(*,b,a,e,b,e) |
| 283 | | ;&& oplay_defend_both(*,c,*,f) |
| | 283 | ;&& oplay_defend_both(*,c,*,f)==WIN |
| 284 | 284 | |
| 285 | 285 | |
| 286 | 286 | Pattern Conn304 |
| … |
… |
|
| 294 | 294 | Obc* |
| 295 | 295 | Eaf? |
| 296 | 296 | |
| 297 | | ;oplay_attack_either(*,a,b,c,a,c) && !oplay_defend_both(*,b,a,b,E) |
| 298 | | ;&& oplay_defend_both(*,c,*,f) |
| | 297 | ;oplay_attack_either(*,a,b,c,a,c) && oplay_defend_both(*,b,a,b,E)!=WIN |
| | 298 | ;&& oplay_defend_both(*,c,*,f)==WIN |
| 299 | 299 | |
| 300 | 300 | |
| 301 | 301 | Pattern Conn305 |
| … |
… |
|
| 321 | 321 | Obc? |
| 322 | 322 | EaO* |
| 323 | 323 | |
| 324 | | ;oplay_attack_either(*,a,b,c,a,c) && !oplay_defend_both(*,b,a,b,E) |
| | 324 | ;oplay_attack_either(*,a,b,c,a,c) && oplay_defend_both(*,b,a,b,E)!=WIN |
| 325 | 325 | |
| 326 | 326 | |
| 327 | 327 | Pattern Conn307 |
| … |
… |
|
| 334 | 334 | ObD? |
| 335 | 335 | caO* |
| 336 | 336 | |
| 337 | | ;!oplay_defend_both(*,a,b,a,D) && oplay_attack_either(*,b,a,c,b,c) |
| | 337 | ;oplay_defend_both(*,a,b,a,D)!=WIN && oplay_attack_either(*,b,a,c,b,c) |
| 338 | 338 | |
| 339 | 339 | |
| 340 | 340 | Pattern Conn308 |
| … |
… |
|
| 360 | 360 | Oa* |
| 361 | 361 | EbO |
| 362 | 362 | |
| 363 | | ;!oplay_defend_both(*,a,b,a,E) |
| | 363 | ;oplay_defend_both(*,a,b,a,E)!=WIN |
| 364 | 364 | |
| 365 | 365 | |
| 366 | 366 | Pattern Conn310 |
| … |
… |
|
| 444 | 444 | O*B |
| 445 | 445 | .AO |
| 446 | 446 | |
| 447 | | ;!oplay_defend_both(*,A,B) |
| | 447 | ;oplay_defend_both(*,A,B)!=WIN |
| 448 | 448 | |
| 449 | 449 | |
| 450 | 450 | ############################################## |
| … |
… |
|
| 539 | 539 | OacO |
| 540 | 540 | *bde |
| 541 | 541 | |
| 542 | | ;oplay_attack_either(*,a,b,c,d,e,c,e) && !oplay_defend_both(*,a,b,d,c,a,d) |
| | 542 | ;oplay_attack_either(*,a,b,c,d,e,c,e) && oplay_defend_both(*,a,b,d,c,a,d)!=WIN |
| 543 | 543 | ;&& oplay_attack(*,b,a,c,c) |
| 544 | 544 | |
| 545 | 545 | |
| … |
… |
|
| 583 | 583 | ODbO |
| 584 | 584 | *Oac |
| 585 | 585 | |
| 586 | | ;!oplay_defend_both(*,a,b,a,D) && !oplay_defend_both(*,b,a,c,b,c) |
| | 586 | ;oplay_defend_both(*,a,b,a,D)!=WIN && oplay_defend_both(*,b,a,c,b,c)!=WIN |
| 587 | 587 | |
| 588 | 588 | |
| 589 | 589 | Pattern Conn507 |
| … |
… |
|
| 687 | 687 | O*ac |
| 688 | 688 | ?DbO |
| 689 | 689 | |
| 690 | | ;!oplay_defend_both(*,a,b,a,D) && oplay_attack_either(*,b,a,c,b,c) |
| | 690 | ;oplay_defend_both(*,a,b,a,D)!=WIN && oplay_attack_either(*,b,a,c,b,c) |
| 691 | 691 | |
| 692 | 692 | |
| 693 | 693 | Pattern Conn602 |
| … |
… |
|
| 700 | 700 | Obde |
| 701 | 701 | *acO |
| 702 | 702 | |
| 703 | | ;oplay_attack_either(*,a,b,c,d,e,c,e) && !oplay_defend_both(*,a,b,d,c,a,d) |
| | 703 | ;oplay_attack_either(*,a,b,c,d,e,c,e) && oplay_defend_both(*,a,b,d,c,a,d)!=WIN |
| 704 | 704 | ;&& oplay_attack(*,b,a,c,c) |
| 705 | 705 | |
| 706 | 706 | |
| … |
… |
|
| 745 | 745 | Ocb. |
| 746 | 746 | d*ae |
| 747 | 747 | |
| 748 | | ;!oplay_break_through(*,a,b,*,b,e) && !oplay_defend_both(*,c,d,a,b,c,a) |
| | 748 | ;!oplay_break_through(*,a,b,*,b,e) && oplay_defend_both(*,c,d,a,b,c,a)!=WIN |
| 749 | 749 | |
| 750 | 750 | |
| 751 | 751 | Pattern Conn605 |
| … |
… |
|
| 885 | 885 | ObC? |
| 886 | 886 | Oa*O |
| 887 | 887 | |
| 888 | | ;!oplay_defend_both(*,a,b,a,C) |
| | 888 | ;oplay_defend_both(*,a,b,a,C)!=WIN |
| 889 | 889 | |
| 890 | 890 | |
| 891 | 891 | Pattern Conn703 |
| … |
… |
|
| 915 | 915 | OcaO |
| 916 | 916 | |
| 917 | 917 | # This condition is not necessary but should be sufficient. |
| 918 | | ;oplay_attack(*,e,b,e) && !oplay_defend_both(*,b,a,c,d,b,c) |
| 919 | | ;&& !oplay_defend_both(*,d,c,a,b,d,a) |
| | 918 | ;oplay_attack(*,e,b,e) && oplay_defend_both(*,b,a,c,d,b,c)!=WIN |
| | 919 | ;&& oplay_defend_both(*,d,c,a,b,d,a)!=WIN |
| 920 | 920 | |
| 921 | 921 | |
| 922 | 922 | Pattern Conn705 |
| … |
… |
|
| 930 | 930 | OcaO |
| 931 | 931 | |
| 932 | 932 | # This condition is not necessary but should be sufficient. |
| 933 | | ;!oplay_defend_both(*,b,a,c,d,b,c) |
| 934 | | ;&& !oplay_defend_both(*,d,c,a,b,d,a) |
| | 933 | ;oplay_defend_both(*,b,a,c,d,b,c)!=WIN |
| | 934 | ;&& oplay_defend_both(*,d,c,a,b,d,a)!=WIN |
| 935 | 935 | |
| 936 | 936 | |
| 937 | 937 | Pattern Conn706 |
| … |
… |
|
| 979 | 979 | O*ac |
| 980 | 980 | ODbO |
| 981 | 981 | |
| 982 | | ;!oplay_defend_both(*,a,b,a,D) && oplay_attack_either(*,b,a,c,b,c) |
| | 982 | ;oplay_defend_both(*,a,b,a,D)!=WIN && oplay_attack_either(*,b,a,c,b,c) |
| 983 | 983 | |
| 984 | 984 | |
| 985 | 985 | ########################### |
| … |
… |
|
| 1099 | 1099 | Dab |
| 1100 | 1100 | ?*C |
| 1101 | 1101 | |
| 1102 | | ;!oplay_defend_both(*,a,b,C,D) && !oplay_connect(*,C,D) |
| | 1102 | ;oplay_defend_both(*,a,b,C,D)!=WIN && !oplay_connect(*,C,D) |
| 1103 | 1103 | |
| 1104 | 1104 | |
| 1105 | 1105 | ####################################### |
| … |
… |
|
| 1903 | 1903 | ba* |
| 1904 | 1904 | ?X? |
| 1905 | 1905 | |
| 1906 | | ;(!attack(b) || defend(b)) && !oplay_defend_both(*,a,*,b) |
| | 1906 | ;(!attack(b) || defend(b)) && oplay_defend_both(*,a,*,b)!=WIN |
| 1907 | 1907 | |
| 1908 | 1908 | |
| 1909 | 1909 | Pattern Shape30 |
| … |
… |
|
| 2490 | 2490 | *... |
| 2491 | 2491 | ---- |
| 2492 | 2492 | |
| 2493 | | ;!oplay_defend_both(*,a,b,c) |
| | 2493 | ;oplay_defend_both(*,a,b,c)!=WIN |
| 2494 | 2494 | |
| 2495 | 2495 | |
| 2496 | 2496 | Pattern Shape73 |
| … |
… |
|
| 2673 | 2673 | daX |
| 2674 | 2674 | .cb |
| 2675 | 2675 | |
| 2676 | | ;!oplay_defend_both(*,c,a,b) && oplay_attack(d,c,c) |
| | 2676 | ;oplay_defend_both(*,c,a,b)!=WIN && oplay_attack(d,c,c) |
| 2677 | 2677 | |
| 2678 | 2678 | |
| 2679 | 2679 | Pattern Shape84 |
| … |
… |
|
| 3110 | 3110 | fg* |
| 3111 | 3111 | |
| 3112 | 3112 | ;lib(a)>1 && o_alive_somewhere(e,f,g) && !attack(B) && !attack(C) |
| 3113 | | ;&& !oplay_defend_both(*,?,d,B,C) |
| | 3113 | ;&& oplay_defend_both(*,?,d,B,C)!=WIN |
| 3114 | 3114 | |
| 3115 | 3115 | |
| 3116 | 3116 | Pattern Sente16 |
| … |
… |
|
| 3128 | 3128 | a*X |
| 3129 | 3129 | --- |
| 3130 | 3130 | |
| 3131 | | ;xplay_attack(*,a,b,*) && xplay_defend_both(*,a,b,*,b) |
| | 3131 | ;xplay_attack(*,a,b,*) && xplay_defend_both(*,a,b,*,b)==WIN |
| 3132 | 3132 | |
| 3133 | 3133 | |
| 3134 | 3134 | Pattern Sente17 |
| … |
… |
|
| 3144 | 3144 | a*bX |
| 3145 | 3145 | ---- |
| 3146 | 3146 | |
| 3147 | | ;alive(d) && !xplay_defend_both(*,a,b,?,c,a,d) |
| | 3147 | ;alive(d) && xplay_defend_both(*,a,b,?,c,a,d)!=WIN |
| 3148 | 3148 | |
| 3149 | 3149 | |
| 3150 | 3150 | Pattern Sente18 |
| … |
… |
|
| 3307 | 3307 | *a |
| 3308 | 3308 | bX |
| 3309 | 3309 | |
| 3310 | | ;!xplay_defend_both(*,a,b) |
| | 3310 | ;xplay_defend_both(*,a,b)!=WIN |
| 3311 | 3311 | |
| 3312 | 3312 | >add_defend_both_move(a,b); |
| 3313 | 3313 | |
| … |
… |
|
| 3322 | 3322 | *ca |
| 3323 | 3323 | ?bX |
| 3324 | 3324 | |
| 3325 | | ;!xplay_defend_both(c,a,b) |
| 3326 | | ;&& (oplay_attack(*,c,c) || oplay_defend_both(*,c,a,b)) |
| | 3325 | ;xplay_defend_both(c,a,b)!=WIN |
| | 3326 | ;&& (oplay_attack(*,c,c) || oplay_defend_both(*,c,a,b)==WIN) |
| 3327 | 3327 | |
| 3328 | 3328 | >add_defend_both_move(a,b); |
| 3329 | 3329 | |
| … |
… |
|
| 3341 | 3341 | Dba |
| 3342 | 3342 | |
| 3343 | 3343 | ;oplay_attack(*,D) && oplay_attack_either(*,a,D,E) |
| 3344 | | ;&& !oplay_defend_both(*,b,c,D,E) |
| | 3344 | ;&& oplay_defend_both(*,b,c,D,E)!=WIN |
| 3345 | 3345 | |
| 3346 | 3346 | >test_attack_either_move(D,E) |
| 3347 | 3347 | |
| … |
… |
|
| 3360 | 3360 | db* |
| 3361 | 3361 | |
| 3362 | 3362 | ;xplay_attack(a,d) && xplay_attack_either(a,*,d,e) |
| 3363 | | ;&& !xplay_defend_both(a,b,c,d,e) && !xplay_defend_both(a,c,b,d,e) |
| | 3363 | ;&& xplay_defend_both(a,b,c,d,e)!=WIN && xplay_defend_both(a,c,b,d,e)!=WIN |
| 3364 | 3364 | ;&& !xplay_connect(a,d,e) && oplay_connect(*,a,d,e) |
| 3365 | 3365 | |
| 3366 | 3366 | >add_defend_both_move(d,e); |
| … |
… |
|
| 3430 | 3430 | ca. |
| 3431 | 3431 | Xb* |
| 3432 | 3432 | |
| 3433 | | ;safe_xmove(a) && !xplay_defend_both(a,b,c) && oplay_defend_both(*,a,b,c) |
| | 3433 | ;safe_xmove(a) && xplay_defend_both(a,b,c)!=WIN && oplay_defend_both(*,a,b,c)==WIN |
| 3434 | 3434 | |
| 3435 | 3435 | >add_defend_both_move(b,c); |
| 3436 | 3436 | |
| … |
… |
|
| 3462 | 3462 | ca* |
| 3463 | 3463 | Xb. |
| 3464 | 3464 | |
| 3465 | | ;safe_xmove(a) && !xplay_defend_both(a,b,c) && oplay_defend_both(*,a,b,c) |
| | 3465 | ;safe_xmove(a) && xplay_defend_both(a,b,c)!=WIN && oplay_defend_both(*,a,b,c)==WIN |
| 3466 | 3466 | |
| 3467 | 3467 | >add_defend_both_move(b,c); |
| 3468 | 3468 | |
| … |
… |
|
| 3478 | 3478 | ?Xc |
| 3479 | 3479 | |
| 3480 | 3480 | ;(alive(b) || alive(c)) |
| 3481 | | ;&& safe_xmove(a)==WIN && !xplay_defend_both(a,b,c) && oplay_attack(*,a,a)==WIN |
| | 3481 | ;&& safe_xmove(a)==WIN && xplay_defend_both(a,b,c)!=WIN && oplay_attack(*,a,a)==WIN |
| 3482 | 3482 | |
| 3483 | 3483 | >add_defend_both_move(b,c); |
| 3484 | 3484 | |
| … |
… |
|
| 3518 | 3518 | --- |
| 3519 | 3519 | |
| 3520 | 3520 | ;lib(A)==3 && !oplay_attack(*,E) && oplay_attack(*,d,A) |
| 3521 | | ;&& !oplay_defend_both(*,c,d,A,B) |
| | 3521 | ;&& oplay_defend_both(*,c,d,A,B)!=WIN |
| 3522 | 3522 | |
| 3523 | 3523 | >test_attack_either_move(A,B) |
| 3524 | 3524 | |
| … |
… |
|
| 3541 | 3541 | --- |
| 3542 | 3542 | |
| 3543 | 3543 | ;lib(a)==3 && !attack(e) && xplay_attack(*,d,a) |
| 3544 | | ;&& !xplay_defend_both(*,c,d,a,b) |
| | 3544 | ;&& xplay_defend_both(*,c,d,a,b)!=WIN |
| 3545 | 3545 | |
| 3546 | 3546 | >add_defend_both_move(a,b) |
| 3547 | 3547 | |