multi-puzzle-solver 1.0.3__tar.gz → 1.0.4__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 (131) hide show
  1. {multi_puzzle_solver-1.0.3/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-1.0.4}/PKG-INFO +305 -112
  2. multi_puzzle_solver-1.0.3/PKG-INFO → multi_puzzle_solver-1.0.4/README.md +5428 -5261
  3. multi_puzzle_solver-1.0.3/README.md → multi_puzzle_solver-1.0.4/src/multi_puzzle_solver.egg-info/PKG-INFO +5454 -5235
  4. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/multi_puzzle_solver.egg-info/SOURCES.txt +4 -0
  5. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/__init__.py +5 -1
  6. multi_puzzle_solver-1.0.4/src/puzzle_solver/puzzles/connect_the_dots/connect_the_dots.py +48 -0
  7. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/flood_it/parse_map/parse_map.py +0 -1
  8. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/galaxies/galaxies.py +108 -110
  9. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/lits/lits.py +4 -4
  10. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/norinori/norinori.py +11 -9
  11. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/star_battle/star_battle.py +10 -7
  12. multi_puzzle_solver-1.0.4/src/puzzle_solver/puzzles/twiddle/twiddle.py +112 -0
  13. multi_puzzle_solver-1.0.4/tests/test_connect_the_dots.py +140 -0
  14. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_flood_it.py +1 -1
  15. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_light_up.py +31 -0
  16. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_pipes.py +29 -0
  17. multi_puzzle_solver-1.0.4/tests/test_twiddle.py +41 -0
  18. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/pyproject.toml +0 -0
  19. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/setup.cfg +0 -0
  20. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/multi_puzzle_solver.egg-info/dependency_links.txt +0 -0
  21. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/multi_puzzle_solver.egg-info/requires.txt +0 -0
  22. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/multi_puzzle_solver.egg-info/top_level.txt +0 -0
  23. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/core/utils.py +0 -0
  24. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/core/utils_ortools.py +0 -0
  25. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/core/utils_visualizer.py +0 -0
  26. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/aquarium/aquarium.py +0 -0
  27. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/battleships/battleships.py +0 -0
  28. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/binairo/binairo.py +0 -0
  29. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/binairo/binairo_plus.py +0 -0
  30. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/black_box/black_box.py +0 -0
  31. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/bridges/bridges.py +0 -0
  32. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/chess_range/chess_melee.py +0 -0
  33. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/chess_range/chess_range.py +0 -0
  34. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/chess_range/chess_solo.py +0 -0
  35. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/dominosa/dominosa.py +0 -0
  36. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/filling/filling.py +0 -0
  37. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/flip/flip.py +0 -0
  38. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/flood_it/flood_it.py +0 -0
  39. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/galaxies/parse_map/parse_map.py +0 -0
  40. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/guess/guess.py +0 -0
  41. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/heyawake/heyawake.py +0 -0
  42. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/inertia/inertia.py +0 -0
  43. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/inertia/parse_map/parse_map.py +0 -0
  44. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/inertia/tsp.py +0 -0
  45. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/kakurasu/kakurasu.py +0 -0
  46. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/kakuro/kakuro.py +0 -0
  47. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/keen/keen.py +0 -0
  48. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/light_up/light_up.py +0 -0
  49. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/magnets/magnets.py +0 -0
  50. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/map/map.py +0 -0
  51. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/minesweeper/minesweeper.py +0 -0
  52. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/mosaic/mosaic.py +0 -0
  53. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/nonograms/nonograms.py +0 -0
  54. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/nurikabe/nurikabe.py +0 -0
  55. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/palisade/palisade.py +0 -0
  56. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/pearl/pearl.py +0 -0
  57. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/pipes/pipes.py +0 -0
  58. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/range/range.py +0 -0
  59. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/rectangles/rectangles.py +0 -0
  60. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/shakashaka/shakashaka.py +0 -0
  61. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/shingoki/shingoki.py +0 -0
  62. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/signpost/signpost.py +0 -0
  63. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/singles/singles.py +0 -0
  64. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/slant/parse_map/parse_map.py +0 -0
  65. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/slant/slant.py +0 -0
  66. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/slitherlink/slitherlink.py +0 -0
  67. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/star_battle/star_battle_shapeless.py +0 -0
  68. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/stitches/parse_map/parse_map.py +0 -0
  69. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/stitches/stitches.py +0 -0
  70. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/sudoku/sudoku.py +0 -0
  71. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/tapa/tapa.py +0 -0
  72. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/tents/tents.py +0 -0
  73. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/thermometers/thermometers.py +0 -0
  74. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/towers/towers.py +0 -0
  75. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/tracks/tracks.py +0 -0
  76. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/undead/undead.py +0 -0
  77. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/unequal/unequal.py +0 -0
  78. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/unruly/unruly.py +0 -0
  79. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/yin_yang/parse_map/parse_map.py +0 -0
  80. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/yin_yang/yin_yang.py +0 -0
  81. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/utils/visualizer.py +0 -0
  82. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_aquarium.py +0 -0
  83. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_battleships.py +0 -0
  84. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_binairo.py +0 -0
  85. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_binairo_plus.py +0 -0
  86. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_black_box.py +0 -0
  87. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_bridges.py +0 -0
  88. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_chess_melee.py +0 -0
  89. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_chess_range.py +0 -0
  90. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_chess_solo.py +0 -0
  91. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_dominosa.py +0 -0
  92. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_filling.py +0 -0
  93. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_flip.py +0 -0
  94. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_galaxies.py +0 -0
  95. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_guess.py +0 -0
  96. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_heyawake.py +0 -0
  97. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_inertia.py +0 -0
  98. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_kakurasu.py +0 -0
  99. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_kakuro.py +0 -0
  100. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_keen.py +0 -0
  101. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_lits.py +0 -0
  102. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_magnets.py +0 -0
  103. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_map.py +0 -0
  104. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_minesweeper.py +0 -0
  105. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_mosaic.py +0 -0
  106. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_nonograms.py +0 -0
  107. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_norinori.py +0 -0
  108. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_nurikabe.py +0 -0
  109. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_palisade.py +0 -0
  110. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_pearl.py +0 -0
  111. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_range.py +0 -0
  112. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_rectangles.py +0 -0
  113. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_shakashaka.py +0 -0
  114. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_shingoki.py +0 -0
  115. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_signpost.py +0 -0
  116. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_singles.py +0 -0
  117. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_slant.py +0 -0
  118. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_slitherlink.py +0 -0
  119. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_star_battle.py +0 -0
  120. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_stitches.py +0 -0
  121. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_sudoku.py +0 -0
  122. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_tapa.py +0 -0
  123. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_tents.py +0 -0
  124. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_thermometers.py +0 -0
  125. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_towers.py +0 -0
  126. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_tracks.py +0 -0
  127. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_undead.py +0 -0
  128. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_unequal.py +0 -0
  129. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_unruly.py +0 -0
  130. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_utils.py +0 -0
  131. {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_yin_yang.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multi-puzzle-solver
3
- Version: 1.0.3
3
+ Version: 1.0.4
4
4
  Summary: Efficient solvers for numerous popular and esoteric logic puzzles using CP-SAT
5
5
  Author: Ar-Kareem
6
6
  Project-URL: Homepage, https://github.com/Ar-Kareem/puzzle_solver
@@ -396,6 +396,13 @@ 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
+ </tr>
399
406
  </table>
400
407
 
401
408
  </div>
@@ -465,6 +472,7 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
465
472
  - [Sudoku Killer (Puzzle Type #53)](#sudoku-killer-puzzle-type-53)
466
473
  - [Flood It (Puzzle Type #54)](#flood-it-puzzle-type-54)
467
474
  - [Pipes (Puzzle Type #55)](#pipes-puzzle-type-55)
475
+ - [Connect the Dots (Puzzle Type #56)](#connect-the-dots-puzzle-type-56)
468
476
  - [Why SAT / CP-SAT?](#why-sat--cp-sat)
469
477
  - [Testing](#testing)
470
478
  - [Contributing](#contributing)
@@ -478,7 +486,7 @@ The puzzles that have solvers implemented are listed below. Each puzzle has a si
478
486
 
479
487
  ## Nonograms (Puzzle Type #1)
480
488
 
481
- Called "Pattern" in the website.
489
+ Also known as Hanjie, Paint by Numbers, Griddlers, Pic-a-Pix, Picross, and Pattern.
482
490
 
483
491
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/pattern.html)
484
492
 
@@ -566,7 +574,7 @@ Time taken: 0.04 seconds
566
574
 
567
575
  ## Sudoku (Puzzle Type #2)
568
576
 
569
- Called "Solo" in the website.
577
+ Also known as Number Place and Solo.
570
578
 
571
579
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/solo.html)
572
580
 
@@ -798,6 +806,8 @@ Time taken: 0.02 seconds
798
806
 
799
807
  ## Light Up (Puzzle Type #5)
800
808
 
809
+ Also called Akari.
810
+
801
811
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/lightup.html)
802
812
 
803
813
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/lightup.html#lightup)
@@ -949,6 +959,8 @@ Time taken: 0.02 seconds
949
959
 
950
960
  ## Filling (Puzzle Type #7)
951
961
 
962
+ Also known as Fillomino
963
+
952
964
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/filling.html)
953
965
 
954
966
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/filling.html#filling)
@@ -1008,6 +1020,8 @@ Time taken: 0.10 seconds
1008
1020
 
1009
1021
  ## Keen (Puzzle Type #8)
1010
1022
 
1023
+ Also known as KenKen
1024
+
1011
1025
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/keen.html)
1012
1026
 
1013
1027
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/keen.html#keen)
@@ -1152,7 +1166,7 @@ Time taken: 0.03 seconds
1152
1166
 
1153
1167
  ## Singles (Puzzle Type #10)
1154
1168
 
1155
- Also known as "Hitori",
1169
+ Also known as Hitori.
1156
1170
 
1157
1171
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/singles.html)
1158
1172
 
@@ -1375,7 +1389,7 @@ Time taken: 0.03 seconds
1375
1389
 
1376
1390
  ## Range (Puzzle Type #13)
1377
1391
 
1378
- Also known as "Kurodoko"
1392
+ Also known as Kurodoko.
1379
1393
 
1380
1394
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/range.html)
1381
1395
 
@@ -1785,6 +1799,8 @@ Time taken: 0.01 seconds
1785
1799
 
1786
1800
  ## Pearl (Puzzle Type #19)
1787
1801
 
1802
+ Also known as Masyu
1803
+
1788
1804
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/pearl.html)
1789
1805
 
1790
1806
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/pearl.html#pearl)
@@ -1849,6 +1865,8 @@ Time taken: 0.98 seconds
1849
1865
 
1850
1866
  ## Bridges (Puzzle Type #20)
1851
1867
 
1868
+ Also known as Hashiwokakero
1869
+
1852
1870
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/bridges.html)
1853
1871
 
1854
1872
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/bridges.html#bridges)
@@ -2775,34 +2793,62 @@ solutions = binst.solve_and_print()
2775
2793
 
2776
2794
  ```python
2777
2795
  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
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
2796
+ 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
2797
+ 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
2798
+ ┌───────────────────┬───────────────────────────────────┬───────────┬───────────────────────────────┐
2799
+ 0│ . . . . X . X . X . . . . . . . . X . X . X . . .
2800
+ │ ┌───┐ ┌───────┘ ┌───────┐ ┌───┘ ├───────────────────────┐ │
2801
+ 1│ X . X . . . . . . . X . X . X . . . . . . . . X .
2802
+ │ │ └───┘ ┌───┘ └───┴───┐ ┌───┘ ┌───┘ │
2803
+ 2│ . . . . X . X . X . . . . . . . X . X . X . . . .
2804
+ │ │ ┌───┬───────────────────────┘ │ ┌───┘ │ ┌───┐ │
2805
+ 3│ X . X . . . . . . . X . X . . . . . . . . . X . X
2806
+ │ │ │ └───────────────────────┐ ┌───┘ └───────────┐ └───┤ │ │
2807
+ 4│ . . . . . X . X . . . . . . X . X . X . X . . . .
2808
+ │ └───┼───┐ ┌───────────────┐ │ │ │ ┌───┘ └───┤
2809
+ 5│ . X . X . . . . . X . X . . . . . . . . . . X . X
2810
+ │ ┌───┘ └───┴───┐ ┌───┘ └───┐ └───┐ ┌───┘ ┌───────┘ │
2811
+ 6│ . . . . . X . X . . . . . X . X . . X . X . . . .
2812
+ │ └───┐ │ └───────┐ ├───────────────┤ │ ┌───────┴───────┐ │
2813
+ 7│ . X . X . . . . . X . X . . . . . . . . . . X . X
2814
+ ├───────┘ ┌───┘ └───┤ ┌───┘ ├───┘ └───┐ ┌───┤
2815
+ 8│ . . . . . X . X . . . . . X . X . X . X . . . . .
2816
+ │ │ ┌───┘ │ ┌───┘ │ │ │
2817
+ 9│ . X . X . . . . . X . X . . . . . . . . . X . X .
2818
+ │ ┌───┘ ┌───┘ ├───────────┴───┐ └───┘ │
2819
+ 10│ . . . . . X . X . . . . . X . X . X . X . . . . .
2820
+ │ ┌───┘ ┌───┤ └───────────┐ │ ┌───┐ ┌───┐ │
2821
+ 11│ X . │ X . . . . │ . │ . X . X . . . . │ . │ . . . . │ X │ . │ X │ . │
2822
+ ├───┐ └───────────────────┘ │ ┌───────────┘ └───┐ │ │ │ ├───┤
2823
+ 12│ . │ . . . X . X . │ . . . . . │ X . X . X │ . X . │ . │ . │ . │ . │
2824
+ │ └───────────┬───┐ ┌───────┼───┐ └───────────────┐ ├───────────┘ └───┘ │ │
2825
+ 13│ X . X . │ . │ . │ . . │ X │ . X . . . . . . │ . │ . . . X . X │ . │
2826
+ │ │ └───┘ │ │ ┌───────┐ ┌───┐ ┌───┘ │ ┌───────────────────┘ │
2827
+ 14│ . . . . │ X . X . │ . │ . . │ . X │ . │ X │ . │ X . │ X │ . . . . . . │
2828
+ │ └───┐ ┌───┘ ├───────┘ ┌───┴───┘ │ └───────┤ │ │
2829
+ 15│ . X . . . │ . . │ . X │ . X . │ . . . │ . . . │ . │ . X . X . X │
2830
+ │ ┌───────┘ │ ┌───┘ ┌───────┤ ┌───┐ └───────────┤ │ │
2831
+ 16│ . . . │ X . X . │ . │ . . │ . . │ X │ . │ X . X . │ X │ . . . . . . │
2832
+ │ ┌───────┘ │ │ │ ┌───┴───┘ └───┐ ┌───┐ ├───┘ ┌───┐ │
2833
+ 17│ . │ X . . . . . │ X │ . X │ . │ . . . . │ . │ . │ . │ . . │ X │ . X . X │
2834
+ │ └───────┐ ┌───────┘ │ ┌───┘ │ ┌───┐ │ │ │ │ ┌───┘ │ │
2835
+ 18│ . . . │ X . │ X . . │ . │ . . │ X │ . │ X . │ X │ . │ X │ . │ . . │ . . . . │
2836
+ │ │ └───┐ │ └───┐ └───┘ └───┐ └───┘ └───┴───┘ ┌───┘ ┌───────┐ │
2837
+ 19│ X . . │ . . . │ . X │ . X │ . . . . │ . . . . . X │ . X │ . X │ . │
2838
+ │ └───┬───┐ │ ┌───┤ ┌───┘ └───┐ ┌───────────┐ │ │ ┌───┘ │
2839
+ 20│ . . X . │ X │ . │ . │ . │ . │ . . X . X . │ X │ . X . │ . │ . . │ . │ . . │
2840
+ │ │ ├───┤ │ │ │ ┌───────┴───┘ │ │ ┌───┘ └───┐ │
2841
+ 21│ X . . . │ . │ . │ X │ . │ X │ . . . . │ . . . . . . │ X │ . │ X . X │ . │
2842
+ │ ┌───────┐ │ │ └───┘ │ │ │ └───┴───┴───────┐ │ │
2843
+ 22│ . │ . X │ . │ X │ . . . │ . │ . X . X │ . X . X . . . . . . │ . │ . │
2844
+ │ │ ┌───┘ │ │ ┌───┐ │ │ │ ┌───────────┘ └───┤
2845
+ 23│ . │ . │ . . │ . │ . │ X │ . │ X │ . . . . │ . . . . . X . │ X . X . X │
2846
+ │ │ └───────┘ └───┘ │ └───┘ │ └───────────────────┤
2847
+ 24│ . │ X . X . . . │ . . . X . X │ . X . X . . . . . . . . │
2848
+ └───┴───────────────────────┴───────────────────────┴───────────────────────────────────────────────┘
2803
2849
  Solutions found: 1
2804
2850
  status: OPTIMAL
2805
- Time taken: 0.38 seconds
2851
+ Time taken: 0.39 seconds
2806
2852
  ```
2807
2853
 
2808
2854
  **Solved puzzle**
@@ -2860,16 +2906,29 @@ solutions = binst.solve_and_print()
2860
2906
 
2861
2907
  ```python
2862
2908
  Solution found
2863
- ['*', ' ', ' ', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2864
- [' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2865
- [' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2866
- [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2867
- [' ', ' ', '*', ' ', ' ', '*', ' ', ' ', ' ', ' '],
2868
- ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' '],
2869
- [' ', ' ', ' ', '*', ' ', ' ', '*', ' ', ' ', ' '],
2870
- [' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'],
2871
- [' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2872
- [' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', ' ']
2909
+ 0 0 0 0 0 0 0 0 0 0
2910
+ 0 1 2 3 4 5 6 7 8 9
2911
+ ┌───────────────────────────────────────┐
2912
+ 0│ X . . . X . . . . .
2913
+ ├───┐ │
2914
+ 1│ │ . . . . . X . X .
2915
+ │ │ ┌───┐ │
2916
+ 2│ │ . X . X . . . │ │ .
2917
+ │ └───┐ ┌───┐ └───┘ │
2918
+ 3│ │ . . │ │ . . X . X
2919
+ │ │ │ │ │
2920
+ 4│ │ X . │ │ X . . . . │
2921
+ ├───────┘ └───┘ │
2922
+ 5│ X . . . . . . . X . │
2923
+ │ ┌───┐ ┌───┐ │
2924
+ 6│ . . . X │ │ . X . │ │ . │
2925
+ ├───┐ └───┘ ┌───┘ │ │
2926
+ 7│ │ X . . . . . │ │ X │
2927
+ │ └───┐ ┌───┘ │ │
2928
+ 8│ │ . X . X │ │ . │
2929
+ │ ┌───┘ ┌───┐ └───────────┘ │
2930
+ 9│ │ X . . │ │ . . X . . │
2931
+ └───┴───────────┴───┴───────────────────┘
2873
2932
  Solutions found: 1
2874
2933
  status: OPTIMAL
2875
2934
  Time taken: 0.02 seconds
@@ -2940,30 +2999,52 @@ solutions = binst.solve_then_constrain() # solve_then_constrain NOT solve_and_p
2940
2999
 
2941
3000
  ```python
2942
3001
  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
- ]
3002
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3003
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3004
+ ┌───────────┬───────┬───────────┬───────────┬───────┬───┬───┬───────┬───────┬───┐
3005
+ 0│▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒ ▒▒▒│ │ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│ │
3006
+ │ └───┐ │ ┌───────┘ ┌───┬───┘ ┌───┘ │ │ ┌───┘ ┌───┘ │
3007
+ 1│ ▒▒▒ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒ ▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ │
3008
+ ├───────────┬───┘ │ └───┐ ┌───┘ │ │ ┌───┘ │ └───────┤ ┌───┤
3009
+ 2│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒│ │
3010
+ │ ┌───────┴───┐ │ ┌───┘ └───┐ │ ├───┘ │ ┌───┬───┘ │ │
3011
+ 3│▒▒▒│ │▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│ │▒▒▒ ▒▒▒│ │
3012
+ │ └───────┐ ├───┴───┤ ┌───────┤ │ │ ┌───────┼───┘ │ ┌───┘ │
3013
+ 4│ │▒▒▒│▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │▒▒▒ │▒▒▒│ │ │▒▒▒│ │
3014
+ ├───┬───────┘ │ │ └───┐ └───┤ ├───┘ │ └───┘ ┌───┤
3015
+ 5│▒▒▒│ ▒▒▒ ▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒│ │
3016
+ │ │ ┌───┐ ├───┐ │ │ ┌───┘ ┌───┘ ┌───────┼───┬───────────┤ │
3017
+ 6│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│ │▒▒▒│
3018
+ │ └───┤ └───┤ └───┤ ├───┴───────┼───────┴───┐ │ │ ┌───┘ │
3019
+ 7│▒▒▒ ▒▒▒│ ▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒ │ │▒▒▒│ ▒▒▒│ ▒▒▒│
3020
+ │ ┌───┤ │ └───┬───┘ ┌───────┤ ┌───┘ │ └───┐ └───┐ │
3021
+ 8│ │▒▒▒│ ▒▒▒│ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒│
3022
+ ├───┘ └───┐ └───┐ └───────┘ ┌───┘ ┌───┘ └───────┤ ┌───┤ │
3023
+ 9│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ ▒▒▒ │▒▒▒│ │▒▒▒│
3024
+ ├───────────┼───────┴───────┐ ┌───┴───┐ ├───┬───────────┐ ├───┘ └───┤
3025
+ 10│ │ ▒▒▒ ▒▒▒│ │ ▒▒▒│ │ │▒▒▒ ▒▒▒ ▒▒▒│ │ │
3026
+ │ ┌───┐ └───────────┐ ├───────┼───┐ └───┤ └───────┐ └───┼───────┐ │
3027
+ 11│ │▒▒▒│ ▒▒▒ ▒▒▒ │▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ ▒▒▒ │▒▒▒ │▒▒▒ ▒▒▒│ │
3028
+ │ │ └───┐ ┌───┘ │ │ └───┐ │ │ ┌───┘ ┌───┘ │
3029
+ 12│ │▒▒▒ ▒▒▒│ ▒▒▒│ ▒▒▒│ │▒▒▒ │▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒│ │
3030
+ │ │ ┌───┴───┐ │ ┌───┘ ┌───┘ ┌───┴───┼───────┬───┴───┴───────┤ ┌───┤
3031
+ 13│ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒ │ │▒▒▒│
3032
+ │ ├───┘ ├───┼───┘ ├───┬───┘ │ ├───────┐ │ │ │
3033
+ 14│ │▒▒▒ ▒▒▒ │▒▒▒│ ▒▒▒ │▒▒▒│ ▒▒▒ │▒▒▒ ▒▒▒│ │▒▒▒ │ │▒▒▒│
3034
+ ├───┘ ┌───────┘ │ ┌───┘ └───┐ ┌───┘ │ ├───────┘ │ │
3035
+ 15│▒▒▒ ▒▒▒│ ▒▒▒ ▒▒▒│ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│
3036
+ ├───────┴───┐ ┌───┤ └───────┬───┘ ├───────────┤ └───┐ │ │
3037
+ 16│ ▒▒▒ ▒▒▒│▒▒▒│ │ ▒▒▒ │ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒│▒▒▒│
3038
+ ├───┐ ├───┘ └───────┐ ┌───┴───────┤ ┌───────┘ ┌───┐ ├───┐ └───┤
3039
+ 17│▒▒▒│ ▒▒▒│ ▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│ ▒▒▒│ │ │▒▒▒│ │
3040
+ │ └───┐ │ ┌───┐ ├───┴───┐ ├───┤ ┌───┐ │ ├───┘ └───┐ │
3041
+ 18│▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │ │▒▒▒ │▒▒▒ │▒▒▒│ │ │▒▒▒│ │▒▒▒ ▒▒▒ ▒▒▒│ │
3042
+ │ ┌───┴───┴───────┘ ├───┘ │ ┌───┘ └───┘ │ │ └───────────┘ │
3043
+ 19│▒▒▒│ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│▒▒▒ ▒▒▒ ▒▒▒ │▒▒▒│ │
3044
+ └───┴───────────────────┴───────────┴───┴───────────────┴───┴───────────────────┘
2965
3045
  Solutions found: 1
2966
- Time taken: 0.38 seconds
3046
+ status: OPTIMAL
3047
+ Time taken: 0.09 seconds
2967
3048
  ```
2968
3049
 
2969
3050
  **Solved puzzle**
@@ -3134,26 +3215,42 @@ As the instructions say, the solution to this puzzle is not garunteed to be uniq
3134
3215
 
3135
3216
  ```python
3136
3217
  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
- ]
3218
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
3219
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
3220
+ ┌───────────────────┬───────┬───────┬───────┬───────────────┐
3221
+ 0│ . │ . . . . . . │ . . │
3222
+ ├───────┬───┬───────┤ │ ├───────┼───────────┬───┤
3223
+ 1│ . . │ │ . . . . . │ │ . │ │
3224
+ ├───┬───┘ └───┐ └───┬───┴───┬───┘ └───────┬───┘ │
3225
+ 2│ . │ │ . │ . . │ . │ │
3226
+ ├───┤ └───────┼───────┼───┬───┐ ┌───┤ │
3227
+ 3│ │ │ . . . │ │ │ │ . .
3228
+ │ │ │ ├───┘ └───────┤ │ │
3229
+ 4│ . │ . │ . . │ │ . │ │
3230
+ │ ├───────┐ └───────┤ │ │ ┌───┤
3231
+ 5│ │ . │ . │ │ . │ │ .
3232
+ ├───┘ ┌───┤ │ ┌───┤ ├───┤ │
3233
+ 6│ . . │ │ . │ │ │ . .
3234
+ ├───┬───┼───┴───┬───┐ │ │ └───┤ ├───┤
3235
+ 7│ │ . │ │ . │ │ . │ . . │ . │ . │
3236
+ │ ├───┘ ┌───┴───┼───┐ ┌───┘ ├───┐ ├───┴───┤
3237
+ 8│ . │ . . │ . . │ . │ │ │ │ │ . . │
3238
+ │ │ │ ├───┴───┤ │ ├───┤ │
3239
+ 9│ │ . . │ . . │ . . │ │ . │ │ . . │
3240
+ ├───┘ ┌───┴───────┤ ├───────┐ ┌───┤ │ └───────┤
3241
+ 10│ │ . . │ . . │ . │ │ . │ │ │
3242
+ ├───┬───┴───┐ └───┬───┘ ┌───┴───┴───┴───┤ │
3243
+ 11│ . │ │ . . │ . │ │ . │
3244
+ ├───┴───┐ └───┬───┬───┼───┬───┴───┐ ┌───┤ │
3245
+ 12│ │ . . │ │ . │ │ . . │ . . │ . │ . │
3246
+ ├───┐ │ │ └───┤ │ │ │ │ │
3247
+ 13│ . │ . │ . . │ . . │ . │ . . │ . . │ . │ │
3248
+ │ │ └───┐ └───┐ │ ├───┬───┘ └───┼───────┐ │
3249
+ 14│ . │ │ │ │ │ . │ │ . . │ │
3250
+ └───┴───────┴───────┴───┴───┴───┴───────────────┴───────┴───┘
3154
3251
  Solutions found: 1
3155
3252
  status: OPTIMAL
3156
- Time taken: 0.07 seconds
3253
+ Time taken: 0.06 seconds
3157
3254
  ```
3158
3255
 
3159
3256
  **Solved puzzle**
@@ -3242,7 +3339,11 @@ Applying the solution to the puzzle visually:
3242
3339
 
3243
3340
  Also called "Futoshiki" or Renzoku"
3244
3341
 
3245
- * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/unequal.html)
3342
+ * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/unequal.html)
3343
+
3344
+ * [**Play online 2**](https://www.puzzle-futoshiki.com/futoshiki-4x4-easy/) (Futoshiki variant)
3345
+
3346
+ * [**Play online 3**](https://www.puzzle-futoshiki.com/renzoku-4x4-easy/) (Renzoku variant)
3246
3347
 
3247
3348
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/unequal.html#unequal)
3248
3349
 
@@ -3387,28 +3488,49 @@ solutions = binst.solve_and_print()
3387
3488
 
3388
3489
  ```python
3389
3490
  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
- ]
3491
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3492
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3493
+ ┌───┬───────────────┬───┬───────┬───────────┬───────────┬───┬───┬───────┬───────┐
3494
+ 0│ X │ │ X X X X X │ │ X X X
3495
+ │ └───┐ │ │ ┌───┘ ┌───┬───┴───┐ ┌───┘ │ │ ├───────┤
3496
+ 1│ X │ X X │ │ X X X │ │ X │ │ X │ │
3497
+ ├───────┴───┐ ├───┘ ├───────┘ │ ┌───┤ ├───┬───┘ └───┬───┘ │
3498
+ 2│ X X X X X │ │ X X │ │ X
3499
+ │ ┌───┐ ├───────┴───┬───┴───────┬───┴───┤ └───┘ │ └───────┐ │
3500
+ 3│ X X │ │ X │ X X X │ │ X X
3501
+ │ │ └───┤ ┌───────┤ │ └───┐ ┌───┤ ┌───────────┴───┤
3502
+ 4│ │ X X │ │ │ X X │ │ X X X
3503
+ │ ├───────┴───┘ │ ┌───────┴───────┐ │ │ └───┐ │ ┌───────┐ │
3504
+ 5│ │ X X │ │ X X │ │ │ X X │ │ │ X X │ │
3505
+ ├───┴───┬───────────────┼───┼───────────┬───┴───┼───┘ ┌───┴───┼───┴───┬───┴───┤
3506
+ 6│ X │ X │ X X X │ │ X X │ X
3507
+ │ │ ┌───┬───────┤ │ ┌───┤ ┌───┴───┬───┴───┐ ├───┐ │ │
3508
+ 7│ X │ X X │ │ X │ │ X │ │ X X X │ │ │ X X
3509
+ ├───┬───┴───┘ │ ┌───┴───┘ │ │ └───┐ └───┬───┘ │ └───┤ ┌───┤
3510
+ 8│ X │ │ X X │ │ │ │ X X │ │ │
3511
+ │ └───┐ ┌───┤ ├───┬───────────┘ │ ┌───┘ ├───┬───┘ └───┘ │
3512
+ 9│ X │ X │ │ X │ │ X │ X │ X │ │ X │
3513
+ ├───┐ ├───┘ ├───┘ ├───────┐ ┌───┤ │ ┌───────┤ └───────────┬───────┤
3514
+ 10│ X │ │ │ │ X X │ │ X │ │ │ X X │ X │ X │
3515
+ │ └───┤ ┌───┴───┐ └───┬───┴───┘ ├───┴───┴───────┴───┐ ┌───────┴───┐ │
3516
+ 11│ X │ │ X X │ │ X │ X │ │ X │ │
3517
+ ├───────┤ └───┬───┘ └───┬───────┴───┬───┐ ┌───┤ ├───────┐ │ │
3518
+ 12│ X │ X │ X │ X │ X │ │ X │ │ X │ X │ X │
3519
+ │ ┌───┘ ┌───┴───┐ ├───┐ │ ├───┐ │ │ └───┐ │ │ │
3520
+ 13│ X │ │ X X │ X │ │ X │ X │ │ X │ │ X │ X │ │ │
3521
+ ├───┘ ├───┬───┴───────────┘ └───┬───┴───┘ └───┘ ├───────┴───┼───┴───┤
3522
+ 14│ X │ │ X X │ X │ X X │ │
3523
+ ├───┐ │ └───┬───────────┬───┐ └───┬───────────────┴───┬───────┘ │
3524
+ 15│ │ │ X X │ X │ X │ │ X X │ X X │
3525
+ │ ├───┬───┴───┬───┘ ┌───────┤ └───────┼───┐ ┌───┬───┴───────────────┤
3526
+ 16│ │ X │ │ X │ X │ X │ X │ │ X │ X X │
3527
+ │ │ │ └───────┤ ┌───┴───────────┤ └───┬───┤ │ ┌───┬───────┐ │
3528
+ 17│ │ X │ X X │ │ X X │ X │ X │ │ │ │ X X │ │
3529
+ │ └───┴───┐ ┌───────┘ └───┬───┬───────┴───┐ │ │ └───┤ │ └───┤
3530
+ 18│ X X │ │ X │ │ X X │ │ │ X │ X │ │
3531
+ ├───────────┴───┴───┬───────┬───┘ └───────┬───┘ │ └───────┤ │ ┌───────┤
3532
+ 19│ X X │ X X │ X X │ │ X │ X │ │ X X │
3533
+ └───────────────────┴───────┴───────────────┴───────┴───────────┴───┴───┴───────┘
3412
3534
  Solutions found: 1
3413
3535
  status: OPTIMAL
3414
3536
  Time taken: 0.04 seconds
@@ -3424,7 +3546,7 @@ Applying the solution to the puzzle visually:
3424
3546
 
3425
3547
  ## Slitherlink (Puzzle Type #39)
3426
3548
 
3427
- Also known as Fences, Loop the Loop, and Loopy
3549
+ Also known as Fences, Loop the Loop, and Loopy.
3428
3550
 
3429
3551
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/loopy.html)
3430
3552
 
@@ -3741,7 +3863,7 @@ Applying the solution to the puzzle visually:
3741
3863
 
3742
3864
  ## Rectangles (Puzzle Type #42)
3743
3865
 
3744
- Also called "Shikaku".
3866
+ Also known as Shikaku.
3745
3867
 
3746
3868
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/rect.html)
3747
3869
 
@@ -4238,7 +4360,7 @@ Time taken: 38.04 seconds
4238
4360
 
4239
4361
  ## Shingoki (Puzzle Type #47)
4240
4362
 
4241
- Also called "Semaphores".
4363
+ Also known as Semaphores.
4242
4364
 
4243
4365
  * [**Play online**](https://www.puzzle-shingoki.com/)
4244
4366
 
@@ -4597,7 +4719,7 @@ Time taken: 0.00 seconds
4597
4719
 
4598
4720
  ## Shakashaka (Puzzle Type #50)
4599
4721
 
4600
- Also called "Proof of Quilt"
4722
+ Also known as Proof of Quilt.
4601
4723
 
4602
4724
  * [**Play online**](https://www.puzzle-shakashaka.com/)
4603
4725
 
@@ -5082,7 +5204,7 @@ Note that the solved solution on the bottom left says that only 18 moves were us
5082
5204
 
5083
5205
  ## Pipes (Puzzle Type #55)
5084
5206
 
5085
- Also called "Net"
5207
+ Also known as Net.
5086
5208
 
5087
5209
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/net.html)
5088
5210
 
@@ -5153,6 +5275,76 @@ Time taken: 5.65 seconds
5153
5275
 
5154
5276
  ---
5155
5277
 
5278
+ ## Connect the Dots (Puzzle Type #56)
5279
+
5280
+ * [**Mobile App (Android)**](https://play.google.com/store/apps/details?id=com.playvalve.connect.dots&hl=en_US)
5281
+
5282
+ * [**Mobile App (iOS)**](https://apps.apple.com/us/app/dot-link-connect-the-dots/id6444312485)
5283
+
5284
+ * [**Solver Code**][56]
5285
+
5286
+ <details>
5287
+ <summary><strong>Rules</strong></summary>
5288
+
5289
+ 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.
5290
+ </details>
5291
+
5292
+ **Unsolved puzzle**
5293
+
5294
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_unsolved.png" alt="Connect the Dots unsolved" width="500">
5295
+
5296
+ Code to utilize this package and solve the puzzle:
5297
+
5298
+ ```python
5299
+ import numpy as np
5300
+ from puzzle_solver import connect_the_dots_solver as solver
5301
+ board = np.array([
5302
+ ['R', ' ', 'B', ' ', ' ', ' ', ' ', ' '],
5303
+ ['Y', ' ', ' ', 'R', 'G', ' ', 'G', ' '],
5304
+ [' ', 'M', ' ', ' ', ' ', 'P', ' ', ' '],
5305
+ [' ', 'O', ' ', ' ', ' ', 'M', ' ', ' '],
5306
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
5307
+ ['Br', 'B', ' ', ' ', 'Y', 'O', ' ', ' '],
5308
+ [' ', ' ', ' ', ' ', ' ', 'P', ' ', ' '],
5309
+ [' ', ' ', ' ', 'Br', ' ', ' ', ' ', ' '],
5310
+ ])
5311
+ binst = solver.Board(board=board)
5312
+ solutions = binst.solve_and_print()
5313
+ ```
5314
+
5315
+ **Script Output**
5316
+
5317
+ ```python
5318
+ Solution found
5319
+ 0 1 2 3 4 5 6 7
5320
+ ┌───────┬───────────────────────┐
5321
+ 0│ R R │ B B B B B B │
5322
+ ├───┐ └───────┬───────────┐ │
5323
+ 1│ Y │ R R R │ G G G │ B │
5324
+ │ ├───────────┴───┬───────┤ │
5325
+ 2│ Y │ M M M M │ P P │ B │
5326
+ │ ├───────────┐ └───┐ │ │
5327
+ 3│ Y │ O O O │ M M │ P │ B │
5328
+ │ └───────┐ └───────┤ │ │
5329
+ 4│ Y Y Y │ O O O │ P │ B │
5330
+ ├───┬───┐ └───────┐ │ │ │
5331
+ 5│Br │ B │ Y Y Y │ O │ P │ B │
5332
+ │ │ └───────────┼───┘ │ │
5333
+ 6│Br │ B B B B │ P P │ B │
5334
+ │ └───────────┐ └───────┘ │
5335
+ 7│Br Br Br Br │ B B B B │
5336
+ └───────────────┴───────────────┘
5337
+ Solutions found: 1
5338
+ status: OPTIMAL
5339
+ Time taken: 2.91 seconds
5340
+ ```
5341
+
5342
+ **Solved puzzle**
5343
+
5344
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_solved.png" alt="Connect the Dots solved" width="500">
5345
+
5346
+ ---
5347
+
5156
5348
  ---
5157
5349
 
5158
5350
  ## Why SAT / CP-SAT?
@@ -5235,7 +5427,7 @@ Issues and PRs welcome!
5235
5427
  [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
5428
  [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
5429
  [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"
5430
+ [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
5431
  [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
5432
  [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
5433
  [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 +5444,11 @@ Issues and PRs welcome!
5252
5444
  [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
5445
  [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
5446
  [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"
5447
+ [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
5448
  [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
5449
  [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
5450
  [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
5451
  [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
5452
  [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
5453
  [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"
5454
+ [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"