multi-puzzle-solver 0.9.26__tar.gz → 0.9.27__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-0.9.26/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-0.9.27}/PKG-INFO +127 -1
- multi_puzzle_solver-0.9.26/PKG-INFO → multi_puzzle_solver-0.9.27/README.md +4085 -3985
- multi_puzzle_solver-0.9.26/README.md → multi_puzzle_solver-0.9.27/src/multi_puzzle_solver.egg-info/PKG-INFO +4111 -3959
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/multi_puzzle_solver.egg-info/SOURCES.txt +3 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/__init__.py +2 -1
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/core/utils.py +0 -153
- multi_puzzle_solver-0.9.27/src/puzzle_solver/core/utils_visualizer.py +310 -0
- multi_puzzle_solver-0.9.27/src/puzzle_solver/puzzles/nurikabe/nurikabe.py +126 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/palisade/palisade.py +2 -1
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/rectangles/rectangles.py +2 -2
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/slitherlink/slitherlink.py +2 -1
- multi_puzzle_solver-0.9.27/tests/test_nurikabe.py +92 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/pyproject.toml +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/setup.cfg +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/multi_puzzle_solver.egg-info/dependency_links.txt +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/multi_puzzle_solver.egg-info/requires.txt +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/multi_puzzle_solver.egg-info/top_level.txt +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/core/utils_ortools.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/aquarium/aquarium.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/battleships/battleships.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/binairo/binairo.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/black_box/black_box.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/bridges/bridges.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/chess_range/chess_melee.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/chess_range/chess_range.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/chess_range/chess_solo.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/dominosa/dominosa.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/filling/filling.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/flip/flip.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/galaxies/galaxies.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/galaxies/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/guess/guess.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/inertia/inertia.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/inertia/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/inertia/tsp.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/kakurasu/kakurasu.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/keen/keen.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/light_up/light_up.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/lits/lits.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/magnets/magnets.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/map/map.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/minesweeper/minesweeper.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/mosaic/mosaic.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/nonograms/nonograms.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/norinori/norinori.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/pearl/pearl.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/range/range.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/signpost/signpost.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/singles/singles.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/slant/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/slant/slant.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/star_battle/star_battle.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/star_battle/star_battle_shapeless.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/stitches/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/stitches/stitches.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/sudoku/sudoku.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/tents/tents.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/thermometers/thermometers.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/towers/towers.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/tracks/tracks.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/undead/undead.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/unequal/unequal.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/unruly/unruly.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/yin_yang/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/puzzles/yin_yang/yin_yang.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/src/puzzle_solver/utils/visualizer.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_aquarium.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_battleships.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_binairo.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_black_box.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_bridges.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_chess_melee.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_chess_range.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_chess_solo.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_dominosa.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_filling.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_flip.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_galaxies.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_guess.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_inertia.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_kakurasu.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_keen.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_light_up.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_lits.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_magnets.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_map.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_minesweeper.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_mosaic.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_nonograms.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_norinori.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_palisade.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_pearl.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_range.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_rectangles.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_signpost.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_singles.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_slant.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_slitherlink.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_star_battle.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_stitches.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_sudoku.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_tents.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_thermometers.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_towers.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_tracks.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_undead.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_unequal.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_unruly.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_utils.py +0 -0
- {multi_puzzle_solver-0.9.26 → multi_puzzle_solver-0.9.27}/tests/test_yin_yang.py +0 -0
{multi_puzzle_solver-0.9.26/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-0.9.27}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multi-puzzle-solver
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.27
|
|
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
|
|
@@ -336,6 +336,11 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
|
|
|
336
336
|
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/flip_unsolved.png" alt="Flip" width="140">
|
|
337
337
|
</a>
|
|
338
338
|
</td>
|
|
339
|
+
<td align="center">
|
|
340
|
+
<a href="#nurikabe-puzzle-type-45"><b>Nurikabe</b><br><br>
|
|
341
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nurikabe_unsolved.png" alt="Nurikabe" width="140">
|
|
342
|
+
</a>
|
|
343
|
+
</td>
|
|
339
344
|
</tr>
|
|
340
345
|
</table>
|
|
341
346
|
|
|
@@ -395,6 +400,7 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
|
|
|
395
400
|
- [Rectangles (Puzzle Type #42)](#rectangles-puzzle-type-42)
|
|
396
401
|
- [Palisade (Puzzle Type #43)](#palisade-puzzle-type-43)
|
|
397
402
|
- [Flip (Puzzle Type #44)](#flip-puzzle-type-44)
|
|
403
|
+
- [Nurikabe (Puzzle Type #45)](#nurikabe-puzzle-type-45)
|
|
398
404
|
- [Why SAT / CP-SAT?](#why-sat--cp-sat)
|
|
399
405
|
- [Testing](#testing)
|
|
400
406
|
- [Contributing](#contributing)
|
|
@@ -3886,6 +3892,125 @@ This picture won't mean much as the game is about the sequence of moves not the
|
|
|
3886
3892
|
|
|
3887
3893
|
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/flip_solved.png" alt="Flip solved" width="500">
|
|
3888
3894
|
|
|
3895
|
+
---
|
|
3896
|
+
## Nurikabe (Puzzle Type #45)
|
|
3897
|
+
|
|
3898
|
+
* [**Play online**](https://www.puzzle-nurikabe.com/)
|
|
3899
|
+
|
|
3900
|
+
* [**Instructions**](https://www.logicgamesonline.com/nurikabe/)
|
|
3901
|
+
|
|
3902
|
+
* [**Solver Code**][45]
|
|
3903
|
+
|
|
3904
|
+
<details>
|
|
3905
|
+
<summary><strong>Rules</strong></summary>
|
|
3906
|
+
|
|
3907
|
+
Nurikabe is a binary determination puzzle. You must decide for each cell if it is white or black according to the following rules:
|
|
3908
|
+
|
|
3909
|
+
- All of the black cells must be connected.
|
|
3910
|
+
- Each numbered cell must be part of a white island of connected white cells.
|
|
3911
|
+
- Each island must have the same number of white cells as the number it contains (including the numbered cell).
|
|
3912
|
+
- Two islands may not be connected.
|
|
3913
|
+
- There cannot be any 2x2 blocks of black cells.
|
|
3914
|
+
|
|
3915
|
+
Read more about the history and methods behind nurikabe in the [Wikipedia nurikabe article](https://en.wikipedia.org/wiki/Nurikabe).
|
|
3916
|
+
|
|
3917
|
+
</details>
|
|
3918
|
+
|
|
3919
|
+
**Unsolved puzzle**
|
|
3920
|
+
|
|
3921
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nurikabe_unsolved.png" alt="Nurikabe unsolved" width="500">
|
|
3922
|
+
|
|
3923
|
+
Code to utilize this package and solve the puzzle:
|
|
3924
|
+
|
|
3925
|
+
(Note: the solver also supports random mapping of squares to the neighbors they flip, see the test cases in `tests/test_flip.py` for usage examples)
|
|
3926
|
+
|
|
3927
|
+
```python
|
|
3928
|
+
import numpy as np
|
|
3929
|
+
from puzzle_solver import nurikabe_solver as solver
|
|
3930
|
+
board = np.array([
|
|
3931
|
+
['2', ' ', '3', ' ', '3', ' ', ' ', ' ', '3', ' ', ' ', '3', ' ', ' ', ' ', '2', ' ', '2', ' ', ' '],
|
|
3932
|
+
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
|
|
3933
|
+
[' ', ' ', ' ', ' ', '2', ' ', ' ', '1', ' ', ' ', '1', ' ', '3', ' ', ' ', ' ', '3', ' ', ' ', ' '],
|
|
3934
|
+
['2', ' ', ' ', '1', ' ', ' ', '3', ' ', ' ', '2', ' ', '2', ' ', ' ', ' ', '1', ' ', ' ', ' ', ' '],
|
|
3935
|
+
[' ', ' ', '2', ' ', '2', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', ' ', ' ', ' '],
|
|
3936
|
+
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '2', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
|
|
3937
|
+
['1', ' ', ' ', ' ', ' ', '1', ' ', '2', ' ', ' ', '3', ' ', ' ', ' ', ' ', ' ', ' ', '1', ' ', '2'],
|
|
3938
|
+
[' ', '2', ' ', '2', ' ', ' ', '1', ' ', ' ', ' ', ' ', ' ', ' ', '6', ' ', ' ', '2', ' ', ' ', ' '],
|
|
3939
|
+
[' ', ' ', ' ', ' ', ' ', '2', ' ', '7', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', ' '],
|
|
3940
|
+
[' ', ' ', '3', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '2', ' ', '2', ' ', '2', ' ', ' ', ' ', ' ', ' '],
|
|
3941
|
+
['4', ' ', ' ', ' ', ' ', ' ', '7', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
|
|
3942
|
+
[' ', ' ', ' ', ' ', '7', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', ' ', ' ', ' ', ' '],
|
|
3943
|
+
[' ', ' ', '2', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '1', ' ', '1', ' ', ' ', ' ', ' ', ' ', '3'],
|
|
3944
|
+
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '2', ' ', '4', ' ', ' ', '7', ' ', ' ', ' ', ' '],
|
|
3945
|
+
[' ', '1', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
|
|
3946
|
+
[' ', ' ', '2', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '1', ' ', ' '],
|
|
3947
|
+
['2', ' ', ' ', ' ', ' ', ' ', ' ', '1', ' ', '3', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '2', ' '],
|
|
3948
|
+
[' ', ' ', ' ', '4', ' ', ' ', ' ', ' ', '1', ' ', ' ', ' ', '2', ' ', '1', ' ', '3', ' ', ' ', ' '],
|
|
3949
|
+
[' ', '1', ' ', ' ', ' ', ' ', ' ', '3', ' ', ' ', '1', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '2'],
|
|
3950
|
+
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '1', ' ', ' ', ' ', ' ', ' '],
|
|
3951
|
+
])
|
|
3952
|
+
binst = solver.Board(board=board)
|
|
3953
|
+
solutions = binst.solve_and_print()
|
|
3954
|
+
```
|
|
3955
|
+
|
|
3956
|
+
**Script Output**
|
|
3957
|
+
|
|
3958
|
+
The output tells you which squares to tap to solve the puzzle.
|
|
3959
|
+
|
|
3960
|
+
```python
|
|
3961
|
+
Solution found
|
|
3962
|
+
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
|
|
3963
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
|
|
3964
|
+
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
|
|
3965
|
+
0│ 2 │▒▒▒│ 3 │▒▒▒│ 3 │ │ │▒▒▒│ 3 │ │▒▒▒│ 3 │ │ │▒▒▒│ 2 │▒▒▒│ 2 │ │▒▒▒│
|
|
3966
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3967
|
+
1│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│
|
|
3968
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3969
|
+
2│▒▒▒│▒▒▒│ │▒▒▒│ 2 │ │▒▒▒│ 1 │▒▒▒│▒▒▒│ 1 │▒▒▒│ 3 │ │▒▒▒│▒▒▒│ 3 │ │ │▒▒▒│
|
|
3970
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3971
|
+
3│ 2 │▒▒▒│▒▒▒│ 1 │▒▒▒│▒▒▒│ 3 │▒▒▒│▒▒▒│ 2 │▒▒▒│ 2 │▒▒▒│ │▒▒▒│ 1 │▒▒▒│▒▒▒│▒▒▒│▒▒▒│
|
|
3972
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3973
|
+
4│ │▒▒▒│ 2 │▒▒▒│ 2 │▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ 3 │ │ │▒▒▒│
|
|
3974
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3975
|
+
5│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ 2 │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│
|
|
3976
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3977
|
+
6│ 1 │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ 1 │▒▒▒│ 2 │ │▒▒▒│ 3 │▒▒▒│ │▒▒▒│ │ │▒▒▒│ 1 │▒▒▒│ 2 │
|
|
3978
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3979
|
+
7│▒▒▒│ 2 │▒▒▒│ 2 │▒▒▒│▒▒▒│ 1 │▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│ 6 │ │▒▒▒│ 2 │▒▒▒│▒▒▒│ │
|
|
3980
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3981
|
+
8│▒▒▒│ │▒▒▒│ │▒▒▒│ 2 │▒▒▒│ 7 │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ 3 │▒▒▒│
|
|
3982
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3983
|
+
9│▒▒▒│▒▒▒│ 3 │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ 2 │▒▒▒│ 2 │▒▒▒│ 2 │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│
|
|
3984
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3985
|
+
10│ 4 │▒▒▒│ │ │▒▒▒│▒▒▒│ 7 │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│
|
|
3986
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3987
|
+
11│ │▒▒▒│▒▒▒│▒▒▒│ 7 │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ 3 │ │▒▒▒│▒▒▒│▒▒▒│
|
|
3988
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3989
|
+
12│ │▒▒▒│ 2 │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ 1 │▒▒▒│ 1 │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ 3 │
|
|
3990
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3991
|
+
13│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│ 2 │▒▒▒│ 4 │▒▒▒│▒▒▒│ 7 │ │ │▒▒▒│ │
|
|
3992
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3993
|
+
14│▒▒▒│ 1 │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │
|
|
3994
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3995
|
+
15│▒▒▒│▒▒▒│ 2 │▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ 1 │▒▒▒│▒▒▒│
|
|
3996
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3997
|
+
16│ 2 │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ 1 │▒▒▒│ 3 │ │ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ 2 │ │
|
|
3998
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
3999
|
+
17│ │▒▒▒│▒▒▒│ 4 │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ 1 │▒▒▒│▒▒▒│▒▒▒│ 2 │▒▒▒│ 1 │▒▒▒│ 3 │▒▒▒│▒▒▒│▒▒▒│
|
|
4000
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
4001
|
+
18│▒▒▒│ 1 │▒▒▒│ │ │ │▒▒▒│ 3 │▒▒▒│▒▒▒│ 1 │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│ 2 │
|
|
4002
|
+
├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
|
|
4003
|
+
19│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ 1 │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │
|
|
4004
|
+
└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
|
|
4005
|
+
Solutions found: 1
|
|
4006
|
+
status: OPTIMAL
|
|
4007
|
+
Time taken: 1.62 seconds
|
|
4008
|
+
```
|
|
4009
|
+
|
|
4010
|
+
**Solved puzzle**
|
|
4011
|
+
|
|
4012
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nurikabe_solved.png" alt="Nurikabe solved" width="500">
|
|
4013
|
+
|
|
3889
4014
|
---
|
|
3890
4015
|
|
|
3891
4016
|
---
|
|
@@ -3983,3 +4108,4 @@ Issues and PRs welcome!
|
|
|
3983
4108
|
[42]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/rectangles "puzzle_solver/src/puzzle_solver/puzzles/rectangles at master · Ar-Kareem/puzzle_solver · GitHub"
|
|
3984
4109
|
[43]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/palisade "puzzle_solver/src/puzzle_solver/puzzles/palisade at master · Ar-Kareem/puzzle_solver · GitHub"
|
|
3985
4110
|
[44]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/flip "puzzle_solver/src/puzzle_solver/puzzles/flip at master · Ar-Kareem/puzzle_solver · GitHub"
|
|
4111
|
+
[45]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/nurikabe "puzzle_solver/src/puzzle_solver/puzzles/nurikabe at master · Ar-Kareem/puzzle_solver · GitHub"
|