multi-puzzle-solver 0.9.5__tar.gz → 0.9.7__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.
- {multi_puzzle_solver-0.9.5/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-0.9.7}/PKG-INFO +176 -1
- multi_puzzle_solver-0.9.5/PKG-INFO → multi_puzzle_solver-0.9.7/README.md +2670 -2521
- multi_puzzle_solver-0.9.5/README.md → multi_puzzle_solver-0.9.7/src/multi_puzzle_solver.egg-info/PKG-INFO +2696 -2495
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/multi_puzzle_solver.egg-info/SOURCES.txt +4 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/__init__.py +3 -1
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/battleships/battleships.py +1 -1
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/bridges/bridges.py +1 -3
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/chess_range/chess_melee.py +0 -1
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/chess_range/chess_range.py +0 -1
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/dominosa/dominosa.py +2 -2
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/guess/guess.py +4 -3
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/inertia/inertia.py +0 -1
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/inertia/tsp.py +3 -2
- multi_puzzle_solver-0.9.7/src/puzzle_solver/puzzles/kakurasu/kakurasu.py +46 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/minesweeper/minesweeper.py +19 -6
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/signpost/signpost.py +1 -3
- multi_puzzle_solver-0.9.7/src/puzzle_solver/puzzles/star_battle/star_battle.py +63 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/stitches/parse_map/parse_map.py +2 -1
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/stitches/stitches.py +1 -3
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/tracks/tracks.py +1 -1
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/undead/undead.py +1 -1
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_battleships.py +0 -1
- multi_puzzle_solver-0.9.7/tests/test_kakurasu.py +58 -0
- multi_puzzle_solver-0.9.7/tests/test_minesweeper.py +77 -0
- multi_puzzle_solver-0.9.7/tests/test_star_battle.py +99 -0
- multi_puzzle_solver-0.9.5/tests/test_minesweeper.py +0 -37
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/pyproject.toml +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/setup.cfg +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/multi_puzzle_solver.egg-info/dependency_links.txt +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/multi_puzzle_solver.egg-info/requires.txt +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/multi_puzzle_solver.egg-info/top_level.txt +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/core/utils.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/core/utils_ortools.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/aquarium/aquarium.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/chess_range/chess_solo.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/filling/filling.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/inertia/parse_map/parse_map.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/keen/keen.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/light_up/light_up.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/magnets/magnets.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/map/map.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/mosaic/mosaic.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/nonograms/nonograms.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/pearl/pearl.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/range/range.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/singles/singles.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/sudoku/sudoku.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/tents/tents.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/thermometers/thermometers.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/towers/towers.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/puzzles/unruly/unruly.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/src/puzzle_solver/utils/visualizer.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_aquarium.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_bridges.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_chess_melee.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_chess_range.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_chess_solo.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_dominosa.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_filling.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_guess.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_inertia.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_keen.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_light_up.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_magnets.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_map.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_mosaic.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_nonograms.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_pearl.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_range.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_signpost.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_singles.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_stitches.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_sudoku.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_tents.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_thermometers.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_towers.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_tracks.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_undead.py +0 -0
- {multi_puzzle_solver-0.9.5 → multi_puzzle_solver-0.9.7}/tests/test_unruly.py +0 -0
{multi_puzzle_solver-0.9.5/src/multi_puzzle_solver.egg-info → multi_puzzle_solver-0.9.7}/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.7
|
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
|
@@ -242,6 +242,18 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
|
|
242
242
|
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/battleships_solved.png" alt="Battleships" width="140">
|
243
243
|
</a>
|
244
244
|
</td>
|
245
|
+
<td align="center">
|
246
|
+
<a href="#kakurasu-puzzle-type-30"><b>Kakurasu</b><br><br>
|
247
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/kakurasu_solved.png" alt="Kakurasu" width="140">
|
248
|
+
</a>
|
249
|
+
</td>
|
250
|
+
</tr>
|
251
|
+
<tr>
|
252
|
+
<td align="center">
|
253
|
+
<a href="#star-battle-puzzle-type-31"><b>Star Battle</b><br><br>
|
254
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/star_battle_unsolved.png" alt="Star Battle" width="140">
|
255
|
+
</a>
|
256
|
+
</td>
|
245
257
|
</tr>
|
246
258
|
</table>
|
247
259
|
|
@@ -286,6 +298,8 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
|
|
286
298
|
- [Aquarium (Puzzle Type #27)](#aquarium-puzzle-type-27)
|
287
299
|
- [Stitches (Puzzle Type #28)](#stitches-puzzle-type-28)
|
288
300
|
- [Battleships (Puzzle Type #29)](#battleships-puzzle-type-29)
|
301
|
+
- [Kakurasu (Puzzle Type #30)](#kakurasu-puzzle-type-30)
|
302
|
+
- [Star Battle (Puzzle Type #31)](#star-battle-puzzle-type-31)
|
289
303
|
- [Why SAT / CP-SAT?](#why-sat--cp-sat)
|
290
304
|
- [Testing](#testing)
|
291
305
|
- [Contributing](#contributing)
|
@@ -2439,6 +2453,165 @@ Time taken: 0.12 seconds
|
|
2439
2453
|
|
2440
2454
|
---
|
2441
2455
|
|
2456
|
+
## Kakurasu (Puzzle Type #30)
|
2457
|
+
|
2458
|
+
* [**Play online**](https://www.puzzle-kakurasu.com/)
|
2459
|
+
|
2460
|
+
* [**Solver Code**][30]
|
2461
|
+
|
2462
|
+
<details>
|
2463
|
+
<summary><strong>Rules</strong></summary>
|
2464
|
+
|
2465
|
+
The goal is to make some of the cells black in such a way that:
|
2466
|
+
|
2467
|
+
1. The black cells on each row sum up to the number on the right.
|
2468
|
+
|
2469
|
+
2. The black cells on each column sum up to the number on the bottom.
|
2470
|
+
|
2471
|
+
3. If a black cell is first on its row/column its value is 1. If it is second its value is 2 etc.
|
2472
|
+
|
2473
|
+
</details>
|
2474
|
+
|
2475
|
+
**Unsolved puzzle**
|
2476
|
+
|
2477
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/kakurasu_unsolved.png" alt="Kakurasu unsolved" width="500">
|
2478
|
+
|
2479
|
+
Code to utilize this package and solve the puzzle:
|
2480
|
+
|
2481
|
+
```python
|
2482
|
+
from puzzle_solver import kakurasu_solver as solver
|
2483
|
+
side = np.array([27, 6, 1, 12, 37, 37, 11, 4, 29, 23, 66, 55])
|
2484
|
+
bottom = np.array([22, 1, 25, 36, 10, 22, 25, 35, 32, 28, 45, 45])
|
2485
|
+
binst = solver.Board(side=side, bottom=bottom)
|
2486
|
+
solutions = binst.solve_and_print()
|
2487
|
+
```
|
2488
|
+
|
2489
|
+
|
2490
|
+
**Script Output**
|
2491
|
+
|
2492
|
+
```python
|
2493
|
+
Solution found
|
2494
|
+
[['X' 'X' ' ' 'X' ' ' ' ' ' ' 'X' ' ' ' ' ' ' 'X']
|
2495
|
+
[' ' ' ' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ']
|
2496
|
+
['X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
|
2497
|
+
[' ' ' ' ' ' ' ' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ']
|
2498
|
+
[' ' ' ' 'X' 'X' ' ' ' ' ' ' 'X' ' ' 'X' ' ' 'X']
|
2499
|
+
['X' ' ' ' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' 'X' 'X']
|
2500
|
+
[' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'X' ' ']
|
2501
|
+
[' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
|
2502
|
+
[' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' 'X' ' ' 'X' ' ']
|
2503
|
+
[' ' ' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' 'X']
|
2504
|
+
[' ' ' ' 'X' ' ' ' ' 'X' 'X' 'X' 'X' 'X' 'X' 'X']
|
2505
|
+
['X' ' ' ' ' 'X' ' ' ' ' ' ' 'X' 'X' 'X' 'X' 'X']]
|
2506
|
+
Solutions found: 1
|
2507
|
+
status: OPTIMAL
|
2508
|
+
Time taken: 0.00 seconds
|
2509
|
+
```
|
2510
|
+
|
2511
|
+
**Solved puzzle**
|
2512
|
+
|
2513
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/kakurasu_solved.png" alt="Kakurasu solved" width="500">
|
2514
|
+
|
2515
|
+
---
|
2516
|
+
|
2517
|
+
## Star Battle (Puzzle Type #31)
|
2518
|
+
|
2519
|
+
* [**Play online**](https://www.puzzle-star-battle.com/)
|
2520
|
+
|
2521
|
+
* [**Solver Code**][31]
|
2522
|
+
|
2523
|
+
<details>
|
2524
|
+
<summary><strong>Rules</strong></summary>
|
2525
|
+
|
2526
|
+
You have to place stars on the grid according to the rules:
|
2527
|
+
- 2 stars cannot be adjacent horizontally, vertically or diagonally.
|
2528
|
+
- For 1★ puzzles, you have to place 1 star on each row, column and shape.
|
2529
|
+
- For 2★ puzzles, the stars per row, column and shape must be 2 etc.
|
2530
|
+
|
2531
|
+
</details>
|
2532
|
+
|
2533
|
+
**Unsolved puzzle**
|
2534
|
+
|
2535
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/star_battle_unsolved.png" alt="Star Battle unsolved" width="500">
|
2536
|
+
|
2537
|
+
Code to utilize this package and solve the puzzle:
|
2538
|
+
|
2539
|
+
Note that as usual the board is an id of the shape (id is meaningless, just used to identify one shape), and the star_count parameter depenends on the puzzle type.
|
2540
|
+
|
2541
|
+
```python
|
2542
|
+
from puzzle_solver import star_battle_solver as solver
|
2543
|
+
board = np.array([
|
2544
|
+
['00', '00', '00', '00', '00', '01', '01', '01', '01', '01', '01', '01', '01', '01', '02', '02', '02', '03', '03', '03', '03', '03', '03', '03', '03'],
|
2545
|
+
['00', '01', '00', '01', '01', '01', '01', '01', '01', '01', '04', '04', '01', '02', '02', '02', '02', '05', '05', '05', '05', '05', '05', '03', '03'],
|
2546
|
+
['00', '01', '01', '01', '01', '01', '01', '01', '01', '04', '04', '04', '04', '04', '02', '02', '05', '05', '05', '05', '05', '05', '03', '03', '03'],
|
2547
|
+
['00', '01', '06', '04', '04', '04', '04', '04', '04', '04', '04', '04', '04', '04', '02', '05', '05', '05', '05', '05', '05', '05', '03', '07', '03'],
|
2548
|
+
['00', '01', '06', '06', '06', '06', '06', '06', '06', '04', '04', '04', '04', '02', '02', '02', '02', '02', '05', '05', '05', '05', '05', '07', '03'],
|
2549
|
+
['00', '00', '08', '06', '09', '09', '09', '09', '06', '04', '04', '04', '04', '02', '02', '02', '02', '02', '05', '05', '05', '05', '07', '07', '07'],
|
2550
|
+
['00', '08', '08', '08', '08', '09', '09', '06', '06', '06', '04', '04', '04', '04', '02', '02', '02', '05', '05', '05', '07', '07', '07', '07', '07'],
|
2551
|
+
['00', '00', '08', '08', '08', '09', '09', '09', '09', '06', '10', '10', '10', '10', '02', '02', '02', '05', '11', '11', '11', '11', '07', '07', '07'],
|
2552
|
+
['08', '08', '08', '08', '09', '09', '09', '09', '09', '09', '10', '10', '10', '02', '02', '02', '02', '11', '11', '11', '11', '11', '11', '07', '11'],
|
2553
|
+
['08', '08', '08', '08', '09', '09', '09', '09', '09', '10', '10', '10', '10', '02', '02', '02', '11', '11', '11', '11', '11', '11', '11', '07', '11'],
|
2554
|
+
['08', '08', '08', '09', '09', '09', '09', '09', '10', '10', '10', '10', '10', '12', '12', '12', '12', '11', '11', '11', '11', '11', '11', '11', '11'],
|
2555
|
+
['08', '08', '09', '09', '09', '09', '09', '08', '10', '10', '10', '10', '10', '10', '10', '10', '12', '11', '11', '11', '11', '13', '11', '13', '11'],
|
2556
|
+
['14', '08', '08', '08', '08', '08', '08', '08', '10', '10', '10', '10', '10', '12', '12', '12', '12', '12', '11', '11', '11', '13', '11', '13', '15'],
|
2557
|
+
['14', '14', '14', '14', '16', '08', '16', '16', '17', '10', '10', '10', '10', '10', '10', '10', '10', '12', '13', '13', '13', '13', '13', '13', '15'],
|
2558
|
+
['14', '14', '14', '14', '16', '16', '16', '16', '17', '10', '10', '18', '18', '10', '19', '10', '12', '12', '13', '15', '15', '15', '15', '15', '15'],
|
2559
|
+
['14', '14', '14', '14', '14', '16', '16', '17', '17', '18', '18', '18', '19', '19', '19', '10', '10', '10', '13', '15', '15', '15', '15', '15', '15'],
|
2560
|
+
['14', '14', '14', '16', '16', '16', '16', '17', '18', '18', '20', '20', '19', '21', '19', '19', '19', '19', '13', '15', '15', '15', '15', '15', '15'],
|
2561
|
+
['14', '16', '16', '16', '16', '16', '16', '17', '18', '18', '20', '21', '21', '21', '21', '19', '21', '19', '15', '15', '21', '15', '15', '15', '15'],
|
2562
|
+
['14', '14', '14', '16', '16', '17', '17', '17', '18', '20', '20', '21', '20', '21', '21', '19', '21', '19', '15', '21', '21', '15', '15', '15', '15'],
|
2563
|
+
['14', '14', '14', '16', '16', '16', '17', '17', '18', '18', '20', '20', '20', '20', '21', '21', '21', '21', '21', '21', '15', '15', '22', '22', '15'],
|
2564
|
+
['14', '14', '14', '14', '23', '16', '17', '20', '18', '20', '20', '20', '20', '20', '20', '21', '24', '24', '24', '21', '15', '15', '22', '15', '15'],
|
2565
|
+
['14', '14', '14', '14', '23', '20', '17', '20', '18', '20', '20', '20', '20', '24', '24', '24', '24', '24', '24', '21', '15', '22', '22', '22', '15'],
|
2566
|
+
['14', '23', '23', '14', '23', '20', '20', '20', '18', '20', '20', '20', '20', '24', '24', '24', '24', '24', '24', '24', '24', '24', '24', '22', '15'],
|
2567
|
+
['14', '23', '14', '14', '23', '20', '23', '20', '18', '20', '20', '20', '20', '24', '24', '24', '24', '24', '24', '24', '22', '22', '22', '22', '22'],
|
2568
|
+
['14', '23', '23', '23', '23', '23', '23', '20', '20', '20', '20', '20', '20', '24', '24', '24', '24', '24', '24', '24', '24', '24', '24', '24', '24']
|
2569
|
+
])
|
2570
|
+
binst = solver.Board(board=board, star_count=6)
|
2571
|
+
solutions = binst.solve_and_print()
|
2572
|
+
```
|
2573
|
+
|
2574
|
+
|
2575
|
+
**Script Output**
|
2576
|
+
|
2577
|
+
```python
|
2578
|
+
Solution found
|
2579
|
+
[' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' '],
|
2580
|
+
['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' '],
|
2581
|
+
[' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
|
2582
|
+
['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
|
2583
|
+
[' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
|
2584
|
+
[' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
|
2585
|
+
[' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
|
2586
|
+
[' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
|
2587
|
+
[' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
|
2588
|
+
[' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
|
2589
|
+
[' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
|
2590
|
+
['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
|
2591
|
+
[' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
|
2592
|
+
['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
|
2593
|
+
[' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' '],
|
2594
|
+
[' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*'],
|
2595
|
+
[' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' '],
|
2596
|
+
[' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*'],
|
2597
|
+
[' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
|
2598
|
+
['*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' '],
|
2599
|
+
[' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
|
2600
|
+
['*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' '],
|
2601
|
+
[' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
|
2602
|
+
[' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*'],
|
2603
|
+
[' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
|
2604
|
+
Solutions found: 1
|
2605
|
+
status: OPTIMAL
|
2606
|
+
Time taken: 0.38 seconds
|
2607
|
+
```
|
2608
|
+
|
2609
|
+
**Solved puzzle**
|
2610
|
+
|
2611
|
+
<img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/star_battle_solved.png" alt="Star Battle solved" width="500">
|
2612
|
+
|
2613
|
+
---
|
2614
|
+
|
2442
2615
|
---
|
2443
2616
|
|
2444
2617
|
## Why SAT / CP-SAT?
|
@@ -2519,3 +2692,5 @@ Issues and PRs welcome!
|
|
2519
2692
|
[27]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/aquarium "puzzle_solver/src/puzzle_solver/puzzles/aquarium at master · Ar-Kareem/puzzle_solver · GitHub"
|
2520
2693
|
[28]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/stitches "puzzle_solver/src/puzzle_solver/puzzles/stitches at master · Ar-Kareem/puzzle_solver · GitHub"
|
2521
2694
|
[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"
|
2695
|
+
[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"
|
2696
|
+
[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"
|