multi-puzzle-solver 0.9.24__tar.gz → 0.9.25__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.24/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-0.9.25}/PKG-INFO +103 -3
- multi_puzzle_solver-0.9.24/PKG-INFO → multi_puzzle_solver-0.9.25/README.md +3889 -3815
- multi_puzzle_solver-0.9.24/README.md → multi_puzzle_solver-0.9.25/src/multi_puzzle_solver.egg-info/PKG-INFO +3915 -3789
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/multi_puzzle_solver.egg-info/SOURCES.txt +5 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/__init__.py +3 -1
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/core/utils.py +77 -57
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/core/utils_ortools.py +6 -10
- multi_puzzle_solver-0.9.25/src/puzzle_solver/puzzles/flip/flip.py +48 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/lits/lits.py +2 -28
- multi_puzzle_solver-0.9.25/src/puzzle_solver/puzzles/palisade/palisade.py +104 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/slitherlink/slitherlink.py +8 -3
- multi_puzzle_solver-0.9.25/tests/test_flip.py +2 -0
- multi_puzzle_solver-0.9.25/tests/test_palisade.py +157 -0
- multi_puzzle_solver-0.9.25/tests/test_utils.py +11 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/pyproject.toml +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/setup.cfg +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/multi_puzzle_solver.egg-info/dependency_links.txt +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/multi_puzzle_solver.egg-info/requires.txt +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/multi_puzzle_solver.egg-info/top_level.txt +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/aquarium/aquarium.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/battleships/battleships.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/binairo/binairo.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/black_box/black_box.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/bridges/bridges.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/chess_range/chess_melee.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/chess_range/chess_range.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/chess_range/chess_solo.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/dominosa/dominosa.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/filling/filling.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/galaxies/galaxies.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/galaxies/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/guess/guess.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/inertia/inertia.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/inertia/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/inertia/tsp.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/kakurasu/kakurasu.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/keen/keen.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/light_up/light_up.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/magnets/magnets.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/map/map.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/minesweeper/minesweeper.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/mosaic/mosaic.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/nonograms/nonograms.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/norinori/norinori.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/pearl/pearl.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/range/range.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/rectangles/rectangles.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/signpost/signpost.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/singles/singles.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/slant/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/slant/slant.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/star_battle/star_battle.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/star_battle/star_battle_shapeless.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/stitches/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/stitches/stitches.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/sudoku/sudoku.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/tents/tents.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/thermometers/thermometers.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/towers/towers.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/tracks/tracks.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/undead/undead.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/unequal/unequal.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/unruly/unruly.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/yin_yang/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/puzzles/yin_yang/yin_yang.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/src/puzzle_solver/utils/visualizer.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_aquarium.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_battleships.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_binairo.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_black_box.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_bridges.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_chess_melee.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_chess_range.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_chess_solo.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_dominosa.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_filling.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_galaxies.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_guess.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_inertia.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_kakurasu.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_keen.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_light_up.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_lits.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_magnets.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_map.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_minesweeper.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_mosaic.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_nonograms.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_norinori.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_pearl.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_range.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_rectangles.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_signpost.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_singles.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_slant.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_slitherlink.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_star_battle.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_stitches.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_sudoku.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_tents.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_thermometers.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_towers.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_tracks.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_undead.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_unequal.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_unruly.py +0 -0
- {multi_puzzle_solver-0.9.24 → multi_puzzle_solver-0.9.25}/tests/test_yin_yang.py +0 -0
{multi_puzzle_solver-0.9.24/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-0.9.25}/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.25
|
|
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
|
|
@@ -326,6 +326,11 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
|
|
|
326
326
|
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/rectangles_solved.png" alt="Rectangles" width="140">
|
|
327
327
|
</a>
|
|
328
328
|
</td>
|
|
329
|
+
<td align="center">
|
|
330
|
+
<a href="#palisade-puzzle-type-43"><b>Palisade</b><br><br>
|
|
331
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/palisade_solved.png" alt="Palisade" width="140">
|
|
332
|
+
</a>
|
|
333
|
+
</td>
|
|
329
334
|
</tr>
|
|
330
335
|
</table>
|
|
331
336
|
|
|
@@ -383,6 +388,7 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
|
|
|
383
388
|
- [Yin-Yang (Puzzle Type #40)](#yin-yang-puzzle-type-40)
|
|
384
389
|
- [Binairo (Puzzle Type #41)](#binairo-puzzle-type-41)
|
|
385
390
|
- [Rectangles (Puzzle Type #42)](#rectangles-puzzle-type-42)
|
|
391
|
+
- [Palisade (Puzzle Type #43)](#palisade-puzzle-type-43)
|
|
386
392
|
- [Why SAT / CP-SAT?](#why-sat--cp-sat)
|
|
387
393
|
- [Testing](#testing)
|
|
388
394
|
- [Contributing](#contributing)
|
|
@@ -3317,9 +3323,13 @@ Applying the solution to the puzzle visually:
|
|
|
3317
3323
|
|
|
3318
3324
|
## Slitherlink (Puzzle Type #39)
|
|
3319
3325
|
|
|
3320
|
-
Also known as Fences
|
|
3326
|
+
Also known as Fences, Loop the Loop, and Loopy
|
|
3321
3327
|
|
|
3322
|
-
* [**Play online**](https://www.
|
|
3328
|
+
* [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/loopy.html)
|
|
3329
|
+
|
|
3330
|
+
* [**Play online 2**](https://www.puzzle-loop.com)
|
|
3331
|
+
|
|
3332
|
+
* [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/loopy.html#loopy)
|
|
3323
3333
|
|
|
3324
3334
|
* [**Solver Code**][39]
|
|
3325
3335
|
|
|
@@ -3720,6 +3730,95 @@ Applying the solution to the puzzle visually:
|
|
|
3720
3730
|
|
|
3721
3731
|
---
|
|
3722
3732
|
|
|
3733
|
+
|
|
3734
|
+
## Palisade (Puzzle Type #43)
|
|
3735
|
+
|
|
3736
|
+
* [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/palisade.html)
|
|
3737
|
+
|
|
3738
|
+
* [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/palisade.html#palisade)
|
|
3739
|
+
|
|
3740
|
+
* [**Solver Code**][42]
|
|
3741
|
+
|
|
3742
|
+
<details>
|
|
3743
|
+
<summary><strong>Rules</strong></summary>
|
|
3744
|
+
|
|
3745
|
+
You're given a grid of N squares and a region size M, some of which contain numbers. Your goal is to subdivide the grid into (N/M) contiguous regions, where every region is of size M, such that each square containing a number is adjacent to exactly that many edges (including those between the inside and the outside of the grid).
|
|
3746
|
+
|
|
3747
|
+
</details>
|
|
3748
|
+
|
|
3749
|
+
**Unsolved puzzle**
|
|
3750
|
+
|
|
3751
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/palisade_unsolved.png" alt="Palisade unsolved" width="500">
|
|
3752
|
+
|
|
3753
|
+
Code to utilize this package and solve the puzzle:
|
|
3754
|
+
|
|
3755
|
+
(Note: it takes a few seconds for the model to be built if the region size is larger than 8 and around 10 seconds for a region size of 10)
|
|
3756
|
+
|
|
3757
|
+
```python
|
|
3758
|
+
import numpy as np
|
|
3759
|
+
from puzzle_solver import palisade_solver as solver
|
|
3760
|
+
board = np.array([
|
|
3761
|
+
['2', ' ', ' ', ' ', ' ', '3', ' ', ' ', '1', '1', '3', ' ', ' ', ' ', ' '],
|
|
3762
|
+
['3', '2', '1', ' ', '2', '3', ' ', ' ', ' ', ' ', ' ', '2', ' ', '0', ' '],
|
|
3763
|
+
[' ', ' ', ' ', '1', '1', ' ', ' ', '1', ' ', ' ', ' ', '1', ' ', ' ', ' '],
|
|
3764
|
+
[' ', '3', '2', ' ', ' ', ' ', ' ', '2', '3', ' ', ' ', ' ', '1', ' ', ' '],
|
|
3765
|
+
[' ', '0', '1', ' ', '2', ' ', ' ', '0', ' ', ' ', ' ', '1', ' ', '3', '2'],
|
|
3766
|
+
['1', '0', ' ', ' ', ' ', '2', '2', ' ', '2', ' ', '3', ' ', '0', '2', ' '],
|
|
3767
|
+
[' ', ' ', ' ', ' ', ' ', '3', ' ', ' ', ' ', '2', ' ', ' ', ' ', ' ', ' '],
|
|
3768
|
+
[' ', '1', ' ', ' ', ' ', '3', '1', ' ', '1', ' ', ' ', ' ', ' ', '1', ' '],
|
|
3769
|
+
[' ', ' ', ' ', '0', ' ', ' ', '0', ' ', ' ', '1', '2', ' ', ' ', ' ', '3'],
|
|
3770
|
+
[' ', ' ', ' ', ' ', ' ', ' ', '1', ' ', ' ', '2', ' ', ' ', '1', '2', '1'],
|
|
3771
|
+
[' ', ' ', ' ', ' ', '1', ' ', '2', '3', '1', ' ', ' ', ' ', '2', ' ', '1'],
|
|
3772
|
+
['2', ' ', '1', ' ', '2', '2', '1', ' ', ' ', '2', ' ', ' ', ' ', ' ', ' '],
|
|
3773
|
+
])
|
|
3774
|
+
binst = solver.Board(board, region_size=10)
|
|
3775
|
+
solutions = binst.solve_and_print()
|
|
3776
|
+
```
|
|
3777
|
+
|
|
3778
|
+
**Script Output**
|
|
3779
|
+
|
|
3780
|
+
```python
|
|
3781
|
+
Solution found
|
|
3782
|
+
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
|
|
3783
|
+
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
|
|
3784
|
+
┌───────────────────┬───────────────────────┬───────────────┐
|
|
3785
|
+
0│ 2 · · · · │ 3 · · 1 1 3 │ · · · · │
|
|
3786
|
+
│ ┌───────────┐ ├───────┬───┐ ┌───┴───┐ │
|
|
3787
|
+
1│ 3 │ 2 1 · │ 2 │ 3 · │ · │ · · │ · 2 │ · 0 · │
|
|
3788
|
+
├───┘ │ └───┐ │ └───┐ └───┐ └───┐ │
|
|
3789
|
+
2│ · · · 1 │ 1 · │ · │ 1 · │ · · │ 1 · │ · · │
|
|
3790
|
+
│ ┌───┐ │ ┌───┘ │ ┌───┴───────┘ └───┐ │
|
|
3791
|
+
3│ · │ 3 │ 2 · │ · │ · · │ 2 │ 3 · · · 1 · │ · │
|
|
3792
|
+
├───┘ └───────┼───┘ ┌───┘ └───┬───────────────┬───┴───┤
|
|
3793
|
+
4│ · 0 1 · │ 2 · │ · 0 · │ · · 1 · │ 3 2 │
|
|
3794
|
+
│ ┌───┘ │ │ ┌───┐ └───┐ │
|
|
3795
|
+
5│ 1 0 · │ · · 2 │ 2 · 2 │ · │ 3 │ · 0 2 │ · │
|
|
3796
|
+
│ ┌───┴───────────┼───┬───────┴───┤ ├───┐ │ │
|
|
3797
|
+
6│ · · │ · · · 3 │ · │ · · 2 │ · │ · │ · · │ · │
|
|
3798
|
+
├───────┘ ┌───────────┤ └───┐ │ │ └───────┘ │
|
|
3799
|
+
7│ · 1 · │ · · 3 │ 1 · │ 1 · │ · │ · · 1 · │
|
|
3800
|
+
│ ┌───┘ ┌───┘ │ │ └───────┐ ┌───┤
|
|
3801
|
+
8│ · · │ · 0 · │ · 0 · │ · 1 │ 2 · · │ · │ 3 │
|
|
3802
|
+
│ ┌───┘ ┌───┤ ├───┐ └───┐ ├───┘ │
|
|
3803
|
+
9│ · │ · · · │ · │ · 1 · │ · │ 2 · │ · 1 │ 2 1 │
|
|
3804
|
+
├───┤ ┌───────┘ ├───────┐ │ └───┐ │ │ │
|
|
3805
|
+
10│ · │ · │ · · 1 │ · 2 │ 3 │ 1 · │ · │ · 2 │ · 1 │
|
|
3806
|
+
│ └───┘ │ └───┘ ├───┴───────┘ │
|
|
3807
|
+
11│ 2 · 1 · 2 │ 2 1 · · 2 │ · · · · · │
|
|
3808
|
+
└───────────────────┴───────────────────┴───────────────────┘
|
|
3809
|
+
Solutions found: 1
|
|
3810
|
+
status: OPTIMAL
|
|
3811
|
+
Time taken: 11.94 seconds
|
|
3812
|
+
```
|
|
3813
|
+
|
|
3814
|
+
**Solved puzzle**
|
|
3815
|
+
|
|
3816
|
+
Applying the solution to the puzzle visually:
|
|
3817
|
+
|
|
3818
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/palisade_solved.png" alt="Palisade solved" width="500">
|
|
3819
|
+
|
|
3820
|
+
---
|
|
3821
|
+
|
|
3723
3822
|
---
|
|
3724
3823
|
|
|
3725
3824
|
## Why SAT / CP-SAT?
|
|
@@ -3813,3 +3912,4 @@ Issues and PRs welcome!
|
|
|
3813
3912
|
[40]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/yin_yang "puzzle_solver/src/puzzle_solver/puzzles/yin_yang at master · Ar-Kareem/puzzle_solver · GitHub"
|
|
3814
3913
|
[41]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/binairo "puzzle_solver/src/puzzle_solver/puzzles/binairo at master · Ar-Kareem/puzzle_solver · GitHub"
|
|
3815
3914
|
[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"
|
|
3915
|
+
[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"
|