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 |