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.
- {multi_puzzle_solver-1.0.3/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-1.0.4}/PKG-INFO +305 -112
- multi_puzzle_solver-1.0.3/PKG-INFO → multi_puzzle_solver-1.0.4/README.md +5428 -5261
- multi_puzzle_solver-1.0.3/README.md → multi_puzzle_solver-1.0.4/src/multi_puzzle_solver.egg-info/PKG-INFO +5454 -5235
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/multi_puzzle_solver.egg-info/SOURCES.txt +4 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/__init__.py +5 -1
- multi_puzzle_solver-1.0.4/src/puzzle_solver/puzzles/connect_the_dots/connect_the_dots.py +48 -0
- {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
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/galaxies/galaxies.py +108 -110
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/lits/lits.py +4 -4
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/norinori/norinori.py +11 -9
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/star_battle/star_battle.py +10 -7
- multi_puzzle_solver-1.0.4/src/puzzle_solver/puzzles/twiddle/twiddle.py +112 -0
- multi_puzzle_solver-1.0.4/tests/test_connect_the_dots.py +140 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_flood_it.py +1 -1
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_light_up.py +31 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_pipes.py +29 -0
- multi_puzzle_solver-1.0.4/tests/test_twiddle.py +41 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/pyproject.toml +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/setup.cfg +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/multi_puzzle_solver.egg-info/dependency_links.txt +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/multi_puzzle_solver.egg-info/requires.txt +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/multi_puzzle_solver.egg-info/top_level.txt +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/core/utils.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/core/utils_ortools.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/core/utils_visualizer.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/aquarium/aquarium.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/battleships/battleships.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/binairo/binairo.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/binairo/binairo_plus.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/black_box/black_box.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/bridges/bridges.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/chess_range/chess_melee.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/chess_range/chess_range.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/chess_range/chess_solo.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/dominosa/dominosa.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/filling/filling.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/flip/flip.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/flood_it/flood_it.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/galaxies/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/guess/guess.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/heyawake/heyawake.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/inertia/inertia.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/inertia/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/inertia/tsp.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/kakurasu/kakurasu.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/kakuro/kakuro.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/keen/keen.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/light_up/light_up.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/magnets/magnets.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/map/map.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/minesweeper/minesweeper.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/mosaic/mosaic.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/nonograms/nonograms.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/nurikabe/nurikabe.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/palisade/palisade.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/pearl/pearl.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/pipes/pipes.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/range/range.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/rectangles/rectangles.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/shakashaka/shakashaka.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/shingoki/shingoki.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/signpost/signpost.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/singles/singles.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/slant/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/slant/slant.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/slitherlink/slitherlink.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/star_battle/star_battle_shapeless.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/stitches/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/stitches/stitches.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/sudoku/sudoku.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/tapa/tapa.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/tents/tents.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/thermometers/thermometers.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/towers/towers.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/tracks/tracks.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/undead/undead.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/unequal/unequal.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/unruly/unruly.py +0 -0
- {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
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/puzzles/yin_yang/yin_yang.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/src/puzzle_solver/utils/visualizer.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_aquarium.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_battleships.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_binairo.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_binairo_plus.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_black_box.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_bridges.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_chess_melee.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_chess_range.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_chess_solo.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_dominosa.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_filling.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_flip.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_galaxies.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_guess.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_heyawake.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_inertia.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_kakurasu.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_kakuro.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_keen.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_lits.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_magnets.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_map.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_minesweeper.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_mosaic.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_nonograms.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_norinori.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_nurikabe.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_palisade.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_pearl.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_range.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_rectangles.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_shakashaka.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_shingoki.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_signpost.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_singles.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_slant.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_slitherlink.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_star_battle.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_stitches.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_sudoku.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_tapa.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_tents.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_thermometers.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_towers.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_tracks.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_undead.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_unequal.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_unruly.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_utils.py +0 -0
- {multi_puzzle_solver-1.0.3 → multi_puzzle_solver-1.0.4}/tests/test_yin_yang.py +0 -0
{multi_puzzle_solver-1.0.3/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-1.0.4}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multi-puzzle-solver
|
|
3
|
-
Version: 1.0.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
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
|
-
|
|
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
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3145
|
-
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
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.
|
|
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
|
-
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3401
|
-
|
|
3402
|
-
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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/
|
|
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/
|
|
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"
|