multi-puzzle-solver 1.0.3__tar.gz → 1.0.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of multi-puzzle-solver might be problematic. Click here for more details.

Files changed (138) hide show
  1. {multi_puzzle_solver-1.0.3/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-1.0.6}/PKG-INFO +1024 -387
  2. multi_puzzle_solver-1.0.3/PKG-INFO → multi_puzzle_solver-1.0.6/README.md +5872 -5261
  3. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/pyproject.toml +1 -1
  4. multi_puzzle_solver-1.0.3/README.md → multi_puzzle_solver-1.0.6/src/multi_puzzle_solver.egg-info/PKG-INFO +5898 -5235
  5. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/multi_puzzle_solver.egg-info/SOURCES.txt +6 -0
  6. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/__init__.py +7 -1
  7. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/core/utils.py +17 -1
  8. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/core/utils_visualizer.py +257 -201
  9. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/aquarium/aquarium.py +8 -23
  10. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/battleships/battleships.py +39 -53
  11. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/binairo/binairo.py +2 -2
  12. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/black_box/black_box.py +6 -70
  13. multi_puzzle_solver-1.0.6/src/puzzle_solver/puzzles/connect_the_dots/connect_the_dots.py +50 -0
  14. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/filling/filling.py +11 -34
  15. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/flood_it/parse_map/parse_map.py +0 -1
  16. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/galaxies/galaxies.py +110 -110
  17. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/heyawake/heyawake.py +6 -2
  18. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/kakurasu/kakurasu.py +5 -13
  19. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/kakuro/kakuro.py +6 -2
  20. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/lits/lits.py +6 -4
  21. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/mosaic/mosaic.py +8 -18
  22. multi_puzzle_solver-1.0.6/src/puzzle_solver/puzzles/nonograms/nonograms.py +121 -0
  23. multi_puzzle_solver-1.0.6/src/puzzle_solver/puzzles/nonograms/nonograms_colored.py +221 -0
  24. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/norinori/norinori.py +5 -10
  25. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/nurikabe/nurikabe.py +6 -2
  26. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/palisade/palisade.py +4 -3
  27. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/pearl/pearl.py +15 -27
  28. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/pipes/pipes.py +2 -1
  29. multi_puzzle_solver-1.0.6/src/puzzle_solver/puzzles/range/range.py +69 -0
  30. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/rectangles/rectangles.py +4 -2
  31. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/shingoki/shingoki.py +2 -2
  32. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/singles/singles.py +6 -2
  33. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/slant/slant.py +13 -19
  34. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/slitherlink/slitherlink.py +2 -2
  35. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/star_battle/star_battle.py +13 -7
  36. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/stitches/stitches.py +8 -21
  37. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/sudoku/sudoku.py +5 -11
  38. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/tapa/tapa.py +6 -2
  39. multi_puzzle_solver-1.0.6/src/puzzle_solver/puzzles/tents/tents.py +80 -0
  40. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/tracks/tracks.py +19 -66
  41. multi_puzzle_solver-1.0.6/src/puzzle_solver/puzzles/twiddle/twiddle.py +112 -0
  42. multi_puzzle_solver-1.0.6/src/puzzle_solver/puzzles/unruly/unruly.py +54 -0
  43. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/yin_yang/yin_yang.py +3 -10
  44. multi_puzzle_solver-1.0.6/tests/test_battleships.py +120 -0
  45. multi_puzzle_solver-1.0.6/tests/test_connect_the_dots.py +140 -0
  46. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_flood_it.py +3 -1
  47. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_heyawake.py +2 -2
  48. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_light_up.py +31 -0
  49. multi_puzzle_solver-1.0.6/tests/test_nonograms_colored.py +213 -0
  50. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_pearl.py +2 -2
  51. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_pipes.py +29 -0
  52. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_range.py +16 -16
  53. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_slant.py +19 -19
  54. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_stitches.py +3 -3
  55. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_sudoku.py +1 -0
  56. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_tents.py +28 -1
  57. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_tracks.py +4 -4
  58. multi_puzzle_solver-1.0.6/tests/test_twiddle.py +45 -0
  59. multi_puzzle_solver-1.0.3/src/puzzle_solver/puzzles/nonograms/nonograms.py +0 -126
  60. multi_puzzle_solver-1.0.3/src/puzzle_solver/puzzles/range/range.py +0 -105
  61. multi_puzzle_solver-1.0.3/src/puzzle_solver/puzzles/tents/tents.py +0 -110
  62. multi_puzzle_solver-1.0.3/src/puzzle_solver/puzzles/unruly/unruly.py +0 -86
  63. multi_puzzle_solver-1.0.3/tests/test_battleships.py +0 -63
  64. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/setup.cfg +0 -0
  65. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/multi_puzzle_solver.egg-info/dependency_links.txt +0 -0
  66. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/multi_puzzle_solver.egg-info/requires.txt +0 -0
  67. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/multi_puzzle_solver.egg-info/top_level.txt +0 -0
  68. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/core/utils_ortools.py +0 -0
  69. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/binairo/binairo_plus.py +0 -0
  70. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/bridges/bridges.py +0 -0
  71. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/chess_range/chess_melee.py +0 -0
  72. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/chess_range/chess_range.py +0 -0
  73. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/chess_range/chess_solo.py +0 -0
  74. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/dominosa/dominosa.py +0 -0
  75. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/flip/flip.py +0 -0
  76. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/flood_it/flood_it.py +0 -0
  77. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/galaxies/parse_map/parse_map.py +0 -0
  78. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/guess/guess.py +0 -0
  79. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/inertia/inertia.py +0 -0
  80. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/inertia/parse_map/parse_map.py +0 -0
  81. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/inertia/tsp.py +0 -0
  82. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/keen/keen.py +0 -0
  83. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/light_up/light_up.py +0 -0
  84. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/magnets/magnets.py +0 -0
  85. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/map/map.py +0 -0
  86. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/minesweeper/minesweeper.py +0 -0
  87. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/shakashaka/shakashaka.py +0 -0
  88. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/signpost/signpost.py +0 -0
  89. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/slant/parse_map/parse_map.py +0 -0
  90. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/star_battle/star_battle_shapeless.py +0 -0
  91. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/stitches/parse_map/parse_map.py +0 -0
  92. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/thermometers/thermometers.py +0 -0
  93. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/towers/towers.py +0 -0
  94. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/undead/undead.py +0 -0
  95. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/unequal/unequal.py +0 -0
  96. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/puzzles/yin_yang/parse_map/parse_map.py +0 -0
  97. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/src/puzzle_solver/utils/visualizer.py +0 -0
  98. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_aquarium.py +0 -0
  99. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_binairo.py +0 -0
  100. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_binairo_plus.py +0 -0
  101. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_black_box.py +0 -0
  102. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_bridges.py +0 -0
  103. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_chess_melee.py +0 -0
  104. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_chess_range.py +0 -0
  105. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_chess_solo.py +0 -0
  106. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_dominosa.py +0 -0
  107. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_filling.py +0 -0
  108. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_flip.py +0 -0
  109. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_galaxies.py +0 -0
  110. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_guess.py +0 -0
  111. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_inertia.py +0 -0
  112. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_kakurasu.py +0 -0
  113. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_kakuro.py +0 -0
  114. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_keen.py +0 -0
  115. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_lits.py +0 -0
  116. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_magnets.py +0 -0
  117. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_map.py +0 -0
  118. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_minesweeper.py +0 -0
  119. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_mosaic.py +0 -0
  120. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_nonograms.py +0 -0
  121. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_norinori.py +0 -0
  122. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_nurikabe.py +0 -0
  123. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_palisade.py +0 -0
  124. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_rectangles.py +0 -0
  125. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_shakashaka.py +0 -0
  126. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_shingoki.py +0 -0
  127. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_signpost.py +0 -0
  128. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_singles.py +0 -0
  129. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_slitherlink.py +0 -0
  130. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_star_battle.py +0 -0
  131. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_tapa.py +0 -0
  132. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_thermometers.py +0 -0
  133. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_towers.py +0 -0
  134. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_undead.py +0 -0
  135. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_unequal.py +0 -0
  136. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_unruly.py +0 -0
  137. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_utils.py +0 -0
  138. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.6}/tests/test_yin_yang.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multi-puzzle-solver
3
- Version: 1.0.3
4
- Summary: Efficient solvers for numerous popular and esoteric logic puzzles using CP-SAT
3
+ Version: 1.0.6
4
+ Summary: Efficient solvers for countless (50+) types of puzzles (like Sudoku, Minesweeper, etc.) with a simple python API.
5
5
  Author: Ar-Kareem
6
6
  Project-URL: Homepage, https://github.com/Ar-Kareem/puzzle_solver
7
7
  Project-URL: Repository, https://github.com/Ar-Kareem/puzzle_solver
@@ -396,6 +396,18 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
396
396
  </a>
397
397
  </td>
398
398
  </tr>
399
+ <tr>
400
+ <td align="center">
401
+ <a href="#connect-the-dots-puzzle-type-56"><b>Connect the Dots</b><br><br>
402
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_solved.png" alt="Connect the Dots" width="140">
403
+ </a>
404
+ </td>
405
+ <td align="center">
406
+ <a href="#nonograms-colored-puzzle-type-57"><b>Nonograms Colored</b><br><br>
407
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nonograms_colored_solved.png" alt="Nonograms Colored" width="140">
408
+ </a>
409
+ </td>
410
+ </tr>
399
411
  </table>
400
412
 
401
413
  </div>
@@ -465,6 +477,8 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
465
477
  - [Sudoku Killer (Puzzle Type #53)](#sudoku-killer-puzzle-type-53)
466
478
  - [Flood It (Puzzle Type #54)](#flood-it-puzzle-type-54)
467
479
  - [Pipes (Puzzle Type #55)](#pipes-puzzle-type-55)
480
+ - [Connect the Dots (Puzzle Type #56)](#connect-the-dots-puzzle-type-56)
481
+ - [Nonograms Colored (Puzzle Type #57)](#nonograms-colored-puzzle-type-57)
468
482
  - [Why SAT / CP-SAT?](#why-sat--cp-sat)
469
483
  - [Testing](#testing)
470
484
  - [Contributing](#contributing)
@@ -478,7 +492,7 @@ The puzzles that have solvers implemented are listed below. Each puzzle has a si
478
492
 
479
493
  ## Nonograms (Puzzle Type #1)
480
494
 
481
- Called "Pattern" in the website.
495
+ Also known as Hanjie, Paint by Numbers, Griddlers, Pic-a-Pix, Picross, and Pattern.
482
496
 
483
497
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/pattern.html)
484
498
 
@@ -538,21 +552,39 @@ solutions = binst.solve_and_print()
538
552
  **Script Output**
539
553
  ```python
540
554
  Solution found
541
- B B B B B B B . B B B . . . .
542
- B B B B B B B . . . . . B . B
543
- B B . . . . . . . . . B B B .
544
- B B . . . . . . . . . . B B B
545
- B B B . . . . . . . . . . B B
546
- B . . . B . B . . B . . . B B
547
- B . . . . . B B B B B B . . B
548
- B . . . . . B B B B B B B B B
549
- . . . . . B B B B B B B B B .
550
- . . . . . B B . B B B B . . .
551
- . . . . B B B B B B B B . . .
552
- B B B B B B B B B B B . . . .
553
- B B B B B B B . . B . B . . .
554
- . B B B B . . . . B B B . . .
555
- . B B B . . . . . . . B B . .
555
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
556
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
557
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
558
+ 0│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │ │ │ │
559
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
560
+ 1│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │ │▒▒▒│ │▒▒▒│
561
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
562
+ 2│▒▒▒│▒▒▒│ │ │ │ │ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│ │
563
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
564
+ 3│▒▒▒│▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│
565
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
566
+ 4│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒│▒▒▒│
567
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
568
+ 5│▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │ │▒▒▒│ │ │ │▒▒▒│▒▒▒│
569
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
570
+ 6│▒▒▒│ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│
571
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
572
+ 7│▒▒▒│ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│
573
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
574
+ 8│ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │
575
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
576
+ 9│ │ │ │ │ │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │
577
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
578
+ 10│ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │
579
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
580
+ 11│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │
581
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
582
+ 12│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │ │ │
583
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
584
+ 13│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │▒▒▒│▒▒▒│▒▒▒│ │ │ │
585
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
586
+ 14│ │▒▒▒│▒▒▒│▒▒▒│ │ │ │ │ │ │ │▒▒▒│▒▒▒│ │ │
587
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
556
588
  Solutions found: 1
557
589
  status: OPTIMAL
558
590
  Time taken: 0.04 seconds
@@ -566,7 +598,7 @@ Time taken: 0.04 seconds
566
598
 
567
599
  ## Sudoku (Puzzle Type #2)
568
600
 
569
- Called "Solo" in the website.
601
+ Also known as Number Place and Solo.
570
602
 
571
603
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/solo.html)
572
604
 
@@ -628,22 +660,41 @@ assert len(solutions) == 1, f'unique solutions != 1, == {len(solutions)}'
628
660
  **Script Output**
629
661
  ```python
630
662
  Solution found
631
- [['g' '7' '5' '4' '9' '1' 'c' 'e' 'd' 'f' 'b' '8' '2' '6' '3' 'a']
632
- ['3' '9' 'd' 'e' 'f' 'a' '7' 'g' '2' '6' '4' 'c' '5' '1' '8' 'b']
633
- ['b' 'c' '1' '8' '5' '6' '3' '2' 'e' '9' '7' 'a' '4' 'g' 'f' 'd']
634
- ['f' '6' '2' 'a' 'b' '8' 'd' '4' '1' '3' '5' 'g' 'c' '7' '9' 'e']
635
- ['4' 'a' 'e' '3' '8' 'f' '1' '6' '5' 'b' '2' '9' 'g' 'd' 'c' '7']
636
- ['6' 'g' 'f' 'c' 'e' 'd' '2' '5' '4' '7' 'a' '1' '3' '9' 'b' '8']
637
- ['d' '1' '9' '2' 'a' '3' 'b' '7' 'c' 'g' '8' '6' 'e' 'f' '5' '4']
638
- ['5' 'b' '8' '7' 'g' '4' '9' 'c' 'f' 'd' '3' 'e' '1' 'a' '2' '6']
639
- ['2' 'e' 'a' 'b' 'd' 'c' 'g' '1' '3' '8' '9' 'f' '7' '4' '6' '5']
640
- ['8' '4' '6' '1' '3' 'b' 'e' 'f' '7' '5' 'c' 'd' 'a' '2' 'g' '9']
641
- ['9' 'f' '3' 'g' '7' '5' '8' 'a' '6' '4' 'e' '2' 'd' 'b' '1' 'c']
642
- ['c' 'd' '7' '5' '4' '2' '6' '9' 'g' 'a' '1' 'b' '8' '3' 'e' 'f']
643
- ['7' '5' 'g' 'd' '2' '9' 'a' 'b' '8' 'c' 'f' '3' '6' 'e' '4' '1']
644
- ['a' '2' 'b' '6' 'c' 'e' '5' '3' '9' '1' 'd' '4' 'f' '8' '7' 'g']
645
- ['e' '8' 'c' 'f' '1' 'g' '4' 'd' 'b' '2' '6' '7' '9' '5' 'a' '3']
646
- ['1' '3' '4' '9' '6' '7' 'f' '8' 'a' 'e' 'g' '5' 'b' 'c' 'd' '2']]
663
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
664
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
665
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
666
+ 0│ g 7 5 4 9 1 c e │ d │ f │ b │ 8 │ 2 │ 6 │ 3 │ a │
667
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
668
+ 1│ 3 9 d │ e │ f │ a │ 7 │ g │ 2 6 │ 4 c │ 5 │ 1 8 b
669
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
670
+ 2│ b c 1 8 5 │ 6 │ 3 │ 2 │ e 9 │ 7 │ a 4 │ g │ f │ d │
671
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
672
+ 3│ f │ 6 │ 2 │ a │ b │ 8 │ d │ 4 1 3 5 g c 7 9 │ e │
673
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
674
+ 4│ 4 a │ e │ 3 │ 8 │ f │ 1 │ 6 │ 5 b │ 2 9 g d c 7
675
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
676
+ 5│ 6 g │ f │ c e │ d │ 2 │ 5 │ 4 │ 7 │ a │ 1 │ 3 9 b 8
677
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
678
+ 6│ d │ 1 │ 9 │ 2 │ a │ 3 b 7 c │ g │ 8 6 │ e f │ 5 4
679
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
680
+ 7│ 5 │ b │ 8 │ 7 │ g │ 4 │ 9 │ c │ f │ d │ 3 │ e │ 1 │ a │ 2 │ 6 │
681
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
682
+ 8│ 2 │ e │ a │ b │ d │ c │ g │ 1 │ 3 │ 8 │ 9 │ f │ 7 │ 4 │ 6 │ 5 │
683
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
684
+ 9│ 8 │ 4 │ 6 │ 1 │ 3 │ b │ e │ f │ 7 │ 5 │ c │ d │ a │ 2 │ g │ 9 │
685
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
686
+ 10│ 9 │ f │ 3 │ g │ 7 │ 5 │ 8 │ a │ 6 │ 4 │ e │ 2 │ d │ b │ 1 │ c │
687
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
688
+ 11│ c │ d │ 7 │ 5 │ 4 │ 2 │ 6 │ 9 │ g │ a │ 1 │ b │ 8 │ 3 │ e │ f │
689
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
690
+ 12│ 7 │ 5 │ g │ d │ 2 │ 9 │ a │ b │ 8 │ c │ f │ 3 │ 6 │ e │ 4 │ 1 │
691
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
692
+ 13│ a │ 2 │ b │ 6 │ c │ e │ 5 │ 3 │ 9 │ 1 │ d │ 4 │ f │ 8 │ 7 │ g │
693
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
694
+ 14│ e │ 8 │ c │ f │ 1 │ g │ 4 │ d │ b │ 2 │ 6 │ 7 │ 9 │ 5 │ a │ 3 │
695
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
696
+ 15│ 1 │ 3 │ 4 │ 9 │ 6 │ 7 │ f │ 8 │ a │ e │ g │ 5 │ b │ c │ d │ 2 │
697
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
647
698
  Solutions found: 1
648
699
  status: OPTIMAL
649
700
  Time taken: 0.04 seconds
@@ -798,6 +849,8 @@ Time taken: 0.02 seconds
798
849
 
799
850
  ## Light Up (Puzzle Type #5)
800
851
 
852
+ Also called Akari.
853
+
801
854
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/lightup.html)
802
855
 
803
856
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/lightup.html#lightup)
@@ -919,26 +972,47 @@ binst = solver.Board(board=board, sides={'top': top, 'side': side})
919
972
  solutions = binst.solve_and_print()
920
973
  ```
921
974
  **Script Output**
922
- ```python
975
+
976
+ (Note: ▲ represents a tent)
977
+
978
+ ```
923
979
  Solution found
924
- [[' ' 'T' 'E' ' ' ' ' ' ' ' ' 'E' 'T' ' ' 'T' 'E' 'T' 'E' ' ']
925
- [' ' ' ' ' ' ' ' 'T' 'E' ' ' 'T' ' ' 'T' ' ' ' ' 'T' ' ' ' ']
926
- ['E' 'T' 'E' 'T' ' ' ' ' ' ' 'E' ' ' 'E' ' ' ' ' 'E' ' ' 'E']
927
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'T' ' ' ' ' ' ' 'T' ' ' 'T']
928
- [' ' 'E' ' ' ' ' 'E' ' ' 'E' ' ' 'E' ' ' ' ' ' ' 'E' ' ' ' ']
929
- [' ' 'T' ' ' ' ' 'T' ' ' 'T' ' ' ' ' 'T' 'E' ' ' 'T' 'T' 'E']
930
- [' ' 'T' ' ' ' ' 'T' 'E' ' ' 'E' 'T' ' ' ' ' ' ' 'E' ' ' ' ']
931
- [' ' 'E' ' ' ' ' ' ' ' ' 'T' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
932
- [' ' ' ' ' ' ' ' 'E' 'T' 'E' ' ' ' ' 'E' 'T' ' ' 'E' 'T' 'E']
933
- ['E' ' ' 'E' 'T' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'T' ' ' 'T']
934
- ['T' ' ' ' ' ' ' ' ' ' ' ' ' 'T' 'E' ' ' ' ' 'T' 'E' ' ' 'E']
935
- ['T' ' ' ' ' 'E' 'T' 'E' 'T' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
936
- ['E' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'T' 'E' 'T' 'E' ' ' 'E' 'T']
937
- [' ' 'T' 'E' ' ' 'E' 'T' 'E' ' ' ' ' ' ' ' ' ' ' 'T' ' ' ' ']
938
- ['E' 'T' ' ' ' ' 'T' ' ' ' ' ' ' 'E' 'T' 'E' 'T' 'E' ' ' ' ']]
980
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
981
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
982
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
983
+ 0│ │ | │ │ │ │ │ | │ │ | | │ │
984
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
985
+ 1│ │ │ │ │ | │ │ | │ │ | │ │ │ | │ │ │
986
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
987
+ 2│ | | │ │ │ │ │ │ │ │ │ │ │
988
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
989
+ 3│ │ │ │ │ │ │ │ │ | │ │ │ │ | │ │ |
990
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
991
+ 4│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
992
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
993
+ 5│ │ | │ │ │ | │ │ | │ │ │ | │ │ | |
994
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
995
+ 6│ │ | │ │ │ | │ ▲ │ │ ▲ │ | │ │ │ │ ▲ │ │ │
996
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
997
+ 7│ │ ▲ │ │ │ │ │ | │ │ │ │ │ │ │ │ │
998
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
999
+ 8│ │ │ │ │ ▲ │ | │ ▲ │ │ │ ▲ │ | │ │ ▲ │ | │ ▲ │
1000
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1001
+ 9│ ▲ │ │ ▲ │ | │ │ │ │ │ │ │ │ │ | │ │ | │
1002
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1003
+ 10│ | │ │ │ │ │ │ │ | │ ▲ │ │ │ | │ ▲ │ │ ▲ │
1004
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1005
+ 11│ | │ │ │ ▲ │ | │ ▲ │ | │ │ │ │ │ │ │ │ │
1006
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1007
+ 12│ ▲ │ │ │ │ │ │ │ │ | │ ▲ │ | │ ▲ │ │ ▲ │ | │
1008
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1009
+ 13│ │ | │ ▲ │ │ ▲ │ | │ ▲ │ │ │ │ │ │ | │ │ │
1010
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1011
+ 14│ ▲ │ | │ │ │ | │ │ │ │ ▲ │ | │ ▲ │ | │ ▲ │ │ │
1012
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
939
1013
  Solutions found: 1
940
1014
  status: OPTIMAL
941
- Time taken: 0.02 seconds
1015
+ Time taken: 0.01 seconds
942
1016
  ```
943
1017
 
944
1018
  **Solved puzzle**
@@ -949,6 +1023,8 @@ Time taken: 0.02 seconds
949
1023
 
950
1024
  ## Filling (Puzzle Type #7)
951
1025
 
1026
+ Also known as Fillomino
1027
+
952
1028
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/filling.html)
953
1029
 
954
1030
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/filling.html#filling)
@@ -989,15 +1065,24 @@ assert len(solutions) == 1, f'unique solutions != 1, == {len(solutions)}'
989
1065
  **Script Output**
990
1066
  ```python
991
1067
  Solution found
992
- [[4 4 2 2 4 2 2]
993
- [4 4 7 4 4 3 3]
994
- [7 7 7 3 4 5 3]
995
- [7 6 6 3 3 5 5]
996
- [7 7 6 6 4 5 5]
997
- [1 6 6 1 4 4 4]]
1068
+
1069
+ 0 1 2 3 4 5 6
1070
+ ┌───────┬───────┬───┬───────┐
1071
+ 0│ 4 4 2 2 4 │ 2 2 │
1072
+ │ ├───┬───┘ ├───────┤
1073
+ 1 4 4 7 4 4 │ 3 3 │
1074
+ ├───────┘ ├───┐ ├───┐ │
1075
+ 2│ 7 7 7 │ 3 │ 4 │ 5 │ 3 │
1076
+ │ ┌───────┤ └───┤ └───┤
1077
+ 3│ 7 │ 6 6 │ 3 3 │ 5 5 │
1078
+ │ └───┐ └───┬───┤ │
1079
+ 4│ 7 7 │ 6 6 │ 4 │ 5 5 │
1080
+ ├───┬───┘ ┌───┤ └───────┤
1081
+ 5│ 1 │ 6 6 │ 1 │ 4 4 4 │
1082
+ └───┴───────┴───┴───────────┘
998
1083
  Solutions found: 1
999
1084
  status: OPTIMAL
1000
- Time taken: 0.10 seconds
1085
+ Time taken: 0.15 seconds
1001
1086
  ```
1002
1087
 
1003
1088
  **Solved puzzle**
@@ -1008,6 +1093,8 @@ Time taken: 0.10 seconds
1008
1093
 
1009
1094
  ## Keen (Puzzle Type #8)
1010
1095
 
1096
+ Also known as KenKen
1097
+
1011
1098
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/keen.html)
1012
1099
 
1013
1100
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/keen.html#keen)
@@ -1152,7 +1239,7 @@ Time taken: 0.03 seconds
1152
1239
 
1153
1240
  ## Singles (Puzzle Type #10)
1154
1241
 
1155
- Also known as "Hitori",
1242
+ Also known as Hitori.
1156
1243
 
1157
1244
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/singles.html)
1158
1245
 
@@ -1375,7 +1462,7 @@ Time taken: 0.03 seconds
1375
1462
 
1376
1463
  ## Range (Puzzle Type #13)
1377
1464
 
1378
- Also known as "Kurodoko"
1465
+ Also known as Kurodoko.
1379
1466
 
1380
1467
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/range.html)
1381
1468
 
@@ -1406,17 +1493,17 @@ Code to utilize this package and solve the puzzle:
1406
1493
  import numpy as np
1407
1494
  from puzzle_solver import range_solver as solver
1408
1495
  clues = np.array([
1409
- [-1, 4, 2, -1, -1, 3, -1, -1, -1, 8, -1, -1, -1, -1, 6, -1],
1410
- [-1, -1, -1, -1, -1, 13, -1, 18, -1, -1, 14, -1, -1, 22, -1, -1],
1411
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, -1, -1, -1, -1],
1412
- [-1, -1, -1, -1, 12, -1, 11, -1, -1, -1, 9, -1, -1, -1, -1, -1],
1413
- [7, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1414
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1415
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, 12, -1, -1, -1, -1, -1, 5],
1416
- [-1, -1, -1, -1, -1, 9, -1, -1, -1, 9, -1, 4, -1, -1, -1, -1],
1417
- [-1, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1418
- [-1, -1, 10, -1, -1, 7, -1, -1, 13, -1, 10, -1, -1, -1, -1, -1],
1419
- [-1, 7, -1, -1, -1, -1, 6, -1, -1, -1, 6, -1, -1, 13, 5, -1],
1496
+ [' ', '4 ', '2 ', ' ', ' ', '3 ', ' ', ' ', ' ', '8 ', ' ', ' ', ' ', ' ', '6 ', ' '],
1497
+ [' ', ' ', ' ', ' ', ' ', '13', ' ', '18', ' ', ' ', '14', ' ', ' ', '22', ' ', ' '],
1498
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '12', ' ', ' ', ' ', ' '],
1499
+ [' ', ' ', ' ', ' ', '12', ' ', '11', ' ', ' ', ' ', '9 ', ' ', ' ', ' ', ' ', ' '],
1500
+ ['7 ', ' ', ' ', ' ', ' ', ' ', '6 ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
1501
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
1502
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '12', ' ', ' ', ' ', ' ', ' ', '5 '],
1503
+ [' ', ' ', ' ', ' ', ' ', '9 ', ' ', ' ', ' ', '9 ', ' ', '4 ', ' ', ' ', ' ', ' '],
1504
+ [' ', ' ', ' ', ' ', '6 ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
1505
+ [' ', ' ', '10', ' ', ' ', '7 ', ' ', ' ', '13', ' ', '10', ' ', ' ', ' ', ' ', ' '],
1506
+ [' ', '7 ', ' ', ' ', ' ', ' ', '6 ', ' ', ' ', ' ', '6 ', ' ', ' ', '13', '5 ', ' '],
1420
1507
  ])
1421
1508
  binst = solver.Board(clues)
1422
1509
  solutions = binst.solve_and_print()
@@ -1424,20 +1511,34 @@ solutions = binst.solve_and_print()
1424
1511
  **Script Output**
1425
1512
  ```python
1426
1513
  Solution:
1427
- B . . B . . B . B . B . B . . .
1428
- . . B . . . . . . . . . . . . B
1429
- B . . . . B . . . . . . . . . .
1430
- . B . B . . . . . . . B . . . .
1431
- . . . . . B . . B . B . . . B .
1432
- . . B . . . . . . . . B . . . B
1433
- B . . . B . B . . . . . B . . .
1434
- . . . . . . . B . . B . . . B .
1435
- . B . . . B . . . B . B . . . .
1436
- . . . . . . B . . . . . . . . B
1437
- B . . . . . . B . . . . B . . .
1514
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
1515
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1516
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
1517
+ 0│▒▒▒│ 4 2 │▒▒▒│ │ 3 │▒▒▒│ │▒▒▒│ 8 │▒▒▒│ │▒▒▒│ │ 6 │ │
1518
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1519
+ 1│ │ │▒▒▒│ │ │13 │ │18 │ │ │14 │ │ │22 │ │▒▒▒│
1520
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1521
+ 2│▒▒▒│ │ │ │ │▒▒▒│ │ │ │ │ │12 │ │ │ │ │
1522
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1523
+ 3│ │▒▒▒│ │▒▒▒│12 │ │11 │ │ │ │ 9 │▒▒▒│ │ │ │ │
1524
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1525
+ 4│ 7 │ │ │ │ │▒▒▒│ 6 │ │▒▒▒│ │▒▒▒│ │ │ │▒▒▒│ │
1526
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1527
+ 5│ │ │▒▒▒│ │ │ │ │ │ │ │ │▒▒▒│ │ │ │▒▒▒│
1528
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1529
+ 6│▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │ │12 │ │ │▒▒▒│ │ │ 5 │
1530
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1531
+ 7│ │ │ │ │ │ 9 │ │▒▒▒│ │ 9 │▒▒▒│ 4 │ │ │▒▒▒│ │
1532
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1533
+ 8│ │▒▒▒│ │ │ 6 │▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │ │ │ │
1534
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1535
+ 9│ │ │10 │ │ │ 7 │▒▒▒│ │13 │ │10 │ │ │ │ │▒▒▒│
1536
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1537
+ 10│▒▒▒│ 7 │ │ │ │ │ 6 │▒▒▒│ │ │ 6 │ │▒▒▒│13 │ 5 │ │
1538
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
1438
1539
  Solutions found: 1
1439
1540
  status: OPTIMAL
1440
- Time taken: 0.04 seconds
1541
+ Time taken: 0.07 seconds
1441
1542
  ```
1442
1543
 
1443
1544
  **Solved puzzle**
@@ -1554,23 +1655,40 @@ solutions = binst.solve_and_print()
1554
1655
  **Script Output**
1555
1656
  ```python
1556
1657
  Solution found
1557
- [['W' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'B' 'W' 'B' 'W' 'W' 'B']
1558
- ['B' 'B' 'W' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'W' 'B' 'B' 'W']
1559
- ['W' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'B' 'W' 'B']
1560
- ['W' 'B' 'W' 'B' 'B' 'W' 'W' 'B' 'W' 'W' 'B' 'W' 'B' 'B']
1561
- ['B' 'W' 'B' 'W' 'B' 'W' 'B' 'W' 'B' 'B' 'W' 'W' 'B' 'W']
1562
- ['B' 'W' 'W' 'B' 'W' 'B' 'B' 'W' 'B' 'B' 'W' 'B' 'W' 'W']
1563
- ['W' 'B' 'B' 'W' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'B']
1564
- ['B' 'W' 'B' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'B' 'W']
1565
- ['B' 'B' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'W' 'W']
1566
- ['W' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'B']
1567
- ['B' 'B' 'W' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'W']
1568
- ['B' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'W' 'B' 'W' 'B' 'W' 'B']
1569
- ['W' 'B' 'W' 'B' 'B' 'W' 'W' 'B' 'W' 'B' 'B' 'W' 'W' 'B']
1570
- ['W' 'B' 'W' 'B' 'W' 'B' 'W' 'B' 'B' 'W' 'W' 'B' 'B' 'W']]
1658
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1659
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3
1660
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
1661
+ 0│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │ │▒▒▒│
1662
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1663
+ 1│▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│ │
1664
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1665
+ 2│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│
1666
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1667
+ 3│ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│
1668
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1669
+ 4│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │
1670
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1671
+ 5│▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │ │
1672
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1673
+ 6│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│
1674
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1675
+ 7│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │
1676
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1677
+ 8│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│ │ │
1678
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1679
+ 9│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│
1680
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1681
+ 10│▒▒▒│▒▒▒│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │
1682
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1683
+ 11│▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│
1684
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1685
+ 12│ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│
1686
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1687
+ 13│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│▒▒▒│ │
1688
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
1571
1689
  Solutions found: 1
1572
1690
  status: OPTIMAL
1573
- Time taken: 0.01 seconds
1691
+ Time taken: 0.02 seconds
1574
1692
  ```
1575
1693
 
1576
1694
  **Solved puzzle**
@@ -1625,24 +1743,43 @@ solutions = binst.solve_and_print()
1625
1743
  ```
1626
1744
  **Script Output**
1627
1745
  ```python
1628
- [[' ' ' ' ' ' ' ' ' ' ' ' '┏━' '━━' '━━' '━━' '━━' '━━' '━┒' '┏━' '━┒']
1629
- [' ' ' ' ' ' ' ' ' ' ' ' '┃ ' ' ' '┏━' '━━' '━┒' ' ' '┗━' '━┛' '┃ ']
1630
- [' ' ' ' ' ' ' ' ' ' ' ' '┃ ' ' ' '┃ ' ' ' '┗━' '━━' '━━' '━━' '━┛']
1631
- [' ' ' ' '┏━' '━┒' '┏━' '━┒' '┃ ' '┏━' '━┛' ' ' ' ' ' ' ' ' ' ' ' ']
1632
- ['┏━' '━━' '━┛' '┃ ' '┃ ' '┗━' '━┛' '┗━' '━┒' ' ' ' ' ' ' ' ' '┏━' '━┒']
1633
- ['┗━' '━━' '━┒' '┗━' '━┛' ' ' ' ' '┏━' '━┛' ' ' ' ' ' ' '┏━' '━┛' '┃ ']
1634
- [' ' ' ' '┃ ' ' ' ' ' ' ' '┏━' '━┛' '┏━' '━━' '━━' '━━' '━┛' ' ' '┃ ']
1635
- [' ' '┏━' '━┛' ' ' ' ' ' ' '┗━' '━━' '━┛' ' ' ' ' ' ' '┏━' '━━' '━┛']
1636
- [' ' '┗━' '━┒' ' ' ' ' ' ' ' ' ' ' '┏━' '━━' '━━' '━┒' '┃ ' '┏━' '━┒']
1637
- ['┏━' '━━' '━┛' ' ' ' ' ' ' ' ' ' ' '┃ ' '┏━' '━┒' '┗━' '━┛' '┃ ' '┃ ']
1638
- ['┃ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '┗━' '━┛' '┗━' '━┒' ' ' '┃ ' '┃ ']
1639
- ['┃ ' ' ' ' ' ' ' ' ' ' ' ' ' '┏━' '━━' '━━' '━━' '━┛' '┏━' '━┛' '┃ ']
1640
- ['━┛' ' ' ' ' ' ' ' ' ' ' ' ' '┗━' '━━' '━━' '━━' '━━' '━┛' '┏━' '━┛']
1641
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '┗━' '━┒']
1642
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '┏━' '━┛']]
1746
+ Solution found
1747
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
1748
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
1749
+
1750
+ 0 . . . . . . ┌───────────────────────┐ ┌───┐
1751
+ │ │ │ │
1752
+ 1 . . . . . . │ . ┌───────┐ . └───┘ │
1753
+ │ │ │ │
1754
+ 2 . . . . . . │ . │ . └───────────────┘
1755
+ │ │
1756
+ 3 . . ┌───┐ ┌───┐ │ ┌───┘ . . . . . .
1757
+ │ │ │ │ │ │
1758
+ 4 ┌───────┘ │ │ └───┘ └───┐ . . . . ┌───┐
1759
+ │ │ │ │ │ │
1760
+ 5 └───────┐ └───┘ . . ┌───┘ . . . ┌───┘ │
1761
+ │ │ │ │
1762
+ 6 . . │ . . . ┌───┘ ┌───────────────┘ . │
1763
+ │ │ │ │
1764
+ 7 . ┌───┘ . . . └───────┘ . . . ┌───────┘
1765
+ │ │
1766
+ 8 . └───┐ . . . . . ┌───────────┐ │ ┌───┐
1767
+ │ │ │ │ │ │
1768
+ 9 ┌───────┘ . . . . . │ ┌───┐ └───┘ │ │
1769
+ │ │ │ │ │ │
1770
+ 10 │ . . . . . . . └───┘ └───┐ . │ │
1771
+ │ │ │ │
1772
+ 11 │ . . . . . . ┌───────────────┘ ┌───┘ │
1773
+ │ │ │ │
1774
+ 12──┘ . . . . . . └───────────────────┘ ┌───┘
1775
+
1776
+ 13 . . . . . . . . . . . . . └───┐
1777
+
1778
+ 14 . . . . . . . . . . . . . ┌───┘
1779
+
1643
1780
  Solutions found: 1
1644
1781
  status: OPTIMAL
1645
- Time taken: 1.04 seconds
1782
+ Time taken: 1.01 seconds
1646
1783
  ```
1647
1784
 
1648
1785
  **Solved puzzle**
@@ -1697,24 +1834,42 @@ solutions = binst.solve_and_print()
1697
1834
  **Script Output**
1698
1835
  ```python
1699
1836
  Solution found
1700
- [[' ' 'B' ' ' ' ' ' ' ' ' ' ' ' ' 'B' ' ' 'B' ' ' ' ' 'B' 'B']
1701
- [' ' 'B' ' ' ' ' 'B' 'B' ' ' 'B' 'B' ' ' 'B' ' ' ' ' 'B' 'B']
1702
- [' ' 'B' 'B' ' ' 'B' 'B' ' ' ' ' ' ' 'B' 'B' ' ' ' ' ' ' 'B']
1703
- ['B' 'B' 'B' 'B' ' ' ' ' 'B' 'B' 'B' ' ' ' ' ' ' 'B' ' ' 'B']
1704
- [' ' 'B' 'B' ' ' ' ' 'B' ' ' 'B' 'B' 'B' ' ' 'B' 'B' 'B' ' ']
1705
- [' ' 'B' ' ' 'B' ' ' 'B' 'B' ' ' 'B' ' ' ' ' 'B' 'B' 'B' 'B']
1706
- ['B' ' ' 'B' ' ' ' ' 'B' 'B' 'B' 'B' ' ' ' ' ' ' ' ' ' ' ' ']
1707
- [' ' ' ' 'B' ' ' 'B' 'B' 'B' 'B' 'B' ' ' ' ' ' ' 'B' ' ' 'B']
1708
- [' ' 'B' 'B' ' ' ' ' ' ' ' ' 'B' 'B' 'B' 'B' 'B' ' ' 'B' ' ']
1709
- ['B' 'B' 'B' 'B' 'B' 'B' ' ' ' ' ' ' 'B' 'B' ' ' ' ' 'B' ' ']
1710
- [' ' 'B' ' ' 'B' 'B' ' ' 'B' ' ' 'B' 'B' ' ' ' ' ' ' 'B' ' ']
1711
- ['B' 'B' ' ' ' ' 'B' ' ' ' ' 'B' 'B' 'B' ' ' 'B' 'B' 'B' 'B']
1712
- [' ' ' ' 'B' ' ' 'B' ' ' 'B' ' ' 'B' 'B' 'B' 'B' 'B' ' ' 'B']
1713
- [' ' ' ' 'B' 'B' ' ' ' ' 'B' ' ' 'B' 'B' ' ' 'B' 'B' ' ' ' ']
1714
- ['B' ' ' 'B' ' ' ' ' 'B' 'B' ' ' ' ' ' ' ' ' ' ' 'B' 'B' 'B']]
1837
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
1838
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
1839
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
1840
+ 0│ │▒▒▒│ 2 1 │ │ │ │ 3 │▒▒▒│ 4 │▒▒▒│ 2 │ │▒▒▒│▒▒▒│
1841
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1842
+ 1│ 3 │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │ 2 │▒▒▒│▒▒▒│
1843
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1844
+ 2│ 4 │▒▒▒│▒▒▒│ 5 │▒▒▒│▒▒▒│ │ │ 5 │▒▒▒│▒▒▒│ 3 2 5 │▒▒▒│
1845
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1846
+ 3│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ 4 │ │▒▒▒│▒▒▒│▒▒▒│ │ │ │▒▒▒│ 5 │▒▒▒│
1847
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1848
+ 4│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │
1849
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1850
+ 5│ 3 │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ 7 │▒▒▒│ 4 │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│
1851
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1852
+ 6│▒▒▒│ │▒▒▒│ │ 5 │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ 1 │ 3 │ 4 │ 5 │ │
1853
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1854
+ 7│ │ 5 │▒▒▒│ 4 │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ 3 │ │▒▒▒│ │▒▒▒│
1855
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1856
+ 8│ 3 │▒▒▒│▒▒▒│ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │
1857
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1858
+ 9│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ 4 │ 6 │▒▒▒│▒▒▒│ 3 │ │▒▒▒│ │
1859
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1860
+ 10│ 5 │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │ 3 │ 5 │▒▒▒│ │
1861
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1862
+ 11│▒▒▒│▒▒▒│ │ 5 │▒▒▒│ 5 │ 3 │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│
1863
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1864
+ 12│ 2 │ │▒▒▒│ │▒▒▒│ 4 │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│
1865
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1866
+ 13│ 1 │ │▒▒▒│▒▒▒│ │ │▒▒▒│ 5 │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ 6 │ │
1867
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1868
+ 14│▒▒▒│ │▒▒▒│ │ 2 │▒▒▒│▒▒▒│ │ 2 │ │ │ │▒▒▒│▒▒▒│▒▒▒│
1869
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
1715
1870
  Solutions found: 1
1716
1871
  status: OPTIMAL
1717
- Time taken: 0.01 seconds
1872
+ Time taken: 0.02 seconds
1718
1873
  ```
1719
1874
 
1720
1875
  **Solved puzzle**
@@ -1785,6 +1940,8 @@ Time taken: 0.01 seconds
1785
1940
 
1786
1941
  ## Pearl (Puzzle Type #19)
1787
1942
 
1943
+ Also known as Masyu
1944
+
1788
1945
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/pearl.html)
1789
1946
 
1790
1947
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/pearl.html#pearl)
@@ -1828,17 +1985,28 @@ solutions = binst.solve_and_print()
1828
1985
  **Script Output**
1829
1986
  ```python
1830
1987
  Solution found
1831
- [['┏━' '━━' '━━' '━━' '━┒' '┏━' '━━' '━┒' '┏━' '━━' '━━' '━┒']
1832
- ['┃ ' '┏━' '━━' '━┒' '┗━' '━┛' '┏━' '━┛' '┃ ' '┏━' '━┒' '┃ ']
1833
- ['┗━' '━┛' ' ' '┃ ' '┏━' '━┒' '┗━' '━━' '━┛' '┃ ' '┃ ' '┃ ']
1834
- [' ' '┏━' '━━' '━┛' '┃ ' '┃ ' ' ' '┏━' '━━' '━┛' '┃ ' '┃ ']
1835
- [' ' '┃ ' '┏━' '━━' '━┛' '┗━' '━┒' '┃ ' '┏━' '━┒' '┗━' '━┛']
1836
- ['┏━' '━┛' '┃ ' ' ' '┏━' '━┒' '┃ ' '┃ ' '┃ ' '┗━' '━━' '━┒']
1837
- ['┃ ' ' ' '┗━' '━━' '━┛' '┃ ' '┃ ' '┗━' '━┛' ' ' ' ' '┃ ']
1838
- ['┗━' '━━' '━━' '━━' '━━' '━┛' '┗━' '━━' '━━' '━━' '━━' '━┛']]
1988
+ 0 0 0 0 0 0 0 0 0 0 1 1
1989
+ 0 1 2 3 4 5 6 7 8 9 0 1
1990
+
1991
+ 0 B───────────W───┐ ┌───W───┐ B───────────B
1992
+ │ │ │ │ │ │
1993
+ 1 │ ┌───────B └───┘ ┌───┘ │ ┌───┐ │
1994
+ │ │ │ │ │ │ │ │
1995
+ 2 └───┘ . │ ┌───┐ └───────B │ │ │
1996
+ │ │ │ │ │ │
1997
+ 3 . B───────B │ W . B───────B W │
1998
+ │ │ │ │ │ │
1999
+ 4 . │ B───────B └───┐ │ ┌───┐ └───┘
2000
+ │ │ │ │ │ │
2001
+ 5 ┌───┘ │ . ┌───┐ │ W W └───────B
2002
+ │ │ │ │ │ │ │ │
2003
+ 6 │ . B───────┘ │ │ └───┘ . . │
2004
+ │ │ │ │
2005
+ 7 B───────────────────B B───────────────────B
2006
+
1839
2007
  Solutions found: 1
1840
2008
  status: OPTIMAL
1841
- Time taken: 0.98 seconds
2009
+ Time taken: 0.12 seconds
1842
2010
  ```
1843
2011
 
1844
2012
  **Solved puzzle**
@@ -1849,6 +2017,8 @@ Time taken: 0.98 seconds
1849
2017
 
1850
2018
  ## Bridges (Puzzle Type #20)
1851
2019
 
2020
+ Also known as Hashiwokakero
2021
+
1852
2022
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/bridges.html)
1853
2023
 
1854
2024
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/bridges.html#bridges)
@@ -2462,21 +2632,39 @@ solutions = binst.solve_and_print()
2462
2632
 
2463
2633
  ```python
2464
2634
  Solution found
2465
- [['0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '1' '1']
2466
- ['0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '1' '1' '1' '1' '0']
2467
- ['0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0']
2468
- ['0' '0' '0' '0' '0' '1' '1' '0' '0' '0' '0' '0' '0' '0' '0']
2469
- ['1' '1' '0' '0' '0' '0' '0' '0' '1' '1' '0' '0' '0' '0' '1']
2470
- ['0' '0' '0' '0' '0' '0' '1' '1' '1' '0' '0' '0' '0' '0' '0']
2471
- ['1' '1' '1' '0' '0' '1' '1' '0' '1' '1' '0' '1' '1' '0' '1']
2472
- ['1' '1' '1' '0' '0' '0' '1' '1' '0' '1' '1' '1' '1' '0' '1']
2473
- ['1' '0' '0' '0' '0' '0' '1' '1' '1' '0' '0' '0' '1' '0' '0']
2474
- ['0' '0' '0' '0' '1' '1' '0' '0' '0' '0' '0' '0' '1' '0' '0']
2475
- ['0' '0' '1' '1' '0' '0' '0' '0' '1' '1' '0' '0' '1' '1' '1']
2476
- ['0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '1' '1']
2477
- ['0' '1' '0' '0' '0' '0' '0' '1' '1' '0' '1' '1' '1' '1' '0']
2478
- ['1' '1' '1' '1' '1' '0' '1' '1' '1' '0' '0' '0' '0' '0' '0']
2479
- ['1' '1' '1' '1' '1' '1' '1' '1' '1' '1' '0' '0' '0' '1' '1']]
2635
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
2636
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
2637
+ ┌───────────────┬───────────┬───────────────┬───┬───────────┐
2638
+ 0│ │ │ │ │ O O O
2639
+ │ ┌───────────┘ ┌───┬───┴───┐ ┌───┐ │ └───┐ ┌───┤
2640
+ 1│ │ │ │ │ O │ │ O O O O │ │
2641
+ │ └───┐ ┌───┬───┘ └───┬───┴───┤ ├───┴───────┼───┘ │
2642
+ 2│ │ │ │ │ │ O │ │ │
2643
+ │ ┌───┴───┘ ├───┐ │ ├───┴───┐ ┌───┘ │
2644
+ 3│ │ │ │ O O │ │ │ │ │
2645
+ │ └───┐ │ ├───────┘ ┌───┴───┐ │ └───┬───┐ │
2646
+ 4│ O O │ │ │ │ O O │ │ │ │ O
2647
+ ├───┬───┘ ┌───┘ │ ┌───────┴───┬───┘ │ │ ├───┤
2648
+ 5│ │ │ │ │ O O O │ │ │ │ │
2649
+ │ │ │ │ └───┬───┬───┘ ┌───┤ │ │ │
2650
+ 6│ O │ O O │ │ O O │ │ O O │ │ O O │ │ O │
2651
+ ├───┴───┐ ├───────┴───┬───┘ ├───┬───┘ └───┐ │ │ │
2652
+ 7│ O O │ O │ │ O O │ │ O O O │ O │ │ O │
2653
+ │ ┌───┼───┴───────┐ │ ┌───┴───┼───────────┼───┤ └───┤
2654
+ 8│ O │ │ │ │ O │ O O │ │ O │ │
2655
+ ├───┘ └───┐ ┌───┘ ├───┼───────┘ ┌───────┤ │ ┌───┤
2656
+ 9│ │ │ O O │ │ │ │ O │ │ │
2657
+ │ ┌───┘ ├───────┤ └───┐ ├───────┤ └───┤ │
2658
+ 10│ │ O O │ │ │ O O │ │ O O │ O │
2659
+ │ ├───┬───┘ ┌───┘ └───┬───┴───────┤ ┌───┴───┤
2660
+ 11│ │ │ │ │ │ O │ O O │
2661
+ ├───┐ │ └───────┴───────┐ │ ┌───────┼───┴───┬───┤
2662
+ 12│ │ O │ │ O O │ │ O O │ O O │ │
2663
+ │ └───┴───┬───────┐ ┌───┘ ├───┴───────┴───────┘ │
2664
+ 13│ O O O │ O O │ │ O O O │ │
2665
+ │ └───┬───┘ ├───────┬───┴───┐ ┌───────┤
2666
+ 14│ O O O O │ O O │ O O │ O O │ │ O O │
2667
+ └───────────────┴───────┴───────┴───────┴───────────┴───────┘
2480
2668
  Solutions found: 1
2481
2669
  status: OPTIMAL
2482
2670
  Time taken: 0.02 seconds
@@ -2543,21 +2731,39 @@ Note: `solver.Board` accepts an optional `connection_count=N` parameter to speci
2543
2731
 
2544
2732
  ```python
2545
2733
  Solution found
2546
- [[' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2547
- ['R' 'L' 'D' 'R' 'L' 'R' 'L' ' ' ' ' ' ' ' ' ' ' 'D' 'R' 'L']
2548
- [' ' ' ' 'U' ' ' ' ' 'R' 'L' ' ' ' ' ' ' ' ' ' ' 'U' 'R' 'L']
2549
- ['D' ' ' ' ' ' ' ' ' 'R' 'L' ' ' ' ' 'D' ' ' ' ' ' ' ' ' ' ']
2550
- ['U' ' ' ' ' ' ' ' ' 'R' 'L' ' ' ' ' 'U' ' ' ' ' ' ' ' ' ' ']
2551
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'D' ' ']
2552
- [' ' ' ' 'D' ' ' ' ' ' ' 'R' 'L' ' ' 'D' ' ' ' ' ' ' 'U' ' ']
2553
- [' ' 'D' 'U' ' ' 'R' 'L' ' ' ' ' ' ' 'U' ' ' 'R' 'L' 'D' ' ']
2554
- [' ' 'U' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'U' ' ']
2555
- [' ' ' ' 'R' 'L' ' ' ' ' ' ' ' ' ' ' ' ' 'D' ' ' 'R' 'L' 'D']
2556
- [' ' ' ' 'D' ' ' ' ' ' ' 'R' 'L' ' ' ' ' 'U' ' ' ' ' ' ' 'U']
2557
- ['D' 'D' 'U' 'R' 'L' 'D' 'D' 'R' 'L' ' ' ' ' ' ' ' ' 'R' 'L']
2558
- ['U' 'U' ' ' ' ' ' ' 'U' 'U' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2559
- [' ' ' ' 'R' 'L' ' ' ' ' ' ' ' ' ' ' ' ' 'D' ' ' ' ' ' ' ' ']
2560
- ['R' 'L' 'R' 'L' ' ' 'R' 'L' ' ' ' ' ' ' 'U' ' ' ' ' ' ' ' ']]
2734
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
2735
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
2736
+ ┌───────────────────┬───────────────────────────────┬───────┐
2737
+ 0│ . . . . . . . . . . . . . . .
2738
+ │ ┌───────┬───┐ └───┐ ┌───────────────────┐ └───┐ │
2739
+ 1│ O─┼─O O O─┼─O O─┼─O . . . . . O O─┼─O
2740
+ │ │ ┌─┼─┘ └───┐ ├───┘ └─┼─────┤ │
2741
+ 2│ . . O . . O─┼─O . . . . . O O─┼─O
2742
+ │ │ │ └───┤ ┌───┐ ┌───────────────┘ │
2743
+ 3│ O . . . . O─┼─O . . O . . . . .
2744
+ ├─┼─┤ └───────────┐ ├───────┘ └─┼─┴───────────┐ │
2745
+ 4│ O . . . . O─┼─O . . O . . . . .
2746
+ │ └───────┐ │ └───┐ ┌───────────┐ ┌───┘ │
2747
+ 5│ . . . . . . . . . . . . . O .
2748
+ │ ┌───┘ │ ├───┘ │ └─────┼─┐ │
2749
+ 6│ . . │ O . . │ . O─┼─O . O . │ . . O │ . │
2750
+ │ └─┼─────────┼───────┘ ┌─────┼─┐ │ ┌───┐ │ │
2751
+ 7│ . O O . O─┼─O . . │ . O │ . │ O─┼─O │ O │ . │
2752
+ ├─────┼─┐ ┌───┴───────────┘ │ └───┘ ├─┼─┤ │
2753
+ 8│ . O │ . . │ . . . . . . │ . . . │ O │ . │
2754
+ │ │ ┌───┘ └───┐ │ │ │
2755
+ 9│ . . │ O─┼─O . . . . . . O │ . O─┼─O │ O │
2756
+ │ ┌───┴───┘ ┌───────────┬───┐ ┌─┼─┴───────┘ └─┼─┤
2757
+ 10│ . │ . O . │ . . O─┼─O │ . . │ O . . . O │
2758
+ │ └─────┼─┐ │ │ │ ┌───┘ ┌───────┐ │
2759
+ 11│ O O O │ O─┼─O O O │ O─┼─O │ . . . │ . O─┼─O │
2760
+ ├─┼─┬─┼─┐ ├───┘ ┌─┼─┬─┼─┤ └───┤ ┌───────┘ │ │
2761
+ 12│ O │ O │ . │ . . │ O │ O │ . . │ . │ . . . . │ . │
2762
+ │ │ │ │ ┌───┘ │ └───┐ └───┘ │ │
2763
+ 13│ . │ . │ O─┼─O │ . . │ . . │ . . O . . . │ . │
2764
+ │ │ └───┤ │ │ └─────────┼─┐ └───┤
2765
+ 14│ O─┼─O O─┼─O │ . O─┼─O . . . O │ . . . . │
2766
+ └───┴───────┴───┴───────┴───────────────────┴───────────────┘
2561
2767
  Solutions found: 1
2562
2768
  status: OPTIMAL
2563
2769
  Time taken: 0.01 seconds
@@ -2624,24 +2830,43 @@ solutions = binst.solve_and_print()
2624
2830
 
2625
2831
  ```python
2626
2832
  Solution found
2627
- [[' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2628
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' 'S' ' ' ' ']
2629
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ']
2630
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ']
2631
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2632
- [' ' 'S' 'S' 'S' 'S' ' ' ' ' ' ' ' ' ' ' ' ' 'S' 'S' 'S' ' ']
2633
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2634
- [' ' ' ' 'S' ' ' ' ' 'S' 'S' 'S' 'S' 'S' ' ' ' ' 'S' 'S' 'S']
2635
- ['S' ' ' 'S' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2636
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ' 'S' ' ' ' ' ' ']
2637
- ['S' 'S' 'S' 'S' ' ' ' ' ' ' ' ' 'S' ' ' ' ' ' ' ' ' ' ' ' ']
2638
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ' ' ' ' ']
2639
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' 'S' ' ' 'S' ' ' ' ' ' ' ' ']
2640
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2641
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S']]
2833
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
2834
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
2835
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
2836
+ 0│ │ │ │ │ │▒▒▒│ │ │ │ │ │ │ │ │ │
2837
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2838
+ 1│ │ │ │ │ │ │ │ │ │ │▒▒▒│ │▒▒▒│ │ │
2839
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2840
+ 2│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒│ │ │
2841
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2842
+ 3│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒│ │ │
2843
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2844
+ 4│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
2845
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2846
+ 5│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│ │
2847
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2848
+ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
2849
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2850
+ 7│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│
2851
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2852
+ 8│▒▒▒│ │▒▒▒│ │ │ │ │ │ │ │ │ │ │ │ │
2853
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2854
+ 9│ │ │ │ │ │ │ │ │▒▒▒│ │ │▒▒▒│ │ │ │
2855
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2856
+ 10│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │▒▒▒│ │ │ │ │ │ │
2857
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2858
+ 11│ │ │ │ │ │ │ │ │ │ │▒▒▒│ │ │ │ │
2859
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2860
+ 12│ │ │ │ │ │ │ │▒▒▒│▒▒▒│ │▒▒▒│ │ │ │ │
2861
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2862
+ 13│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
2863
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2864
+ 14│ │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒│
2865
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
2642
2866
  Solutions found: 1
2643
2867
  status: OPTIMAL
2644
- Time taken: 0.12 seconds
2868
+ Time taken: 0.09 seconds
2869
+ Solution found
2645
2870
  ```
2646
2871
 
2647
2872
  **Solved puzzle**
@@ -2689,18 +2914,33 @@ solutions = binst.solve_and_print()
2689
2914
 
2690
2915
  ```python
2691
2916
  Solution found
2692
- [['X' 'X' ' ' 'X' ' ' ' ' ' ' 'X' ' ' ' ' ' ' 'X']
2693
- [' ' ' ' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ']
2694
- ['X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2695
- [' ' ' ' ' ' ' ' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ']
2696
- [' ' ' ' 'X' 'X' ' ' ' ' ' ' 'X' ' ' 'X' ' ' 'X']
2697
- ['X' ' ' ' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' 'X' 'X']
2698
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'X' ' ']
2699
- [' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2700
- [' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' 'X' ' ' 'X' ' ']
2701
- [' ' ' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' 'X']
2702
- [' ' ' ' 'X' ' ' ' ' 'X' 'X' 'X' 'X' 'X' 'X' 'X']
2703
- ['X' ' ' ' ' 'X' ' ' ' ' ' ' 'X' 'X' 'X' 'X' 'X']]
2917
+ 0 0 0 0 0 0 0 0 0 0 1 1
2918
+ 0 1 2 3 4 5 6 7 8 9 0 1
2919
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
2920
+ 0│▒▒▒│▒▒▒│ │▒▒▒│ │ │ │▒▒▒│ │ │ │▒▒▒│
2921
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2922
+ 1│ │ │ │ │ │▒▒▒│ │ │ │ │ │ │
2923
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2924
+ 2│▒▒▒│ │ │ │ │ │ │ │ │ │ │ │
2925
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2926
+ 3│ │ │ │ │▒▒▒│ │▒▒▒│ │ │ │ │ │
2927
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2928
+ 4│ │ │▒▒▒│▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │▒▒▒│
2929
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2930
+ 5│▒▒▒│ │ │ │▒▒▒│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│
2931
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2932
+ 6│ │ │ │ │ │ │ │ │ │ │▒▒▒│ │
2933
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2934
+ 7│ │ │ │▒▒▒│ │ │ │ │ │ │ │ │
2935
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2936
+ 8│ │ │▒▒▒│ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│ │
2937
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2938
+ 9│ │ │ │▒▒▒│ │ │▒▒▒│ │ │ │ │▒▒▒│
2939
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2940
+ 10│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│
2941
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2942
+ 11│▒▒▒│ │ │▒▒▒│ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│
2943
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
2704
2944
  Solutions found: 1
2705
2945
  status: OPTIMAL
2706
2946
  Time taken: 0.00 seconds
@@ -2775,34 +3015,62 @@ solutions = binst.solve_and_print()
2775
3015
 
2776
3016
  ```python
2777
3017
  Solution found
2778
- [' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' '],
2779
- ['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' '],
2780
- [' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2781
- ['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2782
- [' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2783
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2784
- [' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2785
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2786
- [' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2787
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2788
- [' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2789
- ['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2790
- [' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2791
- ['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2792
- [' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' '],
2793
- [' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*'],
2794
- [' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' '],
2795
- [' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*'],
2796
- [' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
2797
- ['*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' '],
2798
- [' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
2799
- ['*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' '],
2800
- [' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
2801
- [' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*'],
2802
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
3018
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2
3019
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
3020
+ ┌───────────────────┬───────────────────────────────────┬───────────┬───────────────────────────────┐
3021
+ 0│ . . . . X . X . X . . . . . . . . X . X . X . . .
3022
+ │ ┌───┐ ┌───────┘ ┌───────┐ ┌───┘ ├───────────────────────┐ │
3023
+ 1│ X . X . . . . . . . X . X . X . . . . . . . . X .
3024
+ │ │ └───┘ ┌───┘ └───┴───┐ ┌───┘ ┌───┘ │
3025
+ 2│ . . . . X . X . X . . . . . . . X . X . X . . . .
3026
+ │ │ ┌───┬───────────────────────┘ │ ┌───┘ │ ┌───┐ │
3027
+ 3│ X . X . . . . . . . X . X . . . . . . . . . X . X
3028
+ │ │ │ └───────────────────────┐ ┌───┘ └───────────┐ └───┤ │ │
3029
+ 4│ . . . . . X . X . . . . . . X . X . X . X . . . .
3030
+ │ └───┼───┐ ┌───────────────┐ │ │ │ ┌───┘ └───┤
3031
+ 5│ . X . X . . . . . X . X . . . . . . . . . . X . X
3032
+ │ ┌───┘ └───┴───┐ ┌───┘ └───┐ └───┐ ┌───┘ ┌───────┘ │
3033
+ 6│ . . . . . X . X . . . . . X . X . . X . X . . . .
3034
+ │ └───┐ │ └───────┐ ├───────────────┤ │ ┌───────┴───────┐ │
3035
+ 7│ . X . X . . . . . X . X . . . . . . . . . . X . X
3036
+ ├───────┘ ┌───┘ └───┤ ┌───┘ ├───┘ └───┐ ┌───┤
3037
+ 8│ . . . . . X . X . . . . . X . X . X . X . . . . .
3038
+ │ │ ┌───┘ │ ┌───┘ │ │ │
3039
+ 9│ . X . X . . . . . X . X . . . . . . . . . X . X .
3040
+ │ ┌───┘ ┌───┘ ├───────────┴───┐ └───┘ │
3041
+ 10│ . . . . . X . X . . . . . X . X . X . X . . . . .
3042
+ │ ┌───┘ ┌───┤ └───────────┐ │ ┌───┐ ┌───┐ │
3043
+ 11│ X . │ X . . . . │ . │ . X . X . . . . │ . │ . . . . │ X │ . │ X │ . │
3044
+ ├───┐ └───────────────────┘ │ ┌───────────┘ └───┐ │ │ │ ├───┤
3045
+ 12│ . │ . . . X . X . │ . . . . . │ X . X . X │ . X . │ . │ . │ . │ . │
3046
+ │ └───────────┬───┐ ┌───────┼───┐ └───────────────┐ ├───────────┘ └───┘ │ │
3047
+ 13│ X . X . │ . │ . │ . . │ X │ . X . . . . . . │ . │ . . . X . X │ . │
3048
+ │ │ └───┘ │ │ ┌───────┐ ┌───┐ ┌───┘ │ ┌───────────────────┘ │
3049
+ 14│ . . . . │ X . X . │ . │ . . │ . X │ . │ X │ . │ X . │ X │ . . . . . . │
3050
+ │ └───┐ ┌───┘ ├───────┘ ┌───┴───┘ │ └───────┤ │ │
3051
+ 15│ . X . . . │ . . │ . X │ . X . │ . . . │ . . . │ . │ . X . X . X │
3052
+ │ ┌───────┘ │ ┌───┘ ┌───────┤ ┌───┐ └───────────┤ │ │
3053
+ 16│ . . . │ X . X . │ . │ . . │ . . │ X │ . │ X . X . │ X │ . . . . . . │
3054
+ │ ┌───────┘ │ │ │ ┌───┴───┘ └───┐ ┌───┐ ├───┘ ┌───┐ │
3055
+ 17│ . │ X . . . . . │ X │ . X │ . │ . . . . │ . │ . │ . │ . . │ X │ . X . X │
3056
+ │ └───────┐ ┌───────┘ │ ┌───┘ │ ┌───┐ │ │ │ │ ┌───┘ │ │
3057
+ 18│ . . . │ X . │ X . . │ . │ . . │ X │ . │ X . │ X │ . │ X │ . │ . . │ . . . . │
3058
+ │ │ └───┐ │ └───┐ └───┘ └───┐ └───┘ └───┴───┘ ┌───┘ ┌───────┐ │
3059
+ 19│ X . . │ . . . │ . X │ . X │ . . . . │ . . . . . X │ . X │ . X │ . │
3060
+ │ └───┬───┐ │ ┌───┤ ┌───┘ └───┐ ┌───────────┐ │ │ ┌───┘ │
3061
+ 20│ . . X . │ X │ . │ . │ . │ . │ . . X . X . │ X │ . X . │ . │ . . │ . │ . . │
3062
+ │ │ ├───┤ │ │ │ ┌───────┴───┘ │ │ ┌───┘ └───┐ │
3063
+ 21│ X . . . │ . │ . │ X │ . │ X │ . . . . │ . . . . . . │ X │ . │ X . X │ . │
3064
+ │ ┌───────┐ │ │ └───┘ │ │ │ └───┴───┴───────┐ │ │
3065
+ 22│ . │ . X │ . │ X │ . . . │ . │ . X . X │ . X . X . . . . . . │ . │ . │
3066
+ │ │ ┌───┘ │ │ ┌───┐ │ │ │ ┌───────────┘ └───┤
3067
+ 23│ . │ . │ . . │ . │ . │ X │ . │ X │ . . . . │ . . . . . X . │ X . X . X │
3068
+ │ │ └───────┘ └───┘ │ └───┘ │ └───────────────────┤
3069
+ 24│ . │ X . X . . . │ . . . X . X │ . X . X . . . . . . . . │
3070
+ └───┴───────────────────────┴───────────────────────┴───────────────────────────────────────────────┘
2803
3071
  Solutions found: 1
2804
3072
  status: OPTIMAL
2805
- Time taken: 0.38 seconds
3073
+ Time taken: 0.39 seconds
2806
3074
  ```
2807
3075
 
2808
3076
  **Solved puzzle**
@@ -2860,16 +3128,29 @@ solutions = binst.solve_and_print()
2860
3128
 
2861
3129
  ```python
2862
3130
  Solution found
2863
- ['*', ' ', ' ', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2864
- [' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2865
- [' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2866
- [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2867
- [' ', ' ', '*', ' ', ' ', '*', ' ', ' ', ' ', ' '],
2868
- ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' '],
2869
- [' ', ' ', ' ', '*', ' ', ' ', '*', ' ', ' ', ' '],
2870
- [' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'],
2871
- [' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2872
- [' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', ' ']
3131
+ 0 0 0 0 0 0 0 0 0 0
3132
+ 0 1 2 3 4 5 6 7 8 9
3133
+ ┌───────────────────────────────────────┐
3134
+ 0│ X . . . X . . . . .
3135
+ ├───┐ │
3136
+ 1│ │ . . . . . X . X .
3137
+ │ │ ┌───┐ │
3138
+ 2│ │ . X . X . . . │ │ .
3139
+ │ └───┐ ┌───┐ └───┘ │
3140
+ 3│ │ . . │ │ . . X . X
3141
+ │ │ │ │ │
3142
+ 4│ │ X . │ │ X . . . . │
3143
+ ├───────┘ └───┘ │
3144
+ 5│ X . . . . . . . X . │
3145
+ │ ┌───┐ ┌───┐ │
3146
+ 6│ . . . X │ │ . X . │ │ . │
3147
+ ├───┐ └───┘ ┌───┘ │ │
3148
+ 7│ │ X . . . . . │ │ X │
3149
+ │ └───┐ ┌───┘ │ │
3150
+ 8│ │ . X . X │ │ . │
3151
+ │ ┌───┘ ┌───┐ └───────────┘ │
3152
+ 9│ │ X . . │ │ . . X . . │
3153
+ └───┴───────────┴───┴───────────────────┘
2873
3154
  Solutions found: 1
2874
3155
  status: OPTIMAL
2875
3156
  Time taken: 0.02 seconds
@@ -2940,30 +3221,52 @@ solutions = binst.solve_then_constrain() # solve_then_constrain NOT solve_and_p
2940
3221
 
2941
3222
  ```python
2942
3223
  Solution found
2943
- [
2944
- ['X', 'X', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' '],
2945
- [' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', 'X', 'X', ' ', ' '],
2946
- ['X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' '],
2947
- ['X', ' ', ' ', ' ', 'X', ' ', 'X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', ' ', 'X', 'X', ' '],
2948
- [' ', ' ', ' ', 'X', 'X', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' '],
2949
- ['X', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', ' '],
2950
- ['X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X'],
2951
- ['X', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X'],
2952
- [' ', 'X', ' ', 'X', ' ', 'X', 'X', 'X', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
2953
- ['X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', ' ', ' ', ' ', 'X', ' ', 'X'],
2954
- [' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ', ' ', ' '],
2955
- [' ', 'X', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' '],
2956
- [' ', 'X', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', 'X', ' ', 'X', 'X', ' ', ' '],
2957
- [' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', 'X', ' ', 'X', ' ', 'X', 'X', 'X', ' ', ' ', 'X'],
2958
- [' ', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X'],
2959
- ['X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X'],
2960
- [' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', 'X', 'X'],
2961
- ['X', ' ', 'X', ' ', 'X', 'X', 'X', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', ' '],
2962
- ['X', 'X', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', ' '],
2963
- ['X', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', 'X', ' ', ' ', ' ', ' ', ' '],
2964
- ]
3224
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3225
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3226
+ ┌───────────┬───────┬───────────┬───────────┬───────┬───┬───┬───────┬───────┬───┐
3227
+ 0│▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒ ▒▒▒│ │ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│ │
3228
+ │ └───┐ │ ┌───────┘ ┌───┬───┘ ┌───┘ │ │ ┌───┘ ┌───┘ │
3229
+ 1│ ▒▒▒ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒ ▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ │
3230
+ ├───────────┬───┘ │ └───┐ ┌───┘ │ │ ┌───┘ │ └───────┤ ┌───┤
3231
+ 2│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒│ │
3232
+ │ ┌───────┴───┐ │ ┌───┘ └───┐ │ ├───┘ │ ┌───┬───┘ │ │
3233
+ 3│▒▒▒│ │▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│ │▒▒▒ ▒▒▒│ │
3234
+ │ └───────┐ ├───┴───┤ ┌───────┤ │ │ ┌───────┼───┘ │ ┌───┘ │
3235
+ 4│ │▒▒▒│▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │▒▒▒ │▒▒▒│ │ │▒▒▒│ │
3236
+ ├───┬───────┘ │ │ └───┐ └───┤ ├───┘ │ └───┘ ┌───┤
3237
+ 5│▒▒▒│ ▒▒▒ ▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒│ │
3238
+ │ │ ┌───┐ ├───┐ │ │ ┌───┘ ┌───┘ ┌───────┼───┬───────────┤ │
3239
+ 6│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│ │▒▒▒│
3240
+ │ └───┤ └───┤ └───┤ ├───┴───────┼───────┴───┐ │ │ ┌───┘ │
3241
+ 7│▒▒▒ ▒▒▒│ ▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒ │ │▒▒▒│ ▒▒▒│ ▒▒▒│
3242
+ │ ┌───┤ │ └───┬───┘ ┌───────┤ ┌───┘ │ └───┐ └───┐ │
3243
+ 8│ │▒▒▒│ ▒▒▒│ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒│
3244
+ ├───┘ └───┐ └───┐ └───────┘ ┌───┘ ┌───┘ └───────┤ ┌───┤ │
3245
+ 9│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ ▒▒▒ │▒▒▒│ │▒▒▒│
3246
+ ├───────────┼───────┴───────┐ ┌───┴───┐ ├───┬───────────┐ ├───┘ └───┤
3247
+ 10│ │ ▒▒▒ ▒▒▒│ │ ▒▒▒│ │ │▒▒▒ ▒▒▒ ▒▒▒│ │ │
3248
+ │ ┌───┐ └───────────┐ ├───────┼───┐ └───┤ └───────┐ └───┼───────┐ │
3249
+ 11│ │▒▒▒│ ▒▒▒ ▒▒▒ │▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ ▒▒▒ │▒▒▒ │▒▒▒ ▒▒▒│ │
3250
+ │ │ └───┐ ┌───┘ │ │ └───┐ │ │ ┌───┘ ┌───┘ │
3251
+ 12│ │▒▒▒ ▒▒▒│ ▒▒▒│ ▒▒▒│ │▒▒▒ │▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒│ │
3252
+ │ │ ┌───┴───┐ │ ┌───┘ ┌───┘ ┌───┴───┼───────┬───┴───┴───────┤ ┌───┤
3253
+ 13│ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒ │ │▒▒▒│
3254
+ │ ├───┘ ├───┼───┘ ├───┬───┘ │ ├───────┐ │ │ │
3255
+ 14│ │▒▒▒ ▒▒▒ │▒▒▒│ ▒▒▒ │▒▒▒│ ▒▒▒ │▒▒▒ ▒▒▒│ │▒▒▒ │ │▒▒▒│
3256
+ ├───┘ ┌───────┘ │ ┌───┘ └───┐ ┌───┘ │ ├───────┘ │ │
3257
+ 15│▒▒▒ ▒▒▒│ ▒▒▒ ▒▒▒│ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│
3258
+ ├───────┴───┐ ┌───┤ └───────┬───┘ ├───────────┤ └───┐ │ │
3259
+ 16│ ▒▒▒ ▒▒▒│▒▒▒│ │ ▒▒▒ │ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒│▒▒▒│
3260
+ ├───┐ ├───┘ └───────┐ ┌───┴───────┤ ┌───────┘ ┌───┐ ├───┐ └───┤
3261
+ 17│▒▒▒│ ▒▒▒│ ▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│ ▒▒▒│ │ │▒▒▒│ │
3262
+ │ └───┐ │ ┌───┐ ├───┴───┐ ├───┤ ┌───┐ │ ├───┘ └───┐ │
3263
+ 18│▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │ │▒▒▒ │▒▒▒ │▒▒▒│ │ │▒▒▒│ │▒▒▒ ▒▒▒ ▒▒▒│ │
3264
+ │ ┌───┴───┴───────┘ ├───┘ │ ┌───┘ └───┘ │ │ └───────────┘ │
3265
+ 19│▒▒▒│ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│▒▒▒ ▒▒▒ ▒▒▒ │▒▒▒│ │
3266
+ └───┴───────────────────┴───────────┴───┴───────────────┴───┴───────────────────┘
2965
3267
  Solutions found: 1
2966
- Time taken: 0.38 seconds
3268
+ status: OPTIMAL
3269
+ Time taken: 0.09 seconds
2967
3270
  ```
2968
3271
 
2969
3272
  **Solved puzzle**
@@ -3052,26 +3355,48 @@ As the instructions say, the solution to this puzzle is not garunteed to be uniq
3052
3355
 
3053
3356
  ```python
3054
3357
  Solution found
3055
- [[' ' ' ' ' ' ' ' 'O' ' ' ' ' ' ']
3056
- [' ' ' ' ' ' ' ' ' ' 'O' ' ' ' ']
3057
- [' ' 'O' ' ' ' ' ' ' ' ' ' ' ' ']
3058
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3059
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3060
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3061
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3062
- [' ' ' ' 'O' ' ' 'O' ' ' ' ' ' ']]
3358
+
3359
+ 0 1 2 3 4 5 6 7
3360
+ ┌───┬───┬───┬───┬───┬───┬───┬───┐
3361
+ 0│ │ │ │ │ O │ │ │ │
3362
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3363
+ 1│ │ │ │ │ │ O │ │ │
3364
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3365
+ 2│ │ O │ │ │ │ │ │ │
3366
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3367
+ 3│ │ │ │ │ │ │ │ │
3368
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3369
+ 4│ │ │ │ │ │ │ │ │
3370
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3371
+ 5│ │ │ │ │ │ │ │ │
3372
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3373
+ 6│ │ │ │ │ │ │ │ │
3374
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3375
+ 7│ │ │ O │ │ O │ │ │ │
3376
+ └───┴───┴───┴───┴───┴───┴───┴───┘
3063
3377
  Solution found
3064
- [[' ' ' ' ' ' ' ' 'O' ' ' ' ' ' ']
3065
- [' ' ' ' ' ' ' ' ' ' 'O' ' ' ' ']
3066
- [' ' 'O' ' ' 'O' ' ' ' ' ' ' ' ']
3067
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3068
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3069
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3070
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3071
- [' ' ' ' 'O' ' ' 'O' ' ' ' ' ' ']]
3378
+
3379
+ 0 1 2 3 4 5 6 7
3380
+ ┌───┬───┬───┬───┬───┬───┬───┬───┐
3381
+ 0│ │ │ │ │ O │ │ │ │
3382
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3383
+ 1│ │ │ │ │ │ O │ │ │
3384
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3385
+ 2│ │ O │ │ O │ │ │ │ │
3386
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3387
+ 3│ │ │ │ │ │ │ │ │
3388
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3389
+ 4│ │ │ │ │ │ │ │ │
3390
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3391
+ 5│ │ │ │ │ │ │ │ │
3392
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3393
+ 6│ │ │ │ │ │ │ │ │
3394
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3395
+ 7│ │ │ O │ │ O │ │ │ │
3396
+ └───┴───┴───┴───┴───┴───┴───┴───┘
3072
3397
  Solutions found: 2
3073
3398
  status: OPTIMAL
3074
- Time taken: 30.33 seconds
3399
+ Time taken: 24.53 seconds
3075
3400
  ```
3076
3401
 
3077
3402
  **Solved puzzle**
@@ -3134,26 +3459,42 @@ As the instructions say, the solution to this puzzle is not garunteed to be uniq
3134
3459
 
3135
3460
  ```python
3136
3461
  Solution found
3137
- [
3138
- ['00', '00', '00', '00', '00', '01', '01', '02', '02', '03', '03', '04', '04', '04', '04'],
3139
- ['05', '05', '15', '06', '06', '01', '01', '02', '02', '10', '10', '07', '07', '07', '13'],
3140
- ['08', '15', '15', '15', '06', '06', '09', '09', '10', '10', '10', '10', '10', '13', '13'],
3141
- ['14', '15', '15', '15', '15', '15', '11', '11', '12', '20', '10', '10', '16', '13', '13'],
3142
- ['14', '15', '15', '15', '15', '15', '11', '11', '20', '20', '20', '20', '16', '13', '13'],
3143
- ['14', '17', '17', '15', '15', '15', '15', '15', '20', '20', '20', '20', '16', '13', '18'],
3144
- ['17', '17', '19', '15', '15', '15', '15', '15', '20', '20', '20', '24', '16', '21', '18'],
3145
- ['26', '22', '27', '27', '23', '15', '15', '15', '20', '20', '20', '24', '24', '21', '25'],
3146
- ['26', '27', '27', '28', '28', '29', '15', '20', '20', '20', '20', '32', '24', '30', '30'],
3147
- ['26', '27', '27', '28', '28', '31', '31', '20', '20', '20', '20', '32', '37', '30', '30'],
3148
- ['27', '27', '33', '33', '33', '31', '31', '34', '34', '20', '35', '32', '37', '37', '37'],
3149
- ['36', '38', '38', '33', '33', '33', '34', '34', '41', '41', '41', '41', '37', '37', '37'],
3150
- ['44', '44', '38', '38', '45', '39', '46', '40', '40', '41', '41', '42', '37', '37', '37'],
3151
- ['43', '44', '38', '38', '45', '45', '46', '40', '40', '41', '41', '42', '37', '37', '37'],
3152
- ['43', '44', '44', '38', '38', '45', '46', '47', '41', '41', '41', '41', '48', '48', '37'],
3153
- ]
3462
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
3463
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
3464
+ ┌───────────────────┬───────┬───────┬───────┬───────────────┐
3465
+ 0│ . │ . . . . . . │ . . │
3466
+ ├───────┬───┬───────┤ │ ├───────┼───────────┬───┤
3467
+ 1│ . . │ │ . . . . . │ │ . │ │
3468
+ ├───┬───┘ └───┐ └───┬───┴───┬───┘ └───────┬───┘ │
3469
+ 2│ . │ │ . │ . . │ . │ │
3470
+ ├───┤ └───────┼───────┼───┬───┐ ┌───┤ │
3471
+ 3│ │ │ . . . │ │ │ │ . .
3472
+ │ │ │ ├───┘ └───────┤ │ │
3473
+ 4│ . │ . │ . . │ │ . │ │
3474
+ │ ├───────┐ └───────┤ │ │ ┌───┤
3475
+ 5│ │ . │ . │ │ . │ │ .
3476
+ ├───┘ ┌───┤ │ ┌───┤ ├───┤ │
3477
+ 6│ . . │ │ . │ │ │ . .
3478
+ ├───┬───┼───┴───┬───┐ │ │ └───┤ ├───┤
3479
+ 7│ │ . │ │ . │ │ . │ . . │ . │ . │
3480
+ │ ├───┘ ┌───┴───┼───┐ ┌───┘ ├───┐ ├───┴───┤
3481
+ 8│ . │ . . │ . . │ . │ │ │ │ │ . . │
3482
+ │ │ │ ├───┴───┤ │ ├───┤ │
3483
+ 9│ │ . . │ . . │ . . │ │ . │ │ . . │
3484
+ ├───┘ ┌───┴───────┤ ├───────┐ ┌───┤ │ └───────┤
3485
+ 10│ │ . . │ . . │ . │ │ . │ │ │
3486
+ ├───┬───┴───┐ └───┬───┘ ┌───┴───┴───┴───┤ │
3487
+ 11│ . │ │ . . │ . │ │ . │
3488
+ ├───┴───┐ └───┬───┬───┼───┬───┴───┐ ┌───┤ │
3489
+ 12│ │ . . │ │ . │ │ . . │ . . │ . │ . │
3490
+ ├───┐ │ │ └───┤ │ │ │ │ │
3491
+ 13│ . │ . │ . . │ . . │ . │ . . │ . . │ . │ │
3492
+ │ │ └───┐ └───┐ │ ├───┬───┘ └───┼───────┐ │
3493
+ 14│ . │ │ │ │ │ . │ │ . . │ │
3494
+ └───┴───────┴───────┴───┴───┴───┴───────────────┴───────┴───┘
3154
3495
  Solutions found: 1
3155
3496
  status: OPTIMAL
3156
- Time taken: 0.07 seconds
3497
+ Time taken: 0.06 seconds
3157
3498
  ```
3158
3499
 
3159
3500
  **Solved puzzle**
@@ -3213,18 +3554,29 @@ solutions = binst.solve_and_print()
3213
3554
 
3214
3555
  ```python
3215
3556
  Solution found
3216
- [
3217
- [ / \ \ / / / / \ \ \ / \ ]
3218
- [ \ \ \ \ \ \ / \ / / \ \ ]
3219
- [ \ \ \ / / \ / \ \ \ \ / ]
3220
- [ \ / \ \ / \ / / \ / \ / ]
3221
- [ / \ \ / \ \ \ / / / \ \ ]
3222
- [ / \ \ / \ \ \ / \ / \ \ ]
3223
- [ / \ \ / \ / / / \ / / \ ]
3224
- [ \ \ \ \ \ / / / \ / \ \ ]
3225
- [ / / / \ \ / / \ \ / \ \ ]
3226
- [ \ \ / / / \ / \ / \ \ / ]
3227
- ]
3557
+ 0 0 0 0 0 0 0 0 0 0 1 1
3558
+ 0 1 2 3 4 5 6 7 8 9 0 1
3559
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
3560
+ 0│ / │ \ \ / / / / │ \ \ \ / │ \ │
3561
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3562
+ 1│ \ \ \ \ \ │ \ │ / │ \ │ / / \ \
3563
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3564
+ 2│ \ \ \ / / \ / \ │ \ │ \ │ \ │ / │
3565
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3566
+ 3│ \ / \ \ / \ / │ / │ \ │ / │ \ │ / │
3567
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3568
+ 4│ / │ \ │ \ │ / │ \ │ \ │ \ │ / │ / │ / │ \ │ \ │
3569
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3570
+ 5│ / │ \ │ \ │ / │ \ │ \ │ \ │ / │ \ │ / │ \ │ \ │
3571
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3572
+ 6│ / │ \ │ \ │ / │ \ │ / │ / │ / │ \ │ / │ / │ \ │
3573
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3574
+ 7│ \ │ \ │ \ │ \ │ \ │ / │ / │ / │ \ │ / │ \ │ \ │
3575
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3576
+ 8│ / │ / │ / │ \ │ \ │ / │ / │ \ │ \ │ / │ \ │ \ │
3577
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3578
+ 9│ \ │ \ │ / │ / │ / │ \ │ / │ \ │ / │ \ │ \ │ / │
3579
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
3228
3580
  Solutions found: 1
3229
3581
  status: OPTIMAL
3230
3582
  Time taken: 0.06 seconds
@@ -3242,7 +3594,11 @@ Applying the solution to the puzzle visually:
3242
3594
 
3243
3595
  Also called "Futoshiki" or Renzoku"
3244
3596
 
3245
- * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/unequal.html)
3597
+ * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/unequal.html)
3598
+
3599
+ * [**Play online 2**](https://www.puzzle-futoshiki.com/futoshiki-4x4-easy/) (Futoshiki variant)
3600
+
3601
+ * [**Play online 3**](https://www.puzzle-futoshiki.com/renzoku-4x4-easy/) (Renzoku variant)
3246
3602
 
3247
3603
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/unequal.html#unequal)
3248
3604
 
@@ -3387,31 +3743,52 @@ solutions = binst.solve_and_print()
3387
3743
 
3388
3744
  ```python
3389
3745
  Solution found
3390
- [
3391
- [ 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3392
- [ 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3393
- [ ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ' ],
3394
- [ 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X' ],
3395
- [ ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X' ],
3396
- [ ' ', 'X', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ' ],
3397
- [ ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X' ],
3398
- [ 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X' ],
3399
- [ 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', ' ' ],
3400
- [ ' ', 'X', 'X', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ' ],
3401
- [ 'X', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', 'X', ' ' ],
3402
- [ 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3403
- [ ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3404
- [ 'X', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ' ],
3405
- [ 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ' ],
3406
- [ ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X' ],
3407
- [ ' ', 'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X' ],
3408
- [ ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', 'X', ' ' ],
3409
- [ 'X', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3410
- [ 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3411
- ]
3746
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3747
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3748
+ ┌───┬───────────────┬───┬───────┬───────────┬───────────┬───┬───┬───────┬───────┐
3749
+ 0│▒▒▒│ │▒▒▒│ ▒▒▒│ ▒▒▒ │▒▒▒ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│
3750
+ │ └───┐ │ │ ┌───┘ ┌───┬───┴───┐ ┌───┘ │ │ ├───────┤
3751
+ 1│▒▒▒ │▒▒▒ │▒▒▒│ │▒▒▒ │▒▒▒│ ▒▒▒│ │ ▒▒▒│ │▒▒▒ │ │
3752
+ ├───────┴───┐ ├───┘ ├───────┘ │ ┌───┤ ├───┬───┘ └───┬───┘ │
3753
+ 2│ ▒▒▒│ ▒▒▒│ ▒▒▒│ ▒▒▒ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒ │
3754
+ │ ┌───┐ ├───────┴───┬───┴───────┬───┴───┤ └───┘ │ └───────┐ │
3755
+ 3│▒▒▒│▒▒▒│ │ ▒▒▒ │▒▒▒ ▒▒▒│ ▒▒▒│ │ ▒▒▒ │▒▒▒│
3756
+ │ │ └───┤ ┌───────┤ │ └───┐ ┌───┤ ┌───────────┴───┤
3757
+ 4│ │ ▒▒▒│▒▒▒│ │ │ ▒▒▒│▒▒▒│ │ ▒▒▒│▒▒▒ ▒▒▒│
3758
+ │ ├───────┴───┘ │ ┌───────┴───────┐ │ │ └───┐ │ ┌───────┐ │
3759
+ 5│ │▒▒▒ ▒▒▒ │ │▒▒▒ ▒▒▒ │ │ │▒▒▒ ▒▒▒│ │ │▒▒▒ ▒▒▒│ │
3760
+ ├───┴───┬───────────────┼───┼───────────┬───┴───┼───┘ ┌───┴───┼───┴───┬───┴───┤
3761
+ 6│ ▒▒▒│ ▒▒▒ │▒▒▒│ ▒▒▒│ ▒▒▒│ │ ▒▒▒│▒▒▒ │ ▒▒▒│
3762
+ │ │ ┌───┬───────┤ │ ┌───┤ ┌───┴───┬───┴───┐ ├───┐ │ │
3763
+ 7│▒▒▒ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│ │ │▒▒▒│ ▒▒▒│
3764
+ ├───┬───┴───┘ │ ┌───┴───┘ │ │ └───┐ └───┬───┘ │ └───┤ ┌───┤
3765
+ 8│▒▒▒│ │▒▒▒│ ▒▒▒│ │ │ │ ▒▒▒│ ▒▒▒│ │ │
3766
+ │ └───┐ ┌───┤ ├───┬───────────┘ │ ┌───┘ ├───┬───┘ └───┘ │
3767
+ 9│ ▒▒▒│▒▒▒│ │▒▒▒│ │ ▒▒▒ │▒▒▒│▒▒▒ │ │▒▒▒ │
3768
+ ├───┐ ├───┘ ├───┘ ├───────┐ ┌───┤ │ ┌───────┤ └───────────┬───────┤
3769
+ 10│▒▒▒│ │ │ │▒▒▒ ▒▒▒│ │▒▒▒│ │ │▒▒▒ ▒▒▒│ ▒▒▒│▒▒▒ │
3770
+ │ └───┤ ┌───┴───┐ └───┬───┴───┘ ├───┴───┴───────┴───┐ ┌───────┴───┐ │
3771
+ 11│▒▒▒ │ │▒▒▒ ▒▒▒│ │ ▒▒▒│ ▒▒▒│ │▒▒▒ │ │
3772
+ ├───────┤ └───┬───┘ └───┬───────┴───┬───┐ ┌───┤ ├───────┐ │ │
3773
+ 12│ ▒▒▒│▒▒▒ │ ▒▒▒│▒▒▒ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒│▒▒▒│
3774
+ │ ┌───┘ ┌───┴───┐ ├───┐ │ ├───┐ │ │ └───┐ │ │ │
3775
+ 13│▒▒▒│ │▒▒▒ ▒▒▒│ ▒▒▒ │ │▒▒▒ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒│ │ │
3776
+ ├───┘ ├───┬───┴───────────┘ └───┬───┴───┘ └───┘ ├───────┴───┼───┴───┤
3777
+ 14│▒▒▒ │ │ ▒▒▒ ▒▒▒│ ▒▒▒ │▒▒▒ ▒▒▒│ │
3778
+ ├───┐ │ └───┬───────────┬───┐ └───┬───────────────┴───┬───────┘ │
3779
+ 15│ │ │▒▒▒ ▒▒▒│ ▒▒▒│▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒ ▒▒▒│
3780
+ │ ├───┬───┴───┬───┘ ┌───────┤ └───────┼───┐ ┌───┬───┴───────────────┤
3781
+ 16│ │▒▒▒│ │ ▒▒▒│▒▒▒ │ ▒▒▒ │▒▒▒│ │▒▒▒│ ▒▒▒ ▒▒▒│
3782
+ │ │ │ └───────┤ ┌───┴───────────┤ └───┬───┤ │ ┌───┬───────┐ │
3783
+ 17│ │▒▒▒│ ▒▒▒ ▒▒▒ │ │▒▒▒ ▒▒▒ │ ▒▒▒│▒▒▒│ │ │ │▒▒▒ ▒▒▒│ │
3784
+ │ └───┴───┐ ┌───────┘ └───┬───┬───────┴───┐ │ │ └───┤ │ └───┤
3785
+ 18│▒▒▒ ▒▒▒│ │ ▒▒▒│ │ ▒▒▒ ▒▒▒│ │ │▒▒▒ │▒▒▒│ │
3786
+ ├───────────┴───┴───┬───────┬───┘ └───────┬───┘ │ └───────┤ │ ┌───────┤
3787
+ 19│▒▒▒ ▒▒▒ │▒▒▒ ▒▒▒│ ▒▒▒ ▒▒▒ │ │ ▒▒▒ │▒▒▒│ │▒▒▒ ▒▒▒│
3788
+ └───────────────────┴───────┴───────────────┴───────┴───────────┴───┴───┴───────┘
3412
3789
  Solutions found: 1
3413
3790
  status: OPTIMAL
3414
- Time taken: 0.04 seconds
3791
+ Time taken: 0.03 seconds
3415
3792
  ```
3416
3793
 
3417
3794
  **Solved puzzle**
@@ -3424,7 +3801,7 @@ Applying the solution to the puzzle visually:
3424
3801
 
3425
3802
  ## Slitherlink (Puzzle Type #39)
3426
3803
 
3427
- Also known as Fences, Loop the Loop, and Loopy
3804
+ Also known as Fences, Loop the Loop, and Loopy.
3428
3805
 
3429
3806
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/loopy.html)
3430
3807
 
@@ -3592,31 +3969,52 @@ solutions = binst.solve_and_print()
3592
3969
 
3593
3970
  ```python
3594
3971
  Solution found
3595
- [
3596
- [ 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W' ],
3597
- [ 'W', 'B', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'B', 'W', 'B', 'W' ],
3598
- [ 'W', 'W', 'B', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'B', 'W' ],
3599
- [ 'W', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'B', 'W', 'B', 'W' ],
3600
- [ 'W', 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'W', 'W', 'B', 'W', 'B', 'W' ],
3601
- [ 'W', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'W', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3602
- [ 'W', 'B', 'B', 'B', 'W', 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3603
- [ 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3604
- [ 'W', 'B', 'B', 'B', 'B', 'B', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3605
- [ 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3606
- [ 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'W', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3607
- [ 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'W' ],
3608
- [ 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'W', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'W', 'W', 'B', 'W' ],
3609
- [ 'W', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3610
- [ 'W', 'W', 'W', 'B', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W' ],
3611
- [ 'W', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'B', 'B', 'W', 'B', 'W' ],
3612
- [ 'W', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'B', 'W' ],
3613
- [ 'W', 'B', 'B', 'W', 'B', 'B', 'B', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W' ],
3614
- [ 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3615
- [ 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'W' ],
3616
- ]
3972
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3973
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3974
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
3975
+ 0│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
3976
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3977
+ 1│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │
3978
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3979
+ 2│ │ │▒▒▒│ │▒▒▒│ │ │ │ │ │▒▒▒│ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│ │
3980
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3981
+ 3│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │
3982
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3983
+ 4│ │ │ │▒▒▒│ │ │▒▒▒│ │ │ │ │ │▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │
3984
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3985
+ 5│ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3986
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3987
+ 6│ │▒▒▒│▒▒▒│▒▒▒│ │ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3988
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3989
+ 7│ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3990
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3991
+ 8│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3992
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3993
+ 9│ │ │ │ │ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3994
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3995
+ 10│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3996
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3997
+ 11│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │
3998
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3999
+ 12│ │ │ │ │ │▒▒▒│ │ │ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │ │▒▒▒│ │
4000
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4001
+ 13│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
4002
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4003
+ 14│ │ │ │▒▒▒│ │▒▒▒│ │ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │
4004
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4005
+ 15│ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │
4006
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4007
+ 16│ │ │▒▒▒│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒│ │▒▒▒│ │
4008
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4009
+ 17│ │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │
4010
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4011
+ 18│ │ │ │ │ │ │ │▒▒▒│ │ │ │ │ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
4012
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4013
+ 19│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │
4014
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
3617
4015
  Solutions found: 1
3618
4016
  status: OPTIMAL
3619
- Time taken: 3.10 seconds
4017
+ Time taken: 3.09 seconds
3620
4018
  ```
3621
4019
 
3622
4020
  **Solved puzzle**
@@ -3741,7 +4139,7 @@ Applying the solution to the puzzle visually:
3741
4139
 
3742
4140
  ## Rectangles (Puzzle Type #42)
3743
4141
 
3744
- Also called "Shikaku".
4142
+ Also known as Shikaku.
3745
4143
 
3746
4144
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/rect.html)
3747
4145
 
@@ -4238,7 +4636,7 @@ Time taken: 38.04 seconds
4238
4636
 
4239
4637
  ## Shingoki (Puzzle Type #47)
4240
4638
 
4241
- Also called "Semaphores".
4639
+ Also known as Semaphores.
4242
4640
 
4243
4641
  * [**Play online**](https://www.puzzle-shingoki.com/)
4244
4642
 
@@ -4597,7 +4995,7 @@ Time taken: 0.00 seconds
4597
4995
 
4598
4996
  ## Shakashaka (Puzzle Type #50)
4599
4997
 
4600
- Also called "Proof of Quilt"
4998
+ Also known as Proof of Quilt.
4601
4999
 
4602
5000
  * [**Play online**](https://www.puzzle-shakashaka.com/)
4603
5001
 
@@ -4909,15 +5307,27 @@ solutions = binst.solve_and_print()
4909
5307
 
4910
5308
  ```python
4911
5309
  Solution found
4912
- [['1' '9' '4' '2' '3' '6' '8' '5' '7']
4913
- ['2' '8' '5' '9' '4' '7' '1' '6' '3']
4914
- ['6' '3' '8' '4' '7' '5' '9' '1' '2']
4915
- ['7' '6' '3' '5' '9' '1' '2' '8' '4']
4916
- ['4' '5' '2' '1' '6' '3' '7' '9' '8']
4917
- ['5' '7' '9' '8' '1' '4' '3' '2' '6']
4918
- ['3' '1' '7' '6' '8' '2' '5' '4' '9']
4919
- ['9' '4' '1' '7' '2' '8' '6' '3' '5']
4920
- ['8' '2' '6' '3' '5' '9' '4' '7' '1']]
5310
+
5311
+ 0 1 2 3 4 5 6 7 8
5312
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
5313
+ 0│ 1 9 4 │ 2 │ 3 │ 6 │ 8 │ 5 │ 7 │
5314
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5315
+ 1│ 2 │ 8 │ 5 9 4 │ 7 │ 1 6 │ 3
5316
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5317
+ 2│ 6 │ 3 │ 8 │ 4 7 5 9 │ 1 │ 2 │
5318
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5319
+ 3│ 7 │ 6 │ 3 │ 5 │ 9 │ 1 │ 2 │ 8 │ 4 │
5320
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5321
+ 4│ 4 │ 5 │ 2 │ 1 │ 6 │ 3 │ 7 │ 9 │ 8 │
5322
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5323
+ 5│ 5 │ 7 │ 9 │ 8 │ 1 │ 4 │ 3 │ 2 │ 6 │
5324
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5325
+ 6│ 3 │ 1 │ 7 │ 6 │ 8 │ 2 │ 5 │ 4 │ 9 │
5326
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5327
+ 7│ 9 │ 4 │ 1 │ 7 │ 2 │ 8 │ 6 │ 3 │ 5 │
5328
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5329
+ 8│ 8 │ 2 │ 6 │ 3 │ 5 │ 9 │ 4 │ 7 │ 1 │
5330
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┘
4921
5331
  Solutions found: 1
4922
5332
  status: OPTIMAL
4923
5333
  Time taken: 0.01 seconds
@@ -4981,18 +5391,30 @@ solutions = binst.solve_and_print()
4981
5391
 
4982
5392
  ```python
4983
5393
  Solution found
4984
- [['5' '4' '8' '7' '9' '1' '6' '2' '3']
4985
- ['3' '7' '1' '6' '2' '8' '4' '9' '5']
4986
- ['2' '6' '9' '5' '4' '3' '1' '7' '8']
4987
- ['1' '9' '4' '3' '6' '2' '5' '8' '7']
4988
- ['8' '3' '7' '1' '5' '9' '2' '4' '6']
4989
- ['6' '2' '5' '8' '7' '4' '3' '1' '9']
4990
- ['4' '8' '2' '9' '3' '5' '7' '6' '1']
4991
- ['7' '1' '3' '2' '8' '6' '9' '5' '4']
4992
- ['9' '5' '6' '4' '1' '7' '8' '3' '2']]
5394
+
5395
+ 0 1 2 3 4 5 6 7 8
5396
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
5397
+ 0│ 5 4 8 │ 7 │ 9 │ 1 │ 6 2 3
5398
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5399
+ 1│ 3 │ 7 │ 1 │ 6 2 8 4 9 │ 5 │
5400
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5401
+ 2│ 2 6 9 5 4 │ 3 │ 1 │ 7 │ 8 │
5402
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5403
+ 3│ 1 │ 9 │ 4 │ 3 │ 6 │ 2 │ 5 │ 8 │ 7 │
5404
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5405
+ 4│ 8 │ 3 │ 7 │ 1 │ 5 │ 9 │ 2 │ 4 │ 6 │
5406
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5407
+ 5│ 6 │ 2 │ 5 │ 8 │ 7 │ 4 │ 3 │ 1 │ 9 │
5408
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5409
+ 6│ 4 │ 8 │ 2 │ 9 │ 3 │ 5 │ 7 │ 6 │ 1 │
5410
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5411
+ 7│ 7 │ 1 │ 3 │ 2 │ 8 │ 6 │ 9 │ 5 │ 4 │
5412
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5413
+ 8│ 9 │ 5 │ 6 │ 4 │ 1 │ 7 │ 8 │ 3 │ 2 │
5414
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┘
4993
5415
  Solutions found: 1
4994
5416
  status: OPTIMAL
4995
- Time taken: 0.01 seconds
5417
+ Time taken: 0.02 seconds
4996
5418
  ```
4997
5419
 
4998
5420
  **Solved puzzle**
@@ -5082,7 +5504,7 @@ Note that the solved solution on the bottom left says that only 18 moves were us
5082
5504
 
5083
5505
  ## Pipes (Puzzle Type #55)
5084
5506
 
5085
- Also called "Net"
5507
+ Also known as Net.
5086
5508
 
5087
5509
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/net.html)
5088
5510
 
@@ -5132,16 +5554,29 @@ solutions = binst.solve_and_print()
5132
5554
 
5133
5555
  ```python
5134
5556
  Solution found
5135
- [['R' 'DLR' 'DLR' 'DLR' 'L' 'R' 'DL' 'DR' 'LR' 'L']
5136
- ['D' 'U' 'U' 'UDR' 'LR' 'L' 'UD' 'UDR' 'LR' 'L']
5137
- ['UD' 'D' 'R' 'ULR' 'DL' 'R' 'UDL' 'UD' 'D' 'D']
5138
- ['UD' 'UD' 'R' 'DLR' 'ULR' 'DLR' 'UL' 'UDR' 'ULR' 'UL']
5139
- ['UDR' 'ULR' 'LR' 'ULR' 'L' 'UDR' 'LR' 'UL' 'R' 'DL']
5140
- ['U' 'R' 'DLR' 'LR' 'DLR' 'UL' 'D' 'D' 'DR' 'UL']
5141
- ['D' 'R' 'UDL' 'D' 'U' 'D' 'UDR' 'ULR' 'ULR' 'DL']
5142
- ['UDR' 'LR' 'ULR' 'UDL' 'DR' 'ULR' 'ULR' 'LR' 'DL' 'U']
5143
- ['U' 'R' 'DLR' 'ULR' 'ULR' 'DLR' 'L' 'DR' 'ULR' 'DL']
5144
- ['R' 'LR' 'ULR' 'LR' 'L' 'U' 'R' 'ULR' 'L' 'U']]
5557
+ 0 0 0 0 0 0 0 0 0 0
5558
+ 0 1 2 3 4 5 6 7 8 9
5559
+
5560
+ 0 O───┬───┬───┬───O O───┐ ┌───────O
5561
+ │ │ │ │ │
5562
+ 1 O O O ├───────O │ ├───────O
5563
+ │ │ │ │
5564
+ 2 │ O O───┴───┐ O───┤ │ O O
5565
+ │ │ │ │ │ │ │
5566
+ 3 │ │ O───┬───┴───┬───┘ ├───┴───┘
5567
+ │ │ │ │ │
5568
+ 4 ├───┴───────┴───O ├───────┘ O───┐
5569
+ │ │ │
5570
+ 5 O O───┬───────┬───┘ O O ┌───┘
5571
+ │ │ │ │ │
5572
+ 6 O O───┤ O O O ├───┴───┴───┐
5573
+ │ │ │ │ │ │
5574
+ 7 ├───────┴───┤ ┌───┴───┴───────┐ O
5575
+ │ │ │ │
5576
+ 8 O O───┬───┴───┴───┬───O ┌───┴───┐
5577
+ │ │ │ │
5578
+ 9 O───────┴───────O O O───┴───O O
5579
+
5145
5580
  Solutions found: 1
5146
5581
  status: OPTIMAL
5147
5582
  Time taken: 5.65 seconds
@@ -5153,6 +5588,206 @@ Time taken: 5.65 seconds
5153
5588
 
5154
5589
  ---
5155
5590
 
5591
+ ## Connect the Dots (Puzzle Type #56)
5592
+
5593
+ * [**Mobile App (Android)**](https://play.google.com/store/apps/details?id=com.playvalve.connect.dots&hl=en_US)
5594
+
5595
+ * [**Mobile App (iOS)**](https://apps.apple.com/us/app/dot-link-connect-the-dots/id6444312485)
5596
+
5597
+ * [**Solver Code**][56]
5598
+
5599
+ <details>
5600
+ <summary><strong>Rules</strong></summary>
5601
+
5602
+ You are given a grid of empty cells and 2 filled cell per color. The goal is to connect the dots of the same color to form a single fully connected graph for each color.
5603
+ </details>
5604
+
5605
+ **Unsolved puzzle**
5606
+
5607
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_unsolved.png" alt="Connect the Dots unsolved" width="500">
5608
+
5609
+ Code to utilize this package and solve the puzzle:
5610
+
5611
+ ```python
5612
+ import numpy as np
5613
+ from puzzle_solver import connect_the_dots_solver as solver
5614
+ board = np.array([
5615
+ ['R', ' ', 'B', ' ', ' ', ' ', ' ', ' '],
5616
+ ['Y', ' ', ' ', 'R', 'G', ' ', 'G', ' '],
5617
+ [' ', 'M', ' ', ' ', ' ', 'P', ' ', ' '],
5618
+ [' ', 'O', ' ', ' ', ' ', 'M', ' ', ' '],
5619
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
5620
+ ['Br', 'B', ' ', ' ', 'Y', 'O', ' ', ' '],
5621
+ [' ', ' ', ' ', ' ', ' ', 'P', ' ', ' '],
5622
+ [' ', ' ', ' ', 'Br', ' ', ' ', ' ', ' '],
5623
+ ])
5624
+ binst = solver.Board(board=board)
5625
+ solutions = binst.solve_and_print()
5626
+ ```
5627
+
5628
+ **Script Output**
5629
+
5630
+ ```python
5631
+ Solution found
5632
+ 0 1 2 3 4 5 6 7
5633
+ ┌───────┬───────────────────────┐
5634
+ 0│ R R │ B B B B B B │
5635
+ ├───┐ └───────┬───────────┐ │
5636
+ 1│ Y │ R R R │ G G G │ B │
5637
+ │ ├───────────┴───┬───────┤ │
5638
+ 2│ Y │ M M M M │ P P │ B │
5639
+ │ ├───────────┐ └───┐ │ │
5640
+ 3│ Y │ O O O │ M M │ P │ B │
5641
+ │ └───────┐ └───────┤ │ │
5642
+ 4│ Y Y Y │ O O O │ P │ B │
5643
+ ├───┬───┐ └───────┐ │ │ │
5644
+ 5│Br │ B │ Y Y Y │ O │ P │ B │
5645
+ │ │ └───────────┼───┘ │ │
5646
+ 6│Br │ B B B B │ P P │ B │
5647
+ │ └───────────┐ └───────┘ │
5648
+ 7│Br Br Br Br │ B B B B │
5649
+ └───────────────┴───────────────┘
5650
+ Solutions found: 1
5651
+ status: OPTIMAL
5652
+ Time taken: 2.91 seconds
5653
+ ```
5654
+
5655
+ **Solved puzzle**
5656
+
5657
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_solved.png" alt="Connect the Dots solved" width="500">
5658
+
5659
+ ---
5660
+
5661
+ ## Nonograms Colored (Puzzle Type #57)
5662
+
5663
+ * [**Play online**](https://www.nonograms.org/nonograms2)
5664
+
5665
+ * [**Solver Code**][57]
5666
+
5667
+ <details>
5668
+ <summary><strong>Rules</strong></summary>
5669
+
5670
+ You have a grid of squares, which must all be filled in either white or one of the specified colors. Beside each row of the grid are listed, in order, the lengths of the runs of the specified colors on that row; above each column are listed, in order, the lengths of the runs of the specified colors in that column. Your aim is to fill in the entire grid white or one of the specified colors.
5671
+
5672
+ </details>
5673
+
5674
+ **Unsolved puzzle**
5675
+
5676
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nonograms_colored_unsolved.png" alt="Nonograms Colored unsolved" width="500">
5677
+
5678
+ Code to utilize this package and solve the puzzle:
5679
+
5680
+ ```python
5681
+ import numpy as np
5682
+ from puzzle_solver.puzzles.nonograms import nonograms_colored as solver
5683
+ top = [
5684
+ ['5M'], ['8M'], ['1M', '3R', '6M'], ['1M', '5R', '5M'], ['8R', '4M'],
5685
+ ['10R', '4M'], ['10R', '4M'], ['1G', '2M', '2R', '3P', '7R', '3M'], ['1L', '2G', '1G', '2F', '3M', '1R', '5P', '6R', '3M'], ['2L', '2G', '2F', '4M', '1R', '6P', '5R', '3M'],
5686
+ ['3L', '1F', '1R', '2M', '8P', '5R', '3M'], ['1G', '1L', '1F', '1R', '2M', '8P', '5R', '3M'], ['1G', '2L', '2R', '1M', '8P', '5R', '3M'], ['1L', '1G', '3R', '1M', '8P', '5R', '3M'], ['1L', '3R', '2M', '7P', '6R', '3M'],
5687
+ ['1L', '3R', '1M', '8P', '5R', '4M'], ['1L', '3R', '1M', '8P', '5R', '4M'], ['2R', '1M', '9P', '5R', '3M'], ['1R', '9P', '5R', '3M'], ['10P', '5R', '3M'],
5688
+ ['1G', '1R', '9P', '5R', '4M'], ['1L', '1G', '1F', '2R', '8P', '5R', '6M'], ['1L', '2F', '3R', '6P', '5R', '7M'], ['1L', '1G', '1F', '4R', '5P', '5R', '3M', '3P', '2M'], ['1L', '1F', '6R', '2P', '6R', '3M', '4P', '2M'],
5689
+ ['1L', '1F', '12R', '4M', '6P', '1M'], ['1L', '1F', '1R', '3L', '1M', '3R', '7M', '7P', '1M'], ['1G', '3L', '1G', '11M', '7P', '1R', '1M'], ['1L', '1L', '3G', '11M', '1R', '6P', '2R'], ['1G', '3L', '1G', '4F', '6M', '9R'],
5690
+ ['3G', '2F', '2L', '1F', '4M', '7R'], ['4G', '1F', '4L'], ['1L', '1G', '1F', '1L', '2L'], ['2F', '1L']
5691
+ ]
5692
+ side = [
5693
+ ['1L', '1G'], ['1L', '1G'], ['1L', '2G'], ['6L', '1G', '2L', '2G'], ['2L', '1G', '3F', '1L', '2G', '1F', '1G'],
5694
+ ['1G', '1L', '1G', '2F', '3R', '1L', '1G', '2F', '1G', '1L'], ['2G', '1L', '1G', '2F', '3R', '2L', '1G', '1F', '1L', '1F', '1G'], ['1G', '1L', '2G', '4L', '5R', '1L', '1G', '1M', '1F', '2L', '1F'], ['1G', '1F', '3L', '1G', '4R', '6R', '1L', '2M', '2F', '2L', '1F'], ['4F', '1L', '6R', '3P', '4R', '5M', '1L', '1F'],
5695
+ ['1G', '1F', '1M', '7R', '1M', '6P', '3R', '4M', '2L'], ['5M', '2R', '3M', '8P', '2R', '4M', '2L'], ['8M', '10P', '2R', '4M'], ['2M', '14P', '2R', '4M'], ['3R', '14P', '2R', '4M'],
5696
+ ['3R', '15P', '3R', '3M'], ['3R', '15P', '4R', '3M'], ['1M', '3R', '14P', '4R', '4M'], ['1M', '4R', '13P', '5R', '3M', '2R'], ['1M', '6R', '10P', '6R', '3M', '2P', '2R'],
5697
+ ['1M', '7R', '5P', '9R', '3M', '3P', '2R'], ['2M', '20R', '3M', '4P', '2R'], ['3M', '18R', '3M', '5P', '2R'], ['4M', '16R', '3M', '6P', '2R'], ['5M', '13R', '5M', '6P', '2R'],
5698
+ ['7M', '8R', '8M', '5P', '3R'], ['24M', '2P', '3R'], ['16M', '7M'], ['12M']
5699
+ ]
5700
+ binst = solver.Board(top=top, side=side)
5701
+ solutions = binst.solve_and_print(visualize_colors={
5702
+ 'M': 'darkmagenta',
5703
+ 'R': 'magenta',
5704
+ 'G': 'green',
5705
+ 'P': 'pink',
5706
+ 'L': 'lime',
5707
+ 'F': 'forestgreen',
5708
+ })
5709
+ ```
5710
+
5711
+ **Script Output**
5712
+
5713
+ ```python
5714
+ Solution found
5715
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3
5716
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
5717
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
5718
+ 0│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ L │ G │ │ │ │ │
5719
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5720
+ 1│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ L │ G │ │ │ │
5721
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5722
+ 2│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ L │ G │ G │ │ │
5723
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5724
+ 3│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ L │ L │ L │ L │ L │ L │ G │ L │ L │ G │ G │ │ │
5725
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5726
+ 4│ │ │ │ │ │ │ │ │ L │ L │ │ │ │ │ │ │ │ │ │ │ │ │ │ G │ F │ F │ F │ L │ G │ G │ F │ G │ │ │
5727
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5728
+ 5│ │ │ │ │ │ │ │ │ G │ L │ │ │ │ │ │ │ │ │ │ │ │ G │ F │ F │ R │ R │ R │ L │ G │ F │ F │ G │ L │ │
5729
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5730
+ 6│ │ │ │ │ │ │ │ │ G │ G │ L │ │ │ │ │ │ │ │ │ │ G │ F │ F │ R │ R │ R │ L │ L │ G │ F │ L │ F │ G │ │
5731
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5732
+ 7│ │ │ │ │ │ │ │ │ │ G │ L │ G │ G │ L │ L │ L │ L │ │ │ │ │ R │ R │ R │ R │ R │ L │ G │ M │ F │ L │ L │ F │ │
5733
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5734
+ 8│ │ │ │ │ │ │ │ │ G │ F │ L │ L │ L │ G │ R │ R │ R │ R │ │ │ R │ R │ R │ R │ R │ R │ L │ M │ M │ F │ F │ L │ L │ F │
5735
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5736
+ 9│ │ │ │ │ │ │ │ │ F │ F │ F │ F │ L │ R │ R │ R │ R │ R │ R │ P │ P │ P │ R │ R │ R │ R │ M │ M │ M │ M │ M │ L │ │ F │
5737
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5738
+ 10│ │ │ │ │ │ │ │ G │ F │ M │ R │ R │ R │ R │ R │ R │ R │ M │ P │ P │ P │ P │ P │ P │ R │ R │ R │ M │ M │ M │ M │ L │ L │ │
5739
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5740
+ 11│ │ │ │ │ │ │ │ M │ M │ M │ M │ M │ R │ R │ M │ M │ M │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ M │ M │ M │ M │ │ L │ L │
5741
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5742
+ 12│ │ │ │ │ │ │ │ M │ M │ M │ M │ M │ M │ M │ M │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ M │ M │ M │ M │ │ │ │
5743
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5744
+ 13│ │ │ │ │ │ │ │ │ M │ M │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ M │ M │ M │ M │ │ │ │ │
5745
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5746
+ 14│ │ │ │ │ │ │ │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ M │ M │ M │ M │ │ │ │ │
5747
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5748
+ 15│ │ │ │ │ │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ M │ M │ M │ │ │ │ │ │
5749
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5750
+ 16│ │ │ │ │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ R │ M │ M │ M │ │ │ │ │ │
5751
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5752
+ 17│ │ │ │ M │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ R │ M │ M │ M │ M │ │ │ │ │ │
5753
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5754
+ 18│ │ │ M │ R │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ R │ R │ M │ M │ M │ R │ R │ │ │ │ │
5755
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5756
+ 19│ │ M │ R │ R │ R │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ R │ R │ │ │ │
5757
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5758
+ 20│ │ M │ R │ R │ R │ R │ R │ R │ R │ P │ P │ P │ P │ P │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ P │ R │ R │ │ │ │
5759
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5760
+ 21│ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ P │ P │ R │ R │ │ │ │
5761
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5762
+ 22│ M │ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ P │ P │ P │ R │ R │ │ │ │
5763
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5764
+ 23│ M │ M │ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ P │ P │ P │ P │ R │ R │ │ │ │
5765
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5766
+ 24│ M │ M │ M │ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ M │ M │ P │ P │ P │ P │ P │ P │ R │ R │ │ │ │
5767
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5768
+ 25│ M │ M │ M │ M │ M │ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ M │ M │ M │ M │ M │ P │ P │ P │ P │ P │ R │ R │ R │ │ │ │
5769
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5770
+ 26│ │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ P │ P │ R │ R │ R │ │ │ │ │
5771
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5772
+ 27│ │ │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ │ │ │ M │ M │ M │ M │ M │ M │ M │ │ │ │ │ │ │
5773
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5774
+ 28│ │ │ │ │ │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
5775
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
5776
+ Solutions found: 1
5777
+ status: OPTIMAL
5778
+ Time taken: 0.40 seconds
5779
+ ```
5780
+
5781
+ The script also visualizes the solution:
5782
+
5783
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nonograms_colored_script_output.png" alt="Nonograms Colored solved" width="500">
5784
+
5785
+ **Solved puzzle**
5786
+
5787
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nonograms_colored_solved.png" alt="Nonograms Colored solved" width="500">
5788
+
5789
+ ---
5790
+
5156
5791
  ---
5157
5792
 
5158
5793
  ## Why SAT / CP-SAT?
@@ -5235,7 +5870,7 @@ Issues and PRs welcome!
5235
5870
  [29]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/battleships "puzzle_solver/src/puzzle_solver/puzzles/battleships at master · Ar-Kareem/puzzle_solver · GitHub"
5236
5871
  [30]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/kakurasu "puzzle_solver/src/puzzle_solver/puzzles/kakurasu at master · Ar-Kareem/puzzle_solver · GitHub"
5237
5872
  [31]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/star_battle "puzzle_solver/src/puzzle_solver/puzzles/star_battle at master · Ar-Kareem/puzzle_solver · GitHub"
5238
- [32]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/star_battle_shapeless "puzzle_solver/src/puzzle_solver/puzzles/star_battle_shapeless at master · Ar-Kareem/puzzle_solver · GitHub"
5873
+ [32]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/star_battle "puzzle_solver/src/puzzle_solver/puzzles/star_battle_shapeless at master · Ar-Kareem/puzzle_solver · GitHub"
5239
5874
  [33]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/lits "puzzle_solver/src/puzzle_solver/puzzles/lits at master · Ar-Kareem/puzzle_solver · GitHub"
5240
5875
  [34]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/black_box "puzzle_solver/src/puzzle_solver/puzzles/black_box at master · Ar-Kareem/puzzle_solver · GitHub"
5241
5876
  [35]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/galaxies "puzzle_solver/src/puzzle_solver/puzzles/galaxies at master · Ar-Kareem/puzzle_solver · GitHub"
@@ -5252,10 +5887,12 @@ Issues and PRs welcome!
5252
5887
  [46]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/heyawake "puzzle_solver/src/puzzle_solver/puzzles/heyawake at master · Ar-Kareem/puzzle_solver · GitHub"
5253
5888
  [47]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/shingoki "puzzle_solver/src/puzzle_solver/puzzles/shingoki at master · Ar-Kareem/puzzle_solver · GitHub"
5254
5889
  [48]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/tapa "puzzle_solver/src/puzzle_solver/puzzles/tapa at master · Ar-Kareem/puzzle_solver · GitHub"
5255
- [49]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/binairo_plus "puzzle_solver/src/puzzle_solver/puzzles/binairo_plus at master · Ar-Kareem/puzzle_solver · GitHub"
5890
+ [49]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/binairo "puzzle_solver/src/puzzle_solver/puzzles/binairo_plus at master · Ar-Kareem/puzzle_solver · GitHub"
5256
5891
  [50]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/shakashaka "puzzle_solver/src/puzzle_solver/puzzles/shakashaka at master · Ar-Kareem/puzzle_solver · GitHub"
5257
5892
  [51]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/kakuro "puzzle_solver/src/puzzle_solver/puzzles/kakuro at master · Ar-Kareem/puzzle_solver · GitHub"
5258
5893
  [52]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/sudoku "puzzle_solver/src/puzzle_solver/puzzles/sudoku at master · Ar-Kareem/puzzle_solver · GitHub"
5259
5894
  [53]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/sudoku "puzzle_solver/src/puzzle_solver/puzzles/sudoku at master · Ar-Kareem/puzzle_solver · GitHub"
5260
5895
  [54]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/flood_it "puzzle_solver/src/puzzle_solver/puzzles/flood_it at master · Ar-Kareem/puzzle_solver · GitHub"
5261
5896
  [55]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/pipes "puzzle_solver/src/puzzle_solver/puzzles/pipes at master · Ar-Kareem/puzzle_solver · GitHub"
5897
+ [56]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/connect_the_dots "puzzle_solver/src/puzzle_solver/puzzles/connect_the_dots at master · Ar-Kareem/puzzle_solver · GitHub"
5898
+ [57]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/nonograms "puzzle_solver/src/puzzle_solver/puzzles/nonograms at master · Ar-Kareem/puzzle_solver · GitHub"