├── images └── example.png ├── python ├── expected_test_output │ ├── test_narrow_board3.txt │ ├── test_narrow_board5.txt │ ├── test_narrow_board6.txt │ ├── test_narrow_board7.txt │ ├── test_narrow_board2.txt │ ├── test_narrow_board1.txt │ ├── test_narrow_board4.txt │ ├── test_narrow_board8.txt │ ├── test_narrow_board10.txt │ ├── test_narrow_board9.txt │ ├── test_narrow_board11.txt │ ├── test_narrow_board12.txt │ ├── test_big_eye_seki.txt │ ├── test_belly_eye.txt │ ├── test_belly_eye2.txt │ ├── test_side_bamboo_cut.txt │ ├── test_cycle.txt │ ├── test_cycle_real_eye.txt │ ├── test_cycle_false_eye.txt │ ├── test_cycle_real_2eye.txt │ ├── test_cycle_real_3spaceeye.txt │ ├── test_double_ko.txt │ ├── test_double_ko2.txt │ ├── test_basic_sekis.txt │ ├── test_double_ko_death.txt │ ├── test_three_point_false_eye.txt │ ├── test_double_ko_death2.txt │ ├── test_three_point_false_eye_cycle.txt │ ├── test_bamboo_reachable_seki.txt │ ├── test_basic_sekis_marked_dead.txt │ ├── test_false_eyes_chain.txt │ ├── test_false_eyes_chain_bamboo.txt │ ├── test_false_eyes_chain_big_false_eye.txt │ ├── test_false_eyes_chain_loose_eye.txt │ ├── test_false_eyes_chain_loose_eye_2.txt │ ├── test_false_eyes_chain_loose_eye_3.txt │ ├── test_false_eyes_chain_loose_eye_4.txt │ ├── test_false_eyes_chain_no_bamboo.txt │ ├── test_false_eyes_chain_big_false_eye_aliveend.txt │ ├── test_false_eyes_chain_big_false_eye_aliveends.txt │ ├── test_lgroups_and_rectanglelikes6.txt │ ├── test_hanezeki.txt │ ├── test_hanezeki2.txt │ ├── test_basic.txt │ ├── test_empty.txt │ ├── test_false_eyes.txt │ ├── test_false_eyes_2.txt │ ├── test_dead_stone_marking.txt │ ├── test_cross_poke.txt │ ├── test_cross_nopoke.txt │ ├── test_cross_noseal.txt │ ├── test_cross_nothrowin.txt │ ├── test_cross_poke_deeper.txt │ ├── test_various_eyefillings4.txt │ ├── test_two_point_eye_falsity.txt │ ├── test_false_eye_multicycles1.txt │ ├── test_false_eye_multicycles2.txt │ ├── test_false_eye_multicycles3.txt │ ├── test_false_eye_multicycles4.txt │ ├── test_false_eye_multicycles5.txt │ ├── test_false_eye_multicycles6.txt │ ├── test_bamboo_interleave_seki.txt │ ├── test_no_bamboo_interleave_seki_broken.txt │ ├── test_loose_nakade.txt │ ├── test_various_corner_eyes.txt │ ├── test_various_eyefillings.txt │ ├── test_various_eyefillings2.txt │ ├── test_various_eyefillings3.txt │ ├── test_throwin_false_eye_chains.txt │ ├── test_double_throwin_seki3.txt │ ├── test_double_throwin_seki4.txt │ ├── test_three_way_pokes.txt │ ├── test_various_eyefillings2b.txt │ ├── test_various_eyefillings2c.txt │ ├── test_more_fancy_sekis.txt │ ├── test_various_eyefillings5.txt │ ├── test_7pteyes.txt │ ├── test_8pteyes.txt │ ├── test_7pteyes_2.txt │ ├── test_solid_eyeshapes.txt │ ├── test_solid_eyeshapes_nakade.txt │ ├── test_solid_eyeshapes_nakade2.txt │ ├── test_lgroups_and_rectanglelikes.txt │ ├── test_lgroups_and_rectanglelikes2.txt │ ├── test_lgroups_and_rectanglelikes3.txt │ ├── test_lgroups_and_rectanglelikes4.txt │ ├── test_lgroups_and_rectanglelikes5.txt │ ├── test_live_in_a_row.txt │ ├── test_live_in_a_row_with_hane.txt │ ├── test_live_in_a_row_with_hane_throwin.txt │ └── test_live_in_a_row_with_hane_throwin_poke.txt ├── bench.py └── print_all_test_output.sh ├── web_test ├── test.css ├── wgo │ ├── LICENSE.txt │ ├── wgo.player.css │ └── wgo.min.js └── test.html ├── LICENSE.txt └── README.md /images/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lightvector/goscorer/HEAD/images/example.png -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board3.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x. 3 | TERRITORY: 4 | zxz 5 | SEKI: 6 | ... 7 | FALSE EYES: 8 | .x. 9 | UNSCORABLE FALSE EYES: 10 | .x. 11 | DAME: 12 | .x. 13 | EYEVALUE: 14 | 1x1 15 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board5.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x.o 3 | TERRITORY: 4 | .x.o 5 | SEKI: 6 | zx.o 7 | FALSE EYES: 8 | .x.o 9 | UNSCORABLE FALSE EYES: 10 | .x.o 11 | DAME: 12 | .x1o 13 | EYEVALUE: 14 | 1x.o 15 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board6.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x.w 3 | TERRITORY: 4 | zxzz 5 | SEKI: 6 | .... 7 | FALSE EYES: 8 | .xFw 9 | UNSCORABLE FALSE EYES: 10 | .x.w 11 | DAME: 12 | .x.w 13 | EYEVALUE: 14 | 1x11 15 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board7.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | x.w. 3 | TERRITORY: 4 | x.w. 5 | SEKI: 6 | xzxz 7 | FALSE EYES: 8 | xFw. 9 | UNSCORABLE FALSE EYES: 10 | xFw. 11 | DAME: 12 | x.w. 13 | EYEVALUE: 14 | x111 15 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x.o.b 3 | TERRITORY: 4 | .x.o.b 5 | SEKI: 6 | zx.oao 7 | FALSE EYES: 8 | .x.oFb 9 | UNSCORABLE FALSE EYES: 10 | .x.oFb 11 | DAME: 12 | .x1o.b 13 | EYEVALUE: 14 | 1x.o11 15 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board1.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x.x.o. 3 | TERRITORY: 4 | .x.x.o. 5 | SEKI: 6 | zxzx.oa 7 | FALSE EYES: 8 | .xFx.o. 9 | UNSCORABLE FALSE EYES: 10 | .xFx.o. 11 | DAME: 12 | .x.x1o. 13 | EYEVALUE: 14 | 1x.x.o1 15 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board4.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x.x.xx.x.o.o. 3 | TERRITORY: 4 | .x.x.xx.x.o.o. 5 | SEKI: 6 | zxzxzxxzx.oaoa 7 | FALSE EYES: 8 | .xFxFxxFx.oFo. 9 | UNSCORABLE FALSE EYES: 10 | .xFxFxxFx.oFo. 11 | DAME: 12 | .x.x.xx.x1o.o. 13 | EYEVALUE: 14 | 1x.x.xx.x.o.o1 15 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board8.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | . 3 | o 4 | . 5 | TERRITORY: 6 | a 7 | o 8 | a 9 | SEKI: 10 | . 11 | . 12 | . 13 | FALSE EYES: 14 | . 15 | o 16 | . 17 | UNSCORABLE FALSE EYES: 18 | . 19 | o 20 | . 21 | DAME: 22 | . 23 | o 24 | . 25 | EYEVALUE: 26 | 1 27 | o 28 | 1 29 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board10.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | b 3 | . 4 | o 5 | . 6 | b 7 | TERRITORY: 8 | a 9 | a 10 | o 11 | a 12 | a 13 | SEKI: 14 | . 15 | . 16 | . 17 | . 18 | . 19 | FALSE EYES: 20 | b 21 | F 22 | o 23 | F 24 | b 25 | UNSCORABLE FALSE EYES: 26 | b 27 | . 28 | o 29 | . 30 | b 31 | DAME: 32 | b 33 | . 34 | o 35 | . 36 | b 37 | EYEVALUE: 38 | 1 39 | 1 40 | o 41 | 1 42 | 1 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board9.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | x 3 | . 4 | o 5 | . 6 | b 7 | TERRITORY: 8 | x 9 | . 10 | o 11 | . 12 | b 13 | SEKI: 14 | x 15 | . 16 | o 17 | a 18 | o 19 | FALSE EYES: 20 | x 21 | . 22 | o 23 | F 24 | b 25 | UNSCORABLE FALSE EYES: 26 | x 27 | . 28 | o 29 | F 30 | b 31 | DAME: 32 | x 33 | 1 34 | o 35 | . 36 | b 37 | EYEVALUE: 38 | x 39 | . 40 | o 41 | 1 42 | 1 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board11.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o 3 | o. 4 | xo 5 | x. 6 | .x 7 | ox 8 | TERRITORY: 9 | .o 10 | o. 11 | xo 12 | x. 13 | .x 14 | ox 15 | SEKI: 16 | ao 17 | oa 18 | xo 19 | x. 20 | .x 21 | ox 22 | FALSE EYES: 23 | .o 24 | oF 25 | xo 26 | x. 27 | .x 28 | ox 29 | UNSCORABLE FALSE EYES: 30 | .o 31 | oF 32 | xo 33 | x. 34 | .x 35 | ox 36 | DAME: 37 | .o 38 | o. 39 | xo 40 | x1 41 | 1x 42 | ox 43 | EYEVALUE: 44 | 1o 45 | o. 46 | xo 47 | x. 48 | .x 49 | ox 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_narrow_board12.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o 3 | o. 4 | xo 5 | x. 6 | .x 7 | wx 8 | TERRITORY: 9 | .o 10 | o. 11 | xo 12 | x. 13 | .x 14 | wx 15 | SEKI: 16 | ao 17 | oa 18 | xo 19 | x. 20 | zx 21 | xx 22 | FALSE EYES: 23 | .o 24 | oF 25 | xo 26 | x. 27 | .x 28 | wx 29 | UNSCORABLE FALSE EYES: 30 | .o 31 | oF 32 | xo 33 | x. 34 | .x 35 | wx 36 | DAME: 37 | .o 38 | o. 39 | xo 40 | x1 41 | .x 42 | wx 43 | EYEVALUE: 44 | 1o 45 | o. 46 | xo 47 | x. 48 | 1x 49 | 1x 50 | -------------------------------------------------------------------------------- /web_test/test.css: -------------------------------------------------------------------------------- 1 | 2 | body { 3 | display: flex; 4 | flex-flow: column; 5 | } 6 | 7 | .title { 8 | font-size: x-large; 9 | margin: 3px; 10 | } 11 | 12 | .instructionPane { 13 | font-size: large; 14 | margin: 3px; 15 | } 16 | 17 | .sgfFileChooserPane { 18 | font-size: large; 19 | margin: 3px; 20 | } 21 | 22 | .scoreSummaryPane { 23 | font-size: large; 24 | margin: 3px; 25 | display: grid; 26 | grid-template-columns: 1fr 1fr; 27 | } 28 | 29 | #board { 30 | margin-top: 6px; 31 | } 32 | 33 | .wgo-player-main { 34 | height: calc(100% - 6.5em - 40px); 35 | } 36 | -------------------------------------------------------------------------------- /python/expected_test_output/test_big_eye_seki.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .xoxxx 3 | xxoox. 4 | .xxooo 5 | ooxxx. 6 | .oooxx 7 | xxxo.x 8 | TERRITORY: 9 | .xoxxx 10 | xxoox. 11 | .xxooo 12 | ooxxx. 13 | .oooxx 14 | xxxo.x 15 | SEKI: 16 | zxoxxx 17 | xxoox. 18 | .xxooo 19 | ooxxx. 20 | .oooxx 21 | xxxo.x 22 | FALSE EYES: 23 | .xoxxx 24 | xxoox. 25 | .xxooo 26 | ooxxx. 27 | .oooxx 28 | xxxo.x 29 | UNSCORABLE FALSE EYES: 30 | .xoxxx 31 | xxoox. 32 | .xxooo 33 | ooxxx. 34 | .oooxx 35 | xxxo.x 36 | DAME: 37 | .xoxxx 38 | xxoox1 39 | 1xxooo 40 | ooxxx1 41 | 1oooxx 42 | xxxo1x 43 | EYEVALUE: 44 | 1xoxxx 45 | xxoox. 46 | .xxooo 47 | ooxxx. 48 | .oooxx 49 | xxxo.x 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_belly_eye.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .b.o.x.. 3 | b..o.x.. 4 | .b.o.x.. 5 | oooo.x.. 6 | xxxxxx.. 7 | ........ 8 | TERRITORY: 9 | aaao.xzz 10 | aaao.xzz 11 | aaao.xzz 12 | oooo.xzz 13 | xxxxxxzz 14 | zzzzzzzz 15 | SEKI: 16 | ........ 17 | ........ 18 | ........ 19 | ........ 20 | ........ 21 | ........ 22 | FALSE EYES: 23 | .b.o.x.. 24 | b..o.x.. 25 | .b.o.x.. 26 | oooo.x.. 27 | xxxxxx.. 28 | ........ 29 | UNSCORABLE FALSE EYES: 30 | .b.o.x.. 31 | b..o.x.. 32 | .b.o.x.. 33 | oooo.x.. 34 | xxxxxx.. 35 | ........ 36 | DAME: 37 | .b.o1x.. 38 | b..o1x.. 39 | .b.o1x.. 40 | oooo1x.. 41 | xxxxxx.. 42 | ........ 43 | EYEVALUE: 44 | 222o.x22 45 | 222o.x22 46 | 222o.x22 47 | oooo.x22 48 | xxxxxx22 49 | 22222222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_belly_eye2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .b.o.x.. 3 | bb.o.x.. 4 | .b.o.x.. 5 | oooo.x.. 6 | xxxxxx.. 7 | ........ 8 | TERRITORY: 9 | .b.o.xzz 10 | bb.o.xzz 11 | .b.o.xzz 12 | oooo.xzz 13 | xxxxxxzz 14 | zzzzzzzz 15 | SEKI: 16 | aoao.... 17 | ooao.... 18 | aoao.... 19 | oooo.... 20 | ........ 21 | ........ 22 | FALSE EYES: 23 | .b.o.x.. 24 | bb.o.x.. 25 | .b.o.x.. 26 | oooo.x.. 27 | xxxxxx.. 28 | ........ 29 | UNSCORABLE FALSE EYES: 30 | .b.o.x.. 31 | bb.o.x.. 32 | .b.o.x.. 33 | oooo.x.. 34 | xxxxxx.. 35 | ........ 36 | DAME: 37 | .b.o1x.. 38 | bb.o1x.. 39 | .b.o1x.. 40 | oooo1x.. 41 | xxxxxx.. 42 | ........ 43 | EYEVALUE: 44 | 111o.x22 45 | 111o.x22 46 | 111o.x22 47 | oooo.x22 48 | xxxxxx22 49 | 22222222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_side_bamboo_cut.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ..o.o..o.o.... 3 | .xo.oxxo.o.x.. 4 | .xooo..ooox... 5 | .x...xx...x... 6 | ..x.x..x.x.... 7 | TERRITORY: 8 | ..o.o..o.o.... 9 | .xo.oxxo.o.x.. 10 | .xooo..ooox... 11 | .x...xx...x... 12 | ..x.xzzx.x.... 13 | SEKI: 14 | ..oao..oao.... 15 | ..oao..oao.... 16 | ..ooo..ooo.... 17 | .............. 18 | .............. 19 | FALSE EYES: 20 | ..o.o..o.o.... 21 | .xo.oxxo.o.x.. 22 | .xooo..ooox... 23 | .x...xx...x... 24 | ..x.x..x.x.... 25 | UNSCORABLE FALSE EYES: 26 | ..o.o..o.o.... 27 | .xo.oxxo.o.x.. 28 | .xooo..ooox... 29 | .x...xx...x... 30 | ..x.x..x.x.... 31 | DAME: 32 | 11o.o11o.o11.. 33 | 1xo.oxxo.o1x.. 34 | .xooo11ooox... 35 | .x111xx111x... 36 | ..x1x..x1x.... 37 | EYEVALUE: 38 | ..o1o..o1o..22 39 | .xo1oxxo1o.x22 40 | 2xooo..ooox222 41 | 2x...xx...x222 42 | 22x.x11x.x2222 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cycle.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ...ooooo.x.. 3 | xxoxxxxo.x.. 4 | .xox.xxo.x.. 5 | .xoxx.xo.x.. 6 | .xo.xxooox.. 7 | xxo.ooooox.. 8 | TERRITORY: 9 | ...ooooo.xzz 10 | xxoxxxxo.xzz 11 | zxoxzxxo.xzz 12 | zxoxxzxo.xzz 13 | zxo.xxoooxzz 14 | xxo.oooooxzz 15 | SEKI: 16 | ...ooooo.... 17 | ..o....o.... 18 | ..o....o.... 19 | ..o....o.... 20 | ..o...ooo... 21 | ..o.ooooo... 22 | FALSE EYES: 23 | ...ooooo.x.. 24 | xxoxxxxo.x.. 25 | .xox.xxo.x.. 26 | .xoxx.xo.x.. 27 | .xo.xxooox.. 28 | xxo.ooooox.. 29 | UNSCORABLE FALSE EYES: 30 | ...ooooo.x.. 31 | xxoxxxxo.x.. 32 | .xox.xxo.x.. 33 | .xoxx.xo.x.. 34 | .xo.xxooox.. 35 | xxo.ooooox.. 36 | DAME: 37 | .11ooooo1x.. 38 | xxoxxxxo1x.. 39 | .xox.xxo1x.. 40 | .xoxx.xo1x.. 41 | .xo1xxooox.. 42 | xxo1ooooox.. 43 | EYEVALUE: 44 | 1..ooooo.x22 45 | xxoxxxxo.x22 46 | 2xox1xxo.x22 47 | 2xoxx1xo.x22 48 | 2xo.xxooox22 49 | xxo.ooooox22 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cycle_real_eye.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.oooo.ox.. 3 | xxoxxxxoox.. 4 | .xox.xxo.x.. 5 | .xoxx.xo.x.. 6 | .xo.xxooox.. 7 | xxo.ooooox.. 8 | TERRITORY: 9 | .o.oooo.oxzz 10 | xxoxxxxooxzz 11 | zxoxzxxo.xzz 12 | zxoxxzxo.xzz 13 | zxo.xxoooxzz 14 | xxo.oooooxzz 15 | SEKI: 16 | .oaooooao... 17 | ..o....oo... 18 | ..o....o.... 19 | ..o....o.... 20 | ..o...ooo... 21 | ..o.ooooo... 22 | FALSE EYES: 23 | .oFoooo.ox.. 24 | xxoxxxxoox.. 25 | .xox.xxo.x.. 26 | .xoxx.xo.x.. 27 | .xo.xxooox.. 28 | xxo.ooooox.. 29 | UNSCORABLE FALSE EYES: 30 | .oFoooo.ox.. 31 | xxoxxxxoox.. 32 | .xox.xxo.x.. 33 | .xoxx.xo.x.. 34 | .xo.xxooox.. 35 | xxo.ooooox.. 36 | DAME: 37 | 1o.oooo.ox.. 38 | xxoxxxxoox.. 39 | .xox.xxo1x.. 40 | .xoxx.xo1x.. 41 | .xo1xxooox.. 42 | xxo1ooooox.. 43 | EYEVALUE: 44 | .o.oooo1ox22 45 | xxoxxxxoox22 46 | 2xox1xxo.x22 47 | 2xoxx1xo.x22 48 | 2xo.xxooox22 49 | xxo.ooooox22 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cycle_false_eye.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.ooooo.x.. 3 | xxoxxxxo.x.. 4 | .xox.xxo.x.. 5 | .xoxx.xo.x.. 6 | .xo.xxooox.. 7 | xxo.ooooox.. 8 | TERRITORY: 9 | .o.ooooo.xzz 10 | xxoxxxxo.xzz 11 | zxoxzxxo.xzz 12 | zxoxxzxo.xzz 13 | zxo.xxoooxzz 14 | xxo.oooooxzz 15 | SEKI: 16 | .oaooooo.... 17 | ..o....o.... 18 | ..o....o.... 19 | ..o....o.... 20 | ..o...ooo... 21 | ..o.ooooo... 22 | FALSE EYES: 23 | .oFooooo.x.. 24 | xxoxxxxo.x.. 25 | .xox.xxo.x.. 26 | .xoxx.xo.x.. 27 | .xo.xxooox.. 28 | xxo.ooooox.. 29 | UNSCORABLE FALSE EYES: 30 | .oFooooo.x.. 31 | xxoxxxxo.x.. 32 | .xox.xxo.x.. 33 | .xoxx.xo.x.. 34 | .xo.xxooox.. 35 | xxo.ooooox.. 36 | DAME: 37 | 1o.ooooo1x.. 38 | xxoxxxxo1x.. 39 | .xox.xxo1x.. 40 | .xoxx.xo1x.. 41 | .xo1xxooox.. 42 | xxo1ooooox.. 43 | EYEVALUE: 44 | .o.ooooo.x22 45 | xxoxxxxo.x22 46 | 2xox1xxo.x22 47 | 2xoxx1xo.x22 48 | 2xo.xxooox22 49 | xxo.ooooox22 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cycle_real_2eye.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.oooo.ox.. 3 | xxoxxxxoox.. 4 | .xox.xxo.x.. 5 | .xoxx.xoxx.. 6 | .xo.xxo.ox.. 7 | xxo.ooooox.. 8 | TERRITORY: 9 | .o.ooooaoxzz 10 | xxoxxxxooxzz 11 | zxoxzxxo.xzz 12 | zxoxxzxoxxzz 13 | zxo.xxoaoxzz 14 | xxo.oooooxzz 15 | SEKI: 16 | ............ 17 | ............ 18 | ............ 19 | ............ 20 | ............ 21 | ............ 22 | FALSE EYES: 23 | .oFoooo.ox.. 24 | xxoxxxxoox.. 25 | .xox.xxo.x.. 26 | .xoxx.xoxx.. 27 | .xo.xxo.ox.. 28 | xxo.ooooox.. 29 | UNSCORABLE FALSE EYES: 30 | .oFoooo.ox.. 31 | xxoxxxxoox.. 32 | .xox.xxo.x.. 33 | .xoxx.xoxx.. 34 | .xo.xxo.ox.. 35 | xxo.ooooox.. 36 | DAME: 37 | 1o.oooo.ox.. 38 | xxoxxxxoox.. 39 | .xox.xxo1x.. 40 | .xoxx.xoxx.. 41 | .xo1xxo.ox.. 42 | xxo1ooooox.. 43 | EYEVALUE: 44 | .o.oooo1ox22 45 | xxoxxxxoox22 46 | 2xox1xxo.x22 47 | 2xoxx1xoxx22 48 | 2xo.xxo1ox22 49 | xxo.ooooox22 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cycle_real_3spaceeye.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.oooo.x... 3 | xxoxxxxoox.. 4 | .xox.xxoox.. 5 | .xoxx.xxox.. 6 | .xoxoooxox.. 7 | xxoo...oox.. 8 | TERRITORY: 9 | .o.oooo.x.zz 10 | xxoxxxxooxzz 11 | zxox.xxooxzz 12 | zxoxx.xxoxzz 13 | zxoxoooxoxzz 14 | xxooaaaooxzz 15 | SEKI: 16 | ............ 17 | ...xxxx..... 18 | ...xzxx..... 19 | ...xx.xx.... 20 | ...x...x.... 21 | ............ 22 | FALSE EYES: 23 | .oFoooo.xF.. 24 | xxoxxxxoox.. 25 | .xox.xxoox.. 26 | .xoxx.xxox.. 27 | .xoxoooxox.. 28 | xxoo...oox.. 29 | UNSCORABLE FALSE EYES: 30 | .oFoooo.xF.. 31 | xxoxxxxoox.. 32 | .xox.xxoox.. 33 | .xoxx.xxox.. 34 | .xoxoooxox.. 35 | xxoo...oox.. 36 | DAME: 37 | 1o.oooo1x... 38 | xxoxxxxoox.. 39 | .xox.xxoox.. 40 | .xoxx1xxox.. 41 | .xoxoooxox.. 42 | xxoo...oox.. 43 | EYEVALUE: 44 | .o.oooo.x222 45 | xxoxxxxoox22 46 | 2xox1xxoox22 47 | 2xoxx.xxox22 48 | 2xoxoooxox22 49 | xxoo222oox22 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_double_ko.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .xooox.....xooox. 3 | xxxxoxx...xxoxxxx 4 | .xoxoox...xoox.x. 5 | xo.o.ox...xo.oxox 6 | oooooox...xo.oooo 7 | TERRITORY: 8 | .xoooxzzzzzxooox. 9 | xxxxoxxzzzxxoxxxx 10 | .xoxooxzzzxoox.x. 11 | xo.o.oxzzzxo.oxox 12 | ooooooxzzzxo.oooo 13 | SEKI: 14 | zxooo.......oooxz 15 | xxxxo.......oxxxx 16 | zxoxoo.....ooxzxz 17 | xoaoao.....oaoxox 18 | oooooo.....oaoooo 19 | FALSE EYES: 20 | .xooox.....xooox. 21 | xxxxoxx...xxoxxxx 22 | Fxoxoox...xooxFxF 23 | xoFo.ox...xo.oxox 24 | oooooox...xo.oooo 25 | UNSCORABLE FALSE EYES: 26 | .xooox.....xooox. 27 | xxxxoxx...xxoxxxx 28 | Fxoxoox...xooxFxF 29 | xoFo.ox...xo.oxox 30 | oooooox...xo.oooo 31 | DAME: 32 | .xooox.....xooox. 33 | xxxxoxx...xxoxxxx 34 | .xoxoox...xoox.x. 35 | xo.o.ox...xo.oxox 36 | oooooox...xo.oooo 37 | EYEVALUE: 38 | 1xooox22222xooox1 39 | xxxxoxx222xxoxxxx 40 | .xoxoox222xoox.x. 41 | xo.o1ox222xo1oxox 42 | oooooox222xo1oooo 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_double_ko2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .xooox.....xooox. 3 | xxxxoxx...xxoxxxx 4 | .xoxoox...xoox.x. 5 | bo.o.ox...xo.obob 6 | oooooox...xo.oooo 7 | TERRITORY: 8 | .xoooxzzzzzxooox. 9 | xxxxoxxzzzxxoxxxx 10 | .xoxooxzzzxoox.x. 11 | bo.o.oxzzzxo.obob 12 | ooooooxzzzxo.oooo 13 | SEKI: 14 | zxooo.......oooxz 15 | xxxxo.......oxxxx 16 | .xoxoo.....oox.x. 17 | .oaoao.....oao.o. 18 | oooooo.....oaoooo 19 | FALSE EYES: 20 | .xooox.....xooox. 21 | xxxxoxx...xxoxxxx 22 | .xoxoox...xoox.x. 23 | boFo.ox...xo.obob 24 | oooooox...xo.oooo 25 | UNSCORABLE FALSE EYES: 26 | .xooox.....xooox. 27 | xxxxoxx...xxoxxxx 28 | .xoxoox...xoox.x. 29 | boFo.ox...xo.obob 30 | oooooox...xo.oooo 31 | DAME: 32 | .xooox.....xooox. 33 | xxxxoxx...xxoxxxx 34 | 1xoxoox...xoox1x1 35 | 1o.o.ox...xo.o1o1 36 | oooooox...xo.oooo 37 | EYEVALUE: 38 | 1xooox22222xooox1 39 | xxxxoxx222xxoxxxx 40 | .xoxoox222xoox.x. 41 | bo.o1ox222xo1obob 42 | oooooox222xo1oooo 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_basic_sekis.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x.o.........x.x. 3 | ox.o..xwx..xx..oo 4 | ox.o.o.xx.x..ooo. 5 | ox.o..ooo..xxo.ox 6 | .x.o.b.......oxx. 7 | TERRITORY: 8 | .x.o.........x.x. 9 | ox.o..xwx..xx..oo 10 | ox.o.o.xx.x..ooo. 11 | ox.o..ooo..xxo.ox 12 | .x.o.b.......oxx. 13 | SEKI: 14 | .x.o............. 15 | ox.o...........oo 16 | ox.o.o.......ooo. 17 | ox.oaaooo....o.ox 18 | .x.oaoaa.....oxxz 19 | FALSE EYES: 20 | .x.o.........x.x. 21 | ox.o..xwx..xx..oo 22 | ox.o.o.xx.x..ooo. 23 | ox.o..ooo..xxo.ox 24 | .x.o.b.......oxxF 25 | UNSCORABLE FALSE EYES: 26 | .x.o.........x.x. 27 | ox.o..xwx..xx..oo 28 | ox.o.o.xx.x..ooo. 29 | ox.o..ooo..xxo.ox 30 | .x.o.b.......oxxF 31 | DAME: 32 | 1x1o111......x1x1 33 | ox1o11xwx..xx11oo 34 | ox1o1o1xx1x.1ooo1 35 | ox1o..ooo11xxo1ox 36 | 1x1o.b..11111oxx. 37 | EYEVALUE: 38 | .x.o...222222x.x. 39 | ox.o..x2x22xx..oo 40 | ox.o.o.xx.x1.ooo. 41 | ox.o11ooo..xxo.ox 42 | .x.o1111.....oxx. 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_double_ko_death.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.o.........o.o. 3 | xx.o.........o.xx 4 | .xxo.o.....o.oxx. 5 | xoxxo.......oxxwx 6 | o.oxo.......oxw.w 7 | TERRITORY: 8 | .o.oaaaaaaaaao.o. 9 | xx.oaaaaaaaaao.xx 10 | .xxoaoaaaaaoaoxxz 11 | xoxxoaaaaaaaoxxzx 12 | o.oxoaaaaaaaoxzzz 13 | SEKI: 14 | ................. 15 | xx............... 16 | zxx.............. 17 | xoxx............. 18 | oaox............. 19 | FALSE EYES: 20 | .o.o.........o.o. 21 | xx.o.........o.xx 22 | Fxxo.o.....o.oxx. 23 | xoxxo.......oxxwx 24 | oFoxo.......oxw.w 25 | UNSCORABLE FALSE EYES: 26 | .o.o.........o.o. 27 | xx.o.........o.xx 28 | Fxxo.o.....o.oxx. 29 | xoxxo.......oxxwx 30 | oFoxo.......oxw.w 31 | DAME: 32 | 1o1o.........o1o1 33 | xx1o.........o1xx 34 | .xxo.o.....o.oxx. 35 | xoxxo.......oxxwx 36 | o.oxo.......oxw.w 37 | EYEVALUE: 38 | .o.o222222222o.o. 39 | xx.o222222222o.xx 40 | .xxo2o22222o2oxx1 41 | xoxxo2222222oxx2x 42 | o.oxo2222222ox222 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_three_point_false_eye.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ........o.... 3 | xoooox..o.... 4 | xo.oox..o.... 5 | xoo.oxoo..... 6 | .xoox.x.o.... 7 | ..xx..x.o.... 8 | TERRITORY: 9 | ........oaaaa 10 | xoooox..oaaaa 11 | xoaoox..oaaaa 12 | xooaoxooaaaaa 13 | .xoox.x.oaaaa 14 | ..xx..x.oaaaa 15 | SEKI: 16 | ............. 17 | x....x....... 18 | x....x....... 19 | x....x....... 20 | zx..xzx...... 21 | zzxxzzx...... 22 | FALSE EYES: 23 | ........o.... 24 | xoooox..o.... 25 | xo.oox..o.... 26 | xoo.oxoo..... 27 | FxooxFx.o.... 28 | .FxxF.x.o.... 29 | UNSCORABLE FALSE EYES: 30 | ........o.... 31 | xoooox..o.... 32 | xo.oox..o.... 33 | xoo.oxoo..... 34 | FxooxFx.o.... 35 | .FxxF.x.o.... 36 | DAME: 37 | 11..1111o.... 38 | xoooox11o.... 39 | xo.oox11o.... 40 | xoo.oxoo..... 41 | .xoox.x1o.... 42 | ..xx..x1o.... 43 | EYEVALUE: 44 | ..11....o2222 45 | xoooox..o2222 46 | xo1oox..o2222 47 | xoo1oxoo22222 48 | .xoox.x.o2222 49 | ..xx..x.o2222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_double_ko_death2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.o.........o.o. 3 | xx.o.........o.xx 4 | .xxo.o.....o.oxx. 5 | boxxo.......oxxwb 6 | o.oxo.......oxw.w 7 | TERRITORY: 8 | .o.oaaaaaaaaao.o. 9 | xx.oaaaaaaaaao.xx 10 | .xxoaoaaaaaoaoxxz 11 | boxxoaaaaaaaoxxzz 12 | o.oxoaaaaaaaoxzzz 13 | SEKI: 14 | ................. 15 | xx............... 16 | .xx.............. 17 | .oxx............. 18 | oaox............. 19 | FALSE EYES: 20 | .o.o.........o.o. 21 | xx.o.........o.xx 22 | .xxo.o.....o.oxx. 23 | boxxo.......oxxwb 24 | oFoxo.......oxw.w 25 | UNSCORABLE FALSE EYES: 26 | .o.o.........o.o. 27 | xx.o.........o.xx 28 | .xxo.o.....o.oxx. 29 | boxxo.......oxxwb 30 | oFoxo.......oxw.w 31 | DAME: 32 | 1o1o.........o1o1 33 | xx1o.........o1xx 34 | 1xxo.o.....o.oxx. 35 | 1oxxo.......oxxwb 36 | o.oxo.......oxw.w 37 | EYEVALUE: 38 | .o.o222222222o.o. 39 | xx.o222222222o.xx 40 | .xxo2o22222o2oxx2 41 | boxxo2222222oxx22 42 | o.oxo2222222ox222 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_three_point_false_eye_cycle.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ........o.... 3 | x....x..o.... 4 | xo.oox..o.... 5 | xoo.oxoo..... 6 | .xoox.x.o.... 7 | ..xx..x.o.... 8 | TERRITORY: 9 | ........oaaaa 10 | x....x..oaaaa 11 | xo.oox..oaaaa 12 | xoo.oxooaaaaa 13 | zxooxzx.oaaaa 14 | zzxxzzx.oaaaa 15 | SEKI: 16 | ............. 17 | ............. 18 | .o.oo........ 19 | .ooao........ 20 | ..oo......... 21 | ............. 22 | FALSE EYES: 23 | ........o.... 24 | x....x..o.... 25 | xo.oox..o.... 26 | xoo.oxoo..... 27 | .xoox.x.o.... 28 | ..xx..x.o.... 29 | UNSCORABLE FALSE EYES: 30 | ........o.... 31 | x....x..o.... 32 | xo.oox..o.... 33 | xoo.oxoo..... 34 | .xoox.x.o.... 35 | ..xx..x.o.... 36 | DAME: 37 | 11111111o.... 38 | x1111x11o.... 39 | xo1oox11o.... 40 | xoo.oxoo..... 41 | .xoox.x1o.... 42 | ..xx..x1o.... 43 | EYEVALUE: 44 | ........o2222 45 | x....x..o2222 46 | xo.oox..o2222 47 | xoo1oxoo22222 48 | 2xoox2x.o2222 49 | 22xx22x.o2222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_bamboo_reachable_seki.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ...xxxxxoooooo... 3 | xxx..x.xo..o..ooo 4 | oooxxoooxxxxooxxx 5 | o.o..o.o.x.x..x.x 6 | .ooxxoooxxxxooxx. 7 | TERRITORY: 8 | zzzxxxxxooooooaaa 9 | xxxzzx.xo..oaaooo 10 | oooxxoooxxxxooxxx 11 | oao..o.o.x.x..xzx 12 | aooxxoooxxxxooxxz 13 | SEKI: 14 | ................. 15 | ................. 16 | .....oooxxxx..... 17 | .....oao.xzx..... 18 | .....oooxxxx..... 19 | FALSE EYES: 20 | ...xxxxxoooooo... 21 | xxx..x.xo..o..ooo 22 | oooxxoooxxxxooxxx 23 | o.o..o.o.x.x..x.x 24 | .ooxxoooxxxxooxx. 25 | UNSCORABLE FALSE EYES: 26 | ...xxxxxoooooo... 27 | xxx..x.xo..o..ooo 28 | oooxxoooxxxxooxxx 29 | o.o..o.o.x.x..x.x 30 | .ooxxoooxxxxooxx. 31 | DAME: 32 | ...xxxxxoooooo... 33 | xxx..x1xo11o..ooo 34 | oooxxoooxxxxooxxx 35 | o.o11o.o1x.x11x.x 36 | .ooxxoooxxxxooxx. 37 | EYEVALUE: 38 | 222xxxxxoooooo222 39 | xxx11x.xo..o11ooo 40 | oooxxoooxxxxooxxx 41 | o1o..o1o.x1x..x1x 42 | 1ooxxoooxxxxooxx1 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_basic_sekis_marked_dead.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x.o.........x.x. 3 | wx.o..xox..xx..oo 4 | wx.o.o.xx.x..ooo. 5 | wx.o..ooo..xxo.ob 6 | .x.o.x.......obb. 7 | TERRITORY: 8 | .x.o.........x.x. 9 | wx.o..xox..xx..oo 10 | wx.o.o.xx.x..oooa 11 | wx.o..ooo..xxoaoa 12 | .x.o.x.......oaaa 13 | SEKI: 14 | zx.o............. 15 | xx.o...o......... 16 | xx.o.o........... 17 | xx.o..ooo........ 18 | zx.o.x.a......... 19 | FALSE EYES: 20 | .x.o.........x.x. 21 | wx.o..xox..xx..oo 22 | wx.o.o.xx.x..ooo. 23 | wx.o..ooo..xxo.ob 24 | .x.o.x.......obb. 25 | UNSCORABLE FALSE EYES: 26 | .x.o.........x.x. 27 | wx.o..xox..xx..oo 28 | wx.o.o.xx.x..ooo. 29 | wx.o..ooo..xxo.ob 30 | .x.o.x.......obb. 31 | DAME: 32 | .x1o11111....x1x1 33 | wx1o11xox..xx11oo 34 | wx1o1o1xx1x.1ooo. 35 | wx1o11ooo11xxo.ob 36 | .x1o1x1.11111obb. 37 | EYEVALUE: 38 | 1x.o.....2222x.x. 39 | 1x.o..xox22xx..oo 40 | 1x.o.o.xx.x1.ooo2 41 | 1x.o..ooo..xxo2o2 42 | 1x.o.x.......o222 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......xx. 3 | ......oox 4 | ....oo.xx 5 | ooooo.ox. 6 | ..o.oooox 7 | ooo...ox. 8 | ......oxx 9 | .......x. 10 | TERRITORY: 11 | ......xx. 12 | ......oox 13 | ....oo.xx 14 | oooooaox. 15 | aao.oooox 16 | ooo...ox. 17 | ......oxx 18 | .......x. 19 | SEKI: 20 | ......xxz 21 | ........x 22 | .......xx 23 | .......xz 24 | ........x 25 | .......xz 26 | .......xx 27 | .......xz 28 | FALSE EYES: 29 | ......xxF 30 | ......oox 31 | ....oo.xx 32 | ooooo.oxF 33 | ..o.oooox 34 | ooo...oxF 35 | ......oxx 36 | .......x. 37 | UNSCORABLE FALSE EYES: 38 | ......xxF 39 | ......oox 40 | ....oo.xx 41 | ooooo.oxF 42 | ..o.oooox 43 | ooo...oxF 44 | ......oxx 45 | .......x. 46 | DAME: 47 | 111111xx. 48 | 111111oox 49 | 1111oo1xx 50 | ooooo.ox. 51 | ..o1oooox 52 | ooo111ox. 53 | 111111oxx 54 | 1111111x. 55 | EYEVALUE: 56 | ......xx. 57 | ......oox 58 | ....oo.xx 59 | ooooo1ox. 60 | 11o.oooox 61 | ooo...ox. 62 | ......oxx 63 | .......x1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_bamboo.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......xx. 3 | ......oox 4 | ....oo.xx 5 | ooo.o.ox. 6 | ..o.oooox 7 | ooo...ox. 8 | ......oxx 9 | .......x. 10 | TERRITORY: 11 | ......xx. 12 | ......oox 13 | ....oo.xx 14 | ooo.oaox. 15 | aao.oooox 16 | ooo...ox. 17 | ......oxx 18 | .......x. 19 | SEKI: 20 | ......xxz 21 | ........x 22 | .......xx 23 | .......xz 24 | ........x 25 | .......xz 26 | .......xx 27 | .......xz 28 | FALSE EYES: 29 | ......xxF 30 | ......oox 31 | ....oo.xx 32 | ooo.o.oxF 33 | ..o.oooox 34 | ooo...oxF 35 | ......oxx 36 | .......x. 37 | UNSCORABLE FALSE EYES: 38 | ......xxF 39 | ......oox 40 | ....oo.xx 41 | ooo.o.oxF 42 | ..o.oooox 43 | ooo...oxF 44 | ......oxx 45 | .......x. 46 | DAME: 47 | 111111xx. 48 | 111111oox 49 | 1111oo1xx 50 | ooo1o.ox. 51 | ..o1oooox 52 | ooo111ox. 53 | 111111oxx 54 | 1111111x. 55 | EYEVALUE: 56 | ......xx. 57 | ......oox 58 | ....oo.xx 59 | ooo.o1ox. 60 | 11o.oooox 61 | ooo...ox. 62 | ......oxx 63 | .......x1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_big_false_eye.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxx..xxx. 3 | xooxxooox 4 | .xo....x. 5 | .xooooox. 6 | .xo...ox. 7 | xoo...oox 8 | x.o...oxx 9 | ..o...ox. 10 | TERRITORY: 11 | xxx..xxx. 12 | xooxxooox 13 | .xo....x. 14 | .xooooox. 15 | .xoaaaox. 16 | xooaaaoox 17 | x.oaaaoxx 18 | ..oaaaox. 19 | SEKI: 20 | xxxzzxxxz 21 | x..xx...x 22 | zx.....xz 23 | zx.....xz 24 | zx.....xz 25 | x.......x 26 | x......xx 27 | .......xz 28 | FALSE EYES: 29 | xxxFFxxxF 30 | xooxxooox 31 | Fxo....xF 32 | .xooooox. 33 | Fxo...oxF 34 | xoo...oox 35 | x.o...oxx 36 | ..o...ox. 37 | UNSCORABLE FALSE EYES: 38 | xxxFFxxxF 39 | xooxxooox 40 | Fxo....xF 41 | .xooooox. 42 | Fxo...oxF 43 | xoo...oox 44 | x.o...oxx 45 | ..o...ox. 46 | DAME: 47 | xxx..xxx. 48 | xooxxooox 49 | .xo1111x. 50 | .xooooox. 51 | .xo...ox. 52 | xoo...oox 53 | x1o...oxx 54 | 11o...ox. 55 | EYEVALUE: 56 | xxx..xxx. 57 | xooxxooox 58 | .xo....x. 59 | .xooooox. 60 | .xo222ox. 61 | xoo222oox 62 | x.o222oxx 63 | ..o222ox1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_loose_eye.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .......x. 3 | ......... 4 | ..o.oo.xx 5 | oo.oo.ox. 6 | .oo.oooox 7 | oo....ox. 8 | ......oxx 9 | .......x. 10 | TERRITORY: 11 | .......x. 12 | ......... 13 | ..o.oo.xx 14 | ooaooaoxz 15 | aoo.oooox 16 | oo....oxz 17 | ......oxx 18 | .......xz 19 | SEKI: 20 | ......... 21 | ......... 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | FALSE EYES: 29 | .......x. 30 | ......... 31 | ..o.oo.xx 32 | oo.oo.oxF 33 | .oo.oooox 34 | oo....oxF 35 | ......oxx 36 | .......x. 37 | UNSCORABLE FALSE EYES: 38 | .......x. 39 | ......... 40 | ..o.oo.xx 41 | oo.oo.ox. 42 | .oo.oooox 43 | oo....ox. 44 | ......oxx 45 | .......x. 46 | DAME: 47 | 1111111x. 48 | 11111111. 49 | 11o1oo1xx 50 | oo.oo.ox. 51 | .oo1oooox 52 | oo1111ox. 53 | 111111oxx 54 | 1111111x. 55 | EYEVALUE: 56 | .......x1 57 | ........1 58 | ..o.oo.xx 59 | oo1oo1ox. 60 | 1oo.oooox 61 | oo....ox. 62 | ......oxx 63 | .......x1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_loose_eye_2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......... 3 | ......oo. 4 | ..o.oo.x. 5 | oo.oo.ox. 6 | .oo.oooox 7 | oo....ox. 8 | ......oxx 9 | .......x. 10 | TERRITORY: 11 | ......... 12 | ......oo. 13 | ..o.oo.x. 14 | ooaooaox. 15 | aoo.oooox 16 | oo....ox. 17 | ......oxx 18 | .......x. 19 | SEKI: 20 | ......... 21 | ......... 22 | .......x. 23 | .......xz 24 | ........x 25 | .......xz 26 | .......xx 27 | .......xz 28 | FALSE EYES: 29 | ......... 30 | ......oo. 31 | ..o.oo.x. 32 | oo.oo.oxF 33 | .oo.oooox 34 | oo....oxF 35 | ......oxx 36 | .......x. 37 | UNSCORABLE FALSE EYES: 38 | ......... 39 | ......oo. 40 | ..o.oo.x. 41 | oo.oo.oxF 42 | .oo.oooox 43 | oo....oxF 44 | ......oxx 45 | .......x. 46 | DAME: 47 | ......... 48 | ......oo1 49 | ..o.oo1x1 50 | oo.oo.ox. 51 | .oo1oooox 52 | oo1111ox. 53 | 111111oxx 54 | 1111111x. 55 | EYEVALUE: 56 | 222222222 57 | 222222oo. 58 | 22o2oo.x. 59 | oo1oo1ox. 60 | 1oo.oooox 61 | oo....ox. 62 | ......oxx 63 | .......x1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_loose_eye_3.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......... 3 | .....xxx. 4 | ..o.oo.x. 5 | oo.oo.ox. 6 | .oo.oooox 7 | oo....ox. 8 | ......oxx 9 | .......x. 10 | TERRITORY: 11 | ......... 12 | .....xxx. 13 | ..o.oo.x. 14 | ooaooaox. 15 | aoo.oooox 16 | oo....oxz 17 | ......oxx 18 | .......xz 19 | SEKI: 20 | ......... 21 | ......... 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | FALSE EYES: 29 | ......... 30 | .....xxx. 31 | ..o.oo.x. 32 | oo.oo.oxF 33 | .oo.oooox 34 | oo....oxF 35 | ......oxx 36 | .......x. 37 | UNSCORABLE FALSE EYES: 38 | ......... 39 | .....xxx. 40 | ..o.oo.x. 41 | oo.oo.ox. 42 | .oo.oooox 43 | oo....ox. 44 | ......oxx 45 | .......x. 46 | DAME: 47 | 111111... 48 | 11111xxx. 49 | 11o1oo1x. 50 | oo.oo.ox. 51 | .oo1oooox 52 | oo1111ox. 53 | 111111oxx 54 | 1111111x. 55 | EYEVALUE: 56 | ......222 57 | .....xxx2 58 | ..o.oo.x2 59 | oo1oo1ox2 60 | 1oo.oooox 61 | oo....ox. 62 | ......oxx 63 | .......x1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_loose_eye_4.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .......x. 3 | .......x. 4 | ..o.oo.x. 5 | oo.oo.ox. 6 | .oo.oooox 7 | oo....ox. 8 | ......oxx 9 | .......x. 10 | TERRITORY: 11 | .......xz 12 | .......xz 13 | ..o.oo.xz 14 | ooaooaoxz 15 | aoo.oooox 16 | oo....oxz 17 | ......oxx 18 | .......xz 19 | SEKI: 20 | ......... 21 | ......... 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | FALSE EYES: 29 | .......x. 30 | .......x. 31 | ..o.oo.x. 32 | oo.oo.oxF 33 | .oo.oooox 34 | oo....oxF 35 | ......oxx 36 | .......x. 37 | UNSCORABLE FALSE EYES: 38 | .......x. 39 | .......x. 40 | ..o.oo.x. 41 | oo.oo.ox. 42 | .oo.oooox 43 | oo....ox. 44 | ......oxx 45 | .......x. 46 | DAME: 47 | 1111111x. 48 | 1111111x. 49 | 11o1oo1x. 50 | oo.oo.ox. 51 | .oo1oooox 52 | oo1111ox. 53 | 111111oxx 54 | 1111111x. 55 | EYEVALUE: 56 | .......x1 57 | .......x1 58 | ..o.oo.x1 59 | oo1oo1ox1 60 | 1oo.oooox 61 | oo....ox. 62 | ......oxx 63 | .......x1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_no_bamboo.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......xx. 3 | ......oox 4 | ....oo.xx 5 | oo..o.ox. 6 | .o..oooox 7 | oo....ox. 8 | ......oxx 9 | .......x. 10 | TERRITORY: 11 | ......xxz 12 | ......oox 13 | ....oo.xx 14 | oo..oaoxz 15 | ao..oooox 16 | oo....oxz 17 | ......oxx 18 | .......xz 19 | SEKI: 20 | ......... 21 | ......... 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | FALSE EYES: 29 | ......xx. 30 | ......oox 31 | ....oo.xx 32 | oo..o.ox. 33 | .o..oooox 34 | oo....ox. 35 | ......oxx 36 | .......x. 37 | UNSCORABLE FALSE EYES: 38 | ......xx. 39 | ......oox 40 | ....oo.xx 41 | oo..o.ox. 42 | .o..oooox 43 | oo....ox. 44 | ......oxx 45 | .......x. 46 | DAME: 47 | 111111xx. 48 | 111111oox 49 | 1111oo1xx 50 | oo11o.ox. 51 | .o11oooox 52 | oo1111ox. 53 | 111111oxx 54 | 1111111x. 55 | EYEVALUE: 56 | ......xx1 57 | ......oox 58 | ....oo.xx 59 | oo..o1ox1 60 | 1o..oooox 61 | oo....ox1 62 | ......oxx 63 | .......x1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_big_false_eye_aliveend.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxx..xxx. 3 | xooxxooox 4 | .xo....x. 5 | .xooooox. 6 | .xo...ox. 7 | xoo..ooox 8 | x.o.oxxxx 9 | ..o.ox.x. 10 | TERRITORY: 11 | xxx..xxx. 12 | xooxxooox 13 | .xo....x. 14 | zxoooooxz 15 | .xoaaaox. 16 | xooaaooox 17 | x.oaoxxxx 18 | ..oaoxzxz 19 | SEKI: 20 | ......... 21 | ......... 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | FALSE EYES: 29 | xxxFFxxxF 30 | xooxxooox 31 | Fxo....xF 32 | .xooooox. 33 | Fxo...oxF 34 | xoo..ooox 35 | x.o.oxxxx 36 | ..o.ox.x. 37 | UNSCORABLE FALSE EYES: 38 | xxxFFxxxF 39 | xooxxooox 40 | Fxo....xF 41 | .xooooox. 42 | Fxo...oxF 43 | xoo..ooox 44 | x.o.oxxxx 45 | ..o.ox.x. 46 | DAME: 47 | xxx..xxx. 48 | xooxxooox 49 | .xo1111x. 50 | .xooooox. 51 | .xo...ox. 52 | xoo..ooox 53 | x1o.oxxxx 54 | 11o.ox.x. 55 | EYEVALUE: 56 | xxx..xxx. 57 | xooxxooox 58 | .xo....x. 59 | .xooooox. 60 | .xo222ox. 61 | xoo22ooox 62 | x.o2oxxxx 63 | ..o2ox1x1 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_chain_big_false_eye_aliveends.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxx..xxx. 3 | xooxxooox 4 | .xo....x. 5 | .xooooox. 6 | .xo...ox. 7 | xoo..ooox 8 | x.o.oxxxx 9 | .xo.ox.w. 10 | TERRITORY: 11 | xxxzzxxxz 12 | xooxxooox 13 | zxo....xz 14 | zxoooooxz 15 | zxoaaaoxz 16 | xooaaooox 17 | x.oaoxxxx 18 | zxoaoxzzz 19 | SEKI: 20 | ......... 21 | ......... 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | FALSE EYES: 29 | xxxFFxxxF 30 | xooxxooox 31 | Fxo....xF 32 | .xooooox. 33 | Fxo...oxF 34 | xoo..ooox 35 | x.o.oxxxx 36 | .xo.ox.w. 37 | UNSCORABLE FALSE EYES: 38 | xxx..xxx. 39 | xooxxooox 40 | .xo....x. 41 | .xooooox. 42 | .xo...ox. 43 | xoo..ooox 44 | x.o.oxxxx 45 | .xo.ox.w. 46 | DAME: 47 | xxx..xxx. 48 | xooxxooox 49 | .xo1111x. 50 | .xooooox. 51 | .xo...ox. 52 | xoo..ooox 53 | x1o.oxxxx 54 | .xo.ox.w. 55 | EYEVALUE: 56 | xxx..xxx. 57 | xooxxooox 58 | .xo....x. 59 | .xooooox. 60 | .xo222ox. 61 | xoo22ooox 62 | x.o2oxxxx 63 | 1xo2ox111 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_lgroups_and_rectanglelikes6.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xoooo...ooxxxxoo.....ooooo 3 | xxxxoo.oox.w.xxo....ooxxxx 4 | .w.xxo.oxx..w.xxoo..oxx.w. 5 | ..w.xo.oxxxxxxx..o..oxx... 6 | TERRITORY: 7 | xooooaaaooxxxxooaaaaaooooo 8 | xxxxooaooxzzzxxoaaaaooxxxx 9 | zzzxxoaoxxzzzzxxooaaoxx.w. 10 | zzzzxoaoxxxxxxx..oaaoxx... 11 | SEKI: 12 | .......................... 13 | ......................xxxx 14 | .....................xxzxz 15 | .....................xxzzz 16 | FALSE EYES: 17 | xoooo...ooxxxxoo.....ooooo 18 | xxxxoo.oox.w.xxo....ooxxxx 19 | .w.xxo.oxx..w.xxoo..oxx.w. 20 | ..w.xo.oxxxxxxx..o..oxx... 21 | UNSCORABLE FALSE EYES: 22 | xoooo...ooxxxxoo.....ooooo 23 | xxxxoo.oox.w.xxo....ooxxxx 24 | .w.xxo.oxx..w.xxoo..oxx.w. 25 | ..w.xo.oxxxxxxx..o..oxx... 26 | DAME: 27 | xoooo...ooxxxxoo.....ooooo 28 | xxxxoo.oox.w.xxo....ooxxxx 29 | .w.xxo.oxx..w.xxoo..oxx.w. 30 | ..w.xo.oxxxxxxx11o..oxx... 31 | EYEVALUE: 32 | xoooo222ooxxxxoo22222ooooo 33 | xxxxoo2oox222xxo2222ooxxxx 34 | 222xxo2oxx2222xxoo22oxx111 35 | 2222xo2oxxxxxxx..o22oxx111 36 | -------------------------------------------------------------------------------- /python/expected_test_output/test_hanezeki.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | oxox.oxw.boxo 3 | oxoxoxxxoboxo 4 | oxoxox.xoboxo 5 | .xooox.xooox. 6 | xxoxxx.xxxoxx 7 | ooox.....xooo 8 | xxxx.....xxxx 9 | TERRITORY: 10 | oxox.oxw.boxo 11 | oxoxoxxxoboxo 12 | oxoxoxzxoboxo 13 | .xoooxzxooox. 14 | xxoxxxzxxxoxx 15 | oooxzzzzzxooo 16 | xxxxzzzzzxxxx 17 | SEKI: 18 | oxox.o....oxo 19 | oxoxo...o.oxo 20 | oxoxo...o.oxo 21 | .xooo...ooox. 22 | xxo.......oxx 23 | ooo.......ooo 24 | ............. 25 | FALSE EYES: 26 | oxox.oxw.boxo 27 | oxoxoxxxoboxo 28 | oxoxox.xoboxo 29 | .xooox.xooox. 30 | xxoxxx.xxxoxx 31 | ooox.....xooo 32 | xxxx.....xxxx 33 | UNSCORABLE FALSE EYES: 34 | oxox.oxw.boxo 35 | oxoxoxxxoboxo 36 | oxoxox.xoboxo 37 | .xooox.xooox. 38 | xxoxxx.xxxoxx 39 | ooox.....xooo 40 | xxxx.....xxxx 41 | DAME: 42 | oxox1ox111oxo 43 | oxoxoxxxo1oxo 44 | oxoxox.xo1oxo 45 | 1xooox.xooox1 46 | xxoxxx.xxxoxx 47 | ooox.....xooo 48 | xxxx.....xxxx 49 | EYEVALUE: 50 | oxox.oxw.boxo 51 | oxoxoxxxoboxo 52 | oxoxox2xoboxo 53 | .xooox2xooox. 54 | xxoxxx2xxxoxx 55 | ooox22222xooo 56 | xxxx22222xxxx 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_hanezeki2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | wxox.oxw.boxw 3 | wxoxoxxxoboxw 4 | wxoxox.xoboxw 5 | .xooox.xooox. 6 | xxoxxx.xxxoxx 7 | ooox.....xooo 8 | xxxx.....xxxx 9 | TERRITORY: 10 | wxox.oxw.boxw 11 | wxoxoxxxoboxw 12 | wxoxoxzxoboxw 13 | .xoooxzxooox. 14 | xxoxxxzxxxoxx 15 | oooxzzzzzxooo 16 | xxxxzzzzzxxxx 17 | SEKI: 18 | xxox.o....oxx 19 | xxoxo...o.oxx 20 | xxoxo...o.oxx 21 | zxooo...oooxz 22 | xxo.......oxx 23 | ooo.......ooo 24 | ............. 25 | FALSE EYES: 26 | wxox.oxw.boxw 27 | wxoxoxxxoboxw 28 | wxoxox.xoboxw 29 | .xooox.xooox. 30 | xxoxxx.xxxoxx 31 | ooox.....xooo 32 | xxxx.....xxxx 33 | UNSCORABLE FALSE EYES: 34 | wxox.oxw.boxw 35 | wxoxoxxxoboxw 36 | wxoxox.xoboxw 37 | .xooox.xooox. 38 | xxoxxx.xxxoxx 39 | ooox.....xooo 40 | xxxx.....xxxx 41 | DAME: 42 | wxox1ox111oxw 43 | wxoxoxxxo1oxw 44 | wxoxox.xo1oxw 45 | .xooox.xooox. 46 | xxoxxx.xxxoxx 47 | ooox.....xooo 48 | xxxx.....xxxx 49 | EYEVALUE: 50 | 1xox.oxw.box1 51 | 1xoxoxxxobox1 52 | 1xoxox2xobox1 53 | 1xooox2xooox1 54 | xxoxxx2xxxoxx 55 | ooox22222xooo 56 | xxxx22222xxxx 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_basic.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......x.. 3 | .xx.x.x.. 4 | ......x.. 5 | ......x.. 6 | oooooox.. 7 | .....oxxx 8 | .....o.o. 9 | ...o.o..o 10 | .....o... 11 | TERRITORY: 12 | ......xzz 13 | .xx.x.xzz 14 | ......xzz 15 | ......xzz 16 | ooooooxzz 17 | aaaaaoxxx 18 | aaaaao.o. 19 | aaaoao..o 20 | aaaaao... 21 | SEKI: 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | ......... 29 | ......... 30 | ......... 31 | FALSE EYES: 32 | ......x.. 33 | .xx.x.x.. 34 | ......x.. 35 | ......x.. 36 | oooooox.. 37 | .....oxxx 38 | .....o.o. 39 | ...o.o..o 40 | .....o... 41 | UNSCORABLE FALSE EYES: 42 | ......x.. 43 | .xx.x.x.. 44 | ......x.. 45 | ......x.. 46 | oooooox.. 47 | .....oxxx 48 | .....o.o. 49 | ...o.o..o 50 | .....o... 51 | DAME: 52 | ......x.. 53 | 1xx1x1x.. 54 | 111111x.. 55 | 111111x.. 56 | oooooox.. 57 | .....oxxx 58 | .....o1o1 59 | ...o.o..o 60 | .....o... 61 | EYEVALUE: 62 | 222222x22 63 | .xx.x.x22 64 | ......x22 65 | ......x22 66 | oooooox22 67 | 22222oxxx 68 | 22222o.o. 69 | 222o2o22o 70 | 22222o222 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_empty.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......... 3 | ......... 4 | ......... 5 | ......... 6 | ......... 7 | ......... 8 | ......... 9 | ......... 10 | ......... 11 | TERRITORY: 12 | ......... 13 | ......... 14 | ......... 15 | ......... 16 | ......... 17 | ......... 18 | ......... 19 | ......... 20 | ......... 21 | SEKI: 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | ......... 29 | ......... 30 | ......... 31 | FALSE EYES: 32 | ......... 33 | ......... 34 | ......... 35 | ......... 36 | ......... 37 | ......... 38 | ......... 39 | ......... 40 | ......... 41 | UNSCORABLE FALSE EYES: 42 | ......... 43 | ......... 44 | ......... 45 | ......... 46 | ......... 47 | ......... 48 | ......... 49 | ......... 50 | ......... 51 | DAME: 52 | 111111111 53 | 111111111 54 | 111111111 55 | 111111111 56 | 111111111 57 | 111111111 58 | 111111111 59 | 111111111 60 | 111111111 61 | EYEVALUE: 62 | ......... 63 | ......... 64 | ......... 65 | ......... 66 | ......... 67 | ......... 68 | ......... 69 | ......... 70 | ......... 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......... 3 | xxxx.xx.. 4 | .oxoxox.. 5 | o.oo.ox.. 6 | ..oooox.x 7 | ...o.x.x. 8 | ....ooxox 9 | ...o.o.ox 10 | .....ooo. 11 | TERRITORY: 12 | zzzzzzzzz 13 | xxxx.xxzz 14 | .oxoxoxzz 15 | oaoo.oxzz 16 | aaooooxzx 17 | aaao.x.x. 18 | aaaaooxox 19 | aaaoao.ox 20 | aaaaaooo. 21 | SEKI: 22 | ......... 23 | ......... 24 | ......... 25 | ......... 26 | ......... 27 | ......... 28 | ......... 29 | ......... 30 | ......... 31 | FALSE EYES: 32 | ......... 33 | xxxxFxx.. 34 | .oxoxox.. 35 | o.oo.ox.. 36 | ..oooox.x 37 | ...o.xFxF 38 | ....ooxox 39 | ...o.o.ox 40 | .....ooo. 41 | UNSCORABLE FALSE EYES: 42 | ......... 43 | xxxxFxx.. 44 | .oxoxox.. 45 | o.oo.ox.. 46 | ..oooox.x 47 | ...o.xFxF 48 | ....ooxox 49 | ...o.o.ox 50 | .....ooo. 51 | DAME: 52 | ......... 53 | xxxx.xx.. 54 | 1oxoxox.. 55 | o.oo1ox.. 56 | ..oooox.x 57 | ...o1x.x. 58 | ....ooxox 59 | ...o.o1ox 60 | .....ooo1 61 | EYEVALUE: 62 | 222222222 63 | xxxx2xx22 64 | .oxoxox22 65 | o2oo.ox22 66 | 22oooox2x 67 | 222o.x.x. 68 | 2222ooxox 69 | 222o2o.ox 70 | 22222ooo. 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eyes_2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ...xx.x.. 3 | wxxx.x... 4 | xoxxoxx.. 5 | x.ooxox.. 6 | x.o.xox.x 7 | oo.o.o.x. 8 | ....oooxo 9 | bbbbb..o. 10 | ....b...b 11 | TERRITORY: 12 | .zzxxzxzz 13 | wxxx.xzzz 14 | xoxxoxxzz 15 | x.ooxoxzz 16 | x.o.xoxzx 17 | ooao.o.x. 18 | aaaaoooxo 19 | aaaaaaao. 20 | aaaaaaaaa 21 | SEKI: 22 | ......... 23 | ......... 24 | ....o.... 25 | ....x.... 26 | ....x.... 27 | ......... 28 | ......... 29 | ......... 30 | ......... 31 | FALSE EYES: 32 | ...xx.x.. 33 | Fxxx.x... 34 | xoxxoxx.. 35 | x.ooxox.. 36 | x.o.xox.x 37 | oo.o.o.x. 38 | ....oooxo 39 | bbbbb..oF 40 | ....b...b 41 | UNSCORABLE FALSE EYES: 42 | F..xx.x.. 43 | Fxxx.x... 44 | xoxxoxx.. 45 | x.ooxox.. 46 | x.o.xox.x 47 | oo.o.o.x. 48 | ....oooxo 49 | bbbbb..oF 50 | ....b...b 51 | DAME: 52 | ...xx.x.. 53 | wxxx1x... 54 | xoxxoxx.. 55 | x1ooxox.. 56 | x1o1xox.x 57 | oo.o1o1x1 58 | ....oooxo 59 | bbbbb..o. 60 | ....b...b 61 | EYEVALUE: 62 | 111xx1x22 63 | 1xxx.x222 64 | xoxxoxx22 65 | x.ooxox22 66 | x.o.xox2x 67 | oo2o.o.x. 68 | 2222oooxo 69 | 2222222o2 70 | 222222222 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_dead_stone_marking.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ..w...xw. 3 | .xx.x.x.w 4 | ......xxx 5 | ......x.o 6 | oooooox.. 7 | o.o.xoxxx 8 | oboxxo.o. 9 | ob.o.o..o 10 | .ooooo.b. 11 | TERRITORY: 12 | ..w...xzz 13 | .xx.x.xzz 14 | ......xxx 15 | ......x.o 16 | oooooox.. 17 | oao.xoxxx 18 | oaoxxo.o. 19 | oaao.o..o 20 | aooooo.b. 21 | SEKI: 22 | ......... 23 | ......... 24 | ......... 25 | ........o 26 | ......... 27 | ....x.... 28 | ...xx.... 29 | ......... 30 | ......... 31 | FALSE EYES: 32 | ..w...xw. 33 | .xx.x.x.w 34 | ......xxx 35 | ......x.o 36 | oooooox.. 37 | o.o.xoxxx 38 | oboxxo.o. 39 | ob.o.o..o 40 | .ooooo.b. 41 | UNSCORABLE FALSE EYES: 42 | ..w...xw. 43 | .xx.x.x.w 44 | ......xxx 45 | ......x.o 46 | oooooox.. 47 | o.o.xoxxx 48 | oboxxo.o. 49 | ob.o.o..o 50 | .ooooo.b. 51 | DAME: 52 | ..w...xw. 53 | 1xx1x1x.w 54 | 111111xxx 55 | 111111x1o 56 | oooooox11 57 | o.o1xoxxx 58 | oboxxo1o1 59 | ob.o1o..o 60 | .ooooo.b. 61 | EYEVALUE: 62 | 222222x11 63 | .xx.x.x11 64 | ......xxx 65 | ......x.o 66 | oooooox.. 67 | o1o.xoxxx 68 | o1oxxo.o. 69 | o11o.o11o 70 | 1ooooo111 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cross_poke.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.x.x..o..... 3 | .o.xxx.o.o.... 4 | .oxx.xo.o..... 5 | .ox.wwxx.o.... 6 | .oxx.xo.o..... 7 | .o.xxx.o.o.... 8 | .o...oo....... 9 | TERRITORY: 10 | ao.x.x..oaaaaa 11 | ao.xxx.oaoaaaa 12 | aoxx.xo.oaaaaa 13 | aox.wwxx.oaaaa 14 | aoxx.xo.oaaaaa 15 | ao.xxx.oaoaaaa 16 | ao...ooaaaaaaa 17 | SEKI: 18 | ...xzx........ 19 | ...xxx........ 20 | ..xxzx........ 21 | ..xzxxxx...... 22 | ..xxzx........ 23 | ...xxx........ 24 | .............. 25 | FALSE EYES: 26 | .o.x.x..o..... 27 | .o.xxx.o.o.... 28 | .oxx.xo.o..... 29 | .ox.wFxx.o.... 30 | .oxx.xo.o..... 31 | .o.xxx.o.o.... 32 | .o...oo....... 33 | UNSCORABLE FALSE EYES: 34 | .o.x.x..o..... 35 | .o.xxx.o.o.... 36 | .oxx.xo.o..... 37 | .ox.FFxx.o.... 38 | .oxx.xo.o..... 39 | .o.xxx.o.o.... 40 | .o...oo....... 41 | DAME: 42 | .o1x.x11o..... 43 | .o1xxx1o.o.... 44 | .oxx.xo1o..... 45 | .ox.wwxx1o.... 46 | .oxx.xo1o..... 47 | .o1xxx1o.o.... 48 | .o111oo....... 49 | EYEVALUE: 50 | 2o.x1x..o22222 51 | 2o.xxx.o1o2222 52 | 2oxx.xo.o22222 53 | 2ox.wwxx.o2222 54 | 2oxx.xo.o22222 55 | 2o.xxx.o2o2222 56 | 2o...oo2222222 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cross_nopoke.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.x.x..o..... 3 | .o.xxx.o.o.... 4 | .oxx.xo.o..... 5 | .ox..wxx.o.... 6 | .oxx.xo.o..... 7 | .o.xxx.o.o.... 8 | .o...oo....... 9 | TERRITORY: 10 | ao.xzx..oaaaaa 11 | ao.xxx.oaoaaaa 12 | aoxxzxo.oaaaaa 13 | aoxz.wxx.oaaaa 14 | aoxxzxo.oaaaaa 15 | ao.xxx.oaoaaaa 16 | ao...ooaaaaaaa 17 | SEKI: 18 | .............. 19 | .............. 20 | .............. 21 | .............. 22 | .............. 23 | .............. 24 | .............. 25 | FALSE EYES: 26 | .o.x.x..o..... 27 | .o.xxx.o.o.... 28 | .oxx.xo.o..... 29 | .ox..Fxx.o.... 30 | .oxx.xo.o..... 31 | .o.xxx.o.o.... 32 | .o...oo....... 33 | UNSCORABLE FALSE EYES: 34 | .o.x.x..o..... 35 | .o.xxx.o.o.... 36 | .oxx.xo.o..... 37 | .ox.FFxx.o.... 38 | .oxx.xo.o..... 39 | .o.xxx.o.o.... 40 | .o...oo....... 41 | DAME: 42 | .o1x.x11o..... 43 | .o1xxx1o.o.... 44 | .oxx.xo1o..... 45 | .ox..wxx1o.... 46 | .oxx.xo1o..... 47 | .o1xxx1o.o.... 48 | .o111oo....... 49 | EYEVALUE: 50 | 2o.x1x..o22222 51 | 2o.xxx.o1o2222 52 | 2oxx2xo.o22222 53 | 2ox222xx.o2222 54 | 2oxx2xo.o22222 55 | 2o.xxx.o2o2222 56 | 2o...oo2222222 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cross_noseal.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.x.x..o..... 3 | .o.xxx.o.o.... 4 | .oxx.xo.o..... 5 | .ox......o.... 6 | .oxx.xo.o..... 7 | .o.xxx.o.o.... 8 | .o...oo....... 9 | TERRITORY: 10 | ao.xzx..oaaaaa 11 | ao.xxx.oaoaaaa 12 | aoxx.xo.oaaaaa 13 | aox......oaaaa 14 | aoxx.xo.oaaaaa 15 | ao.xxx.oaoaaaa 16 | ao...ooaaaaaaa 17 | SEKI: 18 | .............. 19 | .............. 20 | .............. 21 | .............. 22 | .............. 23 | .............. 24 | .............. 25 | FALSE EYES: 26 | .o.x.x..o..... 27 | .o.xxx.o.o.... 28 | .oxx.xo.o..... 29 | .ox......o.... 30 | .oxx.xo.o..... 31 | .o.xxx.o.o.... 32 | .o...oo....... 33 | UNSCORABLE FALSE EYES: 34 | .o.x.x..o..... 35 | .o.xxx.o.o.... 36 | .oxx.xo.o..... 37 | .ox......o.... 38 | .oxx.xo.o..... 39 | .o.xxx.o.o.... 40 | .o...oo....... 41 | DAME: 42 | .o1x.x11o..... 43 | .o1xxx1o.o.... 44 | .oxx.xo.o..... 45 | .ox..11..o.... 46 | .oxx.xo.o..... 47 | .o1xxx1o.o.... 48 | .o111oo....... 49 | EYEVALUE: 50 | 2o.x1x..o22222 51 | 2o.xxx.o1o2222 52 | 2oxx2xo2o22222 53 | 2ox22..22o2222 54 | 2oxx2xo2o22222 55 | 2o.xxx.o2o2222 56 | 2o...oo2222222 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cross_nothrowin.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.x.x..o..... 3 | .o.xxx.o.o.... 4 | .oxx.xo.o..... 5 | .ox...xx.o.... 6 | .oxx.xo.o..... 7 | .o.xxx.o.o.... 8 | .o...oo....... 9 | TERRITORY: 10 | ao.xzx..oaaaaa 11 | ao.xxx.oaoaaaa 12 | aoxxzxo.oaaaaa 13 | aoxzz.xx.oaaaa 14 | aoxxzxo.oaaaaa 15 | ao.xxx.oaoaaaa 16 | ao...ooaaaaaaa 17 | SEKI: 18 | .............. 19 | .............. 20 | .............. 21 | .............. 22 | .............. 23 | .............. 24 | .............. 25 | FALSE EYES: 26 | .o.x.x..o..... 27 | .o.xxx.o.o.... 28 | .oxx.xo.o..... 29 | .ox..Fxx.o.... 30 | .oxx.xo.o..... 31 | .o.xxx.o.o.... 32 | .o...oo....... 33 | UNSCORABLE FALSE EYES: 34 | .o.x.x..o..... 35 | .o.xxx.o.o.... 36 | .oxx.xo.o..... 37 | .ox..Fxx.o.... 38 | .oxx.xo.o..... 39 | .o.xxx.o.o.... 40 | .o...oo....... 41 | DAME: 42 | .o1x.x11o..... 43 | .o1xxx1o.o.... 44 | .oxx.xo1o..... 45 | .ox...xx1o.... 46 | .oxx.xo1o..... 47 | .o1xxx1o.o.... 48 | .o111oo....... 49 | EYEVALUE: 50 | 2o.x1x..o22222 51 | 2o.xxx.o1o2222 52 | 2oxx2xo.o22222 53 | 2ox222xx.o2222 54 | 2oxx2xo.o22222 55 | 2o.xxx.o2o2222 56 | 2o...oo2222222 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_cross_poke_deeper.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .o.x.x..o..... 3 | .o.xxx.o.o.... 4 | oxxx.xo.o..... 5 | ox..wwxx.o.... 6 | oxxx.xo.o..... 7 | .o.xxx.o.o.... 8 | .o...oo....... 9 | TERRITORY: 10 | ao.xzx..oaaaaa 11 | ao.xxx.oaoaaaa 12 | oxxxzxo.oaaaaa 13 | oxzzwwxx.oaaaa 14 | oxxxzxo.oaaaaa 15 | ao.xxx.oaoaaaa 16 | ao...ooaaaaaaa 17 | SEKI: 18 | .............. 19 | .............. 20 | .............. 21 | .............. 22 | .............. 23 | .............. 24 | .............. 25 | FALSE EYES: 26 | .o.x.x..o..... 27 | Fo.xxx.o.o.... 28 | oxxx.xo.o..... 29 | ox..wFxx.o.... 30 | oxxx.xo.o..... 31 | Fo.xxx.o.o.... 32 | .o...oo....... 33 | UNSCORABLE FALSE EYES: 34 | .o.x.x..o..... 35 | .o.xxx.o.o.... 36 | oxxx.xo.o..... 37 | ox..FFxx.o.... 38 | oxxx.xo.o..... 39 | .o.xxx.o.o.... 40 | .o...oo....... 41 | DAME: 42 | .o1x.x11o..... 43 | .o1xxx1o.o.... 44 | oxxx.xo1o..... 45 | ox..wwxx1o.... 46 | oxxx.xo1o..... 47 | .o1xxx1o.o.... 48 | .o111oo....... 49 | EYEVALUE: 50 | 1o.x1x..o22222 51 | 1o.xxx.o1o2222 52 | oxxx1xo.o22222 53 | ox1111xx.o2222 54 | oxxx1xo.o22222 55 | 1o.xxx.o2o2222 56 | 1o...oo2222222 57 | -------------------------------------------------------------------------------- /web_test/wgo/LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT license, more info: wgo.waltheri.net 2 | Copyright (c) 2013 Jan Prokop 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 5 | software and associated documentation files (the "Software"), to deal in the Software 6 | without restriction, including without limitation the rights to use, copy, modify, merge, 7 | publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 8 | to whom the Software is furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all copies or 11 | substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 14 | BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 15 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 16 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 17 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 | 19 | -------------------------------------------------------------------------------- /python/expected_test_output/test_various_eyefillings4.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | bbbboooo.x.oooobbbb 3 | bbbox...x.x...xobbb 4 | ..oo.xxxx..xxx.oob. 5 | ooo.xx.......xx.ooo 6 | ....x.........x.... 7 | xxxxx.........xxxxx 8 | TERRITORY: 9 | bbbboooo.x.oooobbbb 10 | bbbox...xzx...xobbb 11 | ..oo.xxxxzzxxx.oob. 12 | ooo.xxzzzzzzzxx.ooo 13 | ....xzzzzzzzzzx.... 14 | xxxxxzzzzzzzzzxxxxx 15 | SEKI: 16 | oooooooo...oooooooo 17 | oooo...........oooo 18 | aaoo...........oooa 19 | ooo.............ooo 20 | ................... 21 | ................... 22 | FALSE EYES: 23 | bbbFoooo.x.ooooFbbb 24 | bbbox...x.x...xobbb 25 | ..oo.xxxx..xxx.oob. 26 | ooo.xx.......xx.ooo 27 | ....x.........x.... 28 | xxxxx.........xxxxx 29 | UNSCORABLE FALSE EYES: 30 | bbFFoooo.x.ooooFFbb 31 | bbbox...x.x...xobbb 32 | ..oo.xxxx..xxx.oob. 33 | ooo.xx.......xx.ooo 34 | ....x.........x.... 35 | xxxxx.........xxxxx 36 | DAME: 37 | bbbboooo1x1oooobbbb 38 | bbbox111x.x111xobbb 39 | ..oo1xxxx..xxx1oob. 40 | ooo1xx.......xx1ooo 41 | 1111x.........x1111 42 | xxxxx.........xxxxx 43 | EYEVALUE: 44 | 1111oooo.x.oooo1111 45 | 111ox...x2x...xo111 46 | 11oo.xxxx22xxx.oo11 47 | ooo.xx2222222xx.ooo 48 | ....x222222222x.... 49 | xxxxx222222222xxxxx 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_two_point_eye_falsity.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .xx..x.oooooooo.ooooooo. 3 | xxoxxoooxxxoxxoooxxxoxxx 4 | oooooo.ox.xx..x.ox.xx..x 5 | xxoxxxooxxxoxxoooxxxoxxx 6 | .xx..xooooooooo.ooooooo. 7 | TERRITORY: 8 | .xx..x.ooooooooaooooooo. 9 | xxoxxoooxxxoxxoooxxxoxxx 10 | ooooooaox.xx..x.oxzxxzzx 11 | xxoxxxooxxxoxxoooxxxoxxx 12 | zxxzzxoooooooooaooooooo. 13 | SEKI: 14 | zxxzzx.................. 15 | xx.xx...xxx.xx.......... 16 | ........xzxxzzx......... 17 | ........xxx.xx.......... 18 | ........................ 19 | FALSE EYES: 20 | .xxFFx.oooooooo.ooooooo. 21 | xxoxxoooxxxoxxoooxxxoxxx 22 | oooooo.ox.xxFFx.ox.xxF.x 23 | xxoxxxooxxxoxxoooxxxoxxx 24 | .xxF.xooooooooo.ooooooo. 25 | UNSCORABLE FALSE EYES: 26 | .xxFFx.oooooooo.ooooooo. 27 | xxoxxoooxxxoxxoooxxxoxxx 28 | oooooo.ox.xxFFx.ox.xx..x 29 | xxoxxxooxxxoxxoooxxxoxxx 30 | .xx..xooooooooo.ooooooo. 31 | DAME: 32 | .xx..x1oooooooo.ooooooo1 33 | xxoxxoooxxxoxxoooxxxoxxx 34 | oooooo.ox.xx..x1ox.xx..x 35 | xxoxxxooxxxoxxoooxxxoxxx 36 | .xx..xooooooooo.ooooooo1 37 | EYEVALUE: 38 | 1xx..x.oooooooo1ooooooo. 39 | xxoxxoooxxxoxxoooxxxoxxx 40 | oooooo1ox1xx..x.ox1xx11x 41 | xxoxxxooxxxoxxoooxxxoxxx 42 | 1xx11xooooooooo1ooooooo. 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eye_multicycles1.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxxxx.xo............ 3 | xooooxoo............ 4 | .xo.ox.o............ 5 | xo.ooxooooooo....... 6 | xooooxoxxxxxo....... 7 | xxxxx.xx.w.xo....... 8 | TERRITORY: 9 | xxxxx.xoaaaaaaaaaaaa 10 | xooooxooaaaaaaaaaaaa 11 | .xoaox.oaaaaaaaaaaaa 12 | xoaooxoooooooaaaaaaa 13 | xooooxoxxxxxoaaaaaaa 14 | xxxxx.xx.w.xoaaaaaaa 15 | SEKI: 16 | xxxxxzx............. 17 | x....x.............. 18 | zx...x.............. 19 | x....x.............. 20 | x....x.xxxxx........ 21 | xxxxxzxxzxzx........ 22 | FALSE EYES: 23 | xxxxxFxo............ 24 | xooooxoo............ 25 | Fxo.ox.o............ 26 | xo.ooxooooooo....... 27 | xooooxoxxxxxo....... 28 | xxxxxFxx.w.xo....... 29 | UNSCORABLE FALSE EYES: 30 | xxxxxFxo............ 31 | xooooxoo............ 32 | Fxo.ox.o............ 33 | xo.ooxooooooo....... 34 | xooooxoxxxxxo....... 35 | xxxxxFxx.w.xo....... 36 | DAME: 37 | xxxxx.xo............ 38 | xooooxoo............ 39 | .xo.ox1o............ 40 | xo.ooxooooooo....... 41 | xooooxoxxxxxo....... 42 | xxxxx.xx.w.xo....... 43 | EYEVALUE: 44 | xxxxx.xo222222222222 45 | xooooxoo222222222222 46 | .xo1ox.o222222222222 47 | xo1ooxooooooo2222222 48 | xooooxoxxxxxo2222222 49 | xxxxx.xx111xo2222222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eye_multicycles2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxxxx.xo............ 3 | xooooxoo............ 4 | .xo.ox.o............ 5 | xo.ooxooooooo....... 6 | xoooxxoxxxxxo....... 7 | xxxxx.xx.w.xo....... 8 | TERRITORY: 9 | xxxxx.xoaaaaaaaaaaaa 10 | xooooxooaaaaaaaaaaaa 11 | .xoaox.oaaaaaaaaaaaa 12 | xoaooxoooooooaaaaaaa 13 | xoooxxoxxxxxoaaaaaaa 14 | xxxxx.xx.w.xoaaaaaaa 15 | SEKI: 16 | xxxxxzx............. 17 | x....x.............. 18 | zx...x.............. 19 | x....x.............. 20 | x...xx.xxxxx........ 21 | xxxxxzxxzxzx........ 22 | FALSE EYES: 23 | xxxxxFxo............ 24 | xooooxoo............ 25 | Fxo.ox.o............ 26 | xo.ooxooooooo....... 27 | xoooxxoxxxxxo....... 28 | xxxxxFxx.w.xo....... 29 | UNSCORABLE FALSE EYES: 30 | xxxxxFxo............ 31 | xooooxoo............ 32 | Fxo.ox.o............ 33 | xo.ooxooooooo....... 34 | xoooxxoxxxxxo....... 35 | xxxxxFxx.w.xo....... 36 | DAME: 37 | xxxxx.xo............ 38 | xooooxoo............ 39 | .xo.ox1o............ 40 | xo.ooxooooooo....... 41 | xoooxxoxxxxxo....... 42 | xxxxx.xx.w.xo....... 43 | EYEVALUE: 44 | xxxxx.xo222222222222 45 | xooooxoo222222222222 46 | .xo1ox.o222222222222 47 | xo1ooxooooooo2222222 48 | xoooxxoxxxxxo2222222 49 | xxxxx.xx111xo2222222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eye_multicycles3.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxxxx.xo............ 3 | xooooxoo............ 4 | .xo.ox.o............ 5 | xo.ooxooooooo....... 6 | xooooxxxxxxxo....... 7 | xxxxx.xx.w.xo....... 8 | TERRITORY: 9 | xxxxx.xoaaaaaaaaaaaa 10 | xooooxooaaaaaaaaaaaa 11 | .xoaox.oaaaaaaaaaaaa 12 | xoaooxoooooooaaaaaaa 13 | xooooxxxxxxxoaaaaaaa 14 | xxxxxzxxzzzxoaaaaaaa 15 | SEKI: 16 | .................... 17 | .................... 18 | .................... 19 | .................... 20 | .................... 21 | .................... 22 | FALSE EYES: 23 | xxxxxFxo............ 24 | xooooxoo............ 25 | Fxo.ox.o............ 26 | xo.ooxooooooo....... 27 | xooooxxxxxxxo....... 28 | xxxxx.xx.w.xo....... 29 | UNSCORABLE FALSE EYES: 30 | xxxxxFxo............ 31 | xooooxoo............ 32 | Fxo.ox.o............ 33 | xo.ooxooooooo....... 34 | xooooxxxxxxxo....... 35 | xxxxx.xx.w.xo....... 36 | DAME: 37 | xxxxx.xo............ 38 | xooooxoo............ 39 | .xo.ox1o............ 40 | xo.ooxooooooo....... 41 | xooooxxxxxxxo....... 42 | xxxxx.xx.w.xo....... 43 | EYEVALUE: 44 | xxxxx.xo222222222222 45 | xooooxoo222222222222 46 | .xo1ox.o222222222222 47 | xo1ooxooooooo2222222 48 | xooooxxxxxxxo2222222 49 | xxxxx1xx111xo2222222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eye_multicycles4.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxxxx.xo............ 3 | xooooxoooooo........ 4 | .xo.oxxoxxx.o....... 5 | xo.oox.xx.x.o....... 6 | xoooxxxoxxxxo....... 7 | xxxxxoooooooo....... 8 | TERRITORY: 9 | xxxxx.xoaaaaaaaaaaaa 10 | xooooxooooooaaaaaaaa 11 | .xoaoxxoxxx.oaaaaaaa 12 | xoaoox.xx.x.oaaaaaaa 13 | xoooxxxoxxxxoaaaaaaa 14 | xxxxxooooooooaaaaaaa 15 | SEKI: 16 | xxxxxzx............. 17 | x....x.............. 18 | zx...xx.xxx......... 19 | x....xzxxzx......... 20 | x...xxx.xxxx........ 21 | xxxxx............... 22 | FALSE EYES: 23 | xxxxxFxo............ 24 | xooooxoooooo........ 25 | Fxo.oxxoxxx.o....... 26 | xo.ooxFxx.x.o....... 27 | xoooxxxoxxxxo....... 28 | xxxxxoooooooo....... 29 | UNSCORABLE FALSE EYES: 30 | xxxxxFxo............ 31 | xooooxoooooo........ 32 | Fxo.oxxoxxx.o....... 33 | xo.ooxFxx.x.o....... 34 | xoooxxxoxxxxo....... 35 | xxxxxoooooooo....... 36 | DAME: 37 | xxxxx.xo............ 38 | xooooxoooooo........ 39 | .xo.oxxoxxx1o....... 40 | xo.oox.xx.x1o....... 41 | xoooxxxoxxxxo....... 42 | xxxxxoooooooo....... 43 | EYEVALUE: 44 | xxxxx.xo222222222222 45 | xooooxoooooo22222222 46 | .xo1oxxoxxx.o2222222 47 | xo1oox.xx1x.o2222222 48 | xoooxxxoxxxxo2222222 49 | xxxxxoooooooo2222222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eye_multicycles5.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxxxx.xo............ 3 | xooooxoooooo........ 4 | .xo.oxxoxxx.o....... 5 | xo.oxx.xx.x.o....... 6 | xoooxoxxxxxxo....... 7 | xxxxxoooooooo....... 8 | TERRITORY: 9 | xxxxx.xoaaaaaaaaaaaa 10 | xooooxooooooaaaaaaaa 11 | .xoaoxxoxxx.oaaaaaaa 12 | xoaoxx.xx.x.oaaaaaaa 13 | xoooxoxxxxxxoaaaaaaa 14 | xxxxxooooooooaaaaaaa 15 | SEKI: 16 | xxxxxzx............. 17 | x....x.............. 18 | zx...xx.xxx......... 19 | x...xxzxxzx......... 20 | x...x.xxxxxx........ 21 | xxxxx............... 22 | FALSE EYES: 23 | xxxxxFxo............ 24 | xooooxoooooo........ 25 | Fxo.oxxoxxx.o....... 26 | xo.oxxFxx.x.o....... 27 | xoooxoxxxxxxo....... 28 | xxxxxoooooooo....... 29 | UNSCORABLE FALSE EYES: 30 | xxxxxFxo............ 31 | xooooxoooooo........ 32 | Fxo.oxxoxxx.o....... 33 | xo.oxxFxx.x.o....... 34 | xoooxoxxxxxxo....... 35 | xxxxxoooooooo....... 36 | DAME: 37 | xxxxx.xo............ 38 | xooooxoooooo........ 39 | .xo.oxxoxxx1o....... 40 | xo.oxx.xx.x1o....... 41 | xoooxoxxxxxxo....... 42 | xxxxxoooooooo....... 43 | EYEVALUE: 44 | xxxxx.xo222222222222 45 | xooooxoooooo22222222 46 | .xo1oxxoxxx.o2222222 47 | xo1oxx.xx1x.o2222222 48 | xoooxoxxxxxxo2222222 49 | xxxxxoooooooo2222222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_false_eye_multicycles6.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .xxxx.xo............ 3 | xooooxoooooo........ 4 | .xo.oxxoxxx.o....... 5 | xo.oxx.xx.x.o....... 6 | xoooxoxxxxxxo....... 7 | xxxxxoooooooo....... 8 | TERRITORY: 9 | zxxxx.xoaaaaaaaaaaaa 10 | xooooxooooooaaaaaaaa 11 | .xoaoxxoxxx.oaaaaaaa 12 | xoaoxxzxxzx.oaaaaaaa 13 | xoooxoxxxxxxoaaaaaaa 14 | xxxxxooooooooaaaaaaa 15 | SEKI: 16 | .................... 17 | .................... 18 | .................... 19 | .................... 20 | .................... 21 | .................... 22 | FALSE EYES: 23 | .xxxxFxo............ 24 | xooooxoooooo........ 25 | Fxo.oxxoxxx.o....... 26 | xo.oxxFxx.x.o....... 27 | xoooxoxxxxxxo....... 28 | xxxxxoooooooo....... 29 | UNSCORABLE FALSE EYES: 30 | .xxxxFxo............ 31 | xooooxoooooo........ 32 | Fxo.oxxoxxx.o....... 33 | xo.oxx.xx.x.o....... 34 | xoooxoxxxxxxo....... 35 | xxxxxoooooooo....... 36 | DAME: 37 | .xxxx.xo............ 38 | xooooxoooooo........ 39 | .xo.oxxoxxx1o....... 40 | xo.oxx.xx.x1o....... 41 | xoooxoxxxxxxo....... 42 | xxxxxoooooooo....... 43 | EYEVALUE: 44 | 1xxxx.xo222222222222 45 | xooooxoooooo22222222 46 | .xo1oxxoxxx.o2222222 47 | xo1oxx.xx1x.o2222222 48 | xoooxoxxxxxxo2222222 49 | xxxxxoooooooo2222222 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_bamboo_interleave_seki.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .xxxxxx.ox.. 3 | xo..x.x.ox.. 4 | xooooxooox.. 5 | xx..xx.o.x.. 6 | x.oo..oo.x.. 7 | xxooxxoo.x.. 8 | x.o.oo.o.x.. 9 | ooooxxoo.x.. 10 | xxxxxxxxx... 11 | TERRITORY: 12 | .xxxxxx.oxzz 13 | xo..x.x.oxzz 14 | xooooxoooxzz 15 | xx..xx.o.xzz 16 | x.oo..oo.xzz 17 | xxooxxoo.xzz 18 | x.o.oo.o.xzz 19 | ooooxxoo.xzz 20 | xxxxxxxxxzzz 21 | SEKI: 22 | zxxxxxx.o... 23 | xo..xzx.o... 24 | xooooxooo... 25 | xx..xx.o.... 26 | x.oo..oo.... 27 | xxooxxoo.... 28 | x.oaooao.... 29 | oooo..oo.... 30 | ............ 31 | FALSE EYES: 32 | Fxxxxxx.ox.. 33 | xo..xFx.ox.. 34 | xooooxooox.. 35 | xx..xx.o.x.. 36 | x.oo..oo.x.. 37 | xxooxxoo.x.. 38 | x.oFooFo.x.. 39 | ooooxxoo.x.. 40 | xxxxxxxxx... 41 | UNSCORABLE FALSE EYES: 42 | Fxxxxxx.ox.. 43 | xo..xFx.ox.. 44 | xooooxooox.. 45 | xx..xx.o.x.. 46 | x.oo..oo.x.. 47 | xxooxxoo.x.. 48 | x.oFooFo.x.. 49 | ooooxxoo.x.. 50 | xxxxxxxxx... 51 | DAME: 52 | .xxxxxx1ox.. 53 | xo11x.x1ox.. 54 | xooooxooox.. 55 | xx11xx1o1x.. 56 | x1oo11oo1x.. 57 | xxooxxoo1x.. 58 | x1o.oo.o1x.. 59 | ooooxxoo1x.. 60 | xxxxxxxxx... 61 | EYEVALUE: 62 | .xxxxxx.ox22 63 | xo..x.x.ox22 64 | xooooxooox22 65 | xx..xx.o.x22 66 | x.oo..oo.x22 67 | xxooxxoo.x22 68 | x.o.oo.o.x22 69 | ooooxxoo.x22 70 | xxxxxxxxx222 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_no_bamboo_interleave_seki_broken.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .xxxxxx.ox.. 3 | xo..xxx.ox.. 4 | xooo...oox.. 5 | xx.....o.x.. 6 | x.ooxx.o.x.. 7 | xxooxxoo.x.. 8 | x.o.oo.o.x.. 9 | ooooxxoo.x.. 10 | xxxxxxxxx... 11 | TERRITORY: 12 | .xxxxxx.oxzz 13 | xo..xxx.oxzz 14 | xooo...ooxzz 15 | xx.....o.xzz 16 | x.ooxx.o.xzz 17 | xxooxxoo.xzz 18 | x.oaooao.xzz 19 | ooooxxoo.xzz 20 | xxxxxxxxxzzz 21 | SEKI: 22 | zxxxxxx..... 23 | x...xxx..... 24 | x........... 25 | xx.......... 26 | x...xx...... 27 | xx..xx...... 28 | x........... 29 | ............ 30 | ............ 31 | FALSE EYES: 32 | Fxxxxxx.ox.. 33 | xo..xxx.ox.. 34 | xooo...oox.. 35 | xx.....o.x.. 36 | x.ooxx.o.x.. 37 | xxooxxoo.x.. 38 | x.o.oo.o.x.. 39 | ooooxxoo.x.. 40 | xxxxxxxxx... 41 | UNSCORABLE FALSE EYES: 42 | Fxxxxxx.ox.. 43 | xo..xxx.ox.. 44 | xooo...oox.. 45 | xx.....o.x.. 46 | x.ooxx.o.x.. 47 | xxooxxoo.x.. 48 | x.o.oo.o.x.. 49 | ooooxxoo.x.. 50 | xxxxxxxxx... 51 | DAME: 52 | .xxxxxx1ox.. 53 | xo11xxx1ox.. 54 | xooo111oox.. 55 | xx11111o1x.. 56 | x1ooxx1o1x.. 57 | xxooxxoo1x.. 58 | x1o.oo.o1x.. 59 | ooooxxoo1x.. 60 | xxxxxxxxx... 61 | EYEVALUE: 62 | .xxxxxx.ox22 63 | xo..xxx.ox22 64 | xooo...oox22 65 | xx.....o.x22 66 | x.ooxx.o.x22 67 | xxooxxoo.x22 68 | x.o1oo1o.x22 69 | ooooxxoo.x22 70 | xxxxxxxxx222 71 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | 2 | The following license covers all content in this repo except the code in web_test/wgo/, 3 | which is from the WGo library (http://wgo.waltheri.net/player) and has its own license. 4 | 5 | ---------------------------------------------------------------------------------- 6 | 7 | Copyright 2024 David J Wu ("lightvector"). 8 | 9 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 10 | associated documentation files (the "Software"), to deal in the Software without restriction, 11 | including without limitation the rights to use, copy, modify, merge, publish, distribute, 12 | sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all copies or 16 | substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 19 | NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 21 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /python/expected_test_output/test_loose_nakade.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x.........x.........x.........x 3 | .x.o..x....x.o..x....x.o.xx....x 4 | .x.o.o.xx..x.o.o.xx..x.ooo.xx..x 5 | .x.o..ooo..x.o..ooo..x.o..ooo..x 6 | .x.o.b.....x.o.......x.o.b..o..x 7 | TERRITORY: 8 | zx.........x.........x.........x 9 | zx.o..x....x.o..x....x.o.xx....x 10 | zx.o.o.xx..x.o.o.xx..x.ooo.xx..x 11 | zx.o..ooo..x.o..ooo..x.oaaooo..x 12 | zx.o.b.....x.o.......x.oaaaao..x 13 | SEKI: 14 | ...........x.........x.........x 15 | ...o..x....x....x....x...xx....x 16 | ...o.o.xx..x.....xx..x.....xx..x 17 | ...oaaooo..x.........x.........x 18 | ...oaoaa...x.........x.........x 19 | FALSE EYES: 20 | .x.........x.........x.........x 21 | .x.o..x....x.o..x....x.o.xx....x 22 | .x.o.o.xx..x.o.o.xx..x.ooo.xx..x 23 | .x.o..ooo..x.o..ooo..x.o..ooo..x 24 | .x.o.b.....x.o.......x.o.b..o..x 25 | UNSCORABLE FALSE EYES: 26 | .x.........x.........x.........x 27 | .x.o..x....x.o..x....x.o.xx....x 28 | .x.o.o.xx..x.o.o.xx..x.ooo.xx..x 29 | .x.o..ooo..x.o..ooo..x.o..ooo..x 30 | .x.o.b.....x.o.......x.o.b..o..x 31 | DAME: 32 | .x111111111x111111111x111111111x 33 | .x1o11x1111x1o11x1111x1o1xx1111x 34 | .x1o1o1xx11x1o1o1xx11x1ooo1xx11x 35 | .x1o..ooo11x1o..ooo11x1o..ooo11x 36 | .x1o.b..111x1o....111x1o.b..o11x 37 | EYEVALUE: 38 | 2x.........x.........x.........x 39 | 2x.o..x....x.o..x....x.o.xx....x 40 | 2x.o.o.xx..x.o.o.xx..x.ooo.xx..x 41 | 2x.o11ooo..x.o22ooo..x.o22ooo..x 42 | 2x.o1111...x.o2222...x.o2222o..x 43 | -------------------------------------------------------------------------------- /python/expected_test_output/test_various_corner_eyes.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ...xo.......xox..x 3 | ...xo.......xox... 4 | ...xo.......xox... 5 | xxxxo.......xoxxxx 6 | oooox.......xooooo 7 | ..oox.......xo.... 8 | ...ox.......xo.... 9 | ...ox.......xo.... 10 | TERRITORY: 11 | zzzxo.......xoxzzx 12 | zzzxo.......xoxzzz 13 | zzzxo.......xoxzzz 14 | xxxxo.......xoxxxx 15 | oooox.......xooooo 16 | aaoox.......xoaaaa 17 | aaaox.......xoaaaa 18 | aaaox.......xoaaaa 19 | SEKI: 20 | ....o.......x..... 21 | ....o.......x..... 22 | ....o.......x..... 23 | ....o.......x..... 24 | ....x.......x..... 25 | ....x.......x..... 26 | ....x.......x..... 27 | ....x.......x..... 28 | FALSE EYES: 29 | ...xo.......xox..x 30 | ...xo.......xox... 31 | ...xo.......xox... 32 | xxxxo.......xoxxxx 33 | oooox.......xooooo 34 | ..oox.......xo.... 35 | ...ox.......xo.... 36 | ...ox.......xo.... 37 | UNSCORABLE FALSE EYES: 38 | ...xo.......xox..x 39 | ...xo.......xox... 40 | ...xo.......xox... 41 | xxxxo.......xoxxxx 42 | oooox.......xooooo 43 | ..oox.......xo.... 44 | ...ox.......xo.... 45 | ...ox.......xo.... 46 | DAME: 47 | ...xo1111111xox..x 48 | ...xo1111111xox... 49 | ...xo1111111xox... 50 | xxxxo1111111xoxxxx 51 | oooox1111111xooooo 52 | ..oox1111111xo.... 53 | ...ox1111111xo.... 54 | ...ox1111111xo.... 55 | EYEVALUE: 56 | 222xo.......xox22x 57 | 222xo.......xox222 58 | 222xo.......xox222 59 | xxxxo.......xoxxxx 60 | oooox.......xooooo 61 | 22oox.......xo2222 62 | 222ox.......xo2222 63 | 222ox.......xo2222 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_various_eyefillings.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .box...x...ox.www. 3 | bboxx.x.x..oxxxxxx 4 | ooooxx.x...ooooooo 5 | ...xo............. 6 | xxxxo............. 7 | .w.xo.....oooooooo 8 | xxxxo.....oxxxxxxx 9 | ooooo.....ox.wwww. 10 | TERRITORY: 11 | .boxzzzx...ox.www. 12 | bboxxzxzx..oxxxxxx 13 | ooooxx.x...ooooooo 14 | ...xo............. 15 | xxxxo............. 16 | .w.xo.....oooooooo 17 | xxxxo.....oxxxxxxx 18 | ooooo.....oxzzzzzz 19 | SEKI: 20 | aoo........oxzxxxz 21 | ooo........oxxxxxx 22 | oooo.......ooooooo 23 | ...xo............. 24 | xxxxo............. 25 | zxzxo.....oooooooo 26 | xxxxo.....o....... 27 | ooooo.....o....... 28 | FALSE EYES: 29 | .box...x...ox.www. 30 | bboxx.x.x..oxxxxxx 31 | ooooxx.x...ooooooo 32 | ...xo............. 33 | xxxxo............. 34 | .w.xo.....oooooooo 35 | xxxxo.....oxxxxxxx 36 | ooooo.....ox.wwww. 37 | UNSCORABLE FALSE EYES: 38 | .box...x...ox.www. 39 | bboxx.x.x..oxxxxxx 40 | ooooxx.x...ooooooo 41 | ...xo............. 42 | xxxxo............. 43 | .w.xo.....oooooooo 44 | xxxxo.....oxxxxxxx 45 | ooooo.....ox.wwww. 46 | DAME: 47 | .box...x111ox.www. 48 | bboxx.x.x11oxxxxxx 49 | ooooxx1x111ooooooo 50 | 111xo1111111111111 51 | xxxxo1111111111111 52 | .w.xo11111oooooooo 53 | xxxxo11111oxxxxxxx 54 | ooooo11111ox.wwww. 55 | EYEVALUE: 56 | 11ox222x...ox11111 57 | 11oxx2x1x..oxxxxxx 58 | ooooxx.x...ooooooo 59 | ...xo............. 60 | xxxxo............. 61 | 111xo.....oooooooo 62 | xxxxo.....oxxxxxxx 63 | ooooo.....ox222222 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_various_eyefillings2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ..xx.o.xobbb.oxxw. 3 | wwwxooxxobboooxw.w 4 | ww.xox.xooooo.xwwx 5 | xxxxoxx.xo...xx.xx 6 | ooooooxxxoxxxxxxxo 7 | xxxxxo..xxoooooooo 8 | xww.xooooooxxxxxxx 9 | wwxxx.o.o.ox.wwww. 10 | TERRITORY: 11 | ..xx.o.xobbb.oxxw. 12 | wwwxooxxobboooxw.w 13 | ww.xoxzxooooo.xwwx 14 | xxxxoxxzxo...xx.xx 15 | ooooooxxxoxxxxxxxo 16 | xxxxxo..xxoooooooo 17 | xzzzxooooooxxxxxxx 18 | zzxxx.oaoaoxzzzzzz 19 | SEKI: 20 | zzxx....ooooaoxxxz 21 | xxxx....ooooooxxzx 22 | xxzx....ooooo.xxxx 23 | xxxx.....o...xxzxx 24 | .........oxxxxxxx. 25 | .................. 26 | .................. 27 | .................. 28 | FALSE EYES: 29 | ..xx.o.xobbb.oxxw. 30 | wwwxooxxobboooxw.w 31 | ww.xox.xooooo.xwwx 32 | xxxxoxx.xo...xx.xx 33 | ooooooxxxoxxxxxxxo 34 | xxxxxo..xxoooooooo 35 | xww.xooooooxxxxxxx 36 | wwxxx.o.o.ox.wwww. 37 | UNSCORABLE FALSE EYES: 38 | ..xx.o.xobbb.oxxw. 39 | wwwxooxxobboooxw.w 40 | ww.xox.xooooo.xwwx 41 | xxxxoxx.xo...xx.xx 42 | ooooooxxxoxxxxxxxo 43 | xxxxxo..xxoooooooo 44 | xww.xooooooxxxxxxx 45 | wwxxx.o.o.ox.wwww. 46 | DAME: 47 | ..xx1o1xobbb.oxxw. 48 | wwwxooxxobboooxw.w 49 | ww.xox.xooooo1xwwx 50 | xxxxoxx.xo111xx.xx 51 | ooooooxxxoxxxxxxxo 52 | xxxxxo11xxoooooooo 53 | xww.xooooooxxxxxxx 54 | wwxxx1o.o.ox.wwww. 55 | EYEVALUE: 56 | 11xx.o.xo1111oxx11 57 | 111xooxxo11ooox111 58 | 111xox1xooooo.x11x 59 | xxxxoxx1xo...xx1xx 60 | ooooooxxxoxxxxxxxo 61 | xxxxxo..xxoooooooo 62 | x222xooooooxxxxxxx 63 | 22xxx.o1o1ox222222 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_various_eyefillings3.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | wwxx.o.xobbb.oxxw. 3 | wwwxooxxobbbooxwww 4 | ww.xox.xooooo.xwwx 5 | xxxxoxx.xo...xx.xx 6 | ooooooxxxoxxxxxxxo 7 | xxxxxo..xxoooooooo 8 | xww.xooooooxxxxxxx 9 | .wxxx.o.o.ox.w.ww. 10 | TERRITORY: 11 | zzxx.o.xoaaaaoxxw. 12 | zzzxooxxoaaaooxwww 13 | zzzxoxzxooooo.xwwx 14 | xxxxoxxzxo...xx.xx 15 | ooooooxxxoxxxxxxxo 16 | xxxxxo..xxoooooooo 17 | xww.xooooooxxxxxxx 18 | .wxxx.oaoaoxzzzzzz 19 | SEKI: 20 | ..............xxxz 21 | ..............xxxx 22 | ..............xxxx 23 | .............xxzxx 24 | ..........xxxxxxx. 25 | xxxxx............. 26 | xxxzx............. 27 | zxxxx............. 28 | FALSE EYES: 29 | wwxx.o.xobbb.oxxw. 30 | wwwxooxxobbbooxwww 31 | ww.xox.xooooo.xwwx 32 | xxxxoxx.xo...xx.xx 33 | ooooooxxxoxxxxxxxo 34 | xxxxxo..xxoooooooo 35 | xww.xooooooxxxxxxx 36 | .wxxx.o.o.ox.w.ww. 37 | UNSCORABLE FALSE EYES: 38 | wwxx.o.xobbb.oxxw. 39 | wwwxooxxobbbooxwww 40 | ww.xox.xooooo.xwwx 41 | xxxxoxx.xo...xx.xx 42 | ooooooxxxoxxxxxxxo 43 | xxxxxo..xxoooooooo 44 | xww.xooooooxxxxxxx 45 | .wxxx.o.o.ox.w.ww. 46 | DAME: 47 | wwxx1o1xobbb.oxxw. 48 | wwwxooxxobbbooxwww 49 | ww.xox.xooooo1xwwx 50 | xxxxoxx.xo111xx.xx 51 | ooooooxxxoxxxxxxxo 52 | xxxxxo11xxoooooooo 53 | xww.xooooooxxxxxxx 54 | .wxxx1o.o.ox.w.ww. 55 | EYEVALUE: 56 | 22xx.o.xo2222oxx11 57 | 222xooxxo222oox111 58 | 222xox1xooooo.x11x 59 | xxxxoxx1xo...xx1xx 60 | ooooooxxxoxxxxxxxo 61 | xxxxxo..xxoooooooo 62 | x111xooooooxxxxxxx 63 | 11xxx.o1o1ox222222 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_throwin_false_eye_chains.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .wxx.x.xx.x.x.xx.. 3 | xxoxxoxx.xxxoxxoxx 4 | ..o..o.xxxx.o..o.. 5 | oooooooooooooooooo 6 | ooo.oo.o...o..o... 7 | ...o..o.xxxo..oxxx 8 | xxxoxxoxx.xoxxox.x 9 | .wwxx.xx.xxx.xxww. 10 | TERRITORY: 11 | .wxx.x.xxzxzxzxxzz 12 | xxoxxoxxzxxxoxxoxx 13 | ..o..o.xxxx.o..o.. 14 | oooooooooooooooooo 15 | oooaooao...o..o... 16 | ...o..o.xxxo..oxxx 17 | xxxoxxoxxzxoxxoxzx 18 | zwwxx.xxzxxx.xxwwz 19 | SEKI: 20 | .................. 21 | .................. 22 | .................. 23 | .................. 24 | .................. 25 | .................. 26 | .................. 27 | .................. 28 | FALSE EYES: 29 | .FxxFxFxx.xFxFxxF. 30 | xxoxxoxx.xxxoxxoxx 31 | ..o..o.xxxx.o..o.. 32 | oooooooooooooooooo 33 | ooo.oo.o...o..o... 34 | ...o..o.xxxo..oxxx 35 | xxxoxxoxx.xoxxox.x 36 | .wFxxFxx.xxxFxxFw. 37 | UNSCORABLE FALSE EYES: 38 | FFxxFxFxx.x.x.xx.. 39 | xxoxxoxx.xxxoxxoxx 40 | ..o..o.xxxx.o..o.. 41 | oooooooooooooooooo 42 | ooo.oo.o...o..o... 43 | ...o..o.xxxo..oxxx 44 | xxxoxxoxx.xoxxox.x 45 | .FFxxFxx.xxxFxxFF. 46 | DAME: 47 | .wxx.x.xx.x.x.xx.. 48 | xxoxxoxx.xxxoxxoxx 49 | 11o11o1xxxx1o11o11 50 | oooooooooooooooooo 51 | ooo.oo.o111o11o111 52 | 111o11o1xxxo11oxxx 53 | xxxoxxoxx.xoxxox.x 54 | .wwxx.xx.xxx.xxww. 55 | EYEVALUE: 56 | .wxx.x.xx1x.x.xx11 57 | xxoxxoxx1xxxoxxoxx 58 | ..o..o.xxxx.o..o.. 59 | oooooooooooooooooo 60 | ooo1oo1o...o..o... 61 | ...o..o.xxxo..oxxx 62 | xxxoxxoxx1xoxxox.x 63 | .wwxx.xx1xxx.xxww. 64 | -------------------------------------------------------------------------------- /python/expected_test_output/test_double_throwin_seki3.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x............ 3 | .x............ 4 | .x............ 5 | .xxx.x.x.x.xx. 6 | oo.x........x. 7 | .oxx........o. 8 | ooxooooooo.oo. 9 | .oox.....o.... 10 | x.oxxxxx.o.... 11 | xxxww.xx.o.... 12 | TERRITORY: 13 | .x............ 14 | .x............ 15 | .x............ 16 | .xxx.x.x.x.xx. 17 | oo.x........x. 18 | .oxx........o. 19 | ooxooooooo.oo. 20 | .oox.....o.... 21 | x.oxxxxx.o.... 22 | xxxww.xx.o.... 23 | SEKI: 24 | .............. 25 | .............. 26 | .............. 27 | .............. 28 | oo............ 29 | ao............ 30 | oo............ 31 | .oox.......... 32 | x.oxxxxx...... 33 | xxxxxzxx...... 34 | FALSE EYES: 35 | .x............ 36 | .x............ 37 | .x............ 38 | .xxx.x.x.x.xx. 39 | oo.x........x. 40 | .oxx........o. 41 | ooxooooooo.oo. 42 | .oox.....o.... 43 | x.oxxxxx.o.... 44 | xxxFw.xx.o.... 45 | UNSCORABLE FALSE EYES: 46 | .x............ 47 | .x............ 48 | .x............ 49 | .xxx.x.x.x.xx. 50 | oo.x........x. 51 | .oxx........o. 52 | ooxooooooo.oo. 53 | .oox.....o.... 54 | x.oxxxxx.o.... 55 | xxxFF.xx.o.... 56 | DAME: 57 | .x............ 58 | .x............ 59 | .x............ 60 | 1xxx1x1x1x1xx. 61 | oo1x11111111x1 62 | .oxx11111111o1 63 | ooxooooooo1oo. 64 | 1oox11111o.... 65 | x1oxxxxx1o.... 66 | xxxww.xx1o.... 67 | EYEVALUE: 68 | 1x222222222222 69 | 1x222222222222 70 | 1x222222222222 71 | .xxx.x.x.x.xx2 72 | oo.x........x. 73 | 1oxx........o. 74 | ooxooooooo.oo2 75 | .oox.....o2222 76 | x.oxxxxx.o2222 77 | xxxww.xx.o2222 78 | -------------------------------------------------------------------------------- /python/expected_test_output/test_double_throwin_seki4.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .x............ 3 | .x............ 4 | .x............ 5 | .xxx.x.x.x.xx. 6 | oo.x........x. 7 | .oxx........o. 8 | ooxooooooo.oo. 9 | .oox.....o.... 10 | x.oxxxxx.o.... 11 | xxxww..x.o.... 12 | TERRITORY: 13 | .x............ 14 | .x............ 15 | .x............ 16 | .xxx.x.x.x.xx. 17 | oo.x........x. 18 | .oxx........o. 19 | ooxooooooo.oo. 20 | .oox.....o.... 21 | x.oxxxxx.o.... 22 | xxxww..x.o.... 23 | SEKI: 24 | .............. 25 | .............. 26 | .............. 27 | .............. 28 | oo............ 29 | ao............ 30 | oo............ 31 | .oox.......... 32 | x.oxxxxx...... 33 | xxxxxzzx...... 34 | FALSE EYES: 35 | .x............ 36 | .x............ 37 | .x............ 38 | .xxx.x.x.x.xx. 39 | oo.x........x. 40 | .oxx........o. 41 | ooxooooooo.oo. 42 | .oox.....o.... 43 | x.oxxxxx.o.... 44 | xxxFw..x.o.... 45 | UNSCORABLE FALSE EYES: 46 | .x............ 47 | .x............ 48 | .x............ 49 | .xxx.x.x.x.xx. 50 | oo.x........x. 51 | .oxx........o. 52 | ooxooooooo.oo. 53 | .oox.....o.... 54 | x.oxxxxx.o.... 55 | xxxFF..x.o.... 56 | DAME: 57 | .x............ 58 | .x............ 59 | .x............ 60 | 1xxx1x1x1x1xx. 61 | oo1x11111111x1 62 | .oxx11111111o1 63 | ooxooooooo1oo. 64 | 1oox11111o.... 65 | x1oxxxxx1o.... 66 | xxxww..x1o.... 67 | EYEVALUE: 68 | 1x222222222222 69 | 1x222222222222 70 | 1x222222222222 71 | .xxx.x.x.x.xx2 72 | oo.x........x. 73 | 1oxx........o. 74 | ooxooooooo.oo2 75 | .oox.....o2222 76 | x.oxxxxx.o2222 77 | xxx1111x.o2222 78 | -------------------------------------------------------------------------------- /python/expected_test_output/test_three_way_pokes.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .xxwwwxx.o...xxwwwxx.o........ 3 | ..ox.xo.o.....oxwxo.o..ooo.... 4 | .o.xxx.o.....o.x.x.o..o...o... 5 | .o.x.x.o.....o.xxx.o..oxxxo... 6 | .o.xxx.o.....o.x.x.o..ox.xo... 7 | ..ooooo.......oxxxo..xxw.wxx.. 8 | TERRITORY: 9 | .xxwwwxx.o...xxwwwxx.o........ 10 | ..ox.xo.o.....oxzxo.o..ooo.... 11 | .o.xxx.o.....o.xzx.o..o...o... 12 | .o.x.x.o.....o.xxx.o..oxxxo... 13 | .o.xxx.o.....o.xzx.o..ox.xo... 14 | ..ooooo.......oxxxo..xxw.wxx.. 15 | SEKI: 16 | .xxxxxxx.............o..a..... 17 | ...xzx............o.o..ooo.... 18 | ...xxx.............o..o...o... 19 | ...xzx.............o..oxxxo... 20 | ...xxx.............o..oxzxo... 21 | ..................o..xxxzxxx.. 22 | FALSE EYES: 23 | .xxFwFxx.o...xxFwFxx.o........ 24 | ..ox.xo.o.....oxwxo.o..ooo.... 25 | .o.xxx.o.....o.x.x.o..o...o... 26 | .o.x.x.o.....o.xxx.o..oxxxo... 27 | .o.xxx.o.....o.x.x.o..ox.xo... 28 | ..ooooo.......oxxxo..xxF.Fxx.. 29 | UNSCORABLE FALSE EYES: 30 | .xxFFFxx.o...xxFFFxx.o........ 31 | ..ox.xo.o.....oxwxo.o..ooo.... 32 | .o.xxx.o.....o.x.x.o..o...o... 33 | .o.x.x.o.....o.xxx.o..oxxxo... 34 | .o.xxx.o.....o.x.x.o..ox.xo... 35 | ..ooooo.......oxxxo..xxFFFxx.. 36 | DAME: 37 | 1xxwwwxx1o111xxwwwxx1o11.11111 38 | 11ox.xo1o11111oxwxo1o11ooo1111 39 | 1o1xxx1o11111o1x.x1o11o111o111 40 | .o1x.x1o11111o1xxx1o11oxxxo111 41 | .o1xxx1o11111o1x.x1o11ox.xo111 42 | ..ooooo1111111oxxxo11xxw.wxx11 43 | EYEVALUE: 44 | .xxwwwxx.o...xx111xx.o........ 45 | ..ox.xo.o.....ox1xo.o..ooo.... 46 | .o.xxx.o.....o.x1x.o..o...o... 47 | 2o.x1x.o.....o.xxx.o..oxxxo... 48 | 2o.xxx.o.....o.x1x.o..ox1xo... 49 | 22ooooo.......oxxxo..xx111xx.. 50 | -------------------------------------------------------------------------------- /python/expected_test_output/test_various_eyefillings2b.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .wxx.o.xob.b.oxxw. 3 | w.wxooxxobboooxw.w 4 | ww.xox.xooooo.xwwx 5 | xxxxoxx.xo..xxxxxx 6 | ooooooxxxoxxxooooo 7 | xxxxxo..xxooooxxxx 8 | xwxxxooooooxxxxxww 9 | w.wxx..o.o.oo.xwww 10 | .wwxx.........xxw. 11 | TERRITORY: 12 | .wxx.o.xoaaaaoxxzz 13 | w.wxooxxoaaoooxzzz 14 | ww.xoxzxooooo.xzzx 15 | xxxxoxxzxo..xxxxxx 16 | ooooooxxxoxxxooooo 17 | xxxxxo..xxooooxxxx 18 | xzxxxooooooxxxxxww 19 | zzzxx..o.o.oo.xwww 20 | zzzxx.........xxw. 21 | SEKI: 22 | zxxx.............. 23 | xzxx.............. 24 | xxzx.............. 25 | xxxx.............. 26 | .................. 27 | ..............xxxx 28 | ...........xxxxxxx 29 | ..............xxxx 30 | ..............xxxz 31 | FALSE EYES: 32 | .wxx.o.xob.b.oxxw. 33 | w.wxooxxobboooxw.w 34 | ww.xox.xooooo.xwwx 35 | xxxxoxx.xo..xxxxxx 36 | ooooooxxxoxxxooooo 37 | xxxxxo..xxooooxxxx 38 | xwxxxooooooxxxxxww 39 | w.wxx..o.o.oo.xwww 40 | .wwxx.........xxw. 41 | UNSCORABLE FALSE EYES: 42 | .wxx.o.xob.b.oxxw. 43 | w.wxooxxobboooxw.w 44 | ww.xox.xooooo.xwwx 45 | xxxxoxx.xo..xxxxxx 46 | ooooooxxxoxxxooooo 47 | xxxxxo..xxooooxxxx 48 | xwxxxooooooxxxxxww 49 | w.wxx..o.o.oo.xwww 50 | .wwxx.........xxw. 51 | DAME: 52 | .wxx1o1xob.b.oxxw. 53 | w.wxooxxobboooxw.w 54 | ww.xox.xooooo1xwwx 55 | xxxxoxx.xo11xxxxxx 56 | ooooooxxxoxxxooooo 57 | xxxxxo11xxooooxxxx 58 | xwxxxooooooxxxxxww 59 | w.wxx11o.o.oo1xwww 60 | .wwxx111....11xxw. 61 | EYEVALUE: 62 | 11xx.o.xo2222oxx22 63 | 111xooxxo22ooox222 64 | 111xox1xooooo.x22x 65 | xxxxoxx1xo..xxxxxx 66 | ooooooxxxoxxxooooo 67 | xxxxxo..xxooooxxxx 68 | x2xxxooooooxxxxx11 69 | 222xx..o2o2oo.x111 70 | 222xx...2222..xx11 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_various_eyefillings2c.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .wxx.o.xob.b.oxxww 3 | w.wxooxxo.boooxwww 4 | ...xox.xooooo.xww. 5 | xxxxoxx.xo..xxxxxx 6 | ooooooxxxoxxxooooo 7 | xxxxxo..xxooooxxxx 8 | .wxxxooooooxxxx.ww 9 | w.wxx..o.o.oo.xwww 10 | .w.xx.........xxw. 11 | TERRITORY: 12 | zzxx.o.xob.b.oxxzz 13 | zzzxooxxo.boooxzzz 14 | zzzxoxzxooooo.xzzz 15 | xxxxoxxzxo..xxxxxx 16 | ooooooxxxoxxxooooo 17 | xxxxxo..xxooooxxxx 18 | .wxxxooooooxxxx.ww 19 | w.wxx..o.o.oo.xwww 20 | .w.xx.........xxw. 21 | SEKI: 22 | ........ooaoao.... 23 | ........oaoooo.... 24 | ........ooooo..... 25 | .........o........ 26 | .........o........ 27 | xxxxx.........xxxx 28 | zxxxx......xxxxzxx 29 | xzxxx.........xxxx 30 | zxzxx.........xxxz 31 | FALSE EYES: 32 | .wxx.o.xob.b.oxxww 33 | w.wxooxxo.boooxwww 34 | ...xox.xooooo.xww. 35 | xxxxoxx.xo..xxxxxx 36 | ooooooxxxoxxxooooo 37 | xxxxxo..xxooooxxxx 38 | .wxxxooooooxxxx.ww 39 | w.wxx..o.o.oo.xwww 40 | .w.xx.........xxw. 41 | UNSCORABLE FALSE EYES: 42 | .wxx.o.xob.b.oxxww 43 | w.wxooxxo.boooxwww 44 | ...xox.xooooo.xww. 45 | xxxxoxx.xo..xxxxxx 46 | ooooooxxxoxxxooooo 47 | xxxxxo..xxooooxxxx 48 | .wxxxooooooxxxx.ww 49 | w.wxx..o.o.oo.xwww 50 | .w.xx.........xxw. 51 | DAME: 52 | .wxx1o1xob.b.oxxww 53 | w.wxooxxo.boooxwww 54 | ...xox.xooooo1xww. 55 | xxxxoxx.xo11xxxxxx 56 | ooooooxxxoxxxooooo 57 | xxxxxo11xxooooxxxx 58 | .wxxxooooooxxxx.ww 59 | w.wxx11o.o.oo1xwww 60 | .w.xx111....11xxw. 61 | EYEVALUE: 62 | 22xx.o.xo1111oxx22 63 | 222xooxxo11ooox222 64 | 222xox1xooooo.x222 65 | xxxxoxx1xo..xxxxxx 66 | ooooooxxxoxxxooooo 67 | xxxxxo..xxooooxxxx 68 | 11xxxooooooxxxx111 69 | 111xx..o2o2oo.x111 70 | 111xx...2222..xx11 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_more_fancy_sekis.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .ox.xoo....ox.xo. 3 | o.xwwxo.o..ox.x.o 4 | xxxxxxo..o.ooxxxx 5 | ooooooo.o...ooooo 6 | xxx.............. 7 | oox..........xxxx 8 | .ox.....x...xxooo 9 | ooxxxxx..x..xo.o. 10 | .xoooox.x.x.xooxx 11 | x.o.box.....xo.o. 12 | TERRITORY: 13 | .ox.xoo....ox.xo. 14 | o.xwwxo.o..ox.x.o 15 | xxxxxxo..o.ooxxxx 16 | ooooooo.o...ooooo 17 | xxx.............. 18 | oox..........xxxx 19 | .ox.....x...xxooo 20 | ooxxxxx..x..xo.o. 21 | .xoooox.x.x.xooxx 22 | x.o.box.....xo.o. 23 | SEKI: 24 | aoxzx.......xzxoa 25 | o.xxxx......xzx.o 26 | xxxxxx.......xxxx 27 | ................. 28 | ................. 29 | oo............... 30 | ao............ooo 31 | oo...........oao. 32 | .xoooo.......ooxx 33 | x.oaoo.......oao. 34 | FALSE EYES: 35 | .ox.xoo....ox.xo. 36 | o.xwwxo.o..ox.x.o 37 | xxxxxxo..o.ooxxxx 38 | ooooooo.o...ooooo 39 | xxx.............. 40 | oox..........xxxx 41 | .ox.....x...xxooo 42 | ooxxxxx..x..xoFo. 43 | .xoooox.x.x.xooxx 44 | x.o.box.....xoFo. 45 | UNSCORABLE FALSE EYES: 46 | .ox.xoo....ox.xo. 47 | o.xwwxo.o..ox.x.o 48 | xxxxxxo..o.ooxxxx 49 | ooooooo.o...ooooo 50 | xxx.............. 51 | oox..........xxxx 52 | .ox.....x...xxooo 53 | ooxxxxx..x..xoFo. 54 | .xoooox.x.x.xooxx 55 | x.o.box.....xoFo. 56 | DAME: 57 | .ox.xoo....ox.xo. 58 | o1xwwxo.o..ox.x1o 59 | xxxxxxo..o1ooxxxx 60 | ooooooo1o111ooooo 61 | xxx11111111111111 62 | oox1111111111xxxx 63 | .ox11111x111xxooo 64 | ooxxxxx1.x11xo.o1 65 | 1xoooox.x.x1xooxx 66 | x1o.box.....xo.o1 67 | EYEVALUE: 68 | 1ox1xoo2222ox1xo1 69 | o.x11xo2o22ox1x.o 70 | xxxxxxo22o.ooxxxx 71 | ooooooo.o...ooooo 72 | xxx.............. 73 | oox..........xxxx 74 | 1ox.....x...xxooo 75 | ooxxxxx.1x..xo.o. 76 | .xoooox2x2x.xooxx 77 | x.o11ox22222xo.o. 78 | -------------------------------------------------------------------------------- /python/expected_test_output/test_various_eyefillings5.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .b.oxxo.bbb.oxxo.bb 3 | boooxxoooboooxxooob 4 | .o.xxxx.o.o.xxxx.o. 5 | oox....xooox....xoo 6 | xxx....xxxxx....xxx 7 | oox....xxxxx....xxx 8 | .o.x...xooox....xoo 9 | bo..xxx.o.o.xxxx.o. 10 | booooxoooboooxxooob 11 | .bb.oxo.b.b.oxxoob. 12 | TERRITORY: 13 | .b.oxxo.bbb.oxxo.bb 14 | boooxxoooboooxxooob 15 | .o.xxxx.o.o.xxxx.o. 16 | ooxzzzzxoooxzzzzxoo 17 | xxxzzzzxxxxxzzzzxxx 18 | ooxzzzzxxxxxzzzzxxx 19 | ao.xzzzxoooxzzzzxoo 20 | ao..xxx.o.o.xxxx.oa 21 | aooooxoooboooxxoooa 22 | aaaaoxo.b.b.oxxooaa 23 | SEKI: 24 | aoao..oaoooao..oaoo 25 | oooo..ooooooo..oooo 26 | ao......oao......oa 27 | oo......ooo......oo 28 | ................... 29 | ................... 30 | ........ooo........ 31 | ........oao........ 32 | ......ooooooo...... 33 | ......oaoaoao...... 34 | FALSE EYES: 35 | .b.oxxo.bbb.oxxo.bb 36 | boooxxoooboooxxooob 37 | .o.xxxx.o.o.xxxx.o. 38 | oox....xooox....xoo 39 | xxx....xxxxx....xxx 40 | oox....xxxxx....xxx 41 | .o.x...xooox....xoo 42 | bo..xxx.o.o.xxxx.o. 43 | booooxoooboooxxooob 44 | .bb.oxo.b.b.oxxoob. 45 | UNSCORABLE FALSE EYES: 46 | .b.oxxo.bbb.oxxo.bb 47 | boooxxoooboooxxooob 48 | .o.xxxx.o.o.xxxx.o. 49 | oox....xooox....xoo 50 | xxx....xxxxx....xxx 51 | oox....xxxxx....xxx 52 | .o.x...xooox....xoo 53 | bo..xxx.o.o.xxxx.o. 54 | booooxoooboooxxooob 55 | .bb.oxo.b.b.oxxoob. 56 | DAME: 57 | .b.oxxo.bbb.oxxo.bb 58 | boooxxoooboooxxooob 59 | .o1xxxx1o.o1xxxx1o. 60 | oox....xooox....xoo 61 | xxx....xxxxx....xxx 62 | oox....xxxxx....xxx 63 | .o1x...xooox....xoo 64 | bo11xxx1o.o1xxxx1o. 65 | booooxoooboooxxooob 66 | .bb.oxo.b.b.oxxoob. 67 | EYEVALUE: 68 | 111oxxo11111oxxo111 69 | 1oooxxooo1oooxxooo1 70 | 1o.xxxx.o1o.xxxx.o1 71 | oox2222xooox2222xoo 72 | xxx2222xxxxx2222xxx 73 | oox2222xxxxx2222xxx 74 | 2o.x222xooox2222xoo 75 | 2o..xxx.o1o.xxxx.o2 76 | 2ooooxooo1oooxxooo2 77 | 2222oxo11111oxxoo22 78 | -------------------------------------------------------------------------------- /python/expected_test_output/test_7pteyes.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ..xx.o.............o.xx.. 3 | ...x.o.............o.x.w. 4 | x..x.o.............o.x..x 5 | xxxx.o.............o.xxxx 6 | oooooo.............oooooo 7 | xxxx.o.............o.xxxx 8 | x.wx.o.............o.x..x 9 | .w.x.o.............o.x.ww 10 | ..xx.o.............o.xx.. 11 | TERRITORY: 12 | zzxx.oaaaaaaaaaaaaao.xxzz 13 | zzzx.oaaaaaaaaaaaaao.xzzz 14 | xzzx.oaaaaaaaaaaaaao.xzzx 15 | xxxx.oaaaaaaaaaaaaao.xxxx 16 | ooooooaaaaaaaaaaaaaoooooo 17 | xxxx.oaaaaaaaaaaaaao.xxxx 18 | xzzx.oaaaaaaaaaaaaao.x..x 19 | zzzx.oaaaaaaaaaaaaao.x.ww 20 | zzxx.oaaaaaaaaaaaaao.xx.. 21 | SEKI: 22 | ......................... 23 | ......................... 24 | ......................... 25 | ......................... 26 | ......................... 27 | .....................xxxx 28 | .....................xzzx 29 | .....................xzxx 30 | .....................xxzz 31 | FALSE EYES: 32 | ..xx.o.............o.xx.. 33 | ...x.o.............o.x.w. 34 | x..x.o.............o.x..x 35 | xxxx.o.............o.xxxx 36 | oooooo.............oooooo 37 | xxxx.o.............o.xxxx 38 | x.wx.o.............o.x..x 39 | .w.x.o.............o.x.ww 40 | ..xx.o.............o.xx.. 41 | UNSCORABLE FALSE EYES: 42 | ..xx.o.............o.xx.. 43 | ...x.o.............o.x.w. 44 | x..x.o.............o.x..x 45 | xxxx.o.............o.xxxx 46 | oooooo.............oooooo 47 | xxxx.o.............o.xxxx 48 | x.wx.o.............o.x..x 49 | .w.x.o.............o.x.ww 50 | ..xx.o.............o.xx.. 51 | DAME: 52 | ..xx1o.............o1xx.. 53 | ...x1o.............o1x.w. 54 | x..x1o.............o1x..x 55 | xxxx1o.............o1xxxx 56 | oooooo.............oooooo 57 | xxxx1o.............o1xxxx 58 | x.wx1o.............o1x..x 59 | .w.x1o.............o1x.ww 60 | ..xx1o.............o1xx.. 61 | EYEVALUE: 62 | 22xx.o2222222222222o.xx22 63 | 222x.o2222222222222o.x222 64 | x22x.o2222222222222o.x22x 65 | xxxx.o2222222222222o.xxxx 66 | oooooo2222222222222oooooo 67 | xxxx.o2222222222222o.xxxx 68 | x22x.o2222222222222o.x11x 69 | 222x.o2222222222222o.x111 70 | 22xx.o2222222222222o.xx11 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_8pteyes.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ...x.o.............o.x.w. 3 | ww.x.o.............o.x.ww 4 | ..xx.o.............o.xx.. 5 | xxxx.o.............o.xxxx 6 | oooooo.............oooooo 7 | xxxx.o.............o.xxxx 8 | ..xx.o.............o.xx.. 9 | .w.x.o.............o.x.w. 10 | ww.x.o.............o.x..w 11 | TERRITORY: 12 | zzzx.oaaaaaaaaaaaaao.x.w. 13 | zzzx.oaaaaaaaaaaaaao.x.ww 14 | zzxx.oaaaaaaaaaaaaao.xx.. 15 | xxxx.oaaaaaaaaaaaaao.xxxx 16 | ooooooaaaaaaaaaaaaaoooooo 17 | xxxx.oaaaaaaaaaaaaao.xxxx 18 | ..xx.oaaaaaaaaaaaaao.xxzz 19 | .w.x.oaaaaaaaaaaaaao.xzzz 20 | ww.x.oaaaaaaaaaaaaao.xzzz 21 | SEKI: 22 | .....................xzxz 23 | .....................xzxx 24 | .....................xxzz 25 | .....................xxxx 26 | ......................... 27 | xxxx..................... 28 | zzxx..................... 29 | zxzx..................... 30 | xxzx..................... 31 | FALSE EYES: 32 | ...x.o.............o.x.w. 33 | ww.x.o.............o.x.ww 34 | ..xx.o.............o.xx.. 35 | xxxx.o.............o.xxxx 36 | oooooo.............oooooo 37 | xxxx.o.............o.xxxx 38 | ..xx.o.............o.xx.. 39 | .w.x.o.............o.x.w. 40 | ww.x.o.............o.x..w 41 | UNSCORABLE FALSE EYES: 42 | ...x.o.............o.x.w. 43 | ww.x.o.............o.x.ww 44 | ..xx.o.............o.xx.. 45 | xxxx.o.............o.xxxx 46 | oooooo.............oooooo 47 | xxxx.o.............o.xxxx 48 | ..xx.o.............o.xx.. 49 | .w.x.o.............o.x.w. 50 | ww.x.o.............o.x..w 51 | DAME: 52 | ...x1o.............o1x.w. 53 | ww.x1o.............o1x.ww 54 | ..xx1o.............o1xx.. 55 | xxxx1o.............o1xxxx 56 | oooooo.............oooooo 57 | xxxx1o.............o1xxxx 58 | ..xx1o.............o1xx.. 59 | .w.x1o.............o1x.w. 60 | ww.x1o.............o1x..w 61 | EYEVALUE: 62 | 222x.o2222222222222o.x111 63 | 222x.o2222222222222o.x111 64 | 22xx.o2222222222222o.xx11 65 | xxxx.o2222222222222o.xxxx 66 | oooooo2222222222222oooooo 67 | xxxx.o2222222222222o.xxxx 68 | 11xx.o2222222222222o.xx22 69 | 111x.o2222222222222o.x222 70 | 111x.o2222222222222o.x222 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_7pteyes_2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ...x.o.............o.x... 3 | ...x.o.............o.x.w. 4 | x.xx.o.............o.xx.x 5 | xxxx.o.............o.xxxx 6 | oooooo.............oooooo 7 | xxxx.o.............o.xxxx 8 | x.xx.o.............o.xx.x 9 | ...x.o.............o.x.w. 10 | .wwx.o.............o.x.w. 11 | TERRITORY: 12 | zzzx.oaaaaaaaaaaaaao.xzzz 13 | zzzx.oaaaaaaaaaaaaao.xzzz 14 | xzxx.oaaaaaaaaaaaaao.xxzx 15 | xxxx.oaaaaaaaaaaaaao.xxxx 16 | ooooooaaaaaaaaaaaaaoooooo 17 | xxxx.oaaaaaaaaaaaaao.xxxx 18 | xzxx.oaaaaaaaaaaaaao.xx.x 19 | zzzx.oaaaaaaaaaaaaao.x.w. 20 | zzzx.oaaaaaaaaaaaaao.x.w. 21 | SEKI: 22 | ......................... 23 | ......................... 24 | ......................... 25 | ......................... 26 | ......................... 27 | .....................xxxx 28 | .....................xxzx 29 | .....................xzxz 30 | .....................xzxz 31 | FALSE EYES: 32 | ...x.o.............o.x... 33 | ...x.o.............o.x.w. 34 | x.xx.o.............o.xx.x 35 | xxxx.o.............o.xxxx 36 | oooooo.............oooooo 37 | xxxx.o.............o.xxxx 38 | x.xx.o.............o.xx.x 39 | ...x.o.............o.x.w. 40 | .wwx.o.............o.x.w. 41 | UNSCORABLE FALSE EYES: 42 | ...x.o.............o.x... 43 | ...x.o.............o.x.w. 44 | x.xx.o.............o.xx.x 45 | xxxx.o.............o.xxxx 46 | oooooo.............oooooo 47 | xxxx.o.............o.xxxx 48 | x.xx.o.............o.xx.x 49 | ...x.o.............o.x.w. 50 | .wwx.o.............o.x.w. 51 | DAME: 52 | ...x1o.............o1x... 53 | ...x1o.............o1x.w. 54 | x.xx1o.............o1xx.x 55 | xxxx1o.............o1xxxx 56 | oooooo.............oooooo 57 | xxxx1o.............o1xxxx 58 | x.xx1o.............o1xx.x 59 | ...x1o.............o1x.w. 60 | .wwx1o.............o1x.w. 61 | EYEVALUE: 62 | 222x.o2222222222222o.x222 63 | 222x.o2222222222222o.x222 64 | x2xx.o2222222222222o.xx2x 65 | xxxx.o2222222222222o.xxxx 66 | oooooo2222222222222oooooo 67 | xxxx.o2222222222222o.xxxx 68 | x2xx.o2222222222222o.xx1x 69 | 222x.o2222222222222o.x111 70 | 222x.o2222222222222o.x111 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_solid_eyeshapes.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 3 | x.xx..xx.xxx..xxxxx..xxxx..xxxxx 4 | xxxxxxxx..xx..xxxxxx..xx....xxxx 5 | x...xxxxx.xxxxxxxxxx.xxxxxxxx... 6 | xxxxx..xxxxx..xxx.xxxx.xxxxxxx.. 7 | x..xx.xxxxxx..xx...xx...xxxxxxx. 8 | xx.xx.xx.xxx.xxxx.xxx..xxx...xxx 9 | xxxxxxx...xxxxxxxxxxxxxxxx...xxx 10 | x....xxxxxxxxxxxxxxxxxxxxxxxxxxx 11 | TERRITORY: 12 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 13 | xzxxzzxxzxxxzzxxxxxzzxxxxzzxxxxx 14 | xxxxxxxxzzxxzzxxxxxxzzxxzzzzxxxx 15 | xzzzxxxxxzxxxxxxxxxxzxxxxxxxxzzz 16 | xxxxxzzxxxxxzzxxxzxxxxzxxxxxxxzz 17 | xzzxxzxxxxxxzzxxzzzxxzzzxxxxxxxz 18 | xxzxxzxxzxxxzxxxxzxxxzzxxxzzzxxx 19 | xxxxxxxzzzxxxxxxxxxxxxxxxxzzzxxx 20 | xzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxx 21 | SEKI: 22 | ................................ 23 | ................................ 24 | ................................ 25 | ................................ 26 | ................................ 27 | ................................ 28 | ................................ 29 | ................................ 30 | ................................ 31 | FALSE EYES: 32 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 33 | x.xx..xx.xxx..xxxxx..xxxx..xxxxx 34 | xxxxxxxx..xx..xxxxxx..xx....xxxx 35 | x...xxxxx.xxxxxxxxxx.xxxxxxxx... 36 | xxxxx..xxxxx..xxx.xxxx.xxxxxxx.. 37 | x..xx.xxxxxx..xx...xx...xxxxxxx. 38 | xx.xx.xx.xxx.xxxx.xxx..xxx...xxx 39 | xxxxxxx...xxxxxxxxxxxxxxxx...xxx 40 | x....xxxxxxxxxxxxxxxxxxxxxxxxxxx 41 | UNSCORABLE FALSE EYES: 42 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 43 | x.xx..xx.xxx..xxxxx..xxxx..xxxxx 44 | xxxxxxxx..xx..xxxxxx..xx....xxxx 45 | x...xxxxx.xxxxxxxxxx.xxxxxxxx... 46 | xxxxx..xxxxx..xxx.xxxx.xxxxxxx.. 47 | x..xx.xxxxxx..xx...xx...xxxxxxx. 48 | xx.xx.xx.xxx.xxxx.xxx..xxx...xxx 49 | xxxxxxx...xxxxxxxxxxxxxxxx...xxx 50 | x....xxxxxxxxxxxxxxxxxxxxxxxxxxx 51 | DAME: 52 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 53 | x.xx..xx.xxx..xxxxx..xxxx..xxxxx 54 | xxxxxxxx..xx..xxxxxx..xx....xxxx 55 | x...xxxxx.xxxxxxxxxx.xxxxxxxx... 56 | xxxxx..xxxxx..xxx.xxxx.xxxxxxx.. 57 | x..xx.xxxxxx..xx...xx...xxxxxxx. 58 | xx.xx.xx.xxx.xxxx.xxx..xxx...xxx 59 | xxxxxxx...xxxxxxxxxxxxxxxx...xxx 60 | x....xxxxxxxxxxxxxxxxxxxxxxxxxxx 61 | EYEVALUE: 62 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 63 | x1xx11xx2xxx11xxxxx22xxxx22xxxxx 64 | xxxxxxxx22xx11xxxxxx22xx2222xxxx 65 | x222xxxxx2xxxxxxxxxx2xxxxxxxx222 66 | xxxxx22xxxxx22xxx2xxxx2xxxxxxx22 67 | x22xx2xxxxxx22xx222xx222xxxxxxx2 68 | xx2xx2xx2xxx2xxxx2xxx22xxx222xxx 69 | xxxxxxx222xxxxxxxxxxxxxxxx222xxx 70 | x2222xxxxxxxxxxxxxxxxxxxxxxxxxxx 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_solid_eyeshapes_nakade.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 3 | x.xx..xx.xxx..xxxxx..xxxx..xxxxx 4 | xxxxxxxxw.xxw.xxxxxxw.xx.w..xxxx 5 | x.w.xxxxx.xxxxxxxxxx.xxxxxxxx.w. 6 | xxxxxw.xxxxx..xxx.xxxx.xxxxxxx.. 7 | x.wxx.xxxxxxw.xx.w.xx.w.xxxxxxx. 8 | xx.xx.xx.xxx.xxxx.xxx..xxx.w.xxx 9 | xxxxxxx.w.xxxxxxxxxxxxxxxx...xxx 10 | x..w.xxxxxxxxxxxxxxxxxxxxxxxxxxx 11 | TERRITORY: 12 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 13 | xzxxzzxxzxxxzzxxxxxzzxxxxzzxxxxx 14 | xxxxxxxxzzxxzzxxxxxxzzxxzzzzxxxx 15 | xzzzxxxxxzxxxxxxxxxxzxxxxxxxxzzz 16 | xxxxxzzxxxxxzzxxxzxxxxzxxxxxxxzz 17 | xzzxxzxxxxxxzzxxzzzxxzzzxxxxxxxz 18 | xxzxxzxxzxxxzxxxxzxxxzzxxxzzzxxx 19 | xxxxxxxzzzxxxxxxxxxxxxxxxxzzzxxx 20 | xzzzzxxxxxxxxxxxxxxxxxxxxxxxxxxx 21 | SEKI: 22 | ................................ 23 | ................................ 24 | ................................ 25 | ................................ 26 | ................................ 27 | ................................ 28 | ................................ 29 | ................................ 30 | ................................ 31 | FALSE EYES: 32 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 33 | x.xx..xx.xxx..xxxxx..xxxx..xxxxx 34 | xxxxxxxxw.xxw.xxxxxxw.xx.w..xxxx 35 | x.w.xxxxx.xxxxxxxxxx.xxxxxxxx.w. 36 | xxxxxw.xxxxx..xxx.xxxx.xxxxxxx.. 37 | x.wxx.xxxxxxw.xx.w.xx.w.xxxxxxx. 38 | xx.xx.xx.xxx.xxxx.xxx..xxx.w.xxx 39 | xxxxxxx.w.xxxxxxxxxxxxxxxx...xxx 40 | x..w.xxxxxxxxxxxxxxxxxxxxxxxxxxx 41 | UNSCORABLE FALSE EYES: 42 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 43 | x.xx..xx.xxx..xxxxx..xxxx..xxxxx 44 | xxxxxxxxw.xxw.xxxxxxw.xx.w..xxxx 45 | x.w.xxxxx.xxxxxxxxxx.xxxxxxxx.w. 46 | xxxxxw.xxxxx..xxx.xxxx.xxxxxxx.. 47 | x.wxx.xxxxxxw.xx.w.xx.w.xxxxxxx. 48 | xx.xx.xx.xxx.xxxx.xxx..xxx.w.xxx 49 | xxxxxxx.w.xxxxxxxxxxxxxxxx...xxx 50 | x..w.xxxxxxxxxxxxxxxxxxxxxxxxxxx 51 | DAME: 52 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 53 | x.xx..xx.xxx..xxxxx..xxxx..xxxxx 54 | xxxxxxxxw.xxw.xxxxxxw.xx.w..xxxx 55 | x.w.xxxxx.xxxxxxxxxx.xxxxxxxx.w. 56 | xxxxxw.xxxxx..xxx.xxxx.xxxxxxx.. 57 | x.wxx.xxxxxxw.xx.w.xx.w.xxxxxxx. 58 | xx.xx.xx.xxx.xxxx.xxx..xxx.w.xxx 59 | xxxxxxx.w.xxxxxxxxxxxxxxxx...xxx 60 | x..w.xxxxxxxxxxxxxxxxxxxxxxxxxxx 61 | EYEVALUE: 62 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 63 | x1xx11xx2xxx11xxxxx22xxxx22xxxxx 64 | xxxxxxxx22xx11xxxxxx22xx2222xxxx 65 | x111xxxxx2xxxxxxxxxx2xxxxxxxx222 66 | xxxxx22xxxxx11xxx1xxxx1xxxxxxx22 67 | x11xx2xxxxxx11xx111xx111xxxxxxx2 68 | xx1xx2xx1xxx1xxxx1xxx11xxx222xxx 69 | xxxxxxx111xxxxxxxxxxxxxxxx222xxx 70 | x2222xxxxxxxxxxxxxxxxxxxxxxxxxxx 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_solid_eyeshapes_nakade2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 3 | x.xx.wxxwxxx.wxxxxx.wxxxx..xxxxx 4 | xxxxxxxxw.xxwwxxxxxxw.xx.ww.xxxx 5 | x.wwxxxxx.xxxxxxxxxx.xxxxxxxx.w. 6 | xxxxxw.xxxxx.wxxx.xxxxwxxxxxxx.w 7 | x.wxxwxxxxxxwwxx.w.xxww.xxxxxxx. 8 | xxwxx.xx.xxx.xxxx.xxxwwxxx.w.xxx 9 | xxxxxxxww.xxx...xxxxxxxxxx.w.xxx 10 | x.ww.xxxxxxxx.wwxxxxxxxxxxxxxxxx 11 | TERRITORY: 12 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 13 | xzxxzzxxzxxxzzxxxxxzzxxxxzzxxxxx 14 | xxxxxxxxzzxxzzxxxxxxzzxxzzzzxxxx 15 | xzzzxxxxxzxxxxxxxxxxzxxxxxxxxzzz 16 | xxxxxzzxxxxxzzxxxzxxxxzxxxxxxxzz 17 | xzzxxzxxxxxxzzxxzzzxxzzzxxxxxxxz 18 | xxzxxzxxzxxxzxxxxzxxxzzxxxzzzxxx 19 | xxxxxxxzzzxxxzzzxxxxxxxxxxzzzxxx 20 | xzzzzxxxxxxxxzzzxxxxxxxxxxxxxxxx 21 | SEKI: 22 | ................................ 23 | ................................ 24 | ................................ 25 | ................................ 26 | ................................ 27 | ................................ 28 | ................................ 29 | ................................ 30 | ................................ 31 | FALSE EYES: 32 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 33 | x.xx.wxxwxxx.wxxxxx.wxxxx..xxxxx 34 | xxxxxxxxw.xxwwxxxxxxw.xx.ww.xxxx 35 | x.wwxxxxx.xxxxxxxxxx.xxxxxxxx.w. 36 | xxxxxw.xxxxx.wxxx.xxxxwxxxxxxx.w 37 | x.wxxwxxxxxxwwxx.w.xxww.xxxxxxx. 38 | xxwxx.xx.xxx.xxxx.xxxwwxxx.w.xxx 39 | xxxxxxxww.xxx...xxxxxxxxxx.w.xxx 40 | x.ww.xxxxxxxx.wwxxxxxxxxxxxxxxxx 41 | UNSCORABLE FALSE EYES: 42 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 43 | x.xx.wxxwxxx.wxxxxx.wxxxx..xxxxx 44 | xxxxxxxxw.xxwwxxxxxxw.xx.ww.xxxx 45 | x.wwxxxxx.xxxxxxxxxx.xxxxxxxx.w. 46 | xxxxxw.xxxxx.wxxx.xxxxwxxxxxxx.w 47 | x.wxxwxxxxxxwwxx.w.xxww.xxxxxxx. 48 | xxwxx.xx.xxx.xxxx.xxxwwxxx.w.xxx 49 | xxxxxxxww.xxx...xxxxxxxxxx.w.xxx 50 | x.ww.xxxxxxxx.wwxxxxxxxxxxxxxxxx 51 | DAME: 52 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 53 | x.xx.wxxwxxx.wxxxxx.wxxxx..xxxxx 54 | xxxxxxxxw.xxwwxxxxxxw.xx.ww.xxxx 55 | x.wwxxxxx.xxxxxxxxxx.xxxxxxxx.w. 56 | xxxxxw.xxxxx.wxxx.xxxxwxxxxxxx.w 57 | x.wxxwxxxxxxwwxx.w.xxww.xxxxxxx. 58 | xxwxx.xx.xxx.xxxx.xxxwwxxx.w.xxx 59 | xxxxxxxww.xxx...xxxxxxxxxx.w.xxx 60 | x.ww.xxxxxxxx.wwxxxxxxxxxxxxxxxx 61 | EYEVALUE: 62 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 63 | x1xx11xx2xxx11xxxxx11xxxx11xxxxx 64 | xxxxxxxx22xx11xxxxxx11xx1111xxxx 65 | x111xxxxx2xxxxxxxxxx1xxxxxxxx222 66 | xxxxx11xxxxx11xxx1xxxx1xxxxxxx22 67 | x11xx1xxxxxx11xx111xx111xxxxxxx2 68 | xx1xx1xx1xxx1xxxx1xxx11xxx111xxx 69 | xxxxxxx111xxx222xxxxxxxxxx111xxx 70 | x1111xxxxxxxx222xxxxxxxxxxxxxxxx 71 | -------------------------------------------------------------------------------- /python/expected_test_output/test_lgroups_and_rectanglelikes.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ....x.o...o.x...x.o..ox... 3 | ...xooo...o.x...x.o..ox... 4 | .xxxo.....o.xx.xx.o..oxxx. 5 | xoooo.....ooooxoooo..oooox 6 | .o...........o.o........o. 7 | o..........o..o.........oo 8 | .o........o.o............o 9 | xoooo.....oxoooo.....oooo. 10 | .xxxoo...ox.xxxo.....oxxxx 11 | ...xxo...ox...xxooooooxw.w 12 | ....xo...ox.....x.o.o.xw.w 13 | TERRITORY: 14 | ....x.oaaao.xzzzx.oaaoxzzz 15 | ...xoooaaao.xzzzx.oaaoxzzz 16 | .xxxoaaaaao.xx.xx.oaaoxxx. 17 | xooooaaaaaooooxooooaaoooox 18 | .oaaaaaaaaaaao.oaaaaaaaao. 19 | oaaaaaaaaaaoaaoaaaaaaaaaoo 20 | .oaaaaaaaao.oaaaaaaaaaaaao 21 | xooooaaaaaoxooooaaaaaoooo. 22 | .xxxooaaaox.xxxoaaaaaoxxxx 23 | zzzxxoaaaoxzzzxxooooooxzzz 24 | zzzzxoaaaoxzzzz.x.oao.xzzz 25 | SEKI: 26 | zzzzx..................... 27 | zzzx...................... 28 | zxxx...................... 29 | x......................... 30 | .......................... 31 | .......................... 32 | .......................... 33 | .......................... 34 | .......................... 35 | .......................... 36 | .......................... 37 | FALSE EYES: 38 | ...Fx.o...o.x...x.o..ox... 39 | ...xooo...o.x...x.o..ox... 40 | Fxxxo.....o.xxFxx.o..oxxxF 41 | xoooo.....ooooxoooo..oooox 42 | .o...........o.o........o. 43 | o..........o..o.........oo 44 | .o........o.o............o 45 | xoooo.....oxoooo.....oooo. 46 | Fxxxoo...oxFxxxo.....oxxxx 47 | ...xxo...ox...xxooooooxw.w 48 | ....xo...ox....Fx.o.o.xw.w 49 | UNSCORABLE FALSE EYES: 50 | ...Fx.o...o.x...x.o..ox... 51 | ...xooo...o.x...x.o..ox... 52 | Fxxxo.....o.xxFxx.o..oxxxF 53 | xoooo.....ooooxoooo..oooox 54 | .o...........o.o........o. 55 | o..........o..o.........oo 56 | .o........o.o............o 57 | xoooo.....oxoooo.....oooo. 58 | Fxxxoo...oxFxxxo.....oxxxx 59 | ...xxo...ox...xxooooooxw.w 60 | ....xo...ox....Fx.o.o.xw.w 61 | DAME: 62 | ....x1o...o1x...x1o..ox... 63 | ...xooo...o1x...x1o..ox... 64 | .xxxo.....o1xx.xx1o..oxxx. 65 | xoooo.....ooooxoooo..oooox 66 | 1o...........o1o........o1 67 | o..........o..o.........oo 68 | 1o........o1o............o 69 | xoooo.....oxoooo.....oooo1 70 | .xxxoo...ox.xxxo.....oxxxx 71 | ...xxo...ox...xxooooooxw.w 72 | ....xo...ox.....x1o.o1xw.w 73 | EYEVALUE: 74 | 1111x.o222o.x222x.o22ox222 75 | 111xooo222o.x222x.o22ox222 76 | 1xxxo22222o.xx2xx.o22oxxx2 77 | xoooo22222ooooxoooo22oooox 78 | .o22222222222o.o22222222o. 79 | o2222222222o22o222222222oo 80 | .o22222222o.o222222222222o 81 | xoooo22222oxoooo22222oooo. 82 | 2xxxoo222ox2xxxo22222oxxxx 83 | 222xxo222ox222xxoooooox222 84 | 2222xo222ox22222x.o1o.x222 85 | -------------------------------------------------------------------------------- /python/expected_test_output/test_lgroups_and_rectanglelikes2.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ...wx.o...o.x.w.x.o..oxw.. 3 | ...xooo...o.x...x.o..oxw.. 4 | xxxxo.....o.xx.xx.o..oxxx. 5 | xoooo.....ooooxoooo..oooox 6 | .o...........o.o........o. 7 | o..........o..o.........oo 8 | .o........o.o............o 9 | xoooo.....oxoooo.....oooo. 10 | .xxxoo...ox.xxxo.....oxxxx 11 | ..wxxo...ox...xooooooox... 12 | ...wxo...ox....x.oo.o.x.w. 13 | TERRITORY: 14 | ...wx.oaaao.xzzzx.oaaoxzzz 15 | ...xoooaaao.xzzzx.oaaoxzzz 16 | xxxxoaaaaao.xx.xx.oaaoxxx. 17 | xooooaaaaaooooxooooaaoooox 18 | .oaaaaaaaaaaao.oaaaaaaaao. 19 | oaaaaaaaaaaoaaoaaaaaaaaaoo 20 | .oaaaaaaaao.oaaaaaaaaaaaao 21 | xooooaaaaaoxooooaaaaaoooo. 22 | .xxxooaaaox.xxxoaaaaaoxxxx 23 | zzzxxoaaaox...xoooooooxzzz 24 | zzzzxoaaaox....x.ooao.xzzz 25 | SEKI: 26 | zzzxx..................... 27 | zzzx...................... 28 | xxxx...................... 29 | x......................... 30 | .......................... 31 | .......................... 32 | .......................... 33 | ...........x.............. 34 | ..........xzxxx........... 35 | ..........xzzzx........... 36 | ..........xzzzzx.......... 37 | FALSE EYES: 38 | ...Fx.o...o.x.w.x.o..oxw.. 39 | ...xooo...o.x...x.o..oxw.. 40 | xxxxo.....o.xxFxx.o..oxxxF 41 | xoooo.....ooooxoooo..oooox 42 | .o...........o.o........o. 43 | o..........o..o.........oo 44 | .o........o.o............o 45 | xoooo.....oxoooo.....oooo. 46 | Fxxxoo...oxFxxxo.....oxxxx 47 | ..wxxo...ox...xooooooox... 48 | ...wxo...ox...Fx.oo.o.x.w. 49 | UNSCORABLE FALSE EYES: 50 | ..FFx.o...o.x.w.x.o..oxw.. 51 | ...xooo...o.x...x.o..oxw.. 52 | xxxxo.....o.xxFxx.o..oxxxF 53 | xoooo.....ooooxoooo..oooox 54 | .o...........o.o........o. 55 | o..........o..o.........oo 56 | .o........o.o............o 57 | xoooo.....oxoooo.....oooo. 58 | Fxxxoo...oxFxxxo.....oxxxx 59 | ..wxxo...ox...xooooooox... 60 | ...wxo...ox...Fx.oo.o.x.w. 61 | DAME: 62 | ...wx1o...o1x.w.x1o..oxw.. 63 | ...xooo...o1x...x1o..oxw.. 64 | xxxxo.....o1xx.xx1o..oxxx. 65 | xoooo.....ooooxoooo..oooox 66 | 1o...........o1o........o1 67 | o..........o..o.........oo 68 | 1o........o1o............o 69 | xoooo.....oxoooo.....oooo1 70 | .xxxoo...ox.xxxo.....oxxxx 71 | ..wxxo...ox...xooooooox... 72 | ...wxo...ox....x1oo.o1x.w. 73 | EYEVALUE: 74 | 1111x.o222o.x222x.o22ox222 75 | 111xooo222o.x222x.o22ox222 76 | xxxxo22222o.xx2xx.o22oxxx2 77 | xoooo22222ooooxoooo22oooox 78 | .o22222222222o.o22222222o. 79 | o2222222222o22o222222222oo 80 | .o22222222o.o222222222222o 81 | xoooo22222oxoooo22222oooo. 82 | 2xxxoo222ox1xxxo22222oxxxx 83 | 222xxo222ox111xooooooox222 84 | 2222xo222ox1111x.oo1o.x222 85 | -------------------------------------------------------------------------------- /python/expected_test_output/test_lgroups_and_rectanglelikes3.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .....x.o..o.x.ww.xo..ox.w. 3 | ....xooo..o.x.w.xxo..ox... 4 | .xxxxo....o.x.xxx.o..oxxx. 5 | xooooo....oooxooooo..oooox 6 | .o..........o.o.........o. 7 | o..........o.o..........oo 8 | .o........o.o............o 9 | xoooo.....oxoooo.....ooooo 10 | .xxxoo...ox.xxxo....ooxxxx 11 | ...xxo...ox.w.xxoo..oxx... 12 | ..w.xo...ox.w..x.o..ox.w.. 13 | TERRITORY: 14 | zzzz.x.oaao.x.ww.xoaaox.w. 15 | zzzzxoooaao.x.w.xxoaaox... 16 | .xxxxoaaaao.x.xxx.oaaoxxx. 17 | xoooooaaaaoooxoooooaaoooox 18 | .oaaaaaaaaaao.oaaaaaaaaao. 19 | oaaaaaaaaaaoaoaaaaaaaaaaoo 20 | .oaaaaaaaao.oaaaaaaaaaaaao 21 | xooooaaaaaoxooooaaaaaooooo 22 | .xxxooaaaox.xxxoaaaaooxxxx 23 | zzzxxoaaaoxzzzxxooaaoxxzzz 24 | zzzzxoaaaoxzzzzx.oaaoxzzzz 25 | SEKI: 26 | ............xzxxzx....xzxz 27 | ............xzxzxx....xzzz 28 | ............xzxxx.....xxxz 29 | .............x...........x 30 | .......................... 31 | .......................... 32 | .......................... 33 | .......................... 34 | .......................... 35 | .......................... 36 | .......................... 37 | FALSE EYES: 38 | ....Fx.o..o.x.ww.xo..ox.w. 39 | ....xooo..o.x.w.xxo..ox... 40 | Fxxxxo....o.xFxxx.o..oxxxF 41 | xooooo....oooxooooo..oooox 42 | .o..........o.o.........o. 43 | o..........o.o..........oo 44 | .o........o.o............o 45 | xoooo.....oxoooo.....ooooo 46 | Fxxxoo...oxFxxxo....ooxxxx 47 | ...xxo...ox.w.xxoo..oxx... 48 | ..w.xo...ox.w..x.o..ox.w.. 49 | UNSCORABLE FALSE EYES: 50 | ....Fx.o..o.x.ww.xo..ox.w. 51 | ....xooo..o.x.w.xxo..ox... 52 | Fxxxxo....o.xFxxx.o..oxxxF 53 | xooooo....oooxooooo..oooox 54 | .o..........o.o.........o. 55 | o..........o.o..........oo 56 | .o........o.o............o 57 | xoooo.....oxoooo.....ooooo 58 | Fxxxoo...oxFxxxo....ooxxxx 59 | ...xxo...ox.w.xxoo..oxx... 60 | ..w.xo...ox.w..x.o..ox.w.. 61 | DAME: 62 | .....x1o..o1x.ww.xo..ox.w. 63 | ....xooo..o1x.w.xxo..ox... 64 | .xxxxo....o1x.xxx1o..oxxx. 65 | xooooo....oooxooooo..oooox 66 | 1o..........o1o.........o1 67 | o..........o.o..........oo 68 | 1o........o1o............o 69 | xoooo.....oxoooo.....ooooo 70 | .xxxoo...ox.xxxo....ooxxxx 71 | ...xxo...ox.w.xxoo..oxx... 72 | ..w.xo...ox.w..x1o..ox.w.. 73 | EYEVALUE: 74 | 22222x.o22o.x1111xo22ox111 75 | 2222xooo22o.x111xxo22ox111 76 | 2xxxxo2222o.x1xxx.o22oxxx1 77 | xooooo2222oooxooooo22oooox 78 | .o2222222222o.o222222222o. 79 | o2222222222o1o2222222222oo 80 | .o22222222o.o222222222222o 81 | xoooo22222oxoooo22222ooooo 82 | 2xxxoo222ox2xxxo2222ooxxxx 83 | 222xxo222ox222xxoo22oxx222 84 | 2222xo222ox2222x.o22ox2222 85 | -------------------------------------------------------------------------------- /python/expected_test_output/test_lgroups_and_rectanglelikes4.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .w...x.o..ox.www.xo.ox.w.. 3 | .w..xooo..oxx...xxo.oxx... 4 | xxxxxo....o.xxxxx.o..oxxxw 5 | xooooo....oooxooooo..oooox 6 | .o..........o.o.........o. 7 | o..........o.o..........oo 8 | .o........o.o............o 9 | xoooo.....oxoooo.....ooooo 10 | xxxxoo...oxxxxxo....ooxxxx 11 | ...xxo...ox...xxoo..oxx... 12 | ..w.xo...ox..wwx.o..oxxwww 13 | TERRITORY: 14 | zzzz.x.oaaox.www.xoaox.w.. 15 | zzzzxoooaaoxx...xxoaoxx... 16 | xxxxxoaaaao.xxxxx.oaaoxxxw 17 | xoooooaaaaoooxoooooaaoooox 18 | .oaaaaaaaaaao.oaaaaaaaaao. 19 | oaaaaaaaaaaoaoaaaaaaaaaaoo 20 | .oaaaaaaaao.oaaaaaaaaaaaao 21 | xooooaaaaaoxooooaaaaaooooo 22 | xxxxooaaaoxxxxxoaaaaooxxxx 23 | zzzxxoaaaoxzzzxxooaaoxx... 24 | zzzzxoaaaoxzzzzx.oaaoxxwww 25 | SEKI: 26 | ...........xzxxxzx...xzxzz 27 | ...........xxzzzxx...xxzzz 28 | ............xxxxx.....xxxx 29 | .............x...........x 30 | .......................... 31 | .......................... 32 | .......................... 33 | .......................... 34 | ......................xxxx 35 | .....................xxzzz 36 | .....................xxxxx 37 | FALSE EYES: 38 | .w..Fx.o..ox.www.xo.ox.w.. 39 | .w..xooo..oxx...xxo.oxx... 40 | xxxxxo....o.xxxxx.o..oxxxF 41 | xooooo....oooxooooo..oooox 42 | .o..........o.o.........o. 43 | o..........o.o..........oo 44 | .o........o.o............o 45 | xoooo.....oxoooo.....ooooo 46 | xxxxoo...oxxxxxo....ooxxxx 47 | ...xxo...ox...xxoo..oxx... 48 | ..w.xo...ox..wwx.o..oxxwww 49 | UNSCORABLE FALSE EYES: 50 | .w..Fx.o..ox.www.xo.ox.w.. 51 | .w..xooo..oxx...xxo.oxx..F 52 | xxxxxo....o.xxxxx.o..oxxxF 53 | xooooo....oooxooooo..oooox 54 | .o..........o.o.........o. 55 | o..........o.o..........oo 56 | .o........o.o............o 57 | xoooo.....oxoooo.....ooooo 58 | xxxxoo...oxxxxxo....ooxxxx 59 | ...xxo...ox...xxoo..oxx... 60 | ..w.xo...ox..wwx.o..oxxwww 61 | DAME: 62 | .w...x1o..ox.www.xo.ox.w.. 63 | .w..xooo..oxx...xxo.oxx... 64 | xxxxxo....o1xxxxx1o..oxxxw 65 | xooooo....oooxooooo..oooox 66 | 1o..........o1o.........o1 67 | o..........o.o..........oo 68 | 1o........o1o............o 69 | xoooo.....oxoooo.....ooooo 70 | xxxxoo...oxxxxxo....ooxxxx 71 | ...xxo...ox...xxoo..oxx... 72 | ..w.xo...ox..wwx1o..oxxwww 73 | EYEVALUE: 74 | 22222x.o22ox11111xo2ox1111 75 | 2222xooo22oxx111xxo2oxx111 76 | xxxxxo2222o.xxxxx.o22oxxx1 77 | xooooo2222oooxooooo22oooox 78 | .o2222222222o.o222222222o. 79 | o2222222222o1o2222222222oo 80 | .o22222222o.o222222222222o 81 | xoooo22222oxoooo22222ooooo 82 | xxxxoo222oxxxxxo2222ooxxxx 83 | 222xxo222ox222xxoo22oxx111 84 | 2222xo222ox2222x.o22oxx111 85 | -------------------------------------------------------------------------------- /python/expected_test_output/test_lgroups_and_rectanglelikes5.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | .w..xx.o..ox.w.w.xo.ox.w.. 3 | .w..xooo..oxx...xxo.ox.... 4 | xxxxxo....o.xxxxx.o.oxxxxw 5 | xooooo....oooxooooo..oooox 6 | .o..........o.o.........o. 7 | o..........o.o..........oo 8 | .o........o.o............o 9 | xoooo...oooxoooo.....ooooo 10 | xxxxoo.ooxxxxxxo....ooxxxx 11 | w..xxo.oxx....xxoo..oxx.ww 12 | ..w.xo.ox.wwww.x.o..oxxwww 13 | TERRITORY: 14 | zzzzxx.oaaoxzzzzzxoaox.w.. 15 | zzzzxoooaaoxxzzzxxoaox.... 16 | xxxxxoaaaao.xxxxx.oaoxxxxw 17 | xoooooaaaaoooxoooooaaoooox 18 | .oaaaaaaaaaao.oaaaaaaaaao. 19 | oaaaaaaaaaaoaoaaaaaaaaaaoo 20 | .oaaaaaaaao.oaaaaaaaaaaaao 21 | xooooaaaoooxooooaaaaaooooo 22 | xxxxooaooxxxxxxoaaaaooxxxx 23 | zzzxxoaoxxzzzzxxooaaoxx.ww 24 | zzzzxoaoxzzzzzzx.oaaoxxwww 25 | SEKI: 26 | .....................xzxzz 27 | .....................xzzzz 28 | .....................xxxxx 29 | .........................x 30 | .......................... 31 | .......................... 32 | .......................... 33 | .......................... 34 | ......................xxxx 35 | .....................xxzxx 36 | .....................xxxxx 37 | FALSE EYES: 38 | .w..xx.o..ox.w.w.xo.ox.w.. 39 | .w..xooo..oxx...xxo.ox.... 40 | xxxxxo....o.xxxxx.o.oxxxxF 41 | xooooo....oooxooooo..oooox 42 | .o..........o.o.........o. 43 | o..........o.o..........oo 44 | .o........o.o............o 45 | xoooo...oooxoooo.....ooooo 46 | xxxxoo.ooxxxxxxo....ooxxxx 47 | w..xxo.oxx....xxoo..oxx.ww 48 | ..w.xo.ox.wwww.x.o..oxxwww 49 | UNSCORABLE FALSE EYES: 50 | .w..xx.o..ox.w.w.xo.ox.w.. 51 | .w..xooo..oxx...xxo.ox...F 52 | xxxxxo....o.xxxxx.o.oxxxxF 53 | xooooo....oooxooooo..oooox 54 | .o..........o.o.........o. 55 | o..........o.o..........oo 56 | .o........o.o............o 57 | xoooo...oooxoooo.....ooooo 58 | xxxxoo.ooxxxxxxo....ooxxxx 59 | w..xxo.oxx....xxoo..oxx.ww 60 | ..w.xo.ox.wwww.x.o..oxxwww 61 | DAME: 62 | .w..xx1o..ox.w.w.xo.ox.w.. 63 | .w..xooo..oxx...xxo.ox.... 64 | xxxxxo....o1xxxxx1o.oxxxxw 65 | xooooo....oooxooooo..oooox 66 | 1o..........o1o.........o1 67 | o..........o.o..........oo 68 | 1o........o1o............o 69 | xoooo...oooxoooo.....ooooo 70 | xxxxoo.ooxxxxxxo....ooxxxx 71 | w..xxo.oxx....xxoo..oxx.ww 72 | ..w.xo.ox.wwww.x1o..oxxwww 73 | EYEVALUE: 74 | 2222xx.o22ox22222xo2ox1111 75 | 2222xooo22oxx222xxo2ox1111 76 | xxxxxo2222o.xxxxx.o2oxxxx1 77 | xooooo2222oooxooooo22oooox 78 | .o2222222222o.o222222222o. 79 | o2222222222o1o2222222222oo 80 | .o22222222o.o222222222222o 81 | xoooo222oooxoooo22222ooooo 82 | xxxxoo2ooxxxxxxo2222ooxxxx 83 | 222xxo2oxx2222xxoo22oxx111 84 | 2222xo2ox222222x.o22oxx111 85 | -------------------------------------------------------------------------------- /python/expected_test_output/test_live_in_a_row.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ......o.......o........o.........o..........o 3 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 4 | ....o...o...o...o....o...o.....o...o......o.. 5 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 6 | .....o...o........o...o.......o.......o...... 7 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 8 | .......o............o...........o...o........ 9 | TERRITORY: 10 | ......o.......o........o.........o..........o 11 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 12 | ....oaaao...oaaao....o...o.....oaaao......o.. 13 | ooooooaaooooooooooo..oo..oooooooaaaoooooooo.. 14 | .....oaaao........o...o.......oaaaaaaao...... 15 | xxxxxoooooxxxxxxxxoooooxxxxxxxoooaaaoooxxxxxx 16 | .......o............o...........oaaao........ 17 | SEKI: 18 | zzz.......z.......zz.......zzz.......zzzz.... 19 | xxxx.....xxx.....xxxx.....xxxxx.....xxxxxx... 20 | ............................................. 21 | ............................................. 22 | ............................................. 23 | ............................................. 24 | ............................................. 25 | FALSE EYES: 26 | ......o.......o........o.........o..........o 27 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 28 | ....o...o...o...o....o...o.....o...o......o.. 29 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 30 | .....o...o........o...o.......o.......o...... 31 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 32 | .......o............o...........o...o........ 33 | UNSCORABLE FALSE EYES: 34 | ......o.......o........o.........o..........o 35 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 36 | ....o...o...o...o....o...o.....o...o......o.. 37 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 38 | .....o...o........o...o.......o.......o...... 39 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 40 | .......o............o...........o...o........ 41 | DAME: 42 | ...11.o.11.11.o.11..11.o.11...11.o.11....11.o 43 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 44 | 1111o...o111o...o1111o111o11111o...o111111o11 45 | oooooo..ooooooooooo11oo11ooooooo...oooooooo11 46 | 11111o...o11111111o111o1111111o.......o111111 47 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 48 | ....11.o.11......11.o.11.....11.o...o.11..... 49 | EYEVALUE: 50 | 111..1o1.....1o1..11..1o1..111..1o1..1111..1o 51 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 52 | ....o222o...o222o....o...o.....o222o......o.. 53 | oooooo22ooooooooooo..oo..ooooooo222oooooooo.. 54 | .....o222o........o...o.......o2222222o...... 55 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo222oooxxxxxx 56 | 2222..1o1..222222..1o1..22222..1o222o1..22222 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_live_in_a_row_with_hane.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ....x.o.x...x.o.x....x.o.x.....x.o.x......x.o 3 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 4 | ....o...o...o...o....o...o.....o...o......o.. 5 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 6 | .....o...o........o...o.......o.......o...... 7 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 8 | .....x.o.x........x.o.x.......x.o...o.x...... 9 | TERRITORY: 10 | ....x.o.x...x.o.x....x.o.x.....x.o.x......x.o 11 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 12 | ....oaaao...oaaao....o...o.....oaaao......o.. 13 | ooooooaaooooooooooo..oo..oooooooaaaoooooooo.. 14 | .....oaaao........o...o.......oaaaaaaao...... 15 | xxxxxoooooxxxxxxxxoooooxxxxxxxoooaaaoooxxxxxx 16 | zzzz.x.o.x.zzzzzz.x.o.x.zzzzz.x.oaaao.x.zzzzz 17 | SEKI: 18 | zzzzx...xzzzx...xzzzzx...xzzzzzx...xzzzzzzx.. 19 | xxxx.....xxx.....xxxx.....xxxxx.....xxxxxx... 20 | ............................................. 21 | ............................................. 22 | ............................................. 23 | ............................................. 24 | ............................................. 25 | FALSE EYES: 26 | ...Fx.o.xF.Fx.o.xF..Fx.o.xF...Fx.o.xF....Fx.o 27 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 28 | ....o...o...o...o....o...o.....o...o......o.. 29 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 30 | .....o...o........o...o.......o.......o...... 31 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 32 | ....Fx.o.xF......Fx.o.xF.....Fx.o...o.xF..... 33 | UNSCORABLE FALSE EYES: 34 | ...Fx.o.xF.Fx.o.xF..Fx.o.xF...Fx.o.xF....Fx.o 35 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 36 | ....o...o...o...o....o...o.....o...o......o.. 37 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 38 | .....o...o........o...o.......o.......o...... 39 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 40 | ....Fx.o.xF......Fx.o.xF.....Fx.o...o.xF..... 41 | DAME: 42 | ....x1o1x...x1o1x....x1o1x.....x1o1x......x1o 43 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 44 | 1111o...o111o...o1111o111o11111o...o111111o11 45 | oooooo..ooooooooooo11oo11ooooooo...oooooooo11 46 | 11111o...o11111111o111o1111111o.......o111111 47 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 48 | .....x1o1x........x1o1x.......x1o...o1x...... 49 | EYEVALUE: 50 | 1111x.o.x...x.o.x1111x.o.x11111x.o.x111111x.o 51 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 52 | ....o222o...o222o....o...o.....o222o......o.. 53 | oooooo22ooooooooooo..oo..ooooooo222oooooooo.. 54 | .....o222o........o...o.......o2222222o...... 55 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo222oooxxxxxx 56 | 22222x.o.x22222222x.o.x2222222x.o222o.x222222 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_live_in_a_row_with_hane_throwin.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ...wx.o.xw..x.o.xw...x.o.xw....x.o.xw.....x.o 3 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 4 | ....o...o...o...o....o...o.....o...o......o.. 5 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 6 | .....o...o........o...o.......o.......o...... 7 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 8 | ....wx.o.xw.......x.o.xw......x.o...o.xw..... 9 | TERRITORY: 10 | ...wx.o.xw..x.o.xw...x.o.xw....x.o.xw.....x.o 11 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 12 | ....oaaao...oaaao....o...o.....oaaao......o.. 13 | ooooooaaooooooooooo..oo..oooooooaaaoooooooo.. 14 | .....oaaao........o...o.......oaaaaaaao...... 15 | xxxxxoooooxxxxxxxxoooooxxxxxxxoooaaaoooxxxxxx 16 | ....wx.o.xw.zzzzz.x.o.xw......x.oaaao.xw.zzzz 17 | SEKI: 18 | zzzxx...xxzzx...xxzzzx...xxzzzzx...xxzzzzzx.. 19 | xxxx.....xxx.....xxxx.....xxxxx.....xxxxxx... 20 | ............................................. 21 | ............................................. 22 | ............................................. 23 | xxxxx..................xxxxxxx............... 24 | zzzzxx................xxzzzzzzx.............. 25 | FALSE EYES: 26 | ...Fx.o.xF.Fx.o.xF..Fx.o.xF...Fx.o.xF....Fx.o 27 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 28 | ....o...o...o...o....o...o.....o...o......o.. 29 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 30 | .....o...o........o...o.......o.......o...... 31 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 32 | ....Fx.o.xF......Fx.o.xF.....Fx.o...o.xF..... 33 | UNSCORABLE FALSE EYES: 34 | ..FFx.o.xFFFx.o.xFF.Fx.o.xFF..Fx.o.xFF...Fx.o 35 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 36 | ....o...o...o...o....o...o.....o...o......o.. 37 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 38 | .....o...o........o...o.......o.......o...... 39 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 40 | ...FFx.o.xFF.....Fx.o.xFF....Fx.o...o.xFF.... 41 | DAME: 42 | ...wx1o1xw..x1o1xw...x1o1xw....x1o1xw.....x1o 43 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 44 | 1111o...o111o...o1111o111o11111o...o111111o11 45 | oooooo..ooooooooooo11oo11ooooooo...oooooooo11 46 | 11111o...o11111111o111o1111111o.......o111111 47 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 48 | ....wx1o1xw.......x1o1xw......x1o...o1xw..... 49 | EYEVALUE: 50 | 1111x.o.xw..x.o.xw...x.o.x11111x.o.x111111x.o 51 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 52 | ....o222o...o222o....o...o.....o222o......o.. 53 | oooooo22ooooooooooo..oo..ooooooo222oooooooo.. 54 | .....o222o........o...o.......o2222222o...... 55 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo222oooxxxxxx 56 | 11111x.o.x22222222x.o.x1111111x.o222o.x222222 57 | -------------------------------------------------------------------------------- /python/expected_test_output/test_live_in_a_row_with_hane_throwin_poke.txt: -------------------------------------------------------------------------------- 1 | BOARD: 2 | ..wwx.o.xww.x.o.xww..x.o.xww...x.o.xww....x.o 3 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 4 | ....o...o...o...o....o...o.....o...o......o.. 5 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 6 | .....o...o........o...o.......o.......o...... 7 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 8 | ...wwx.o.xww......x.o.xww.....x.o...o.xww.... 9 | TERRITORY: 10 | ..wwx.o.xww.x.o.xww..x.o.xww...x.o.xww....x.o 11 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 12 | ....oaaao...oaaao....o...o.....oaaao......o.. 13 | ooooooaaooooooooooo..oo..oooooooaaaoooooooo.. 14 | .....oaaao........o...o.......oaaaaaaao...... 15 | xxxxxoooooxxxxxxxxoooooxxxxxxxoooaaaoooxxxxxx 16 | ...wwx.o.xwwzzzzz.x.o.xww.....x.oaaao.xwwzzzz 17 | SEKI: 18 | zzxxx...xxxzx...xxxzzx...xxxzzzx...xxxzzzzx.. 19 | xxxx.....xxx.....xxxx.....xxxxx.....xxxxxx... 20 | ............................................. 21 | ............................................. 22 | ............................................. 23 | xxxxx..................xxxxxxx............... 24 | zzzxxx................xxxzzzzzx.............. 25 | FALSE EYES: 26 | ..wFx.o.xFwFx.o.xFw.Fx.o.xFw..Fx.o.xFw...Fx.o 27 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 28 | ....o...o...o...o....o...o.....o...o......o.. 29 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 30 | .....o...o........o...o.......o.......o...... 31 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 32 | ...wFx.o.xFw.....Fx.o.xFw....Fx.o...o.xFw.... 33 | UNSCORABLE FALSE EYES: 34 | ..FFx.o.xFFFx.o.xFF.Fx.o.xFF..Fx.o.xFF...Fx.o 35 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 36 | ....o...o...o...o....o...o.....o...o......o.. 37 | oooooo..ooooooooooo..oo..ooooooo...oooooooo.. 38 | .....o...o........o...o.......o.......o...... 39 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 40 | ...FFx.o.xFF.....Fx.o.xFF....Fx.o...o.xFF.... 41 | DAME: 42 | ..wwx1o1xww.x1o1xww..x1o1xww...x1o1xww....x1o 43 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 44 | 1111o...o111o...o1111o111o11111o...o111111o11 45 | oooooo..ooooooooooo11oo11ooooooo...oooooooo11 46 | 11111o...o11111111o111o1111111o.......o111111 47 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo...oooxxxxxx 48 | ...wwx1o1xww......x1o1xww.....x1o...o1xww.... 49 | EYEVALUE: 50 | 1111x.o.xww.x.o.xww..x.o.x11111x.o.x111111x.o 51 | xxxxoooooxxxoooooxxxxoooooxxxxxoooooxxxxxxooo 52 | ....o222o...o222o....o...o.....o222o......o.. 53 | oooooo22ooooooooooo..oo..ooooooo222oooooooo.. 54 | .....o222o........o...o.......o2222222o...... 55 | xxxxxoooooxxxxxxxxoooooxxxxxxxooo222oooxxxxxx 56 | 11111x.o.x22222222x.o.x1111111x.o222o.x222222 57 | -------------------------------------------------------------------------------- /python/bench.py: -------------------------------------------------------------------------------- 1 | from goscorer import territory_scoring, string2d, string2d2, EMPTY, BLACK, WHITE 2 | 3 | def process(stonestr): 4 | rows = stonestr.split("\n") 5 | rows = [row.strip() for row in rows if row.strip() != ""] 6 | ysize = len(rows) 7 | xsize = len(rows[0]) 8 | stones = [[EMPTY for x in range(xsize)] for y in range(ysize)] 9 | marked_dead = [[False for x in range(xsize)] for y in range(ysize)] 10 | for y in range(ysize): 11 | for x in range(xsize): 12 | c = rows[y][x] 13 | if c == "x": 14 | stones[y][x] = BLACK 15 | if c == "o": 16 | stones[y][x] = WHITE 17 | if c == "b": 18 | stones[y][x] = BLACK 19 | marked_dead[y][x] = True 20 | if c == "w": 21 | stones[y][x] = WHITE 22 | marked_dead[y][x] = True 23 | scoring = territory_scoring(stones,marked_dead) 24 | 25 | if __name__ == "__main__": 26 | for i in range(100): 27 | stonestr = """ 28 | ......x.. 29 | .xx.x.x.. 30 | ......x.. 31 | ......x.. 32 | oooooox.. 33 | .....oxxx 34 | .....o.o. 35 | ...o.o..o 36 | .....o... 37 | """ 38 | process(stonestr) 39 | stonestr = """ 40 | ...xx.x.. 41 | wxxx.x... 42 | xoxxoxx.. 43 | x.ooxox.. 44 | x.o.xox.x 45 | oo.o.o.x. 46 | ....oooxo 47 | bbbbb..o. 48 | ....b...b 49 | """ 50 | process(stonestr) 51 | stonestr = """ 52 | ......xx. 53 | ......oox 54 | ....oo.xx 55 | ooo.o.ox. 56 | ..o.oooox 57 | ooo...ox. 58 | ......oxx 59 | .......x. 60 | """ 61 | process(stonestr) 62 | stonestr = """ 63 | ......... 64 | .....xxx. 65 | ..o.oo.x. 66 | oo.oo.ox. 67 | .oo.oooox 68 | oo....ox. 69 | ......oxx 70 | .......x. 71 | """ 72 | process(stonestr) 73 | stonestr = """ 74 | .ox.xoo....ox.xo. 75 | o.xwwxo.o..ox.x.o 76 | xxxxxxo..o.ooxxxx 77 | ooooooo.o...ooooo 78 | xxx.............. 79 | oox..........xxxx 80 | .ox.....x...xxooo 81 | ooxxxxx..x..xo.o. 82 | .xoooox.x.x.xooxx 83 | x.o.box.....xo.o. 84 | """ 85 | process(stonestr) 86 | stonestr = """ 87 | .x.o.........x.x. 88 | ox.o..xwx..xx..oo 89 | ox.o.o.xx.x..ooo. 90 | ox.o..ooo..xxo.ox 91 | .x.o.b.......oxx. 92 | """ 93 | process(stonestr) 94 | stonestr = """ 95 | .x.........x.........x.........x 96 | .x.o..x....x.o..x....x.o.xx....x 97 | .x.o.o.xx..x.o.o.xx..x.ooo.xx..x 98 | .x.o..ooo..x.o..ooo..x.o..ooo..x 99 | .x.o.b.....x.o.......x.o.b..o..x 100 | """ 101 | process(stonestr) 102 | stonestr = """ 103 | .o.o.........o.o. 104 | xx.o.........o.xx 105 | .xxo.o.....o.oxx. 106 | xoxxo.......oxxwx 107 | o.oxo.......oxw.w 108 | """ 109 | process(stonestr) 110 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## goscorer 2 | Territory scoring in Go with automated seki detection is very challenging. The intent for this library is provide an open-source implementation that can correctly score almost any end-of-game position under Japanese-like rules that territory is not counted for groups alive in seki, if dead stones are correctly marked and enough of the eventually-necessary protective moves are made. It may not always be correct in sufficiently exotic positions, but positions not correctable with further play should be rare. 3 | 4 | In practice, this implementation does NOT require players to fill all the dame. By default it will automatically exclude counting obvious false eye shapes that must eventually be filled, although this can be configured. Of course, this will not catch all necessary internal protections. Players still need to play enough of the dame to force internal protections that aren't simply false eye shapes. 5 | 6 | See [here](https://lightvector.github.io/goscorer/web_test/test.html) for a live interactive page that you can use to test the behavior of the algorithm on different positions. 7 | 8 | 9 | 10 | 11 |
Top groups are correctly detected as alive in seki and no territory is counted. Bottom groups are alive with territory, but territory is still not counted for some of the false eyes.
12 | 13 | There is both a Python implementation and a Javascript implementation that implement exactly the same algorithm and heuristics. The Python implementation is well-commented with verbose docstrings on the `LocScore` object and the primary `territory_scoring` function. The Javascript implementation is a port of the Python implementation, so for more detailed documentation, see the Python code rather than the Javascript code. For completeness, an area scoring implementation is also provided alongside the territory scoring implementation. 14 | 15 | If you find any bugs or anomalies in the scoring, please let me know! 16 | 17 | The relevant code in this repo is released under a MIT license, see LICENSE.txt for details. 18 | 19 | Example in Python: 20 | ``` 21 | from goscorer import EMPTY, BLACK, WHITE, final_territory_score, territory_scoring 22 | stones = [ 23 | [BLACK, EMPTY, BLACK, EMPTY, WHITE], 24 | [BLACK, BLACK, BLACK, WHITE, EMPTY], 25 | [WHITE, WHITE, WHITE, BLACK, BLACK], 26 | [WHITE, EMPTY, WHITE, BLACK, EMPTY], 27 | [EMPTY, WHITE, WHITE, BLACK, BLACK], 28 | ] 29 | marked_dead = [ [ False for _ in range(5) ] for _ in range(5) ] 30 | 31 | # just the score 32 | final_score = final_territory_score( 33 | stones, 34 | marked_dead, 35 | black_points_from_captures=0, 36 | white_points_from_captures=0, 37 | komi=6.5, 38 | ) 39 | # detailed territory map 40 | scoring = territory_scoring(stones,marked_dead) 41 | ``` 42 | 43 | Example in Javascript: 44 | ``` 45 | import { EMPTY, BLACK, WHITE, finalTerritoryScore, territoryScoring } from "./goscorer.js"; 46 | 47 | stones = [ 48 | [BLACK, EMPTY, BLACK, EMPTY, WHITE], 49 | [BLACK, BLACK, BLACK, WHITE, EMPTY], 50 | [WHITE, WHITE, WHITE, BLACK, BLACK], 51 | [WHITE, EMPTY, WHITE, BLACK, EMPTY], 52 | [EMPTY, WHITE, WHITE, BLACK, BLACK], 53 | ]; 54 | markedDead = Array.from({length: 5}, () => Array.from({length: 5}, () => false)); 55 | 56 | // just the score 57 | finalScore = finalTerritoryScore( 58 | stones, 59 | markedDead, 60 | 0, 61 | 0, 62 | 6.5, 63 | ) 64 | // detailed territory map 65 | scoring = territoryScoring(stones,markedDead) 66 | ``` 67 | 68 | -------------------------------------------------------------------------------- /python/print_all_test_output.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -eu 2 | 3 | cat expected_test_output/test_empty.txt 4 | cat expected_test_output/test_basic.txt 5 | cat expected_test_output/test_dead_stone_marking.txt 6 | cat expected_test_output/test_false_eyes.txt 7 | cat expected_test_output/test_false_eyes_2.txt 8 | cat expected_test_output/test_false_eyes_chain.txt 9 | cat expected_test_output/test_false_eyes_chain_bamboo.txt 10 | cat expected_test_output/test_false_eyes_chain_no_bamboo.txt 11 | cat expected_test_output/test_false_eyes_chain_loose_eye.txt 12 | cat expected_test_output/test_false_eyes_chain_loose_eye_2.txt 13 | cat expected_test_output/test_false_eyes_chain_loose_eye_3.txt 14 | cat expected_test_output/test_false_eyes_chain_loose_eye_4.txt 15 | cat expected_test_output/test_false_eyes_chain_big_false_eye.txt 16 | cat expected_test_output/test_false_eyes_chain_big_false_eye_aliveend.txt 17 | cat expected_test_output/test_false_eyes_chain_big_false_eye_aliveends.txt 18 | cat expected_test_output/test_basic_sekis.txt 19 | cat expected_test_output/test_basic_sekis_marked_dead.txt 20 | cat expected_test_output/test_more_fancy_sekis.txt 21 | cat expected_test_output/test_double_ko_death.txt 22 | cat expected_test_output/test_double_ko_death2.txt 23 | cat expected_test_output/test_double_ko.txt 24 | cat expected_test_output/test_double_ko2.txt 25 | cat expected_test_output/test_loose_nakade.txt 26 | cat expected_test_output/test_cycle.txt 27 | cat expected_test_output/test_cycle_false_eye.txt 28 | cat expected_test_output/test_cycle_real_eye.txt 29 | cat expected_test_output/test_cycle_real_2eye.txt 30 | cat expected_test_output/test_cycle_real_3spaceeye.txt 31 | cat expected_test_output/test_bamboo_interleave_seki.txt 32 | cat expected_test_output/test_no_bamboo_interleave_seki_broken.txt 33 | cat expected_test_output/test_double_throwin_seki4.txt 34 | cat expected_test_output/test_double_throwin_seki3.txt 35 | cat expected_test_output/test_side_bamboo_cut.txt 36 | cat expected_test_output/test_cross_noseal.txt 37 | cat expected_test_output/test_cross_nothrowin.txt 38 | cat expected_test_output/test_cross_nopoke.txt 39 | cat expected_test_output/test_cross_poke.txt 40 | cat expected_test_output/test_cross_poke_deeper.txt 41 | cat expected_test_output/test_three_point_false_eye.txt 42 | cat expected_test_output/test_three_point_false_eye_cycle.txt 43 | cat expected_test_output/test_three_way_pokes.txt 44 | cat expected_test_output/test_belly_eye.txt 45 | cat expected_test_output/test_belly_eye2.txt 46 | cat expected_test_output/test_solid_eyeshapes.txt 47 | cat expected_test_output/test_solid_eyeshapes_nakade.txt 48 | cat expected_test_output/test_solid_eyeshapes_nakade2.txt 49 | cat expected_test_output/test_bamboo_reachable_seki.txt 50 | cat expected_test_output/test_hanezeki.txt 51 | cat expected_test_output/test_hanezeki2.txt 52 | cat expected_test_output/test_big_eye_seki.txt 53 | cat expected_test_output/test_lgroups_and_rectanglelikes.txt 54 | cat expected_test_output/test_lgroups_and_rectanglelikes2.txt 55 | cat expected_test_output/test_lgroups_and_rectanglelikes3.txt 56 | cat expected_test_output/test_lgroups_and_rectanglelikes4.txt 57 | cat expected_test_output/test_lgroups_and_rectanglelikes5.txt 58 | cat expected_test_output/test_lgroups_and_rectanglelikes6.txt 59 | cat expected_test_output/test_two_point_eye_falsity.txt 60 | cat expected_test_output/test_false_eye_multicycles1.txt 61 | cat expected_test_output/test_false_eye_multicycles2.txt 62 | cat expected_test_output/test_false_eye_multicycles3.txt 63 | cat expected_test_output/test_false_eye_multicycles4.txt 64 | cat expected_test_output/test_false_eye_multicycles5.txt 65 | cat expected_test_output/test_false_eye_multicycles6.txt 66 | cat expected_test_output/test_live_in_a_row.txt 67 | cat expected_test_output/test_live_in_a_row_with_hane.txt 68 | cat expected_test_output/test_live_in_a_row_with_hane_throwin.txt 69 | cat expected_test_output/test_live_in_a_row_with_hane_throwin_poke.txt 70 | cat expected_test_output/test_throwin_false_eye_chains.txt 71 | -------------------------------------------------------------------------------- /web_test/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Territory Scoring Test 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 351 | 352 | 353 |
354 | Go Scoring Tester 355 |
356 |
357 | 361 | 366 | 367 | 368 |
369 |
370 | Load SGF File: 371 | 372 |
373 |
374 | 375 | 376 |
377 |
378 |
379 | 380 | 381 | 382 | -------------------------------------------------------------------------------- /web_test/wgo/wgo.player.css: -------------------------------------------------------------------------------- 1 | /*--- Icons ------------------------------------------------------------------------*/ 2 | 3 | @font-face { 4 | font-family: 'wgo-icons'; 5 | src: url('data:application/font-woff;base64,d09GRgABAAAAAA7AAA4AAAAAF/gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFIaGNtYXAAAAGIAAAAUwAAAWqgWeonY3Z0IAAAAdwAAAAUAAAAHAZL/5RmcGdtAAAB8AAABPkAAAmRigp4O2dhc3AAAAbsAAAACAAAAAgAAAAQZ2x5ZgAABvQAAATOAAAHOkwwDxtoZWFkAAALxAAAADUAAAA2/xq8WmhoZWEAAAv8AAAAIAAAACQHWgNcaG10eAAADBwAAAApAAAAMCQrAABsb2NhAAAMSAAAABoAAAAaDNEK1G1heHAAAAxkAAAAIAAAACAA6wn3bmFtZQAADIQAAAFqAAACjoKZ70Fwb3N0AAAN8AAAAHgAAACk4zP/3HByZXAAAA5oAAAAVgAAAFaSoZr/eJxjYGRmYZzAwMrAwVTFtIeBgaEHQjM+YDBkZGJgYGJgZWbACgLSXFMYHF4wvJBmDvqfxRDFzMPgDxRmBMkBAL9aCsd4nGNgYGBmgGAZBkYGEEgB8hjBfBYGDyDNx8DBwMTAxsDwgvEFzwv+F+IvpP//Byl8wQDmC7+QAvElGMW/i38V/yT+AWoOEmBkQxcZeQAAVo0S/wB4nGNgQANGDEbMPP83gjAAEL4D43icnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icnVVNaBtXEJ6Ztz/ySlr97T7JsrKyVtIqROAk+rGDg521LWqIDylWIHZijGmTkBACaUjaHgKlPZVQktJA6MGHnkopFBJKLiXQQ4PJIYdQQk49hRJ67CGU9BC5sysZKbSnitXMvJn93sybNzMLtLu7+1B8T7uQhiq87xsGKoiLBVSOrdzz3l3zJSGqrFNOaQggujoKYUBnwt/HEqtQwBl+RVHwBDNUuuHLy+u+tDIExX0T45mqVYlHx3RIUzqSqGPJ1eyUJY+iPVNqTLdTLa/WkKzRyiW9XXY91kw3RfzNbXty0t4ewycBX9jYWOhtbbcDTncdu3fHnhwbm7Txsu1cZNOdhY3t7Y0FvLywAcGZ/sZzIgoOTMERv10rkqrl00QiAsQRL4IAQkFn+KgACKdAVbUuaJqhdjyv7JVkRZf1qm1pesn1au3W9EwziKwvNWQ2xUQE5hElnpNm70XCQmlWKiF7zpSld6R5O1wzPbscSgF93mcM+lnS9UuhGFIOiH/4ir6CKGg/Girur6O0dNTC1GTxpWn2TuZcN4cfG47R+ytpOUSOlQxgAmD3vljnsydgBjrg+3MzSRIKLoJCghRxAYRKQj0PKvtQgbNFehd03VgCRO0kJyGqdWznaMautpuRbL3abnl1dLV9GFxZYzrTmsKyq2tFlI2ZeeSb4zSYuGdut+bVWtYycYpa8+QgvjIilyJGSG7Pbxz+fDkSO64kVad65ICcKM+Ghlwl7SaT+Ozqzh87V0Oyuocx8JPDJ6c+ihtHhO7lnbSdjyV9zwqsUdeOFfIHcpevP7pGVx6/fHyFrj0KchDc/2vxjYjBQc7AzoM5VHVcXLlncDlPQwQFRjgNJHRBW6CrQg+yoQlVOw+aIjTlPCjAzxoIgV3OiiE6Eyv3oow+zGjCCF0AnVTS1QuMoz6OhjiBRH0gcZ/8T4/r637Uyspau+G1m2O5OnKea1yNM0EJlBpZBxOold2aVx70U5ObaQ5bx3C62chKO4OaexC9YN0oYkikJdKbS71Di1u4uYRPy05E0Sc0nUQ81jtUbbWq+LTaUiuaLpTop73ZuBf/Mx6fY3YHLzKdi+PK/QGWmamkGY2iVe2Db+kMJSWGSYYyMgCEyGCLwZ1k+E4SUISKX+IqJ6RTSjhUIJwpBM6EzBg6JCihDgdFczAlsqm3MiDpg2HUrRsjB1vcol/2ogqM6yMW3Awafq9HYpD2E0G+l7hsotCxM5Sq47B6xfqwJHHzX3UW7nM63Gccan5leJigmajLvRWlDkJWppK6BjGMBcdyTbQcbMwjd9KIL/yhe3N19ea3AcHTQ790a6Bk0nv6HzGwzyt0g8PPQuSBTBkq9eeFOpgX+ogs3uPZ8YV0HLnKwtfW5KSFHxqFyGszWcAXhaT5enSxtz+t0We8vwVFv0A88hF41nMeuVQBl+OxVDJmxS2ReMtttcGX57KI2+zqriwUJP52/C67yxu/m+k8/pRPm/tne1Ozs/jr7GB2sa+HtBaepQwL/jwIHQl4UgcfH1QAz0RQUVXlBDNF7YKqqMvjuXgMoVjIlcfdTDKWjUtdgSgaYxxPQwafFdfjL0o7pKVQkxrR001ZcKw331lOQQZ/WgvWQx1+6ex3+DnbZ71nff4P1mMzzwAAeJxjYGRgYABinX0v98fz23xl4GZ+ARRhOKcZUQOhFWz+//+/kXkVMw+Qy8HABBIFAGrpDLwAAAB4nGNgZGBgDvqfxRDF/IKB4f9f5tUMQBEUwAMAjKIFvHicY37BwMC8ioGBMRWIvwDZkUC8AIgFoWwQLmBgYIoA4j0MDACthQZKAAAAAAAAAABqAMoA6AFqAjQCegKeAuADEANGA50AAAABAAAADABFAAMAAAAAAAIAEgAfAG4AAABbCZEAAAAAeJx1j8tOwkAYhc8gaIDEGPUBJi4MxFCg0Q0LQ0KEjXHBQhN3pZS2pHTIdIDwAL6Dax/G5/K0nRDjpc3MfP/57wDO8AmB8rvjKVmgTqvkCk5wb/mI+oPlKvnJco2eF8sN3ODVchMXeKNPVOu0lni3LHAuKpYrOBWXlo+oX1mukm8t13AsxpYbeBaPlpu4Fh8jtd7rOIyMbI3a0u31XTnbS0UpTr1EehsTKZ3JoVyo1ARJohxfrXah6sS+SrNpEG4STx/sA/Sd3iRIA+2ZYJ4XzLaha8xCLrRaybEtJddaLQPfOJEx60G3+70FRlBYYw+NGCEiGEi0qLb5uuihz1tixgjJyDIqRgoPCRUPG2ZEhSejPeRZ0EqpBoxIyA583ivsmKnQYbZfRGSYMiZkhYR19B/+30qf1XqYMC/l0czL+8wPE2bYMselajhHPosuekuMf0wluXXuW1LxqTvF7obqAF3+/2zxBVzeduQAAHicbYzbCsMgEER3WzVpYj9lofkk0ZVIvWEsJX/fUl97HmbgDAxcYLDAfzQAXlGgRIUTznjDBVfUeJehc3pMtqTEuYuQfVE1mpM2vXOsZEOzkZ20O9vn+kviVPupxqJHDae9OTr50t6mubkX4uxoE9/nF8AH4bUk2Eu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=') format('woff'), 6 | url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxtZXRhZGF0YT5Db3B5cmlnaHQgKEMpIDIwMTIgYnkgb3JpZ2luYWwgYXV0aG9ycyBAIGZvbnRlbGxvLmNvbTwvbWV0YWRhdGE+CjxkZWZzPgo8Zm9udCBpZD0id2dvLWljb25zIiBob3Jpei1hZHYteD0iMTAwMCIgPgo8Zm9udC1mYWNlIGZvbnQtZmFtaWx5PSJ3Z28taWNvbnMiIGZvbnQtd2VpZ2h0PSI0MDAiIGZvbnQtc3RyZXRjaD0ibm9ybWFsIiB1bml0cy1wZXItZW09IjEwMDAiIGFzY2VudD0iODUwIiBkZXNjZW50PSItMTUwIiAvPgo8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iMTAwMCIgLz4KPGdseXBoIGdseXBoLW5hbWU9ImZhc3QtZm9yd2FyZCIgdW5pY29kZT0iJiN4ZTgxNzsiIGQ9Ik04NjYgMzc0cTE0LTEwIDE0LTI0dC0xNC0yMmwtMzcyLTI0OHEtMjItMTQtMzctNnQtMTUgMzZsMCA0ODJxMCAyOCAxNSAzNnQzNy02eiBtLTQ1NCAwcTE0LTEwIDE0LTI0dC0xNC0yMmwtMzYwLTI0OHEtMjAtMTQtMzYtNnQtMTYgMzZsMCA0ODJxMCAyOCAxNiAzNnQzNi02eiIgaG9yaXotYWR2LXg9Ijg4MCIgLz4KPGdseXBoIGdseXBoLW5hbWU9InRvLWVuZC0xIiB1bmljb2RlPSImI3hlODFhOyIgZD0iTTQxMiAzNzRxMTQtMTAgMTQtMjQgMC0xMi0xNC0yMmwtMzYyLTIyOHEtMjItMTQtMzYtNXQtMTQgMzVsMCA0NDJxMCAyNiAxNCAzNXQzNi01eiBtMTE0IDI2OHE3NCAwIDc0LTU4bDAtNDY2cTAtNTgtNzQtNTgtNzYgMC03NiA1OGwwIDQ2NnEwIDU4IDc2IDU4eiIgaG9yaXotYWR2LXg9IjYwMCIgLz4KPGdseXBoIGdseXBoLW5hbWU9InBsYXktMSIgdW5pY29kZT0iJiN4ZTgwYzsiIGQ9Ik00ODYgMzc2cTE0LTEwIDE0LTI2IDAtMTQtMTQtMjRsLTQyOC0yNjZxLTI0LTE2LTQxLTZ0LTE3IDQwbDAgNTE0cTAgMzAgMTcgNDB0NDEtNnoiIGhvcml6LWFkdi14PSI1MDAiIC8+CjxnbHlwaCBnbHlwaC1uYW1lPSJjaGVjayIgdW5pY29kZT0iJiN4ZTgxMzsiIGQ9Ik03ODYgMzMxbDAtMTc3cTAtNjYtNDctMTE0dC0xMTQtNDdsLTQ2NCAwcS02NiAwLTExNCA0N3QtNDcgMTE0bDAgNDY0cTAgNjYgNDcgMTE0dDExNCA0N2w0NjQgMHEzNSAwIDY1LTE0IDgtNCAxMC0xM3QtNS0xNmwtMjctMjdxLTYtNi0xMy02LTIgMC01IDEtMTMgMy0yNSAzbC00NjQgMHEtMzcgMC02My0yNnQtMjYtNjNsMC00NjRxMC0zNyAyNi02M3Q2My0yNmw0NjQgMHEzNyAwIDYzIDI2dDI2IDYzbDAgMTQycTAgNyA1IDEybDM2IDM2cTYgNiAxMyA2IDMgMCA3LTIgMTEtNCAxMS0xNnogbTEyOSAyNzNsLTQ1NC00NTRxLTEzLTEzLTMyLTEzdC0zMiAxM2wtMjQwIDI0MHEtMTMgMTMtMTMgMzJ0MTMgMzJsNjEgNjFxMTMgMTMgMzIgMTN0MzItMTNsMTQ3LTE0NyAzNjEgMzYxcTEzIDEzIDMyIDEzdDMyLTEzbDYxLTYxcTEzLTEzIDEzLTMydC0xMy0zMnoiIGhvcml6LWFkdi14PSI5MjguNTcxIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0ibWVudSIgdW5pY29kZT0iJiN4ZTgxYjsiIGQ9Ik02NTAgNDAwcTIyIDAgMzYtMTV0MTQtMzUtMTUtMzUtMzUtMTVsLTYwMCAwcS0yMCAwLTM1IDE1dC0xNSAzNSAxNCAzNSAzNiAxNWw2MDAgMHogbS02MDAgMTAwcS0yMCAwLTM1IDE1dC0xNSAzNSAxNCAzNSAzNiAxNWw2MDAgMHEyMiAwIDM2LTE1dDE0LTM1LTE1LTM1LTM1LTE1bC02MDAgMHogbTYwMC0zMDBxMjIgMCAzNi0xNXQxNC0zNS0xNS0zNS0zNS0xNWwtNjAwIDBxLTIwIDAtMzUgMTV0LTE1IDM1IDE0IDM1IDM2IDE1bDYwMCAweiIgaG9yaXotYWR2LXg9IjcwMCIgLz4KPGdseXBoIGdseXBoLW5hbWU9ImNvbW1lbnQiIHVuaWNvZGU9IiYjeGU4MDA7IiBkPSJNNzgxIDY2MmwtNjI1IDBxLTIxIDAtMzctMTV0LTE2LTM2bDAtMzY1cTAtMjEgMTYtMzd0MzctMTZsMTU2IDAgMC05IDkgOSA0NjAgMHEyMSAwIDM3IDE2dDE2IDM3bDAgMzY1cTAgMjEtMTYgMzZ0LTM3IDE1eiBtMCAxMDVxNjUgMCAxMTEtNDZ0NDYtMTExbDAtMzY1cTAtNjUtNDYtMTExdC0xMTEtNDZsLTQxNiAwLTE1Ni0xNTYgMCAxNTYtNTMgMHEtNjUgMC0xMTEgNDZ0LTQ2IDExMWwwIDM2NXEwIDY1IDQ2IDExMXQxMTEgNDZsNjI1IDB6IiBob3Jpei1hZHYteD0iOTM4IiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0iaGVscC1jaXJjbGVkIiB1bmljb2RlPSImI3hlODBmOyIgZD0iTTUwMCA4MmwwIDEwN3EwIDgtNSAxM3QtMTMgNWwtMTA3IDBxLTggMC0xMy01dC01LTEzbDAtMTA3cTAtOCA1LTEzdDEzLTVsMTA3IDBxOCAwIDEzIDV0NSAxM3ogbTE0MyAzNzVxMCA0OS0zMSA5MXQtNzcgNjUtOTUgMjNxLTEzNiAwLTIwNy0xMTktOC0xMyA0LTIzbDc0LTU2cTQtMyAxMS0zIDkgMCAxNCA3IDMwIDM4IDQ4IDUxIDE5IDEzIDQ4IDEzIDI3IDAgNDgtMTV0MjEtMzNxMC0yMS0xMS0zNHQtMzgtMjVxLTM1LTE2LTY0LTQ4dC0yOS03MGwwLTIwcTAtOCA1LTEzdDEzLTVsMTA3IDBxOCAwIDEzIDV0NSAxM3EwIDExIDEyIDI4dDMwIDI4cTE4IDEwIDI3IDE2dDI2IDIwIDI1IDI3IDE2IDM0IDcgNDV6IG0yMTQtMTA3cTAtMTE3LTU3LTIxNXQtMTU2LTE1Ni0yMTUtNTctMjE1IDU3LTE1NiAxNTYtNTcgMjE1IDU3IDIxNSAxNTYgMTU2IDIxNSA1NyAyMTUtNTcgMTU2LTE1NiA1Ny0yMTV6IiBob3Jpei1hZHYteD0iODU3LjE0MyIgLz4KPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrLWVtcHR5IiB1bmljb2RlPSImI3hlODE0OyIgZD0iTTYyNSA3MDdsLTQ2NCAwcS0zNyAwLTYzLTI2dC0yNi02M2wwLTQ2NHEwLTM3IDI2LTYzdDYzLTI2bDQ2NCAwcTM3IDAgNjMgMjZ0MjYgNjNsMCA0NjRxMCAzNy0yNiA2M3QtNjMgMjZ6IG0xNjEtODlsMC00NjRxMC02Ni00Ny0xMTR0LTExNC00N2wtNDY0IDBxLTY2IDAtMTE0IDQ3dC00NyAxMTRsMCA0NjRxMCA2NiA0NyAxMTR0MTE0IDQ3bDQ2NCAwcTY2IDAgMTE0LTQ3dDQ3LTExNHoiIGhvcml6LWFkdi14PSI3ODUuNzE0IiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0iY2lyY2xlLWVtcHR5IiB1bmljb2RlPSImI3hlODE2OyIgZD0iTTQyOSA2NTRxLTgzIDAtMTUyLTQxdC0xMTAtMTEwLTQxLTE1MiA0MS0xNTIgMTEwLTExMCAxNTItNDEgMTUyIDQxIDExMCAxMTAgNDEgMTUyLTQxIDE1Mi0xMTAgMTEwLTE1MiA0MXogbTQyOS0zMDRxMC0xMTctNTctMjE1dC0xNTYtMTU2LTIxNS01Ny0yMTUgNTctMTU2IDE1Ni01NyAyMTUgNTcgMjE1IDE1NiAxNTYgMjE1IDU3IDIxNS01NyAxNTYtMTU2IDU3LTIxNXoiIGhvcml6LWFkdi14PSI4NTcuMTQzIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0iY2lyY2xlIiB1bmljb2RlPSImI3hlODE1OyIgZD0iTTg1NyAzNTBxMC0xMTctNTctMjE1dC0xNTYtMTU2LTIxNS01Ny0yMTUgNTctMTU2IDE1Ni01NyAyMTUgNTcgMjE1IDE1NiAxNTYgMjE1IDU3IDIxNS01NyAxNTYtMTU2IDU3LTIxNXoiIGhvcml6LWFkdi14PSI4NTcuMTQzIiAvPgo8Z2x5cGggZ2x5cGgtbmFtZT0iaW5mbyIgdW5pY29kZT0iJiN4ZTgwMTsiIGQ9Ik0zNTcgMTAwbDAtNzFxMC0xNS0xMS0yNXQtMjUtMTFsLTI4NiAwcS0xNSAwLTI1IDExdC0xMSAyNWwwIDcxcTAgMTUgMTEgMjV0MjUgMTFsMzYgMCAwIDIxNC0zNiAwcS0xNSAwLTI1IDExdC0xMSAyNWwwIDcxcTAgMTUgMTEgMjV0MjUgMTFsMjE0IDBxMTUgMCAyNS0xMXQxMS0yNWwwLTMyMSAzNiAwcTE1IDAgMjUtMTF0MTEtMjV6IG0tNzEgNjQzbDAtMTA3cTAtMTUtMTEtMjV0LTI1LTExbC0xNDMgMHEtMTUgMC0yNSAxMXQtMTEgMjVsMCAxMDdxMCAxNSAxMSAyNXQyNSAxMWwxNDMgMHExNSAwIDI1LTExdDExLTI1eiIgaG9yaXotYWR2LXg9IjM1Ny4xNDMiIC8+CjwvZm9udD4KPC9kZWZzPgo8L3N2Zz4=') format('svg'); 7 | font-weight: normal; 8 | font-style: normal; 9 | } 10 | 11 | /* Available icons: */ 12 | .wgo-icon-fast-forward:before { content: '\e817'; } 13 | .wgo-icon-to-end:before { content: '\e81a'; } 14 | .wgo-icon-play:before { content: '\e80c'; } 15 | .wgo-icon-check:before { content: '\e813'; } 16 | .wgo-icon-menu:before { content: '\e81b'; } 17 | .wgo-icon-comment:before { content: '\e800'; } 18 | .wgo-icon-help-circled:before { content: '\e80f'; } 19 | .wgo-icon-check-empty:before { content: '\e814'; } 20 | .wgo-icon-circle-empty:before { content: '\e816'; } 21 | .wgo-icon-circle:before { content: '\e815'; } 22 | .wgo-icon-info:before { content: '\e801'; } 23 | 24 | /*--- /Icons -----------------------------------------------------------------------*/ 25 | 26 | /*--- Basic ------------------------------------------------------------------------*/ 27 | 28 | .wgo-player-main { 29 | font-family: Calibri, Tahoma, Arial; 30 | color: black; 31 | margin: 0 auto; 32 | width: 100%; 33 | height: 100%; 34 | line-height: normal; 35 | font-size: 16px; 36 | position: relative; 37 | -webkit-tap-highlight-color: rgba(0,0,0,0); 38 | -webkit-tap-highlight-color: transparent; /* For some Androids */ 39 | } 40 | 41 | .wgo-player-main:after { 42 | content: ""; 43 | clear: both; 44 | display: block; 45 | } 46 | 47 | /*--- /Basic -----------------------------------------------------------------------*/ 48 | 49 | /*--- Regions ----------------------------------------------------------------------*/ 50 | 51 | .wgo-player-left, .wgo-player-center, .wgo-player-right { 52 | float: left; 53 | } 54 | 55 | .wgo-player-center { 56 | width: 100%; 57 | } 58 | 59 | .wgo-player-left-wrapper, .wgo-player-right-wrapper { 60 | height: 100%; 61 | position: relative; 62 | } 63 | 64 | /*--- /Regions ----------------------------------------------------------------------*/ 65 | 66 | /*--- Two columns modificatons ------------------------------------------------------*/ 67 | 68 | .wgo-twocols .wgo-player-left, .wgo-twocols .wgo-player-right { 69 | width: 30%; 70 | } 71 | 72 | .wgo-twocols .wgo-player-center { 73 | width: 70%; 74 | } 75 | 76 | /*--- /Two columns modificatons ------------------------------------------------------*/ 77 | 78 | /*--- Board --------------------------------------------------------------------------*/ 79 | 80 | .wgo-player-board { 81 | box-sizing: border-box; 82 | -moz-box-sizing: border-box; 83 | -webkit-box-sizing: border-box; 84 | } 85 | 86 | .wgo-board { 87 | margin: 0 auto; 88 | background-color: #CEB053; 89 | border-top: #F0E7A7 solid 1px; 90 | border-right: #D1A974 solid 1px; 91 | border-left: #CCB467 solid 1px; 92 | border-bottom: #665926 solid 3px; 93 | /*border-right: #665926 solid 3px;*/ 94 | border-radius: 3px; 95 | } 96 | 97 | /*--- /Board --------------------------------------------------------------------------*/ 98 | 99 | /*--- Box styles ----------------------------------------------------------------------*/ 100 | 101 | .wgo-box-wrapper { 102 | background: rgba(226,226,226,0.5); 103 | border: 1px solid rgba(200,200,200,0.5); 104 | box-sizing: border-box; 105 | -moz-box-sizing: border-box; 106 | } 107 | 108 | .wgo-box-title { 109 | margin: 0 10px; 110 | line-height: 40px; 111 | font-weight: bold; 112 | font-size: 20px; 113 | height: 40px; 114 | overflow: hidden; 115 | } 116 | 117 | /*--- /Box styles ----------------------------------------------------------------------*/ 118 | 119 | /*--- Player box -----------------------------------------------------------------------*/ 120 | 121 | .wgo-player-wrapper .wgo-box-title::after { 122 | content: ' '; 123 | float: right; 124 | margin-top: 10px; 125 | margin-right: 2px; 126 | width: 18px; 127 | height: 18px; 128 | border-radius: 9px; 129 | box-shadow: 1px 1px 1px 1px rgba(127, 127, 127, 0.3); 130 | } 131 | 132 | .wgo-player-wrapper.wgo-black .wgo-box-title::after { 133 | background: rgb(35,36,39); 134 | background: -moz-linear-gradient(-45deg, rgba(35,36,39,1) 0%, rgba(0,0,0,1) 100%); 135 | background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(35,36,39,1)), color-stop(100%,rgba(0,0,0,1))); 136 | background: -webkit-linear-gradient(-45deg, rgba(35,36,39,1) 0%,rgba(0,0,0,1) 100%); 137 | background: -o-linear-gradient(-45deg, rgba(35,36,39,1) 0%,rgba(0,0,0,1) 100%); 138 | background: -ms-linear-gradient(-45deg, rgba(35,36,39,1) 0%,rgba(0,0,0,1) 100%); 139 | background: linear-gradient(135deg, rgba(35,36,39,1) 0%,rgba(0,0,0,1) 100%); 140 | } 141 | 142 | .wgo-player-wrapper.wgo-white .wgo-box-title::after { 143 | background: rgb(255,255,255); 144 | background: -moz-linear-gradient(-45deg, rgba(255,255,255,1) 0%, rgba(246,246,246,1) 47%, rgba(237,237,237,1) 100%); 145 | background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(47%,rgba(246,246,246,1)), color-stop(100%,rgba(237,237,237,1))); 146 | background: -webkit-linear-gradient(-45deg, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); 147 | background: -o-linear-gradient(-45deg, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); 148 | background: -ms-linear-gradient(-45deg, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%);/ 149 | background: linear-gradient(135deg, rgba(255,255,255,1) 0%,rgba(246,246,246,1) 47%,rgba(237,237,237,1) 100%); 150 | } 151 | 152 | .wgo-player-info { 153 | padding: 0 2%; 154 | } 155 | 156 | .wgo-player-info-box-wrapper { 157 | width: 33.3%; 158 | display: inline-block; 159 | } 160 | 161 | .wgo-player-info-box { 162 | padding: 0px 1px; 163 | margin: 0 3%; 164 | border: 1px solid rgba(200,200,200,0.3); 165 | background-color: rgba(255,255,255,0.3); 166 | border-radius: 2px; 167 | font-size: 12px; 168 | text-align: center; 169 | } 170 | 171 | .wgo-player-info-title { 172 | font-size: 11px; 173 | overflow: hidden; 174 | } 175 | 176 | /* right and left modifications*/ 177 | 178 | .wgo-player-left .wgo-infobox, .wgo-player-right .wgo-infobox { 179 | overflow: hidden; 180 | position: absolute; 181 | top: 0; 182 | right: 0; 183 | left: 10px; 184 | } 185 | 186 | .wgo-player-right .wgo-player-wrapper, .wgo-player-left .wgo-player-wrapper { 187 | height: 85px; 188 | border-bottom: 0; 189 | } 190 | 191 | /* top and bottom modifications */ 192 | 193 | .wgo-player-top .wgo-player-info, .wgo-player-bottom .wgo-player-info { 194 | position: absolute; 195 | width: 40%; 196 | right: 0; 197 | top: 4px; 198 | bottom: 4px; 199 | overflow: hidden; 200 | text-align: right; 201 | } 202 | 203 | .wgo-player-top .wgo-player-wrapper, .wgo-player-bottom .wgo-player-wrapper { 204 | height: 40px; 205 | display: inline-block; 206 | width: 50%; 207 | margin: 0; 208 | position: relative; 209 | } 210 | 211 | .wgo-player-top .wgo-player-wrapper.wgo-black { 212 | border-left-width: 0; 213 | } 214 | 215 | .wgo-player-top .wgo-infobox .wgo-box-title, .wgo-player-bottom .wgo-infobox .wgo-box-title { 216 | position: absolute; 217 | right: 40%; 218 | left: 0; 219 | margin: 0 5px; 220 | z-index: 500; 221 | } 222 | 223 | .wgo-player-top .wgo-player-wrapper .wgo-box-title::after { 224 | float: left; 225 | margin-right: 7px; 226 | } 227 | 228 | /* S modification */ 229 | 230 | .wgo-small .wgo-player-top .wgo-player-info, .wgo-small .wgo-player-bottom .wgo-player-info, 231 | .wgo-xsmall .wgo-player-top .wgo-player-info, .wgo-xsmall .wgo-player-bottom .wgo-player-info { 232 | width: 30%; 233 | } 234 | 235 | .wgo-small .wgo-player-top .wgo-infobox .wgo-box-title, .wgo-small .wgo-player-bottom .wgo-infobox .wgo-box-title, 236 | .wgo-xsmall .wgo-player-top .wgo-infobox .wgo-box-title, .wgo-xsmall .wgo-player-bottom .wgo-infobox .wgo-box-title { 237 | right: 30%; 238 | } 239 | 240 | .wgo-small .wgo-player-info-box-wrapper, 241 | .wgo-xsmall .wgo-player-info-box-wrapper { 242 | width: 50%; 243 | } 244 | 245 | .wgo-small .wgo-player-info-box-wrapper:last-child, 246 | .wgo-xsmall .wgo-player-info-box-wrapper:last-child { 247 | display: none; 248 | } 249 | 250 | /* XS modification */ 251 | 252 | .wgo-xsmall .wgo-player-info-title { 253 | display: none; 254 | } 255 | 256 | .wgo-xsmall .wgo-player-wrapper { 257 | display: block; 258 | height: 30px; 259 | width: 100%; 260 | } 261 | 262 | .wgo-xsmall .wgo-infobox{ 263 | margin-bottom: 4px; 264 | } 265 | 266 | .wgo-xsmall .wgo-box-title { 267 | font-size: 15px; 268 | height: 30px; 269 | line-height: 30px; 270 | } 271 | 272 | .wgo-xsmall .wgo-player-wrapper.wgo-black { 273 | border-top: 0; 274 | border-left-width: 1px; 275 | } 276 | 277 | .wgo-xsmall .wgo-player-wrapper .wgo-box-title::after { 278 | content: ' '; 279 | margin-top: 7px; 280 | width: 14px; 281 | height: 14px; 282 | border-radius: 7px; 283 | } 284 | 285 | /*--- /Player box -----------------------------------------------------------------------*/ 286 | 287 | /*--- Comments box ----------------------------------------------------------------------*/ 288 | 289 | .wgo-comments-wrapper { 290 | overflow: auto; 291 | margin: 0 0 0 0; 292 | height: 100%; 293 | position: relative; 294 | box-sizing: border-box; 295 | } 296 | 297 | .wgo-comments-content { 298 | padding: 3px 5px; 299 | border: 1px solid rgba(200,200,200,0.3); 300 | background-color: rgba(255,255,255,0.3); 301 | border-radius: 2px; 302 | overflow-y: auto; 303 | } 304 | 305 | .wgo-comments-content p { 306 | font-size: 0.9em; 307 | margin: 0.5em 0; 308 | } 309 | 310 | .wgo-help { 311 | background-color: rgba(236, 226, 216, 0.90); 312 | padding: 1px 7px; 313 | margin-bottom: 5px; 314 | } 315 | 316 | .wgo-notification { 317 | background-color: rgba(16, 16, 16, 0.95); 318 | color: white; 319 | padding: 1px 7px; 320 | margin-bottom: 5px; 321 | } 322 | 323 | .wgo-commentbox .wgo-box-title { 324 | background-repeat: no-repeat; 325 | background-position: right center; 326 | background-size: 24px; 327 | } 328 | 329 | .wgo-commentbox .wgo-box-title::after { 330 | content: '\e800'; 331 | font-family: "wgo-icons"; 332 | float: right; 333 | font-weight: normal; 334 | font-size: 0.9em; 335 | padding-top: 4px; 336 | width: 22px; 337 | text-align: center; 338 | } 339 | 340 | .wgo-commentbox.wgo-gameinfo .wgo-box-title::after { 341 | content: '\e801'; 342 | padding-top: 2px; 343 | } 344 | 345 | .wgo-comments-nick { 346 | color: rgba(0,0,0,0.75); 347 | } 348 | 349 | a.wgo-move-link { 350 | text-decoration: none; 351 | border-bottom:1px dotted; 352 | } 353 | 354 | /* right and left modifications */ 355 | 356 | .wgo-player-right .wgo-comments-content, .wgo-player-left .wgo-comments-content { 357 | position: absolute; 358 | left: 10px; 359 | right: 10px; 360 | bottom: 10px; 361 | top: 40px; 362 | } 363 | 364 | .wgo-player-right .wgo-commentbox, .wgo-player-left .wgo-commentbox { 365 | position: absolute; 366 | bottom: 0; 367 | right: 0; 368 | left: 10px; 369 | top: 170px; 370 | } 371 | 372 | /* top and bottom modifications */ 373 | 374 | .wgo-player-top .wgo-comments-content, .wgo-player-bottom .wgo-comments-content { 375 | position: absolute; 376 | left: 40px; 377 | right: 0; 378 | top: 0; 379 | bottom: 0; 380 | 381 | } 382 | 383 | /* TODO: handle too long title */ 384 | .wgo-player-top .wgo-commentbox .wgo-box-title, .wgo-player-bottom .wgo-commentbox .wgo-box-title { 385 | transform: rotate(-90deg); 386 | -ms-transform: rotate(-90deg); 387 | -webkit-transform: rotate(-90deg); 388 | position: absolute; 389 | left: -50px; 390 | top: 55px; 391 | } 392 | 393 | .wgo-player-top .wgo-comments-wrapper, .wgo-player-bottom .wgo-comments-wrapper { 394 | margin-top: 10px; 395 | height: 150px; 396 | } 397 | 398 | /* game info table */ 399 | 400 | .wgo-commentbox .wgo-info-list { 401 | display: table; 402 | width: 100%; 403 | } 404 | 405 | .wgo-commentbox .wgo-info-title { 406 | display: table-caption; 407 | font-weight: 600; 408 | border-bottom: 2px solid rgba(200, 200, 200, 0.3); 409 | padding: 2px 0; 410 | } 411 | 412 | .wgo-commentbox .wgo-info-item { 413 | display: table-row; 414 | } 415 | 416 | .wgo-commentbox .wgo-info-label, .wgo-commentbox .wgo-info-value { 417 | display: table-cell; 418 | border-bottom: 1px solid rgba(200, 200, 200, 0.3); 419 | padding: 2px 15px 2px 0; 420 | } 421 | 422 | .wgo-commentbox .wgo-info-label { 423 | color: #000; 424 | } 425 | 426 | .wgo-commentbox .wgo-info-value { 427 | color: #4c4c4c; 428 | } 429 | 430 | /* in gameinfo, last row is without border*/ 431 | .wgo-commentbox.wgo-gameinfo .wgo-info-item:last-child .wgo-info-label, .wgo-commentbox.wgo-gameinfo .wgo-info-item:last-child .wgo-info-value { 432 | border-bottom: 0; 433 | } 434 | 435 | /*--- /Comments box ----------------------------------------------------------------------*/ 436 | 437 | /*--- Control box ------------------------------------------------------------------------*/ 438 | 439 | .wgo-player-control { 440 | box-sizing: border-box; 441 | -moz-box-sizing: border-box; 442 | -webkit-box-sizing: border-box; 443 | } 444 | 445 | .wgo-control-wrapper { 446 | width: 100%; 447 | text-align: center; 448 | } 449 | 450 | .wgo-ctrlgroup-left { 451 | float: left; 452 | } 453 | 454 | .wgo-ctrlgroup-right { 455 | float: right; 456 | } 457 | 458 | .wgo-ctrlgroup-control { 459 | margin: 0 auto; 460 | } 461 | 462 | /* button widget */ 463 | 464 | button.wgo-button { 465 | border: 1px solid rgba(200,200,200,0.3); 466 | border-radius: 2px; 467 | background-color: rgba(255,255,255,0.3); 468 | width: 44px; 469 | height: 44px; 470 | margin: 0 3px; 471 | vertical-align: middle; 472 | } 473 | 474 | button.wgo-button:not([disabled]):hover, 475 | input[type="text"].wgo-player-mn-value:focus { 476 | background-color: rgba(255,255,255,0.45); 477 | border: 1px solid rgba(100,100,100,0.3); 478 | box-shadow: 0 0 20px 0 rgba(150,150,150,0.5); 479 | } 480 | 481 | button.wgo-button.wgo-selected { 482 | background-color: rgba(255,255,255,0.6); 483 | border: 1px solid rgba(0,0,0,0.5); 484 | } 485 | 486 | button.wgo-button.wgo-selected:hover { 487 | background-color: rgba(255,255,255,0.7); 488 | border: 1px solid rgba(0,0,0,0.7); 489 | } 490 | 491 | .wgo-button::before { 492 | font-family: "wgo-icons"; 493 | font-size: 36px; 494 | display: inline-block; 495 | } 496 | 497 | .wgo-button[disabled]::before, input[type="text"].wgo-player-mn-value[disabled] { 498 | color: rgba(64,64,64,0.5); 499 | } 500 | 501 | .wgo-button:not([disabled]):active::before { 502 | position: relative; 503 | top: 1px; 504 | left: 1px; 505 | } 506 | 507 | .wgo-button-first::before, .wgo-button-multiprev::before, .wgo-button-previous::before { 508 | transform: scaleX(-1); 509 | -moz-transform: scaleX(-1); 510 | -webkit-transform: scaleX(-1); 511 | -ms-transform: scaleX(-1); 512 | } 513 | 514 | .wgo-button-first::before { 515 | content: '\e81a'; 516 | } 517 | 518 | .wgo-button-multiprev::before { 519 | content: '\e817'; 520 | margin-left: -5px; 521 | } 522 | 523 | .wgo-button-previous::before { 524 | content: '\e80c'; 525 | } 526 | 527 | .wgo-button-next::before { 528 | content: '\e80c'; 529 | } 530 | 531 | .wgo-button-multinext::before { 532 | content: '\e817'; 533 | } 534 | 535 | .wgo-button-last::before { 536 | content: '\e81a'; 537 | } 538 | 539 | .wgo-button-menu::before { 540 | content: '\e81b'; 541 | font-size: 25px; 542 | font-weight: normal; 543 | padding-top: 5px; 544 | } 545 | .wgo-button-about::before { 546 | content: '\e80f'; 547 | font-size: 30px; 548 | font-weight: normal; 549 | } 550 | 551 | /* move number widget */ 552 | 553 | input[type="text"].wgo-player-mn-value { 554 | border: 1px solid rgba(200,200,200,0.3); 555 | border-radius: 2px; 556 | background-color: rgba(255,255,255,0.3); 557 | width: 28px; 558 | font-weight: bold; 559 | font-size: 15px; 560 | text-align: center; 561 | display: inline-block; 562 | vertical-align: middle; 563 | outline: 0; 564 | } 565 | 566 | .wgo-player-mn-wrapper { 567 | display: inline-block; 568 | width: 38px; 569 | text-align: center; 570 | } 571 | 572 | /* top and bottom modifications */ 573 | 574 | .wgo-player-top .wgo-player-control { 575 | padding-bottom: 5px; 576 | } 577 | 578 | .wgo-player-bottom .wgo-player-control { 579 | padding-top: 5px; 580 | } 581 | 582 | /* display less buttons */ 583 | 584 | .wgo-440 .wgo-button-multiprev, 585 | .wgo-440 .wgo-button-multinext { 586 | display: none; 587 | } 588 | 589 | .wgo-340 .wgo-button-multiprev, 590 | .wgo-340 .wgo-button-multinext, 591 | .wgo-340 .wgo-button-first, 592 | .wgo-340 .wgo-button-last { 593 | display: none; 594 | } 595 | 596 | /*--- /Control box ------------------------------------------------------------------------*/ 597 | 598 | /*--- Control menu -------------------------------------------------------------------------*/ 599 | 600 | .wgo-player-menu { 601 | border: 1px solid rgba(0,0,0,0.5); 602 | z-index: 900; 603 | margin-top: -1px; 604 | box-shadow: 0 0 20px 0 rgba(127,127,127,0.5); 605 | font-weight: bold; 606 | color: #292929; 607 | text-align: left; 608 | } 609 | 610 | .wgo-menu-item { 611 | padding: 5px 10px 5px 5px; 612 | background-color: rgba(255,255,255,0.85); 613 | cursor: pointer; 614 | background-repeat: no-repeat; 615 | background-position: left center; 616 | background-size: 25px; 617 | } 618 | 619 | .wgo-menu-item:not(.wgo-disabled):hover { 620 | background-color: rgba(225,225,225,0.85); 621 | } 622 | 623 | .wgo-menu-item::before { 624 | content: ' '; 625 | font-family: "wgo-icons"; 626 | color: #000; 627 | width: 20px; 628 | display: inline-block; 629 | font-weight: normal; 630 | } 631 | 632 | .wgo-menu-item.wgo-selected::before { 633 | content: '\e813'; 634 | } 635 | 636 | .wgo-menu-item.wgo-disabled { 637 | color: #888; 638 | cursor: Default; 639 | } 640 | 641 | .wgo-menu-item.wgo-disabled::before { 642 | color: #888; 643 | } 644 | 645 | /*--- /Control menu -------------------------------------------------------------------------*/ 646 | 647 | /*--- Overlay window ----------------------------------------------------------------------*/ 648 | 649 | .wgo-info-overlay { 650 | position: absolute; 651 | z-index: 1000; 652 | } 653 | 654 | .wgo-info-message { 655 | margin: 15% auto; 656 | min-height: 50%; 657 | max-height: 70%; 658 | min-width: 50%; 659 | max-width: 70%; 660 | background-color: rgba(0,0,0,0.95); 661 | overflow: auto; 662 | padding: 20px; 663 | box-sizing:border-box; 664 | -moz-box-sizing:border-box; 665 | -webkit-box-sizing:border-box; 666 | color: #d9d9d9; 667 | box-shadow: 0px 0px 50px 5px rgb(0,0,0); 668 | border: 1px solid #333; 669 | position: relative; 670 | } 671 | 672 | .wgo-info-message a { 673 | color: #fff !important; 674 | } 675 | 676 | .wgo-info-message h1 { 677 | font-size: 2em !important; 678 | color: #fff !important; 679 | font-weight: bold !important; 680 | margin: 0 0 20px 0 !important; 681 | padding: 0 !important; 682 | } 683 | 684 | .wgo-info-close { 685 | position: absolute; 686 | top: 5px; 687 | right: 10px; 688 | font-size: 10px; 689 | } 690 | 691 | /*--- /Overlay window ----------------------------------------------------------------------*/ 692 | 693 | /*--- Permalinks ---------------------------------------------------------------------------*/ 694 | 695 | input[type="text"].wgo-permalink { 696 | padding: 7px 10px !important; 697 | border: 1px solid white !important; 698 | color: white !important; 699 | width: 100% !important; 700 | background-color: rgba(0,0,0,0) !important; 701 | box-sizing: border-box; 702 | -moz-box-sizing: border-box; 703 | -webkit-box-sizing: border-box; 704 | } 705 | 706 | /*--- /Permalinks ---------------------------------------------------------------------------*/ 707 | -------------------------------------------------------------------------------- /web_test/wgo/wgo.min.js: -------------------------------------------------------------------------------- 1 | /*! MIT license, more info: wgo.waltheri.net *//* 2 | Copyright (c) 2013 Jan Prokop 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this 5 | software and associated documentation files (the "Software"), to deal in the Software 6 | without restriction, including without limitation the rights to use, copy, modify, merge, 7 | publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 8 | to whom the Software is furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all copies or 11 | substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 14 | BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 15 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 16 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 17 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 18 | */ 19 | (function(A,x){var q=document.getElementsByTagName("script"),h={version:"2.3.1",B:1,W:-1,ERROR_REPORT:!0,DIR:q[q.length-1].src.split("?")[0].split("/").slice(0,-1).join("/")+"/",lang:"en",i18n:{en:{}}};h.opera=-1!=navigator.userAgent.search(/(opera)(?:.*version)?[ \/]([\w.]+)/i);h.webkit=-1!=navigator.userAgent.search(/(webkit)[ \/]([\w.]+)/i);h.msie=-1!=navigator.userAgent.search(/(msie) ([\w.]+)/i);h.mozilla=-1!=navigator.userAgent.search(/(mozilla)(?:.*? rv:([\w.]+))?/i)&&!h.webkit&&!h.msie;h.t= 20 | function(a){var b=h.i18n[h.lang][a]||h.i18n.en[a];if(b){for(var c=1;c/g,">"):a};var l=function(a,b){b=b||{};for(var c in b)this[c]=b[c];for(c in h.Board.default)this[c]===x&&(this[c]=h.Board.default[c]);for(c in l.themes.default)this.theme[c]===x&&(this.theme[c]=l.themes.default[c]);Array.isArray(this.size)&&2==this.size.length?(this.sizex=this.size[0],this.sizey=this.size[1]):this.sizey=this.sizex=this.size;E(this);this.init();a.appendChild(this.element);this.pixelRatio=A.devicePixelRatio||1;this.width&&this.height? 22 | this.setDimensions(this.width,this.height):this.width?this.setWidth(this.width):this.height&&this.setHeight(this.height)};l.themes={};l.themes.old={shadowColor:"rgba(32,32,32,0.5)",shadowTransparentColor:"rgba(32,32,32,0)",shadowBlur:0,shadowSize:function(a){return a.shadowSize},markupBlackColor:"rgba(255,255,255,0.8)",markupWhiteColor:"rgba(0,0,0,0.8)",markupNoneColor:"rgba(0,0,0,0.8)",markupLinesWidth:function(a){return a.autoLineWidth?a.stoneRadius/7:a.lineWidth},gridLinesWidth:1,gridLinesColor:function(a){return"rgba(0,0,0,"+ 23 | Math.min(1,a.stoneRadius/15)+")"},starColor:"#000",starSize:function(a){return a.starSize*(a.width/300+1)},stoneSize:function(a){return a.stoneSize*Math.min(a.fieldWidth,a.fieldHeight)/2},coordinatesColor:"rgba(0,0,0,0.7)",font:function(a){return a.font},linesShift:.5};l.themes.default={shadowColor:"rgba(62,32,32,0.5)",shadowTransparentColor:"rgba(62,32,32,0)",shadowBlur:function(a){return.1*a.stoneRadius},shadowSize:1,markupBlackColor:"rgba(255,255,255,0.9)",markupWhiteColor:"rgba(0,0,0,0.7)",markupNoneColor:"rgba(0,0,0,0.7)", 24 | markupLinesWidth:function(a){return a.stoneRadius/8},gridLinesWidth:function(a){return a.stoneRadius/15},gridLinesColor:"#654525",starColor:"#531",starSize:function(a){return a.stoneRadius/8+1},stoneSize:function(a){return Math.min(a.fieldWidth,a.fieldHeight)/2},coordinatesColor:"#531",variationColor:"rgba(0,32,128,0.8)",font:"calibri",linesShift:.25};var m=function(a,b){return"function"==typeof b.theme[a]?b.theme[a](b):b.theme[a]};q={draw:function(a,b){var c=b.getX(a.x);a=b.getY(a.y);var e=b.stoneRadius; 25 | this.beginPath();var d=m("shadowBlur",b);e=Math.max(0,e-.5);var f=this.createRadialGradient(c-b.ls,a-b.ls,e-1-d,c-b.ls,a-b.ls,e+d);f.addColorStop(0,m("shadowColor",b));f.addColorStop(1,m("shadowTransparentColor",b));this.fillStyle=f;this.arc(c-b.ls,a-b.ls,e+d,0,2*Math.PI,!0);this.fill()},clear:function(a,b){var c=b.getX(a.x);a=b.getY(a.y);var e=b.stoneRadius;this.clearRect(c-1.1*e-b.ls,a-1.1*e-b.ls,2.2*e,2.2*e)}};var v=function(a,b,c){return a.obj_arr[b][c][0].c==h.B?m("markupBlackColor",a):a.obj_arr[b][c][0].c== 26 | h.W?m("markupWhiteColor",a):m("markupNoneColor",a)},K=function(a,b,c){return a.obj_arr[b][c][0]&&a.obj_arr[b][c][0].c==h.W||a.obj_arr[b][c][0].c==h.B},E=function(a){var b=a.sizey>a.sizex?.5*(a.sizex-a.sizey):0,c=a.sizex>a.sizey?.5*(a.sizey-a.sizex):0;a.tx=a.section.left+b;a.ty=a.section.top+c;a.bx=a.sizex-1-a.section.right-b;a.by=a.sizey-1-a.section.bottom-c},B,F=function(a){for(var b=a.angle,c=a.angle,e=0;et?Math.atan((g-p)/(f-t)):f==t?Math.PI/2:Math.atan((g-p)/(f-t))-Math.PI;r*=k;k=Math.sin(n)*r;var C=Math.cos(n)*r;r=t+k;n=p-C;k=f+k;C=g-C;d.moveTo(t,p);d.bezierCurveTo(r,n,k,C,f,g);d.stroke()}};l.drawHandlers={NORMAL:{stone:{draw:function(a,b){var c=b.getX(a.x),e= 28 | b.getY(a.y),d=b.stoneRadius;a.c==h.W?(a=this.createRadialGradient(c-2*d/5,e-2*d/5,d/3,c-d/5,e-d/5,5*d/5),a.addColorStop(0,"#fff"),a.addColorStop(1,"#aaa")):(a=this.createRadialGradient(c-2*d/5,e-2*d/5,1,c-d/5,e-d/5,4*d/5),a.addColorStop(0,"#666"),a.addColorStop(1,"#000"));this.beginPath();this.fillStyle=a;this.arc(c-b.ls,e-b.ls,Math.max(0,d-.5),0,2*Math.PI,!0);this.fill()}},shadow:q},PAINTED:{stone:{draw:function(a,b){var c=b.getX(a.x),e=b.getY(a.y),d=b.stoneRadius;if(a.c==h.W){var f=this.createRadialGradient(c- 29 | 2*d/5,e-2*d/5,2,c-d/5,e-d/5,4*d/5);f.addColorStop(0,"#fff");f.addColorStop(1,"#ddd")}else f=this.createRadialGradient(c-2*d/5,e-2*d/5,1,c-d/5,e-d/5,4*d/5),f.addColorStop(0,"#111"),f.addColorStop(1,"#000");this.beginPath();this.fillStyle=f;this.arc(c-b.ls,e-b.ls,Math.max(0,d-.5),0,2*Math.PI,!0);this.fill();this.beginPath();this.lineWidth=d/6;a.c==h.W?(this.strokeStyle="#999",this.arc(c+d/8,e+d/8,d/2,0,Math.PI/2,!1)):(this.strokeStyle="#ccc",this.arc(c-d/8,e-d/8,d/2,Math.PI,1.5*Math.PI));this.stroke()}}, 30 | shadow:q},REALISTIC:{stone:{draw:function(a,b){var c=b.getX(a.x),e=b.getY(a.y),d=b.stoneRadius,f=b.whiteStoneGraphic.length,g=b.blackStoneGraphic.length;"undefined"===typeof this.randIndex&&(this.randIndex=Math.ceil(1E5*Math.random()));var k=function(){b.redraw()},p=function(n){return"string"===typeof n||!n.complete||"undefined"!=typeof n.naturalWidth&&0==n.naturalWidth?!1:!0};a.c==h.W?(f=this.randIndex%f,"string"===typeof b.whiteStoneGraphic[f]&&(g=new Image,g.onload=k,g.src=b.whiteStoneGraphic[f], 31 | b.whiteStoneGraphic[f]=g),p(b.whiteStoneGraphic[f])?this.drawImage(b.whiteStoneGraphic[f],c-d,e-d,2*d,2*d):l.drawHandlers.SHELL.stone.draw.call(this,a,b)):(f=this.randIndex%g,"string"===typeof b.blackStoneGraphic[f]&&(g=new Image,g.onload=k,g.src=b.blackStoneGraphic[f],b.blackStoneGraphic[f]=g),p(b.blackStoneGraphic[f])?this.drawImage(b.blackStoneGraphic[f],c-d,e-d,2*d,2*d):l.drawHandlers.SHELL.stone.draw.call(this,a,b))}},shadow:{draw:function(a,b){var c=b.getX(a.x);a=b.getY(a.y);var e=b.stoneRadius; 32 | this.beginPath();e=Math.max(0,.85*(e-.5));var d=this.createRadialGradient(c-1,a- -5,e-1-5,c-1,a- -5,e+5);d.addColorStop(0,m("shadowColor",b));d.addColorStop(1,m("shadowTransparentColor",b));this.fillStyle=d;this.arc(c-1,a- -5,e+5,0,2*Math.PI,!0);this.fill()},clear:function(a,b){var c=b.getX(a.x);a=b.getY(a.y);b=b.stoneRadius;this.clearRect(c-1.1*b-1,a-1.1*b- -5,2.2*b,2.2*b)}}},GLOW:{stone:{draw:function(a,b){var c=b.getX(a.x),e=b.getY(a.y),d=b.stoneRadius;a.c==h.W?(a=this.createRadialGradient(c-2* 33 | d/5,e-2*d/5,d/3,c-d/5,e-d/5,8*d/5),a.addColorStop(0,"#fff"),a.addColorStop(1,"#666")):(a=this.createRadialGradient(c-2*d/5,e-2*d/5,1,c-d/5,e-d/5,3*d/5),a.addColorStop(0,"#555"),a.addColorStop(1,"#000"));this.beginPath();this.fillStyle=a;this.arc(c-b.ls,e-b.ls,Math.max(0,d-.5),0,2*Math.PI,!0);this.fill()}},shadow:q},SHELL:{stone:{draw:function(a,b){var c=b.stoneRadius;B=B||Math.ceil(9999999*Math.random());var e=b.getX(a.x);var d=b.getY(a.y);var f=a.c==h.W?"#aaa":"#000";this.beginPath();this.fillStyle= 34 | f;this.arc(e-b.ls,d-b.ls,Math.max(0,c-.5),0,2*Math.PI,!0);this.fill();a.c==h.W?(f=B%(3+a.x*b.sizey+a.y)%3,a=b.sizex*b.sizey+a.x*b.sizey+a.y,a=2/a*(B%a),0==f?F({ctx:this,x:e,y:d,radius:c,angle:a,lines:[.1,.12,.11,.1,.09,.09,.09,.09],factor:.25,thickness:1.75}):1==f?F({ctx:this,x:e,y:d,radius:c,angle:a,lines:[.1,.09,.08,.07,.06,.06,.06,.06,.06,.06,.06],factor:.2,thickness:1.5}):F({ctx:this,x:e,y:d,radius:c,angle:a,lines:[.12,.14,.13,.12,.12,.12],factor:.3,thickness:2}),f=this.createRadialGradient(e- 35 | 2*c/5,d-2*c/5,c/3,e-c/5,d-c/5,5*c/5),f.addColorStop(0,"rgba(255,255,255,0.9)"),f.addColorStop(1,"rgba(255,255,255,0)")):(f=this.createRadialGradient(e+.4*c,d+.4*c,0,e+.5*c,d+.5*c,c),f.addColorStop(0,"rgba(32,32,32,1)"),f.addColorStop(1,"rgba(0,0,0,0)"),this.beginPath(),this.fillStyle=f,this.arc(e-b.ls,d-b.ls,Math.max(0,c-.5),0,2*Math.PI,!0),this.fill(),f=this.createRadialGradient(e-.4*c,d-.4*c,1,e-.5*c,d-.5*c,1.5*c),f.addColorStop(0,"rgba(64,64,64,1)"),f.addColorStop(1,"rgba(0,0,0,0)"));this.beginPath(); 36 | this.fillStyle=f;this.arc(e-b.ls,d-b.ls,Math.max(0,c-.5),0,2*Math.PI,!0);this.fill()}},shadow:q},MONO:{stone:{draw:function(a,b){var c=b.getX(a.x),e=b.getY(a.y),d=b.stoneRadius;b=m("markupLinesWidth",b)||1;this.fillStyle=a.c==h.W?"white":"black";this.beginPath();this.arc(c,e,Math.max(0,d-b),0,2*Math.PI,!0);this.fill();this.lineWidth=b;this.strokeStyle="black";this.stroke()}}},CR:{stone:{draw:function(a,b){var c=b.getX(a.x),e=b.getY(a.y),d=b.stoneRadius;this.strokeStyle=a.c||v(b,a.x,a.y);this.lineWidth= 37 | a.lineWidth||m("markupLinesWidth",b)||1;this.beginPath();this.arc(c-b.ls,e-b.ls,d/2,0,2*Math.PI,!0);this.stroke()}}},LB:{stone:{draw:function(a,b){var c=b.getX(a.x),e=b.getY(a.y),d=b.stoneRadius,f=a.font||m("font",b)||"";this.fillStyle=a.c||v(b,a.x,a.y);this.font=1==a.text.length?Math.round(1.5*d)+"px "+f:2==a.text.length?Math.round(1.2*d)+"px "+f:Math.round(d)+"px "+f;this.beginPath();this.textBaseline="middle";this.textAlign="center";this.fillText(a.text,c,e,2*d)}},grid:{draw:function(a,b){if(!K(b, 38 | a.x,a.y)&&!a._nodraw){var c=b.getX(a.x);a=b.getY(a.y);b=b.stoneRadius;this.clearRect(c-b,a-b,2*b,2*b)}},clear:function(a,b){if(!K(b,a.x,a.y)){a._nodraw=!0;b.grid.clear();b.grid.draw(b);for(var c=0;c=c.sizex?-1:f,g>=c.sizey?-1:g,d)}};this.element.addEventListener(a,e,!0);this.listeners.push(e)},removeEventListener:function(a,b){for(var c=0;ca||0>b||a>=this.sizex||b>=this.sizey?x:this.schema[a*this.sizey+b]},set:function(a,b,c){this.schema[a*this.sizey+b]=c;return this},clear:function(){for(var a=0;ac||c>=a.sizex||0>e||e>=a.sizey)return!0;if(0==a.get(c,e))return!1;if(1==b.get(c,e)||a.get(c,e)==-d)return!0;b.set(c,e,!0);return z(a,b,c,e-1,d)&&z(a,b,c,e+1,d)&&z(a,b,c-1,e,d)&&z(a,b,c+1,e,d)},u=function(a,b,c,e){var d=[];if(0<=b&&b=p;n--)if(this.stack[n].get(a,b)==d.get(a,b)){k=!0;for(var r=0;r