multi-puzzle-solver 1.0.3__py3-none-any.whl → 1.0.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of multi-puzzle-solver might be problematic. Click here for more details.

Files changed (43) hide show
  1. {multi_puzzle_solver-1.0.3.dist-info → multi_puzzle_solver-1.0.6.dist-info}/METADATA +1024 -387
  2. multi_puzzle_solver-1.0.6.dist-info/RECORD +73 -0
  3. puzzle_solver/__init__.py +7 -1
  4. puzzle_solver/core/utils.py +17 -1
  5. puzzle_solver/core/utils_visualizer.py +257 -201
  6. puzzle_solver/puzzles/aquarium/aquarium.py +8 -23
  7. puzzle_solver/puzzles/battleships/battleships.py +39 -53
  8. puzzle_solver/puzzles/binairo/binairo.py +2 -2
  9. puzzle_solver/puzzles/black_box/black_box.py +6 -70
  10. puzzle_solver/puzzles/connect_the_dots/connect_the_dots.py +50 -0
  11. puzzle_solver/puzzles/filling/filling.py +11 -34
  12. puzzle_solver/puzzles/flood_it/parse_map/parse_map.py +0 -1
  13. puzzle_solver/puzzles/galaxies/galaxies.py +110 -110
  14. puzzle_solver/puzzles/heyawake/heyawake.py +6 -2
  15. puzzle_solver/puzzles/kakurasu/kakurasu.py +5 -13
  16. puzzle_solver/puzzles/kakuro/kakuro.py +6 -2
  17. puzzle_solver/puzzles/lits/lits.py +6 -4
  18. puzzle_solver/puzzles/mosaic/mosaic.py +8 -18
  19. puzzle_solver/puzzles/nonograms/nonograms.py +80 -85
  20. puzzle_solver/puzzles/nonograms/nonograms_colored.py +221 -0
  21. puzzle_solver/puzzles/norinori/norinori.py +5 -10
  22. puzzle_solver/puzzles/nurikabe/nurikabe.py +6 -2
  23. puzzle_solver/puzzles/palisade/palisade.py +4 -3
  24. puzzle_solver/puzzles/pearl/pearl.py +15 -27
  25. puzzle_solver/puzzles/pipes/pipes.py +2 -1
  26. puzzle_solver/puzzles/range/range.py +19 -55
  27. puzzle_solver/puzzles/rectangles/rectangles.py +4 -2
  28. puzzle_solver/puzzles/shingoki/shingoki.py +2 -2
  29. puzzle_solver/puzzles/singles/singles.py +6 -2
  30. puzzle_solver/puzzles/slant/slant.py +13 -19
  31. puzzle_solver/puzzles/slitherlink/slitherlink.py +2 -2
  32. puzzle_solver/puzzles/star_battle/star_battle.py +13 -7
  33. puzzle_solver/puzzles/stitches/stitches.py +8 -21
  34. puzzle_solver/puzzles/sudoku/sudoku.py +5 -11
  35. puzzle_solver/puzzles/tapa/tapa.py +6 -2
  36. puzzle_solver/puzzles/tents/tents.py +50 -80
  37. puzzle_solver/puzzles/tracks/tracks.py +19 -66
  38. puzzle_solver/puzzles/twiddle/twiddle.py +112 -0
  39. puzzle_solver/puzzles/unruly/unruly.py +17 -49
  40. puzzle_solver/puzzles/yin_yang/yin_yang.py +3 -10
  41. multi_puzzle_solver-1.0.3.dist-info/RECORD +0 -70
  42. {multi_puzzle_solver-1.0.3.dist-info → multi_puzzle_solver-1.0.6.dist-info}/WHEEL +0 -0
  43. {multi_puzzle_solver-1.0.3.dist-info → multi_puzzle_solver-1.0.6.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multi-puzzle-solver
3
- Version: 1.0.3
4
- Summary: Efficient solvers for numerous popular and esoteric logic puzzles using CP-SAT
3
+ Version: 1.0.6
4
+ Summary: Efficient solvers for countless (50+) types of puzzles (like Sudoku, Minesweeper, etc.) with a simple python API.
5
5
  Author: Ar-Kareem
6
6
  Project-URL: Homepage, https://github.com/Ar-Kareem/puzzle_solver
7
7
  Project-URL: Repository, https://github.com/Ar-Kareem/puzzle_solver
@@ -396,6 +396,18 @@ 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
+ <td align="center">
406
+ <a href="#nonograms-colored-puzzle-type-57"><b>Nonograms Colored</b><br><br>
407
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nonograms_colored_solved.png" alt="Nonograms Colored" width="140">
408
+ </a>
409
+ </td>
410
+ </tr>
399
411
  </table>
400
412
 
401
413
  </div>
@@ -465,6 +477,8 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
465
477
  - [Sudoku Killer (Puzzle Type #53)](#sudoku-killer-puzzle-type-53)
466
478
  - [Flood It (Puzzle Type #54)](#flood-it-puzzle-type-54)
467
479
  - [Pipes (Puzzle Type #55)](#pipes-puzzle-type-55)
480
+ - [Connect the Dots (Puzzle Type #56)](#connect-the-dots-puzzle-type-56)
481
+ - [Nonograms Colored (Puzzle Type #57)](#nonograms-colored-puzzle-type-57)
468
482
  - [Why SAT / CP-SAT?](#why-sat--cp-sat)
469
483
  - [Testing](#testing)
470
484
  - [Contributing](#contributing)
@@ -478,7 +492,7 @@ The puzzles that have solvers implemented are listed below. Each puzzle has a si
478
492
 
479
493
  ## Nonograms (Puzzle Type #1)
480
494
 
481
- Called "Pattern" in the website.
495
+ Also known as Hanjie, Paint by Numbers, Griddlers, Pic-a-Pix, Picross, and Pattern.
482
496
 
483
497
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/pattern.html)
484
498
 
@@ -538,21 +552,39 @@ solutions = binst.solve_and_print()
538
552
  **Script Output**
539
553
  ```python
540
554
  Solution found
541
- B B B B B B B . B B B . . . .
542
- B B B B B B B . . . . . B . B
543
- B B . . . . . . . . . B B B .
544
- B B . . . . . . . . . . B B B
545
- B B B . . . . . . . . . . B B
546
- B . . . B . B . . B . . . B B
547
- B . . . . . B B B B B B . . B
548
- B . . . . . B B B B B B B B B
549
- . . . . . B B B B B B B B B .
550
- . . . . . B B . B B B B . . .
551
- . . . . B B B B B B B B . . .
552
- B B B B B B B B B B B . . . .
553
- B B B B B B B . . B . B . . .
554
- . B B B B . . . . B B B . . .
555
- . B B B . . . . . . . B B . .
555
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
556
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
557
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
558
+ 0│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │ │ │ │
559
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
560
+ 1│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │ │▒▒▒│ │▒▒▒│
561
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
562
+ 2│▒▒▒│▒▒▒│ │ │ │ │ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│ │
563
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
564
+ 3│▒▒▒│▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│
565
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
566
+ 4│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒│▒▒▒│
567
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
568
+ 5│▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │ │▒▒▒│ │ │ │▒▒▒│▒▒▒│
569
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
570
+ 6│▒▒▒│ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│
571
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
572
+ 7│▒▒▒│ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│
573
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
574
+ 8│ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │
575
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
576
+ 9│ │ │ │ │ │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │
577
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
578
+ 10│ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │
579
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
580
+ 11│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │
581
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
582
+ 12│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │ │ │
583
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
584
+ 13│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │▒▒▒│▒▒▒│▒▒▒│ │ │ │
585
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
586
+ 14│ │▒▒▒│▒▒▒│▒▒▒│ │ │ │ │ │ │ │▒▒▒│▒▒▒│ │ │
587
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
556
588
  Solutions found: 1
557
589
  status: OPTIMAL
558
590
  Time taken: 0.04 seconds
@@ -566,7 +598,7 @@ Time taken: 0.04 seconds
566
598
 
567
599
  ## Sudoku (Puzzle Type #2)
568
600
 
569
- Called "Solo" in the website.
601
+ Also known as Number Place and Solo.
570
602
 
571
603
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/solo.html)
572
604
 
@@ -628,22 +660,41 @@ assert len(solutions) == 1, f'unique solutions != 1, == {len(solutions)}'
628
660
  **Script Output**
629
661
  ```python
630
662
  Solution found
631
- [['g' '7' '5' '4' '9' '1' 'c' 'e' 'd' 'f' 'b' '8' '2' '6' '3' 'a']
632
- ['3' '9' 'd' 'e' 'f' 'a' '7' 'g' '2' '6' '4' 'c' '5' '1' '8' 'b']
633
- ['b' 'c' '1' '8' '5' '6' '3' '2' 'e' '9' '7' 'a' '4' 'g' 'f' 'd']
634
- ['f' '6' '2' 'a' 'b' '8' 'd' '4' '1' '3' '5' 'g' 'c' '7' '9' 'e']
635
- ['4' 'a' 'e' '3' '8' 'f' '1' '6' '5' 'b' '2' '9' 'g' 'd' 'c' '7']
636
- ['6' 'g' 'f' 'c' 'e' 'd' '2' '5' '4' '7' 'a' '1' '3' '9' 'b' '8']
637
- ['d' '1' '9' '2' 'a' '3' 'b' '7' 'c' 'g' '8' '6' 'e' 'f' '5' '4']
638
- ['5' 'b' '8' '7' 'g' '4' '9' 'c' 'f' 'd' '3' 'e' '1' 'a' '2' '6']
639
- ['2' 'e' 'a' 'b' 'd' 'c' 'g' '1' '3' '8' '9' 'f' '7' '4' '6' '5']
640
- ['8' '4' '6' '1' '3' 'b' 'e' 'f' '7' '5' 'c' 'd' 'a' '2' 'g' '9']
641
- ['9' 'f' '3' 'g' '7' '5' '8' 'a' '6' '4' 'e' '2' 'd' 'b' '1' 'c']
642
- ['c' 'd' '7' '5' '4' '2' '6' '9' 'g' 'a' '1' 'b' '8' '3' 'e' 'f']
643
- ['7' '5' 'g' 'd' '2' '9' 'a' 'b' '8' 'c' 'f' '3' '6' 'e' '4' '1']
644
- ['a' '2' 'b' '6' 'c' 'e' '5' '3' '9' '1' 'd' '4' 'f' '8' '7' 'g']
645
- ['e' '8' 'c' 'f' '1' 'g' '4' 'd' 'b' '2' '6' '7' '9' '5' 'a' '3']
646
- ['1' '3' '4' '9' '6' '7' 'f' '8' 'a' 'e' 'g' '5' 'b' 'c' 'd' '2']]
663
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
664
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
665
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
666
+ 0│ g 7 5 4 9 1 c e │ d │ f │ b │ 8 │ 2 │ 6 │ 3 │ a │
667
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
668
+ 1│ 3 9 d │ e │ f │ a │ 7 │ g │ 2 6 │ 4 c │ 5 │ 1 8 b
669
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
670
+ 2│ b c 1 8 5 │ 6 │ 3 │ 2 │ e 9 │ 7 │ a 4 │ g │ f │ d │
671
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
672
+ 3│ f │ 6 │ 2 │ a │ b │ 8 │ d │ 4 1 3 5 g c 7 9 │ e │
673
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
674
+ 4│ 4 a │ e │ 3 │ 8 │ f │ 1 │ 6 │ 5 b │ 2 9 g d c 7
675
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
676
+ 5│ 6 g │ f │ c e │ d │ 2 │ 5 │ 4 │ 7 │ a │ 1 │ 3 9 b 8
677
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
678
+ 6│ d │ 1 │ 9 │ 2 │ a │ 3 b 7 c │ g │ 8 6 │ e f │ 5 4
679
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
680
+ 7│ 5 │ b │ 8 │ 7 │ g │ 4 │ 9 │ c │ f │ d │ 3 │ e │ 1 │ a │ 2 │ 6 │
681
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
682
+ 8│ 2 │ e │ a │ b │ d │ c │ g │ 1 │ 3 │ 8 │ 9 │ f │ 7 │ 4 │ 6 │ 5 │
683
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
684
+ 9│ 8 │ 4 │ 6 │ 1 │ 3 │ b │ e │ f │ 7 │ 5 │ c │ d │ a │ 2 │ g │ 9 │
685
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
686
+ 10│ 9 │ f │ 3 │ g │ 7 │ 5 │ 8 │ a │ 6 │ 4 │ e │ 2 │ d │ b │ 1 │ c │
687
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
688
+ 11│ c │ d │ 7 │ 5 │ 4 │ 2 │ 6 │ 9 │ g │ a │ 1 │ b │ 8 │ 3 │ e │ f │
689
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
690
+ 12│ 7 │ 5 │ g │ d │ 2 │ 9 │ a │ b │ 8 │ c │ f │ 3 │ 6 │ e │ 4 │ 1 │
691
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
692
+ 13│ a │ 2 │ b │ 6 │ c │ e │ 5 │ 3 │ 9 │ 1 │ d │ 4 │ f │ 8 │ 7 │ g │
693
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
694
+ 14│ e │ 8 │ c │ f │ 1 │ g │ 4 │ d │ b │ 2 │ 6 │ 7 │ 9 │ 5 │ a │ 3 │
695
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
696
+ 15│ 1 │ 3 │ 4 │ 9 │ 6 │ 7 │ f │ 8 │ a │ e │ g │ 5 │ b │ c │ d │ 2 │
697
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
647
698
  Solutions found: 1
648
699
  status: OPTIMAL
649
700
  Time taken: 0.04 seconds
@@ -798,6 +849,8 @@ Time taken: 0.02 seconds
798
849
 
799
850
  ## Light Up (Puzzle Type #5)
800
851
 
852
+ Also called Akari.
853
+
801
854
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/lightup.html)
802
855
 
803
856
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/lightup.html#lightup)
@@ -919,26 +972,47 @@ binst = solver.Board(board=board, sides={'top': top, 'side': side})
919
972
  solutions = binst.solve_and_print()
920
973
  ```
921
974
  **Script Output**
922
- ```python
975
+
976
+ (Note: ▲ represents a tent)
977
+
978
+ ```
923
979
  Solution found
924
- [[' ' 'T' 'E' ' ' ' ' ' ' ' ' 'E' 'T' ' ' 'T' 'E' 'T' 'E' ' ']
925
- [' ' ' ' ' ' ' ' 'T' 'E' ' ' 'T' ' ' 'T' ' ' ' ' 'T' ' ' ' ']
926
- ['E' 'T' 'E' 'T' ' ' ' ' ' ' 'E' ' ' 'E' ' ' ' ' 'E' ' ' 'E']
927
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'T' ' ' ' ' ' ' 'T' ' ' 'T']
928
- [' ' 'E' ' ' ' ' 'E' ' ' 'E' ' ' 'E' ' ' ' ' ' ' 'E' ' ' ' ']
929
- [' ' 'T' ' ' ' ' 'T' ' ' 'T' ' ' ' ' 'T' 'E' ' ' 'T' 'T' 'E']
930
- [' ' 'T' ' ' ' ' 'T' 'E' ' ' 'E' 'T' ' ' ' ' ' ' 'E' ' ' ' ']
931
- [' ' 'E' ' ' ' ' ' ' ' ' 'T' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
932
- [' ' ' ' ' ' ' ' 'E' 'T' 'E' ' ' ' ' 'E' 'T' ' ' 'E' 'T' 'E']
933
- ['E' ' ' 'E' 'T' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'T' ' ' 'T']
934
- ['T' ' ' ' ' ' ' ' ' ' ' ' ' 'T' 'E' ' ' ' ' 'T' 'E' ' ' 'E']
935
- ['T' ' ' ' ' 'E' 'T' 'E' 'T' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
936
- ['E' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'T' 'E' 'T' 'E' ' ' 'E' 'T']
937
- [' ' 'T' 'E' ' ' 'E' 'T' 'E' ' ' ' ' ' ' ' ' ' ' 'T' ' ' ' ']
938
- ['E' 'T' ' ' ' ' 'T' ' ' ' ' ' ' 'E' 'T' 'E' 'T' 'E' ' ' ' ']]
980
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
981
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
982
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
983
+ 0│ │ | │ │ │ │ │ | │ │ | | │ │
984
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
985
+ 1│ │ │ │ │ | │ │ | │ │ | │ │ │ | │ │ │
986
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
987
+ 2│ | | │ │ │ │ │ │ │ │ │ │ │
988
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
989
+ 3│ │ │ │ │ │ │ │ │ | │ │ │ │ | │ │ |
990
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
991
+ 4│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
992
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
993
+ 5│ │ | │ │ │ | │ │ | │ │ │ | │ │ | |
994
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
995
+ 6│ │ | │ │ │ | │ ▲ │ │ ▲ │ | │ │ │ │ ▲ │ │ │
996
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
997
+ 7│ │ ▲ │ │ │ │ │ | │ │ │ │ │ │ │ │ │
998
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
999
+ 8│ │ │ │ │ ▲ │ | │ ▲ │ │ │ ▲ │ | │ │ ▲ │ | │ ▲ │
1000
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1001
+ 9│ ▲ │ │ ▲ │ | │ │ │ │ │ │ │ │ │ | │ │ | │
1002
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1003
+ 10│ | │ │ │ │ │ │ │ | │ ▲ │ │ │ | │ ▲ │ │ ▲ │
1004
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1005
+ 11│ | │ │ │ ▲ │ | │ ▲ │ | │ │ │ │ │ │ │ │ │
1006
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1007
+ 12│ ▲ │ │ │ │ │ │ │ │ | │ ▲ │ | │ ▲ │ │ ▲ │ | │
1008
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1009
+ 13│ │ | │ ▲ │ │ ▲ │ | │ ▲ │ │ │ │ │ │ | │ │ │
1010
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1011
+ 14│ ▲ │ | │ │ │ | │ │ │ │ ▲ │ | │ ▲ │ | │ ▲ │ │ │
1012
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
939
1013
  Solutions found: 1
940
1014
  status: OPTIMAL
941
- Time taken: 0.02 seconds
1015
+ Time taken: 0.01 seconds
942
1016
  ```
943
1017
 
944
1018
  **Solved puzzle**
@@ -949,6 +1023,8 @@ Time taken: 0.02 seconds
949
1023
 
950
1024
  ## Filling (Puzzle Type #7)
951
1025
 
1026
+ Also known as Fillomino
1027
+
952
1028
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/filling.html)
953
1029
 
954
1030
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/filling.html#filling)
@@ -989,15 +1065,24 @@ assert len(solutions) == 1, f'unique solutions != 1, == {len(solutions)}'
989
1065
  **Script Output**
990
1066
  ```python
991
1067
  Solution found
992
- [[4 4 2 2 4 2 2]
993
- [4 4 7 4 4 3 3]
994
- [7 7 7 3 4 5 3]
995
- [7 6 6 3 3 5 5]
996
- [7 7 6 6 4 5 5]
997
- [1 6 6 1 4 4 4]]
1068
+
1069
+ 0 1 2 3 4 5 6
1070
+ ┌───────┬───────┬───┬───────┐
1071
+ 0│ 4 4 2 2 4 │ 2 2 │
1072
+ │ ├───┬───┘ ├───────┤
1073
+ 1 4 4 7 4 4 │ 3 3 │
1074
+ ├───────┘ ├───┐ ├───┐ │
1075
+ 2│ 7 7 7 │ 3 │ 4 │ 5 │ 3 │
1076
+ │ ┌───────┤ └───┤ └───┤
1077
+ 3│ 7 │ 6 6 │ 3 3 │ 5 5 │
1078
+ │ └───┐ └───┬───┤ │
1079
+ 4│ 7 7 │ 6 6 │ 4 │ 5 5 │
1080
+ ├───┬───┘ ┌───┤ └───────┤
1081
+ 5│ 1 │ 6 6 │ 1 │ 4 4 4 │
1082
+ └───┴───────┴───┴───────────┘
998
1083
  Solutions found: 1
999
1084
  status: OPTIMAL
1000
- Time taken: 0.10 seconds
1085
+ Time taken: 0.15 seconds
1001
1086
  ```
1002
1087
 
1003
1088
  **Solved puzzle**
@@ -1008,6 +1093,8 @@ Time taken: 0.10 seconds
1008
1093
 
1009
1094
  ## Keen (Puzzle Type #8)
1010
1095
 
1096
+ Also known as KenKen
1097
+
1011
1098
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/keen.html)
1012
1099
 
1013
1100
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/keen.html#keen)
@@ -1152,7 +1239,7 @@ Time taken: 0.03 seconds
1152
1239
 
1153
1240
  ## Singles (Puzzle Type #10)
1154
1241
 
1155
- Also known as "Hitori",
1242
+ Also known as Hitori.
1156
1243
 
1157
1244
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/singles.html)
1158
1245
 
@@ -1375,7 +1462,7 @@ Time taken: 0.03 seconds
1375
1462
 
1376
1463
  ## Range (Puzzle Type #13)
1377
1464
 
1378
- Also known as "Kurodoko"
1465
+ Also known as Kurodoko.
1379
1466
 
1380
1467
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/range.html)
1381
1468
 
@@ -1406,17 +1493,17 @@ Code to utilize this package and solve the puzzle:
1406
1493
  import numpy as np
1407
1494
  from puzzle_solver import range_solver as solver
1408
1495
  clues = np.array([
1409
- [-1, 4, 2, -1, -1, 3, -1, -1, -1, 8, -1, -1, -1, -1, 6, -1],
1410
- [-1, -1, -1, -1, -1, 13, -1, 18, -1, -1, 14, -1, -1, 22, -1, -1],
1411
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, -1, -1, -1, -1],
1412
- [-1, -1, -1, -1, 12, -1, 11, -1, -1, -1, 9, -1, -1, -1, -1, -1],
1413
- [7, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1414
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1415
- [-1, -1, -1, -1, -1, -1, -1, -1, -1, 12, -1, -1, -1, -1, -1, 5],
1416
- [-1, -1, -1, -1, -1, 9, -1, -1, -1, 9, -1, 4, -1, -1, -1, -1],
1417
- [-1, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
1418
- [-1, -1, 10, -1, -1, 7, -1, -1, 13, -1, 10, -1, -1, -1, -1, -1],
1419
- [-1, 7, -1, -1, -1, -1, 6, -1, -1, -1, 6, -1, -1, 13, 5, -1],
1496
+ [' ', '4 ', '2 ', ' ', ' ', '3 ', ' ', ' ', ' ', '8 ', ' ', ' ', ' ', ' ', '6 ', ' '],
1497
+ [' ', ' ', ' ', ' ', ' ', '13', ' ', '18', ' ', ' ', '14', ' ', ' ', '22', ' ', ' '],
1498
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '12', ' ', ' ', ' ', ' '],
1499
+ [' ', ' ', ' ', ' ', '12', ' ', '11', ' ', ' ', ' ', '9 ', ' ', ' ', ' ', ' ', ' '],
1500
+ ['7 ', ' ', ' ', ' ', ' ', ' ', '6 ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
1501
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
1502
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '12', ' ', ' ', ' ', ' ', ' ', '5 '],
1503
+ [' ', ' ', ' ', ' ', ' ', '9 ', ' ', ' ', ' ', '9 ', ' ', '4 ', ' ', ' ', ' ', ' '],
1504
+ [' ', ' ', ' ', ' ', '6 ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
1505
+ [' ', ' ', '10', ' ', ' ', '7 ', ' ', ' ', '13', ' ', '10', ' ', ' ', ' ', ' ', ' '],
1506
+ [' ', '7 ', ' ', ' ', ' ', ' ', '6 ', ' ', ' ', ' ', '6 ', ' ', ' ', '13', '5 ', ' '],
1420
1507
  ])
1421
1508
  binst = solver.Board(clues)
1422
1509
  solutions = binst.solve_and_print()
@@ -1424,20 +1511,34 @@ solutions = binst.solve_and_print()
1424
1511
  **Script Output**
1425
1512
  ```python
1426
1513
  Solution:
1427
- B . . B . . B . B . B . B . . .
1428
- . . B . . . . . . . . . . . . B
1429
- B . . . . B . . . . . . . . . .
1430
- . B . B . . . . . . . B . . . .
1431
- . . . . . B . . B . B . . . B .
1432
- . . B . . . . . . . . B . . . B
1433
- B . . . B . B . . . . . B . . .
1434
- . . . . . . . B . . B . . . B .
1435
- . B . . . B . . . B . B . . . .
1436
- . . . . . . B . . . . . . . . B
1437
- B . . . . . . B . . . . B . . .
1514
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
1515
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
1516
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
1517
+ 0│▒▒▒│ 4 2 │▒▒▒│ │ 3 │▒▒▒│ │▒▒▒│ 8 │▒▒▒│ │▒▒▒│ │ 6 │ │
1518
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1519
+ 1│ │ │▒▒▒│ │ │13 │ │18 │ │ │14 │ │ │22 │ │▒▒▒│
1520
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1521
+ 2│▒▒▒│ │ │ │ │▒▒▒│ │ │ │ │ │12 │ │ │ │ │
1522
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1523
+ 3│ │▒▒▒│ │▒▒▒│12 │ │11 │ │ │ │ 9 │▒▒▒│ │ │ │ │
1524
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1525
+ 4│ 7 │ │ │ │ │▒▒▒│ 6 │ │▒▒▒│ │▒▒▒│ │ │ │▒▒▒│ │
1526
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1527
+ 5│ │ │▒▒▒│ │ │ │ │ │ │ │ │▒▒▒│ │ │ │▒▒▒│
1528
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1529
+ 6│▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │ │12 │ │ │▒▒▒│ │ │ 5 │
1530
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1531
+ 7│ │ │ │ │ │ 9 │ │▒▒▒│ │ 9 │▒▒▒│ 4 │ │ │▒▒▒│ │
1532
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1533
+ 8│ │▒▒▒│ │ │ 6 │▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │ │ │ │
1534
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1535
+ 9│ │ │10 │ │ │ 7 │▒▒▒│ │13 │ │10 │ │ │ │ │▒▒▒│
1536
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1537
+ 10│▒▒▒│ 7 │ │ │ │ │ 6 │▒▒▒│ │ │ 6 │ │▒▒▒│13 │ 5 │ │
1538
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
1438
1539
  Solutions found: 1
1439
1540
  status: OPTIMAL
1440
- Time taken: 0.04 seconds
1541
+ Time taken: 0.07 seconds
1441
1542
  ```
1442
1543
 
1443
1544
  **Solved puzzle**
@@ -1554,23 +1655,40 @@ solutions = binst.solve_and_print()
1554
1655
  **Script Output**
1555
1656
  ```python
1556
1657
  Solution found
1557
- [['W' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'B' 'W' 'B' 'W' 'W' 'B']
1558
- ['B' 'B' 'W' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'W' 'B' 'B' 'W']
1559
- ['W' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'B' 'W' 'B']
1560
- ['W' 'B' 'W' 'B' 'B' 'W' 'W' 'B' 'W' 'W' 'B' 'W' 'B' 'B']
1561
- ['B' 'W' 'B' 'W' 'B' 'W' 'B' 'W' 'B' 'B' 'W' 'W' 'B' 'W']
1562
- ['B' 'W' 'W' 'B' 'W' 'B' 'B' 'W' 'B' 'B' 'W' 'B' 'W' 'W']
1563
- ['W' 'B' 'B' 'W' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'B']
1564
- ['B' 'W' 'B' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'B' 'W']
1565
- ['B' 'B' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'W' 'W']
1566
- ['W' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'W' 'B' 'W' 'W' 'B' 'B']
1567
- ['B' 'B' 'W' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'B' 'W' 'B' 'W']
1568
- ['B' 'W' 'B' 'W' 'W' 'B' 'B' 'W' 'W' 'B' 'W' 'B' 'W' 'B']
1569
- ['W' 'B' 'W' 'B' 'B' 'W' 'W' 'B' 'W' 'B' 'B' 'W' 'W' 'B']
1570
- ['W' 'B' 'W' 'B' 'W' 'B' 'W' 'B' 'B' 'W' 'W' 'B' 'B' 'W']]
1658
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1659
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3
1660
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
1661
+ 0│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │ │▒▒▒│
1662
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1663
+ 1│▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│ │
1664
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1665
+ 2│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│
1666
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1667
+ 3│ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│
1668
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1669
+ 4│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │
1670
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1671
+ 5│▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │ │
1672
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1673
+ 6│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│
1674
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1675
+ 7│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │
1676
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1677
+ 8│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│ │ │
1678
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1679
+ 9│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│
1680
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1681
+ 10│▒▒▒│▒▒▒│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │
1682
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1683
+ 11│▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│
1684
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1685
+ 12│ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│
1686
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1687
+ 13│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │ │▒▒▒│▒▒▒│ │
1688
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
1571
1689
  Solutions found: 1
1572
1690
  status: OPTIMAL
1573
- Time taken: 0.01 seconds
1691
+ Time taken: 0.02 seconds
1574
1692
  ```
1575
1693
 
1576
1694
  **Solved puzzle**
@@ -1625,24 +1743,43 @@ solutions = binst.solve_and_print()
1625
1743
  ```
1626
1744
  **Script Output**
1627
1745
  ```python
1628
- [[' ' ' ' ' ' ' ' ' ' ' ' '┏━' '━━' '━━' '━━' '━━' '━━' '━┒' '┏━' '━┒']
1629
- [' ' ' ' ' ' ' ' ' ' ' ' '┃ ' ' ' '┏━' '━━' '━┒' ' ' '┗━' '━┛' '┃ ']
1630
- [' ' ' ' ' ' ' ' ' ' ' ' '┃ ' ' ' '┃ ' ' ' '┗━' '━━' '━━' '━━' '━┛']
1631
- [' ' ' ' '┏━' '━┒' '┏━' '━┒' '┃ ' '┏━' '━┛' ' ' ' ' ' ' ' ' ' ' ' ']
1632
- ['┏━' '━━' '━┛' '┃ ' '┃ ' '┗━' '━┛' '┗━' '━┒' ' ' ' ' ' ' ' ' '┏━' '━┒']
1633
- ['┗━' '━━' '━┒' '┗━' '━┛' ' ' ' ' '┏━' '━┛' ' ' ' ' ' ' '┏━' '━┛' '┃ ']
1634
- [' ' ' ' '┃ ' ' ' ' ' ' ' '┏━' '━┛' '┏━' '━━' '━━' '━━' '━┛' ' ' '┃ ']
1635
- [' ' '┏━' '━┛' ' ' ' ' ' ' '┗━' '━━' '━┛' ' ' ' ' ' ' '┏━' '━━' '━┛']
1636
- [' ' '┗━' '━┒' ' ' ' ' ' ' ' ' ' ' '┏━' '━━' '━━' '━┒' '┃ ' '┏━' '━┒']
1637
- ['┏━' '━━' '━┛' ' ' ' ' ' ' ' ' ' ' '┃ ' '┏━' '━┒' '┗━' '━┛' '┃ ' '┃ ']
1638
- ['┃ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '┗━' '━┛' '┗━' '━┒' ' ' '┃ ' '┃ ']
1639
- ['┃ ' ' ' ' ' ' ' ' ' ' ' ' ' '┏━' '━━' '━━' '━━' '━┛' '┏━' '━┛' '┃ ']
1640
- ['━┛' ' ' ' ' ' ' ' ' ' ' ' ' '┗━' '━━' '━━' '━━' '━━' '━┛' '┏━' '━┛']
1641
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '┗━' '━┒']
1642
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '┏━' '━┛']]
1746
+ Solution found
1747
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
1748
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
1749
+
1750
+ 0 . . . . . . ┌───────────────────────┐ ┌───┐
1751
+ │ │ │ │
1752
+ 1 . . . . . . │ . ┌───────┐ . └───┘ │
1753
+ │ │ │ │
1754
+ 2 . . . . . . │ . │ . └───────────────┘
1755
+ │ │
1756
+ 3 . . ┌───┐ ┌───┐ │ ┌───┘ . . . . . .
1757
+ │ │ │ │ │ │
1758
+ 4 ┌───────┘ │ │ └───┘ └───┐ . . . . ┌───┐
1759
+ │ │ │ │ │ │
1760
+ 5 └───────┐ └───┘ . . ┌───┘ . . . ┌───┘ │
1761
+ │ │ │ │
1762
+ 6 . . │ . . . ┌───┘ ┌───────────────┘ . │
1763
+ │ │ │ │
1764
+ 7 . ┌───┘ . . . └───────┘ . . . ┌───────┘
1765
+ │ │
1766
+ 8 . └───┐ . . . . . ┌───────────┐ │ ┌───┐
1767
+ │ │ │ │ │ │
1768
+ 9 ┌───────┘ . . . . . │ ┌───┐ └───┘ │ │
1769
+ │ │ │ │ │ │
1770
+ 10 │ . . . . . . . └───┘ └───┐ . │ │
1771
+ │ │ │ │
1772
+ 11 │ . . . . . . ┌───────────────┘ ┌───┘ │
1773
+ │ │ │ │
1774
+ 12──┘ . . . . . . └───────────────────┘ ┌───┘
1775
+
1776
+ 13 . . . . . . . . . . . . . └───┐
1777
+
1778
+ 14 . . . . . . . . . . . . . ┌───┘
1779
+
1643
1780
  Solutions found: 1
1644
1781
  status: OPTIMAL
1645
- Time taken: 1.04 seconds
1782
+ Time taken: 1.01 seconds
1646
1783
  ```
1647
1784
 
1648
1785
  **Solved puzzle**
@@ -1697,24 +1834,42 @@ solutions = binst.solve_and_print()
1697
1834
  **Script Output**
1698
1835
  ```python
1699
1836
  Solution found
1700
- [[' ' 'B' ' ' ' ' ' ' ' ' ' ' ' ' 'B' ' ' 'B' ' ' ' ' 'B' 'B']
1701
- [' ' 'B' ' ' ' ' 'B' 'B' ' ' 'B' 'B' ' ' 'B' ' ' ' ' 'B' 'B']
1702
- [' ' 'B' 'B' ' ' 'B' 'B' ' ' ' ' ' ' 'B' 'B' ' ' ' ' ' ' 'B']
1703
- ['B' 'B' 'B' 'B' ' ' ' ' 'B' 'B' 'B' ' ' ' ' ' ' 'B' ' ' 'B']
1704
- [' ' 'B' 'B' ' ' ' ' 'B' ' ' 'B' 'B' 'B' ' ' 'B' 'B' 'B' ' ']
1705
- [' ' 'B' ' ' 'B' ' ' 'B' 'B' ' ' 'B' ' ' ' ' 'B' 'B' 'B' 'B']
1706
- ['B' ' ' 'B' ' ' ' ' 'B' 'B' 'B' 'B' ' ' ' ' ' ' ' ' ' ' ' ']
1707
- [' ' ' ' 'B' ' ' 'B' 'B' 'B' 'B' 'B' ' ' ' ' ' ' 'B' ' ' 'B']
1708
- [' ' 'B' 'B' ' ' ' ' ' ' ' ' 'B' 'B' 'B' 'B' 'B' ' ' 'B' ' ']
1709
- ['B' 'B' 'B' 'B' 'B' 'B' ' ' ' ' ' ' 'B' 'B' ' ' ' ' 'B' ' ']
1710
- [' ' 'B' ' ' 'B' 'B' ' ' 'B' ' ' 'B' 'B' ' ' ' ' ' ' 'B' ' ']
1711
- ['B' 'B' ' ' ' ' 'B' ' ' ' ' 'B' 'B' 'B' ' ' 'B' 'B' 'B' 'B']
1712
- [' ' ' ' 'B' ' ' 'B' ' ' 'B' ' ' 'B' 'B' 'B' 'B' 'B' ' ' 'B']
1713
- [' ' ' ' 'B' 'B' ' ' ' ' 'B' ' ' 'B' 'B' ' ' 'B' 'B' ' ' ' ']
1714
- ['B' ' ' 'B' ' ' ' ' 'B' 'B' ' ' ' ' ' ' ' ' ' ' 'B' 'B' 'B']]
1837
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
1838
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
1839
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
1840
+ 0│ │▒▒▒│ 2 1 │ │ │ │ 3 │▒▒▒│ 4 │▒▒▒│ 2 │ │▒▒▒│▒▒▒│
1841
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1842
+ 1│ 3 │▒▒▒│ │ │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │ 2 │▒▒▒│▒▒▒│
1843
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1844
+ 2│ 4 │▒▒▒│▒▒▒│ 5 │▒▒▒│▒▒▒│ │ │ 5 │▒▒▒│▒▒▒│ 3 2 5 │▒▒▒│
1845
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1846
+ 3│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ 4 │ │▒▒▒│▒▒▒│▒▒▒│ │ │ │▒▒▒│ 5 │▒▒▒│
1847
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1848
+ 4│ │▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │
1849
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1850
+ 5│ 3 │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ 7 │▒▒▒│ 4 │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│
1851
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1852
+ 6│▒▒▒│ │▒▒▒│ │ 5 │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ 1 │ 3 │ 4 │ 5 │ │
1853
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1854
+ 7│ │ 5 │▒▒▒│ 4 │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ 3 │ │▒▒▒│ │▒▒▒│
1855
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1856
+ 8│ 3 │▒▒▒│▒▒▒│ │ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │
1857
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1858
+ 9│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ 4 │ 6 │▒▒▒│▒▒▒│ 3 │ │▒▒▒│ │
1859
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1860
+ 10│ 5 │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │ 3 │ 5 │▒▒▒│ │
1861
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1862
+ 11│▒▒▒│▒▒▒│ │ 5 │▒▒▒│ 5 │ 3 │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│
1863
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1864
+ 12│ 2 │ │▒▒▒│ │▒▒▒│ 4 │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│
1865
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1866
+ 13│ 1 │ │▒▒▒│▒▒▒│ │ │▒▒▒│ 5 │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ 6 │ │
1867
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
1868
+ 14│▒▒▒│ │▒▒▒│ │ 2 │▒▒▒│▒▒▒│ │ 2 │ │ │ │▒▒▒│▒▒▒│▒▒▒│
1869
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
1715
1870
  Solutions found: 1
1716
1871
  status: OPTIMAL
1717
- Time taken: 0.01 seconds
1872
+ Time taken: 0.02 seconds
1718
1873
  ```
1719
1874
 
1720
1875
  **Solved puzzle**
@@ -1785,6 +1940,8 @@ Time taken: 0.01 seconds
1785
1940
 
1786
1941
  ## Pearl (Puzzle Type #19)
1787
1942
 
1943
+ Also known as Masyu
1944
+
1788
1945
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/pearl.html)
1789
1946
 
1790
1947
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/pearl.html#pearl)
@@ -1828,17 +1985,28 @@ solutions = binst.solve_and_print()
1828
1985
  **Script Output**
1829
1986
  ```python
1830
1987
  Solution found
1831
- [['┏━' '━━' '━━' '━━' '━┒' '┏━' '━━' '━┒' '┏━' '━━' '━━' '━┒']
1832
- ['┃ ' '┏━' '━━' '━┒' '┗━' '━┛' '┏━' '━┛' '┃ ' '┏━' '━┒' '┃ ']
1833
- ['┗━' '━┛' ' ' '┃ ' '┏━' '━┒' '┗━' '━━' '━┛' '┃ ' '┃ ' '┃ ']
1834
- [' ' '┏━' '━━' '━┛' '┃ ' '┃ ' ' ' '┏━' '━━' '━┛' '┃ ' '┃ ']
1835
- [' ' '┃ ' '┏━' '━━' '━┛' '┗━' '━┒' '┃ ' '┏━' '━┒' '┗━' '━┛']
1836
- ['┏━' '━┛' '┃ ' ' ' '┏━' '━┒' '┃ ' '┃ ' '┃ ' '┗━' '━━' '━┒']
1837
- ['┃ ' ' ' '┗━' '━━' '━┛' '┃ ' '┃ ' '┗━' '━┛' ' ' ' ' '┃ ']
1838
- ['┗━' '━━' '━━' '━━' '━━' '━┛' '┗━' '━━' '━━' '━━' '━━' '━┛']]
1988
+ 0 0 0 0 0 0 0 0 0 0 1 1
1989
+ 0 1 2 3 4 5 6 7 8 9 0 1
1990
+
1991
+ 0 B───────────W───┐ ┌───W───┐ B───────────B
1992
+ │ │ │ │ │ │
1993
+ 1 │ ┌───────B └───┘ ┌───┘ │ ┌───┐ │
1994
+ │ │ │ │ │ │ │ │
1995
+ 2 └───┘ . │ ┌───┐ └───────B │ │ │
1996
+ │ │ │ │ │ │
1997
+ 3 . B───────B │ W . B───────B W │
1998
+ │ │ │ │ │ │
1999
+ 4 . │ B───────B └───┐ │ ┌───┐ └───┘
2000
+ │ │ │ │ │ │
2001
+ 5 ┌───┘ │ . ┌───┐ │ W W └───────B
2002
+ │ │ │ │ │ │ │ │
2003
+ 6 │ . B───────┘ │ │ └───┘ . . │
2004
+ │ │ │ │
2005
+ 7 B───────────────────B B───────────────────B
2006
+
1839
2007
  Solutions found: 1
1840
2008
  status: OPTIMAL
1841
- Time taken: 0.98 seconds
2009
+ Time taken: 0.12 seconds
1842
2010
  ```
1843
2011
 
1844
2012
  **Solved puzzle**
@@ -1849,6 +2017,8 @@ Time taken: 0.98 seconds
1849
2017
 
1850
2018
  ## Bridges (Puzzle Type #20)
1851
2019
 
2020
+ Also known as Hashiwokakero
2021
+
1852
2022
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/bridges.html)
1853
2023
 
1854
2024
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/bridges.html#bridges)
@@ -2462,21 +2632,39 @@ solutions = binst.solve_and_print()
2462
2632
 
2463
2633
  ```python
2464
2634
  Solution found
2465
- [['0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '1' '1']
2466
- ['0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '1' '1' '1' '1' '0']
2467
- ['0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '0' '0' '0' '0' '0']
2468
- ['0' '0' '0' '0' '0' '1' '1' '0' '0' '0' '0' '0' '0' '0' '0']
2469
- ['1' '1' '0' '0' '0' '0' '0' '0' '1' '1' '0' '0' '0' '0' '1']
2470
- ['0' '0' '0' '0' '0' '0' '1' '1' '1' '0' '0' '0' '0' '0' '0']
2471
- ['1' '1' '1' '0' '0' '1' '1' '0' '1' '1' '0' '1' '1' '0' '1']
2472
- ['1' '1' '1' '0' '0' '0' '1' '1' '0' '1' '1' '1' '1' '0' '1']
2473
- ['1' '0' '0' '0' '0' '0' '1' '1' '1' '0' '0' '0' '1' '0' '0']
2474
- ['0' '0' '0' '0' '1' '1' '0' '0' '0' '0' '0' '0' '1' '0' '0']
2475
- ['0' '0' '1' '1' '0' '0' '0' '0' '1' '1' '0' '0' '1' '1' '1']
2476
- ['0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '0' '1' '1' '1']
2477
- ['0' '1' '0' '0' '0' '0' '0' '1' '1' '0' '1' '1' '1' '1' '0']
2478
- ['1' '1' '1' '1' '1' '0' '1' '1' '1' '0' '0' '0' '0' '0' '0']
2479
- ['1' '1' '1' '1' '1' '1' '1' '1' '1' '1' '0' '0' '0' '1' '1']]
2635
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
2636
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
2637
+ ┌───────────────┬───────────┬───────────────┬───┬───────────┐
2638
+ 0│ │ │ │ │ O O O
2639
+ │ ┌───────────┘ ┌───┬───┴───┐ ┌───┐ │ └───┐ ┌───┤
2640
+ 1│ │ │ │ │ O │ │ O O O O │ │
2641
+ │ └───┐ ┌───┬───┘ └───┬───┴───┤ ├───┴───────┼───┘ │
2642
+ 2│ │ │ │ │ │ O │ │ │
2643
+ │ ┌───┴───┘ ├───┐ │ ├───┴───┐ ┌───┘ │
2644
+ 3│ │ │ │ O O │ │ │ │ │
2645
+ │ └───┐ │ ├───────┘ ┌───┴───┐ │ └───┬───┐ │
2646
+ 4│ O O │ │ │ │ O O │ │ │ │ O
2647
+ ├───┬───┘ ┌───┘ │ ┌───────┴───┬───┘ │ │ ├───┤
2648
+ 5│ │ │ │ │ O O O │ │ │ │ │
2649
+ │ │ │ │ └───┬───┬───┘ ┌───┤ │ │ │
2650
+ 6│ O │ O O │ │ O O │ │ O O │ │ O O │ │ O │
2651
+ ├───┴───┐ ├───────┴───┬───┘ ├───┬───┘ └───┐ │ │ │
2652
+ 7│ O O │ O │ │ O O │ │ O O O │ O │ │ O │
2653
+ │ ┌───┼───┴───────┐ │ ┌───┴───┼───────────┼───┤ └───┤
2654
+ 8│ O │ │ │ │ O │ O O │ │ O │ │
2655
+ ├───┘ └───┐ ┌───┘ ├───┼───────┘ ┌───────┤ │ ┌───┤
2656
+ 9│ │ │ O O │ │ │ │ O │ │ │
2657
+ │ ┌───┘ ├───────┤ └───┐ ├───────┤ └───┤ │
2658
+ 10│ │ O O │ │ │ O O │ │ O O │ O │
2659
+ │ ├───┬───┘ ┌───┘ └───┬───┴───────┤ ┌───┴───┤
2660
+ 11│ │ │ │ │ │ O │ O O │
2661
+ ├───┐ │ └───────┴───────┐ │ ┌───────┼───┴───┬───┤
2662
+ 12│ │ O │ │ O O │ │ O O │ O O │ │
2663
+ │ └───┴───┬───────┐ ┌───┘ ├───┴───────┴───────┘ │
2664
+ 13│ O O O │ O O │ │ O O O │ │
2665
+ │ └───┬───┘ ├───────┬───┴───┐ ┌───────┤
2666
+ 14│ O O O O │ O O │ O O │ O O │ │ O O │
2667
+ └───────────────┴───────┴───────┴───────┴───────────┴───────┘
2480
2668
  Solutions found: 1
2481
2669
  status: OPTIMAL
2482
2670
  Time taken: 0.02 seconds
@@ -2543,21 +2731,39 @@ Note: `solver.Board` accepts an optional `connection_count=N` parameter to speci
2543
2731
 
2544
2732
  ```python
2545
2733
  Solution found
2546
- [[' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2547
- ['R' 'L' 'D' 'R' 'L' 'R' 'L' ' ' ' ' ' ' ' ' ' ' 'D' 'R' 'L']
2548
- [' ' ' ' 'U' ' ' ' ' 'R' 'L' ' ' ' ' ' ' ' ' ' ' 'U' 'R' 'L']
2549
- ['D' ' ' ' ' ' ' ' ' 'R' 'L' ' ' ' ' 'D' ' ' ' ' ' ' ' ' ' ']
2550
- ['U' ' ' ' ' ' ' ' ' 'R' 'L' ' ' ' ' 'U' ' ' ' ' ' ' ' ' ' ']
2551
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'D' ' ']
2552
- [' ' ' ' 'D' ' ' ' ' ' ' 'R' 'L' ' ' 'D' ' ' ' ' ' ' 'U' ' ']
2553
- [' ' 'D' 'U' ' ' 'R' 'L' ' ' ' ' ' ' 'U' ' ' 'R' 'L' 'D' ' ']
2554
- [' ' 'U' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'U' ' ']
2555
- [' ' ' ' 'R' 'L' ' ' ' ' ' ' ' ' ' ' ' ' 'D' ' ' 'R' 'L' 'D']
2556
- [' ' ' ' 'D' ' ' ' ' ' ' 'R' 'L' ' ' ' ' 'U' ' ' ' ' ' ' 'U']
2557
- ['D' 'D' 'U' 'R' 'L' 'D' 'D' 'R' 'L' ' ' ' ' ' ' ' ' 'R' 'L']
2558
- ['U' 'U' ' ' ' ' ' ' 'U' 'U' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2559
- [' ' ' ' 'R' 'L' ' ' ' ' ' ' ' ' ' ' ' ' 'D' ' ' ' ' ' ' ' ']
2560
- ['R' 'L' 'R' 'L' ' ' 'R' 'L' ' ' ' ' ' ' 'U' ' ' ' ' ' ' ' ']]
2734
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
2735
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
2736
+ ┌───────────────────┬───────────────────────────────┬───────┐
2737
+ 0│ . . . . . . . . . . . . . . .
2738
+ │ ┌───────┬───┐ └───┐ ┌───────────────────┐ └───┐ │
2739
+ 1│ O─┼─O O O─┼─O O─┼─O . . . . . O O─┼─O
2740
+ │ │ ┌─┼─┘ └───┐ ├───┘ └─┼─────┤ │
2741
+ 2│ . . O . . O─┼─O . . . . . O O─┼─O
2742
+ │ │ │ └───┤ ┌───┐ ┌───────────────┘ │
2743
+ 3│ O . . . . O─┼─O . . O . . . . .
2744
+ ├─┼─┤ └───────────┐ ├───────┘ └─┼─┴───────────┐ │
2745
+ 4│ O . . . . O─┼─O . . O . . . . .
2746
+ │ └───────┐ │ └───┐ ┌───────────┐ ┌───┘ │
2747
+ 5│ . . . . . . . . . . . . . O .
2748
+ │ ┌───┘ │ ├───┘ │ └─────┼─┐ │
2749
+ 6│ . . │ O . . │ . O─┼─O . O . │ . . O │ . │
2750
+ │ └─┼─────────┼───────┘ ┌─────┼─┐ │ ┌───┐ │ │
2751
+ 7│ . O O . O─┼─O . . │ . O │ . │ O─┼─O │ O │ . │
2752
+ ├─────┼─┐ ┌───┴───────────┘ │ └───┘ ├─┼─┤ │
2753
+ 8│ . O │ . . │ . . . . . . │ . . . │ O │ . │
2754
+ │ │ ┌───┘ └───┐ │ │ │
2755
+ 9│ . . │ O─┼─O . . . . . . O │ . O─┼─O │ O │
2756
+ │ ┌───┴───┘ ┌───────────┬───┐ ┌─┼─┴───────┘ └─┼─┤
2757
+ 10│ . │ . O . │ . . O─┼─O │ . . │ O . . . O │
2758
+ │ └─────┼─┐ │ │ │ ┌───┘ ┌───────┐ │
2759
+ 11│ O O O │ O─┼─O O O │ O─┼─O │ . . . │ . O─┼─O │
2760
+ ├─┼─┬─┼─┐ ├───┘ ┌─┼─┬─┼─┤ └───┤ ┌───────┘ │ │
2761
+ 12│ O │ O │ . │ . . │ O │ O │ . . │ . │ . . . . │ . │
2762
+ │ │ │ │ ┌───┘ │ └───┐ └───┘ │ │
2763
+ 13│ . │ . │ O─┼─O │ . . │ . . │ . . O . . . │ . │
2764
+ │ │ └───┤ │ │ └─────────┼─┐ └───┤
2765
+ 14│ O─┼─O O─┼─O │ . O─┼─O . . . O │ . . . . │
2766
+ └───┴───────┴───┴───────┴───────────────────┴───────────────┘
2561
2767
  Solutions found: 1
2562
2768
  status: OPTIMAL
2563
2769
  Time taken: 0.01 seconds
@@ -2624,24 +2830,43 @@ solutions = binst.solve_and_print()
2624
2830
 
2625
2831
  ```python
2626
2832
  Solution found
2627
- [[' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2628
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' 'S' ' ' ' ']
2629
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ']
2630
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ']
2631
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2632
- [' ' 'S' 'S' 'S' 'S' ' ' ' ' ' ' ' ' ' ' ' ' 'S' 'S' 'S' ' ']
2633
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2634
- [' ' ' ' 'S' ' ' ' ' 'S' 'S' 'S' 'S' 'S' ' ' ' ' 'S' 'S' 'S']
2635
- ['S' ' ' 'S' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2636
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ' 'S' ' ' ' ' ' ']
2637
- ['S' 'S' 'S' 'S' ' ' ' ' ' ' ' ' 'S' ' ' ' ' ' ' ' ' ' ' ' ']
2638
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' ' ' ' ' ' ' ' ']
2639
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S' 'S' ' ' 'S' ' ' ' ' ' ' ' ']
2640
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2641
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'S']]
2833
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
2834
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
2835
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
2836
+ 0│ │ │ │ │ │▒▒▒│ │ │ │ │ │ │ │ │ │
2837
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2838
+ 1│ │ │ │ │ │ │ │ │ │ │▒▒▒│ │▒▒▒│ │ │
2839
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2840
+ 2│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒│ │ │
2841
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2842
+ 3│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒│ │ │
2843
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2844
+ 4│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
2845
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2846
+ 5│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│ │
2847
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2848
+ 6│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
2849
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2850
+ 7│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│
2851
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2852
+ 8│▒▒▒│ │▒▒▒│ │ │ │ │ │ │ │ │ │ │ │ │
2853
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2854
+ 9│ │ │ │ │ │ │ │ │▒▒▒│ │ │▒▒▒│ │ │ │
2855
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2856
+ 10│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │ │ │▒▒▒│ │ │ │ │ │ │
2857
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2858
+ 11│ │ │ │ │ │ │ │ │ │ │▒▒▒│ │ │ │ │
2859
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2860
+ 12│ │ │ │ │ │ │ │▒▒▒│▒▒▒│ │▒▒▒│ │ │ │ │
2861
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2862
+ 13│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
2863
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2864
+ 14│ │ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒│
2865
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
2642
2866
  Solutions found: 1
2643
2867
  status: OPTIMAL
2644
- Time taken: 0.12 seconds
2868
+ Time taken: 0.09 seconds
2869
+ Solution found
2645
2870
  ```
2646
2871
 
2647
2872
  **Solved puzzle**
@@ -2689,18 +2914,33 @@ solutions = binst.solve_and_print()
2689
2914
 
2690
2915
  ```python
2691
2916
  Solution found
2692
- [['X' 'X' ' ' 'X' ' ' ' ' ' ' 'X' ' ' ' ' ' ' 'X']
2693
- [' ' ' ' ' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ']
2694
- ['X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2695
- [' ' ' ' ' ' ' ' 'X' ' ' 'X' ' ' ' ' ' ' ' ' ' ']
2696
- [' ' ' ' 'X' 'X' ' ' ' ' ' ' 'X' ' ' 'X' ' ' 'X']
2697
- ['X' ' ' ' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' 'X' 'X']
2698
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'X' ' ']
2699
- [' ' ' ' ' ' 'X' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
2700
- [' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' 'X' ' ' 'X' ' ']
2701
- [' ' ' ' ' ' 'X' ' ' ' ' 'X' ' ' ' ' ' ' ' ' 'X']
2702
- [' ' ' ' 'X' ' ' ' ' 'X' 'X' 'X' 'X' 'X' 'X' 'X']
2703
- ['X' ' ' ' ' 'X' ' ' ' ' ' ' 'X' 'X' 'X' 'X' 'X']]
2917
+ 0 0 0 0 0 0 0 0 0 0 1 1
2918
+ 0 1 2 3 4 5 6 7 8 9 0 1
2919
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
2920
+ 0│▒▒▒│▒▒▒│ │▒▒▒│ │ │ │▒▒▒│ │ │ │▒▒▒│
2921
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2922
+ 1│ │ │ │ │ │▒▒▒│ │ │ │ │ │ │
2923
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2924
+ 2│▒▒▒│ │ │ │ │ │ │ │ │ │ │ │
2925
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2926
+ 3│ │ │ │ │▒▒▒│ │▒▒▒│ │ │ │ │ │
2927
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2928
+ 4│ │ │▒▒▒│▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │▒▒▒│
2929
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2930
+ 5│▒▒▒│ │ │ │▒▒▒│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│
2931
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2932
+ 6│ │ │ │ │ │ │ │ │ │ │▒▒▒│ │
2933
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2934
+ 7│ │ │ │▒▒▒│ │ │ │ │ │ │ │ │
2935
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2936
+ 8│ │ │▒▒▒│ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│ │
2937
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2938
+ 9│ │ │ │▒▒▒│ │ │▒▒▒│ │ │ │ │▒▒▒│
2939
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2940
+ 10│ │ │▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│
2941
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
2942
+ 11│▒▒▒│ │ │▒▒▒│ │ │ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│
2943
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
2704
2944
  Solutions found: 1
2705
2945
  status: OPTIMAL
2706
2946
  Time taken: 0.00 seconds
@@ -2775,34 +3015,62 @@ solutions = binst.solve_and_print()
2775
3015
 
2776
3016
  ```python
2777
3017
  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
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
3018
+ 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
3019
+ 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
3020
+ ┌───────────────────┬───────────────────────────────────┬───────────┬───────────────────────────────┐
3021
+ 0│ . . . . X . X . X . . . . . . . . X . X . X . . .
3022
+ │ ┌───┐ ┌───────┘ ┌───────┐ ┌───┘ ├───────────────────────┐ │
3023
+ 1│ X . X . . . . . . . X . X . X . . . . . . . . X .
3024
+ │ │ └───┘ ┌───┘ └───┴───┐ ┌───┘ ┌───┘ │
3025
+ 2│ . . . . X . X . X . . . . . . . X . X . X . . . .
3026
+ │ │ ┌───┬───────────────────────┘ │ ┌───┘ │ ┌───┐ │
3027
+ 3│ X . X . . . . . . . X . X . . . . . . . . . X . X
3028
+ │ │ │ └───────────────────────┐ ┌───┘ └───────────┐ └───┤ │ │
3029
+ 4│ . . . . . X . X . . . . . . X . X . X . X . . . .
3030
+ │ └───┼───┐ ┌───────────────┐ │ │ │ ┌───┘ └───┤
3031
+ 5│ . X . X . . . . . X . X . . . . . . . . . . X . X
3032
+ │ ┌───┘ └───┴───┐ ┌───┘ └───┐ └───┐ ┌───┘ ┌───────┘ │
3033
+ 6│ . . . . . X . X . . . . . X . X . . X . X . . . .
3034
+ │ └───┐ │ └───────┐ ├───────────────┤ │ ┌───────┴───────┐ │
3035
+ 7│ . X . X . . . . . X . X . . . . . . . . . . X . X
3036
+ ├───────┘ ┌───┘ └───┤ ┌───┘ ├───┘ └───┐ ┌───┤
3037
+ 8│ . . . . . X . X . . . . . X . X . X . X . . . . .
3038
+ │ │ ┌───┘ │ ┌───┘ │ │ │
3039
+ 9│ . X . X . . . . . X . X . . . . . . . . . X . X .
3040
+ │ ┌───┘ ┌───┘ ├───────────┴───┐ └───┘ │
3041
+ 10│ . . . . . X . X . . . . . X . X . X . X . . . . .
3042
+ │ ┌───┘ ┌───┤ └───────────┐ │ ┌───┐ ┌───┐ │
3043
+ 11│ X . │ X . . . . │ . │ . X . X . . . . │ . │ . . . . │ X │ . │ X │ . │
3044
+ ├───┐ └───────────────────┘ │ ┌───────────┘ └───┐ │ │ │ ├───┤
3045
+ 12│ . │ . . . X . X . │ . . . . . │ X . X . X │ . X . │ . │ . │ . │ . │
3046
+ │ └───────────┬───┐ ┌───────┼───┐ └───────────────┐ ├───────────┘ └───┘ │ │
3047
+ 13│ X . X . │ . │ . │ . . │ X │ . X . . . . . . │ . │ . . . X . X │ . │
3048
+ │ │ └───┘ │ │ ┌───────┐ ┌───┐ ┌───┘ │ ┌───────────────────┘ │
3049
+ 14│ . . . . │ X . X . │ . │ . . │ . X │ . │ X │ . │ X . │ X │ . . . . . . │
3050
+ │ └───┐ ┌───┘ ├───────┘ ┌───┴───┘ │ └───────┤ │ │
3051
+ 15│ . X . . . │ . . │ . X │ . X . │ . . . │ . . . │ . │ . X . X . X │
3052
+ │ ┌───────┘ │ ┌───┘ ┌───────┤ ┌───┐ └───────────┤ │ │
3053
+ 16│ . . . │ X . X . │ . │ . . │ . . │ X │ . │ X . X . │ X │ . . . . . . │
3054
+ │ ┌───────┘ │ │ │ ┌───┴───┘ └───┐ ┌───┐ ├───┘ ┌───┐ │
3055
+ 17│ . │ X . . . . . │ X │ . X │ . │ . . . . │ . │ . │ . │ . . │ X │ . X . X │
3056
+ │ └───────┐ ┌───────┘ │ ┌───┘ │ ┌───┐ │ │ │ │ ┌───┘ │ │
3057
+ 18│ . . . │ X . │ X . . │ . │ . . │ X │ . │ X . │ X │ . │ X │ . │ . . │ . . . . │
3058
+ │ │ └───┐ │ └───┐ └───┘ └───┐ └───┘ └───┴───┘ ┌───┘ ┌───────┐ │
3059
+ 19│ X . . │ . . . │ . X │ . X │ . . . . │ . . . . . X │ . X │ . X │ . │
3060
+ │ └───┬───┐ │ ┌───┤ ┌───┘ └───┐ ┌───────────┐ │ │ ┌───┘ │
3061
+ 20│ . . X . │ X │ . │ . │ . │ . │ . . X . X . │ X │ . X . │ . │ . . │ . │ . . │
3062
+ │ │ ├───┤ │ │ │ ┌───────┴───┘ │ │ ┌───┘ └───┐ │
3063
+ 21│ X . . . │ . │ . │ X │ . │ X │ . . . . │ . . . . . . │ X │ . │ X . X │ . │
3064
+ │ ┌───────┐ │ │ └───┘ │ │ │ └───┴───┴───────┐ │ │
3065
+ 22│ . │ . X │ . │ X │ . . . │ . │ . X . X │ . X . X . . . . . . │ . │ . │
3066
+ │ │ ┌───┘ │ │ ┌───┐ │ │ │ ┌───────────┘ └───┤
3067
+ 23│ . │ . │ . . │ . │ . │ X │ . │ X │ . . . . │ . . . . . X . │ X . X . X │
3068
+ │ │ └───────┘ └───┘ │ └───┘ │ └───────────────────┤
3069
+ 24│ . │ X . X . . . │ . . . X . X │ . X . X . . . . . . . . │
3070
+ └───┴───────────────────────┴───────────────────────┴───────────────────────────────────────────────┘
2803
3071
  Solutions found: 1
2804
3072
  status: OPTIMAL
2805
- Time taken: 0.38 seconds
3073
+ Time taken: 0.39 seconds
2806
3074
  ```
2807
3075
 
2808
3076
  **Solved puzzle**
@@ -2860,16 +3128,29 @@ solutions = binst.solve_and_print()
2860
3128
 
2861
3129
  ```python
2862
3130
  Solution found
2863
- ['*', ' ', ' ', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2864
- [' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2865
- [' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2866
- [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2867
- [' ', ' ', '*', ' ', ' ', '*', ' ', ' ', ' ', ' '],
2868
- ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' '],
2869
- [' ', ' ', ' ', '*', ' ', ' ', '*', ' ', ' ', ' '],
2870
- [' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'],
2871
- [' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2872
- [' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', ' ']
3131
+ 0 0 0 0 0 0 0 0 0 0
3132
+ 0 1 2 3 4 5 6 7 8 9
3133
+ ┌───────────────────────────────────────┐
3134
+ 0│ X . . . X . . . . .
3135
+ ├───┐ │
3136
+ 1│ │ . . . . . X . X .
3137
+ │ │ ┌───┐ │
3138
+ 2│ │ . X . X . . . │ │ .
3139
+ │ └───┐ ┌───┐ └───┘ │
3140
+ 3│ │ . . │ │ . . X . X
3141
+ │ │ │ │ │
3142
+ 4│ │ X . │ │ X . . . . │
3143
+ ├───────┘ └───┘ │
3144
+ 5│ X . . . . . . . X . │
3145
+ │ ┌───┐ ┌───┐ │
3146
+ 6│ . . . X │ │ . X . │ │ . │
3147
+ ├───┐ └───┘ ┌───┘ │ │
3148
+ 7│ │ X . . . . . │ │ X │
3149
+ │ └───┐ ┌───┘ │ │
3150
+ 8│ │ . X . X │ │ . │
3151
+ │ ┌───┘ ┌───┐ └───────────┘ │
3152
+ 9│ │ X . . │ │ . . X . . │
3153
+ └───┴───────────┴───┴───────────────────┘
2873
3154
  Solutions found: 1
2874
3155
  status: OPTIMAL
2875
3156
  Time taken: 0.02 seconds
@@ -2940,30 +3221,52 @@ solutions = binst.solve_then_constrain() # solve_then_constrain NOT solve_and_p
2940
3221
 
2941
3222
  ```python
2942
3223
  Solution found
2943
- [
2944
- ['X', 'X', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' '],
2945
- [' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', 'X', 'X', ' ', ' '],
2946
- ['X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' '],
2947
- ['X', ' ', ' ', ' ', 'X', ' ', 'X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', ' ', 'X', 'X', ' '],
2948
- [' ', ' ', ' ', 'X', 'X', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' '],
2949
- ['X', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', ' '],
2950
- ['X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X'],
2951
- ['X', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X'],
2952
- [' ', 'X', ' ', 'X', ' ', 'X', 'X', 'X', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X'],
2953
- ['X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', ' ', ' ', ' ', 'X', ' ', 'X'],
2954
- [' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ', ' ', ' '],
2955
- [' ', 'X', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' '],
2956
- [' ', 'X', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', 'X', ' ', 'X', 'X', ' ', ' '],
2957
- [' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', 'X', ' ', 'X', ' ', 'X', 'X', 'X', ' ', ' ', 'X'],
2958
- [' ', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X'],
2959
- ['X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X'],
2960
- [' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', 'X', 'X'],
2961
- ['X', ' ', 'X', ' ', 'X', 'X', 'X', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', ' '],
2962
- ['X', 'X', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', ' '],
2963
- ['X', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', 'X', ' ', ' ', ' ', ' ', ' '],
2964
- ]
3224
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3225
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3226
+ ┌───────────┬───────┬───────────┬───────────┬───────┬───┬───┬───────┬───────┬───┐
3227
+ 0│▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒ ▒▒▒│ │ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│ │
3228
+ │ └───┐ │ ┌───────┘ ┌───┬───┘ ┌───┘ │ │ ┌───┘ ┌───┘ │
3229
+ 1│ ▒▒▒ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒ ▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ │
3230
+ ├───────────┬───┘ │ └───┐ ┌───┘ │ │ ┌───┘ │ └───────┤ ┌───┤
3231
+ 2│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒│ │
3232
+ │ ┌───────┴───┐ │ ┌───┘ └───┐ │ ├───┘ │ ┌───┬───┘ │ │
3233
+ 3│▒▒▒│ │▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│ │▒▒▒ ▒▒▒│ │
3234
+ │ └───────┐ ├───┴───┤ ┌───────┤ │ │ ┌───────┼───┘ │ ┌───┘ │
3235
+ 4│ │▒▒▒│▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │▒▒▒ │▒▒▒│ │ │▒▒▒│ │
3236
+ ├───┬───────┘ │ │ └───┐ └───┤ ├───┘ │ └───┘ ┌───┤
3237
+ 5│▒▒▒│ ▒▒▒ ▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒│ │
3238
+ │ │ ┌───┐ ├───┐ │ │ ┌───┘ ┌───┘ ┌───────┼───┬───────────┤ │
3239
+ 6│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│ │▒▒▒│
3240
+ │ └───┤ └───┤ └───┤ ├───┴───────┼───────┴───┐ │ │ ┌───┘ │
3241
+ 7│▒▒▒ ▒▒▒│ ▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒ │ │▒▒▒│ ▒▒▒│ ▒▒▒│
3242
+ │ ┌───┤ │ └───┬───┘ ┌───────┤ ┌───┘ │ └───┐ └───┐ │
3243
+ 8│ │▒▒▒│ ▒▒▒│ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒│
3244
+ ├───┘ └───┐ └───┐ └───────┘ ┌───┘ ┌───┘ └───────┤ ┌───┤ │
3245
+ 9│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ ▒▒▒ │▒▒▒│ │▒▒▒│
3246
+ ├───────────┼───────┴───────┐ ┌───┴───┐ ├───┬───────────┐ ├───┘ └───┤
3247
+ 10│ │ ▒▒▒ ▒▒▒│ │ ▒▒▒│ │ │▒▒▒ ▒▒▒ ▒▒▒│ │ │
3248
+ │ ┌───┐ └───────────┐ ├───────┼───┐ └───┤ └───────┐ └───┼───────┐ │
3249
+ 11│ │▒▒▒│ ▒▒▒ ▒▒▒ │▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ ▒▒▒ │▒▒▒ │▒▒▒ ▒▒▒│ │
3250
+ │ │ └───┐ ┌───┘ │ │ └───┐ │ │ ┌───┘ ┌───┘ │
3251
+ 12│ │▒▒▒ ▒▒▒│ ▒▒▒│ ▒▒▒│ │▒▒▒ │▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒│ │
3252
+ │ │ ┌───┴───┐ │ ┌───┘ ┌───┘ ┌───┴───┼───────┬───┴───┴───────┤ ┌───┤
3253
+ 13│ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒ │ │▒▒▒│
3254
+ │ ├───┘ ├───┼───┘ ├───┬───┘ │ ├───────┐ │ │ │
3255
+ 14│ │▒▒▒ ▒▒▒ │▒▒▒│ ▒▒▒ │▒▒▒│ ▒▒▒ │▒▒▒ ▒▒▒│ │▒▒▒ │ │▒▒▒│
3256
+ ├───┘ ┌───────┘ │ ┌───┘ └───┐ ┌───┘ │ ├───────┘ │ │
3257
+ 15│▒▒▒ ▒▒▒│ ▒▒▒ ▒▒▒│ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│
3258
+ ├───────┴───┐ ┌───┤ └───────┬───┘ ├───────────┤ └───┐ │ │
3259
+ 16│ ▒▒▒ ▒▒▒│▒▒▒│ │ ▒▒▒ │ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒│▒▒▒│
3260
+ ├───┐ ├───┘ └───────┐ ┌───┴───────┤ ┌───────┘ ┌───┐ ├───┐ └───┤
3261
+ 17│▒▒▒│ ▒▒▒│ ▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│ ▒▒▒│ │ │▒▒▒│ │
3262
+ │ └───┐ │ ┌───┐ ├───┴───┐ ├───┤ ┌───┐ │ ├───┘ └───┐ │
3263
+ 18│▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │ │▒▒▒ │▒▒▒ │▒▒▒│ │ │▒▒▒│ │▒▒▒ ▒▒▒ ▒▒▒│ │
3264
+ │ ┌───┴───┴───────┘ ├───┘ │ ┌───┘ └───┘ │ │ └───────────┘ │
3265
+ 19│▒▒▒│ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│▒▒▒ ▒▒▒ ▒▒▒ │▒▒▒│ │
3266
+ └───┴───────────────────┴───────────┴───┴───────────────┴───┴───────────────────┘
2965
3267
  Solutions found: 1
2966
- Time taken: 0.38 seconds
3268
+ status: OPTIMAL
3269
+ Time taken: 0.09 seconds
2967
3270
  ```
2968
3271
 
2969
3272
  **Solved puzzle**
@@ -3052,26 +3355,48 @@ As the instructions say, the solution to this puzzle is not garunteed to be uniq
3052
3355
 
3053
3356
  ```python
3054
3357
  Solution found
3055
- [[' ' ' ' ' ' ' ' 'O' ' ' ' ' ' ']
3056
- [' ' ' ' ' ' ' ' ' ' 'O' ' ' ' ']
3057
- [' ' 'O' ' ' ' ' ' ' ' ' ' ' ' ']
3058
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3059
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3060
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3061
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3062
- [' ' ' ' 'O' ' ' 'O' ' ' ' ' ' ']]
3358
+
3359
+ 0 1 2 3 4 5 6 7
3360
+ ┌───┬───┬───┬───┬───┬───┬───┬───┐
3361
+ 0│ │ │ │ │ O │ │ │ │
3362
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3363
+ 1│ │ │ │ │ │ O │ │ │
3364
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3365
+ 2│ │ O │ │ │ │ │ │ │
3366
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3367
+ 3│ │ │ │ │ │ │ │ │
3368
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3369
+ 4│ │ │ │ │ │ │ │ │
3370
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3371
+ 5│ │ │ │ │ │ │ │ │
3372
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3373
+ 6│ │ │ │ │ │ │ │ │
3374
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3375
+ 7│ │ │ O │ │ O │ │ │ │
3376
+ └───┴───┴───┴───┴───┴───┴───┴───┘
3063
3377
  Solution found
3064
- [[' ' ' ' ' ' ' ' 'O' ' ' ' ' ' ']
3065
- [' ' ' ' ' ' ' ' ' ' 'O' ' ' ' ']
3066
- [' ' 'O' ' ' 'O' ' ' ' ' ' ' ' ']
3067
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3068
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3069
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3070
- [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']
3071
- [' ' ' ' 'O' ' ' 'O' ' ' ' ' ' ']]
3378
+
3379
+ 0 1 2 3 4 5 6 7
3380
+ ┌───┬───┬───┬───┬───┬───┬───┬───┐
3381
+ 0│ │ │ │ │ O │ │ │ │
3382
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3383
+ 1│ │ │ │ │ │ O │ │ │
3384
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3385
+ 2│ │ O │ │ O │ │ │ │ │
3386
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3387
+ 3│ │ │ │ │ │ │ │ │
3388
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3389
+ 4│ │ │ │ │ │ │ │ │
3390
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3391
+ 5│ │ │ │ │ │ │ │ │
3392
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3393
+ 6│ │ │ │ │ │ │ │ │
3394
+ ├───┼───┼───┼───┼───┼───┼───┼───┤
3395
+ 7│ │ │ O │ │ O │ │ │ │
3396
+ └───┴───┴───┴───┴───┴───┴───┴───┘
3072
3397
  Solutions found: 2
3073
3398
  status: OPTIMAL
3074
- Time taken: 30.33 seconds
3399
+ Time taken: 24.53 seconds
3075
3400
  ```
3076
3401
 
3077
3402
  **Solved puzzle**
@@ -3134,26 +3459,42 @@ As the instructions say, the solution to this puzzle is not garunteed to be uniq
3134
3459
 
3135
3460
  ```python
3136
3461
  Solution found
3137
- [
3138
- ['00', '00', '00', '00', '00', '01', '01', '02', '02', '03', '03', '04', '04', '04', '04'],
3139
- ['05', '05', '15', '06', '06', '01', '01', '02', '02', '10', '10', '07', '07', '07', '13'],
3140
- ['08', '15', '15', '15', '06', '06', '09', '09', '10', '10', '10', '10', '10', '13', '13'],
3141
- ['14', '15', '15', '15', '15', '15', '11', '11', '12', '20', '10', '10', '16', '13', '13'],
3142
- ['14', '15', '15', '15', '15', '15', '11', '11', '20', '20', '20', '20', '16', '13', '13'],
3143
- ['14', '17', '17', '15', '15', '15', '15', '15', '20', '20', '20', '20', '16', '13', '18'],
3144
- ['17', '17', '19', '15', '15', '15', '15', '15', '20', '20', '20', '24', '16', '21', '18'],
3145
- ['26', '22', '27', '27', '23', '15', '15', '15', '20', '20', '20', '24', '24', '21', '25'],
3146
- ['26', '27', '27', '28', '28', '29', '15', '20', '20', '20', '20', '32', '24', '30', '30'],
3147
- ['26', '27', '27', '28', '28', '31', '31', '20', '20', '20', '20', '32', '37', '30', '30'],
3148
- ['27', '27', '33', '33', '33', '31', '31', '34', '34', '20', '35', '32', '37', '37', '37'],
3149
- ['36', '38', '38', '33', '33', '33', '34', '34', '41', '41', '41', '41', '37', '37', '37'],
3150
- ['44', '44', '38', '38', '45', '39', '46', '40', '40', '41', '41', '42', '37', '37', '37'],
3151
- ['43', '44', '38', '38', '45', '45', '46', '40', '40', '41', '41', '42', '37', '37', '37'],
3152
- ['43', '44', '44', '38', '38', '45', '46', '47', '41', '41', '41', '41', '48', '48', '37'],
3153
- ]
3462
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
3463
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
3464
+ ┌───────────────────┬───────┬───────┬───────┬───────────────┐
3465
+ 0│ . │ . . . . . . │ . . │
3466
+ ├───────┬───┬───────┤ │ ├───────┼───────────┬───┤
3467
+ 1│ . . │ │ . . . . . │ │ . │ │
3468
+ ├───┬───┘ └───┐ └───┬───┴───┬───┘ └───────┬───┘ │
3469
+ 2│ . │ │ . │ . . │ . │ │
3470
+ ├───┤ └───────┼───────┼───┬───┐ ┌───┤ │
3471
+ 3│ │ │ . . . │ │ │ │ . .
3472
+ │ │ │ ├───┘ └───────┤ │ │
3473
+ 4│ . │ . │ . . │ │ . │ │
3474
+ │ ├───────┐ └───────┤ │ │ ┌───┤
3475
+ 5│ │ . │ . │ │ . │ │ .
3476
+ ├───┘ ┌───┤ │ ┌───┤ ├───┤ │
3477
+ 6│ . . │ │ . │ │ │ . .
3478
+ ├───┬───┼───┴───┬───┐ │ │ └───┤ ├───┤
3479
+ 7│ │ . │ │ . │ │ . │ . . │ . │ . │
3480
+ │ ├───┘ ┌───┴───┼───┐ ┌───┘ ├───┐ ├───┴───┤
3481
+ 8│ . │ . . │ . . │ . │ │ │ │ │ . . │
3482
+ │ │ │ ├───┴───┤ │ ├───┤ │
3483
+ 9│ │ . . │ . . │ . . │ │ . │ │ . . │
3484
+ ├───┘ ┌───┴───────┤ ├───────┐ ┌───┤ │ └───────┤
3485
+ 10│ │ . . │ . . │ . │ │ . │ │ │
3486
+ ├───┬───┴───┐ └───┬───┘ ┌───┴───┴───┴───┤ │
3487
+ 11│ . │ │ . . │ . │ │ . │
3488
+ ├───┴───┐ └───┬───┬───┼───┬───┴───┐ ┌───┤ │
3489
+ 12│ │ . . │ │ . │ │ . . │ . . │ . │ . │
3490
+ ├───┐ │ │ └───┤ │ │ │ │ │
3491
+ 13│ . │ . │ . . │ . . │ . │ . . │ . . │ . │ │
3492
+ │ │ └───┐ └───┐ │ ├───┬───┘ └───┼───────┐ │
3493
+ 14│ . │ │ │ │ │ . │ │ . . │ │
3494
+ └───┴───────┴───────┴───┴───┴───┴───────────────┴───────┴───┘
3154
3495
  Solutions found: 1
3155
3496
  status: OPTIMAL
3156
- Time taken: 0.07 seconds
3497
+ Time taken: 0.06 seconds
3157
3498
  ```
3158
3499
 
3159
3500
  **Solved puzzle**
@@ -3213,18 +3554,29 @@ solutions = binst.solve_and_print()
3213
3554
 
3214
3555
  ```python
3215
3556
  Solution found
3216
- [
3217
- [ / \ \ / / / / \ \ \ / \ ]
3218
- [ \ \ \ \ \ \ / \ / / \ \ ]
3219
- [ \ \ \ / / \ / \ \ \ \ / ]
3220
- [ \ / \ \ / \ / / \ / \ / ]
3221
- [ / \ \ / \ \ \ / / / \ \ ]
3222
- [ / \ \ / \ \ \ / \ / \ \ ]
3223
- [ / \ \ / \ / / / \ / / \ ]
3224
- [ \ \ \ \ \ / / / \ / \ \ ]
3225
- [ / / / \ \ / / \ \ / \ \ ]
3226
- [ \ \ / / / \ / \ / \ \ / ]
3227
- ]
3557
+ 0 0 0 0 0 0 0 0 0 0 1 1
3558
+ 0 1 2 3 4 5 6 7 8 9 0 1
3559
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
3560
+ 0│ / │ \ \ / / / / │ \ \ \ / │ \ │
3561
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3562
+ 1│ \ \ \ \ \ │ \ │ / │ \ │ / / \ \
3563
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3564
+ 2│ \ \ \ / / \ / \ │ \ │ \ │ \ │ / │
3565
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3566
+ 3│ \ / \ \ / \ / │ / │ \ │ / │ \ │ / │
3567
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3568
+ 4│ / │ \ │ \ │ / │ \ │ \ │ \ │ / │ / │ / │ \ │ \ │
3569
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3570
+ 5│ / │ \ │ \ │ / │ \ │ \ │ \ │ / │ \ │ / │ \ │ \ │
3571
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3572
+ 6│ / │ \ │ \ │ / │ \ │ / │ / │ / │ \ │ / │ / │ \ │
3573
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3574
+ 7│ \ │ \ │ \ │ \ │ \ │ / │ / │ / │ \ │ / │ \ │ \ │
3575
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3576
+ 8│ / │ / │ / │ \ │ \ │ / │ / │ \ │ \ │ / │ \ │ \ │
3577
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3578
+ 9│ \ │ \ │ / │ / │ / │ \ │ / │ \ │ / │ \ │ \ │ / │
3579
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
3228
3580
  Solutions found: 1
3229
3581
  status: OPTIMAL
3230
3582
  Time taken: 0.06 seconds
@@ -3242,7 +3594,11 @@ Applying the solution to the puzzle visually:
3242
3594
 
3243
3595
  Also called "Futoshiki" or Renzoku"
3244
3596
 
3245
- * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/unequal.html)
3597
+ * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/unequal.html)
3598
+
3599
+ * [**Play online 2**](https://www.puzzle-futoshiki.com/futoshiki-4x4-easy/) (Futoshiki variant)
3600
+
3601
+ * [**Play online 3**](https://www.puzzle-futoshiki.com/renzoku-4x4-easy/) (Renzoku variant)
3246
3602
 
3247
3603
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/unequal.html#unequal)
3248
3604
 
@@ -3387,31 +3743,52 @@ solutions = binst.solve_and_print()
3387
3743
 
3388
3744
  ```python
3389
3745
  Solution found
3390
- [
3391
- [ 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3392
- [ 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3393
- [ ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ' ],
3394
- [ 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X' ],
3395
- [ ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X' ],
3396
- [ ' ', 'X', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ' ],
3397
- [ ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X' ],
3398
- [ 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X' ],
3399
- [ 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', ' ' ],
3400
- [ ' ', 'X', 'X', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ' ],
3401
- [ 'X', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', 'X', ' ' ],
3402
- [ 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3403
- [ ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3404
- [ 'X', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ' ],
3405
- [ 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ' ],
3406
- [ ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X' ],
3407
- [ ' ', 'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X' ],
3408
- [ ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', 'X', ' ' ],
3409
- [ 'X', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3410
- [ 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3411
- ]
3746
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3747
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3748
+ ┌───┬───────────────┬───┬───────┬───────────┬───────────┬───┬───┬───────┬───────┐
3749
+ 0│▒▒▒│ │▒▒▒│ ▒▒▒│ ▒▒▒ │▒▒▒ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│
3750
+ │ └───┐ │ │ ┌───┘ ┌───┬───┴───┐ ┌───┘ │ │ ├───────┤
3751
+ 1│▒▒▒ │▒▒▒ │▒▒▒│ │▒▒▒ │▒▒▒│ ▒▒▒│ │ ▒▒▒│ │▒▒▒ │ │
3752
+ ├───────┴───┐ ├───┘ ├───────┘ │ ┌───┤ ├───┬───┘ └───┬───┘ │
3753
+ 2│ ▒▒▒│ ▒▒▒│ ▒▒▒│ ▒▒▒ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒ │
3754
+ │ ┌───┐ ├───────┴───┬───┴───────┬───┴───┤ └───┘ │ └───────┐ │
3755
+ 3│▒▒▒│▒▒▒│ │ ▒▒▒ │▒▒▒ ▒▒▒│ ▒▒▒│ │ ▒▒▒ │▒▒▒│
3756
+ │ │ └───┤ ┌───────┤ │ └───┐ ┌───┤ ┌───────────┴───┤
3757
+ 4│ │ ▒▒▒│▒▒▒│ │ │ ▒▒▒│▒▒▒│ │ ▒▒▒│▒▒▒ ▒▒▒│
3758
+ │ ├───────┴───┘ │ ┌───────┴───────┐ │ │ └───┐ │ ┌───────┐ │
3759
+ 5│ │▒▒▒ ▒▒▒ │ │▒▒▒ ▒▒▒ │ │ │▒▒▒ ▒▒▒│ │ │▒▒▒ ▒▒▒│ │
3760
+ ├───┴───┬───────────────┼───┼───────────┬───┴───┼───┘ ┌───┴───┼───┴───┬───┴───┤
3761
+ 6│ ▒▒▒│ ▒▒▒ │▒▒▒│ ▒▒▒│ ▒▒▒│ │ ▒▒▒│▒▒▒ │ ▒▒▒│
3762
+ │ │ ┌───┬───────┤ │ ┌───┤ ┌───┴───┬───┴───┐ ├───┐ │ │
3763
+ 7│▒▒▒ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│ │ │▒▒▒│ ▒▒▒│
3764
+ ├───┬───┴───┘ │ ┌───┴───┘ │ │ └───┐ └───┬───┘ │ └───┤ ┌───┤
3765
+ 8│▒▒▒│ │▒▒▒│ ▒▒▒│ │ │ │ ▒▒▒│ ▒▒▒│ │ │
3766
+ │ └───┐ ┌───┤ ├───┬───────────┘ │ ┌───┘ ├───┬───┘ └───┘ │
3767
+ 9│ ▒▒▒│▒▒▒│ │▒▒▒│ │ ▒▒▒ │▒▒▒│▒▒▒ │ │▒▒▒ │
3768
+ ├───┐ ├───┘ ├───┘ ├───────┐ ┌───┤ │ ┌───────┤ └───────────┬───────┤
3769
+ 10│▒▒▒│ │ │ │▒▒▒ ▒▒▒│ │▒▒▒│ │ │▒▒▒ ▒▒▒│ ▒▒▒│▒▒▒ │
3770
+ │ └───┤ ┌───┴───┐ └───┬───┴───┘ ├───┴───┴───────┴───┐ ┌───────┴───┐ │
3771
+ 11│▒▒▒ │ │▒▒▒ ▒▒▒│ │ ▒▒▒│ ▒▒▒│ │▒▒▒ │ │
3772
+ ├───────┤ └───┬───┘ └───┬───────┴───┬───┐ ┌───┤ ├───────┐ │ │
3773
+ 12│ ▒▒▒│▒▒▒ │ ▒▒▒│▒▒▒ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒│▒▒▒│
3774
+ │ ┌───┘ ┌───┴───┐ ├───┐ │ ├───┐ │ │ └───┐ │ │ │
3775
+ 13│▒▒▒│ │▒▒▒ ▒▒▒│ ▒▒▒ │ │▒▒▒ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒│ │ │
3776
+ ├───┘ ├───┬───┴───────────┘ └───┬───┴───┘ └───┘ ├───────┴───┼───┴───┤
3777
+ 14│▒▒▒ │ │ ▒▒▒ ▒▒▒│ ▒▒▒ │▒▒▒ ▒▒▒│ │
3778
+ ├───┐ │ └───┬───────────┬───┐ └───┬───────────────┴───┬───────┘ │
3779
+ 15│ │ │▒▒▒ ▒▒▒│ ▒▒▒│▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒ ▒▒▒│
3780
+ │ ├───┬───┴───┬───┘ ┌───────┤ └───────┼───┐ ┌───┬───┴───────────────┤
3781
+ 16│ │▒▒▒│ │ ▒▒▒│▒▒▒ │ ▒▒▒ │▒▒▒│ │▒▒▒│ ▒▒▒ ▒▒▒│
3782
+ │ │ │ └───────┤ ┌───┴───────────┤ └───┬───┤ │ ┌───┬───────┐ │
3783
+ 17│ │▒▒▒│ ▒▒▒ ▒▒▒ │ │▒▒▒ ▒▒▒ │ ▒▒▒│▒▒▒│ │ │ │▒▒▒ ▒▒▒│ │
3784
+ │ └───┴───┐ ┌───────┘ └───┬───┬───────┴───┐ │ │ └───┤ │ └───┤
3785
+ 18│▒▒▒ ▒▒▒│ │ ▒▒▒│ │ ▒▒▒ ▒▒▒│ │ │▒▒▒ │▒▒▒│ │
3786
+ ├───────────┴───┴───┬───────┬───┘ └───────┬───┘ │ └───────┤ │ ┌───────┤
3787
+ 19│▒▒▒ ▒▒▒ │▒▒▒ ▒▒▒│ ▒▒▒ ▒▒▒ │ │ ▒▒▒ │▒▒▒│ │▒▒▒ ▒▒▒│
3788
+ └───────────────────┴───────┴───────────────┴───────┴───────────┴───┴───┴───────┘
3412
3789
  Solutions found: 1
3413
3790
  status: OPTIMAL
3414
- Time taken: 0.04 seconds
3791
+ Time taken: 0.03 seconds
3415
3792
  ```
3416
3793
 
3417
3794
  **Solved puzzle**
@@ -3424,7 +3801,7 @@ Applying the solution to the puzzle visually:
3424
3801
 
3425
3802
  ## Slitherlink (Puzzle Type #39)
3426
3803
 
3427
- Also known as Fences, Loop the Loop, and Loopy
3804
+ Also known as Fences, Loop the Loop, and Loopy.
3428
3805
 
3429
3806
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/loopy.html)
3430
3807
 
@@ -3592,31 +3969,52 @@ solutions = binst.solve_and_print()
3592
3969
 
3593
3970
  ```python
3594
3971
  Solution found
3595
- [
3596
- [ 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W' ],
3597
- [ 'W', 'B', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'B', 'W', 'B', 'W' ],
3598
- [ 'W', 'W', 'B', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'B', 'W' ],
3599
- [ 'W', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'B', 'W', 'B', 'W' ],
3600
- [ 'W', 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'W', 'W', 'B', 'W', 'B', 'W' ],
3601
- [ 'W', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'W', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3602
- [ 'W', 'B', 'B', 'B', 'W', 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3603
- [ 'W', 'W', 'B', 'W', 'W', 'B', 'W', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3604
- [ 'W', 'B', 'B', 'B', 'B', 'B', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3605
- [ 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3606
- [ 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'W', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3607
- [ 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'W' ],
3608
- [ 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'W', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W', 'W', 'W', 'B', 'W' ],
3609
- [ 'W', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3610
- [ 'W', 'W', 'W', 'B', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W' ],
3611
- [ 'W', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'B', 'B', 'W', 'B', 'W' ],
3612
- [ 'W', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'B', 'W' ],
3613
- [ 'W', 'B', 'B', 'W', 'B', 'B', 'B', 'B', 'W', 'B', 'B', 'B', 'B', 'B', 'B', 'W', 'B', 'W', 'B', 'W' ],
3614
- [ 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'W', 'W', 'W', 'W', 'W', 'B', 'W', 'B', 'W', 'B', 'W' ],
3615
- [ 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'W' ],
3616
- ]
3972
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3973
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3974
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
3975
+ 0│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
3976
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3977
+ 1│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │
3978
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3979
+ 2│ │ │▒▒▒│ │▒▒▒│ │ │ │ │ │▒▒▒│ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│ │
3980
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3981
+ 3│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │
3982
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3983
+ 4│ │ │ │▒▒▒│ │ │▒▒▒│ │ │ │ │ │▒▒▒│ │ │ │▒▒▒│ │▒▒▒│ │
3984
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3985
+ 5│ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3986
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3987
+ 6│ │▒▒▒│▒▒▒│▒▒▒│ │ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3988
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3989
+ 7│ │ │▒▒▒│ │ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3990
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3991
+ 8│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3992
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3993
+ 9│ │ │ │ │ │▒▒▒│ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3994
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3995
+ 10│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
3996
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3997
+ 11│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │
3998
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
3999
+ 12│ │ │ │ │ │▒▒▒│ │ │ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ │ │ │▒▒▒│ │
4000
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4001
+ 13│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
4002
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4003
+ 14│ │ │ │▒▒▒│ │▒▒▒│ │ │ │ │ │ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │
4004
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4005
+ 15│ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │
4006
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4007
+ 16│ │ │▒▒▒│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒│ │▒▒▒│ │
4008
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4009
+ 17│ │▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒│ │
4010
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4011
+ 18│ │ │ │ │ │ │ │▒▒▒│ │ │ │ │ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ │
4012
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
4013
+ 19│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│▒▒▒│ │
4014
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
3617
4015
  Solutions found: 1
3618
4016
  status: OPTIMAL
3619
- Time taken: 3.10 seconds
4017
+ Time taken: 3.09 seconds
3620
4018
  ```
3621
4019
 
3622
4020
  **Solved puzzle**
@@ -3741,7 +4139,7 @@ Applying the solution to the puzzle visually:
3741
4139
 
3742
4140
  ## Rectangles (Puzzle Type #42)
3743
4141
 
3744
- Also called "Shikaku".
4142
+ Also known as Shikaku.
3745
4143
 
3746
4144
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/rect.html)
3747
4145
 
@@ -4238,7 +4636,7 @@ Time taken: 38.04 seconds
4238
4636
 
4239
4637
  ## Shingoki (Puzzle Type #47)
4240
4638
 
4241
- Also called "Semaphores".
4639
+ Also known as Semaphores.
4242
4640
 
4243
4641
  * [**Play online**](https://www.puzzle-shingoki.com/)
4244
4642
 
@@ -4597,7 +4995,7 @@ Time taken: 0.00 seconds
4597
4995
 
4598
4996
  ## Shakashaka (Puzzle Type #50)
4599
4997
 
4600
- Also called "Proof of Quilt"
4998
+ Also known as Proof of Quilt.
4601
4999
 
4602
5000
  * [**Play online**](https://www.puzzle-shakashaka.com/)
4603
5001
 
@@ -4909,15 +5307,27 @@ solutions = binst.solve_and_print()
4909
5307
 
4910
5308
  ```python
4911
5309
  Solution found
4912
- [['1' '9' '4' '2' '3' '6' '8' '5' '7']
4913
- ['2' '8' '5' '9' '4' '7' '1' '6' '3']
4914
- ['6' '3' '8' '4' '7' '5' '9' '1' '2']
4915
- ['7' '6' '3' '5' '9' '1' '2' '8' '4']
4916
- ['4' '5' '2' '1' '6' '3' '7' '9' '8']
4917
- ['5' '7' '9' '8' '1' '4' '3' '2' '6']
4918
- ['3' '1' '7' '6' '8' '2' '5' '4' '9']
4919
- ['9' '4' '1' '7' '2' '8' '6' '3' '5']
4920
- ['8' '2' '6' '3' '5' '9' '4' '7' '1']]
5310
+
5311
+ 0 1 2 3 4 5 6 7 8
5312
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
5313
+ 0│ 1 9 4 │ 2 │ 3 │ 6 │ 8 │ 5 │ 7 │
5314
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5315
+ 1│ 2 │ 8 │ 5 9 4 │ 7 │ 1 6 │ 3
5316
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5317
+ 2│ 6 │ 3 │ 8 │ 4 7 5 9 │ 1 │ 2 │
5318
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5319
+ 3│ 7 │ 6 │ 3 │ 5 │ 9 │ 1 │ 2 │ 8 │ 4 │
5320
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5321
+ 4│ 4 │ 5 │ 2 │ 1 │ 6 │ 3 │ 7 │ 9 │ 8 │
5322
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5323
+ 5│ 5 │ 7 │ 9 │ 8 │ 1 │ 4 │ 3 │ 2 │ 6 │
5324
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5325
+ 6│ 3 │ 1 │ 7 │ 6 │ 8 │ 2 │ 5 │ 4 │ 9 │
5326
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5327
+ 7│ 9 │ 4 │ 1 │ 7 │ 2 │ 8 │ 6 │ 3 │ 5 │
5328
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5329
+ 8│ 8 │ 2 │ 6 │ 3 │ 5 │ 9 │ 4 │ 7 │ 1 │
5330
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┘
4921
5331
  Solutions found: 1
4922
5332
  status: OPTIMAL
4923
5333
  Time taken: 0.01 seconds
@@ -4981,18 +5391,30 @@ solutions = binst.solve_and_print()
4981
5391
 
4982
5392
  ```python
4983
5393
  Solution found
4984
- [['5' '4' '8' '7' '9' '1' '6' '2' '3']
4985
- ['3' '7' '1' '6' '2' '8' '4' '9' '5']
4986
- ['2' '6' '9' '5' '4' '3' '1' '7' '8']
4987
- ['1' '9' '4' '3' '6' '2' '5' '8' '7']
4988
- ['8' '3' '7' '1' '5' '9' '2' '4' '6']
4989
- ['6' '2' '5' '8' '7' '4' '3' '1' '9']
4990
- ['4' '8' '2' '9' '3' '5' '7' '6' '1']
4991
- ['7' '1' '3' '2' '8' '6' '9' '5' '4']
4992
- ['9' '5' '6' '4' '1' '7' '8' '3' '2']]
5394
+
5395
+ 0 1 2 3 4 5 6 7 8
5396
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┐
5397
+ 0│ 5 4 8 │ 7 │ 9 │ 1 │ 6 2 3
5398
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5399
+ 1│ 3 │ 7 │ 1 │ 6 2 8 4 9 │ 5 │
5400
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5401
+ 2│ 2 6 9 5 4 │ 3 │ 1 │ 7 │ 8 │
5402
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5403
+ 3│ 1 │ 9 │ 4 │ 3 │ 6 │ 2 │ 5 │ 8 │ 7 │
5404
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5405
+ 4│ 8 │ 3 │ 7 │ 1 │ 5 │ 9 │ 2 │ 4 │ 6 │
5406
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5407
+ 5│ 6 │ 2 │ 5 │ 8 │ 7 │ 4 │ 3 │ 1 │ 9 │
5408
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5409
+ 6│ 4 │ 8 │ 2 │ 9 │ 3 │ 5 │ 7 │ 6 │ 1 │
5410
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5411
+ 7│ 7 │ 1 │ 3 │ 2 │ 8 │ 6 │ 9 │ 5 │ 4 │
5412
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┤
5413
+ 8│ 9 │ 5 │ 6 │ 4 │ 1 │ 7 │ 8 │ 3 │ 2 │
5414
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┘
4993
5415
  Solutions found: 1
4994
5416
  status: OPTIMAL
4995
- Time taken: 0.01 seconds
5417
+ Time taken: 0.02 seconds
4996
5418
  ```
4997
5419
 
4998
5420
  **Solved puzzle**
@@ -5082,7 +5504,7 @@ Note that the solved solution on the bottom left says that only 18 moves were us
5082
5504
 
5083
5505
  ## Pipes (Puzzle Type #55)
5084
5506
 
5085
- Also called "Net"
5507
+ Also known as Net.
5086
5508
 
5087
5509
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/net.html)
5088
5510
 
@@ -5132,16 +5554,29 @@ solutions = binst.solve_and_print()
5132
5554
 
5133
5555
  ```python
5134
5556
  Solution found
5135
- [['R' 'DLR' 'DLR' 'DLR' 'L' 'R' 'DL' 'DR' 'LR' 'L']
5136
- ['D' 'U' 'U' 'UDR' 'LR' 'L' 'UD' 'UDR' 'LR' 'L']
5137
- ['UD' 'D' 'R' 'ULR' 'DL' 'R' 'UDL' 'UD' 'D' 'D']
5138
- ['UD' 'UD' 'R' 'DLR' 'ULR' 'DLR' 'UL' 'UDR' 'ULR' 'UL']
5139
- ['UDR' 'ULR' 'LR' 'ULR' 'L' 'UDR' 'LR' 'UL' 'R' 'DL']
5140
- ['U' 'R' 'DLR' 'LR' 'DLR' 'UL' 'D' 'D' 'DR' 'UL']
5141
- ['D' 'R' 'UDL' 'D' 'U' 'D' 'UDR' 'ULR' 'ULR' 'DL']
5142
- ['UDR' 'LR' 'ULR' 'UDL' 'DR' 'ULR' 'ULR' 'LR' 'DL' 'U']
5143
- ['U' 'R' 'DLR' 'ULR' 'ULR' 'DLR' 'L' 'DR' 'ULR' 'DL']
5144
- ['R' 'LR' 'ULR' 'LR' 'L' 'U' 'R' 'ULR' 'L' 'U']]
5557
+ 0 0 0 0 0 0 0 0 0 0
5558
+ 0 1 2 3 4 5 6 7 8 9
5559
+
5560
+ 0 O───┬───┬───┬───O O───┐ ┌───────O
5561
+ │ │ │ │ │
5562
+ 1 O O O ├───────O │ ├───────O
5563
+ │ │ │ │
5564
+ 2 │ O O───┴───┐ O───┤ │ O O
5565
+ │ │ │ │ │ │ │
5566
+ 3 │ │ O───┬───┴───┬───┘ ├───┴───┘
5567
+ │ │ │ │ │
5568
+ 4 ├───┴───────┴───O ├───────┘ O───┐
5569
+ │ │ │
5570
+ 5 O O───┬───────┬───┘ O O ┌───┘
5571
+ │ │ │ │ │
5572
+ 6 O O───┤ O O O ├───┴───┴───┐
5573
+ │ │ │ │ │ │
5574
+ 7 ├───────┴───┤ ┌───┴───┴───────┐ O
5575
+ │ │ │ │
5576
+ 8 O O───┬───┴───┴───┬───O ┌───┴───┐
5577
+ │ │ │ │
5578
+ 9 O───────┴───────O O O───┴───O O
5579
+
5145
5580
  Solutions found: 1
5146
5581
  status: OPTIMAL
5147
5582
  Time taken: 5.65 seconds
@@ -5153,6 +5588,206 @@ Time taken: 5.65 seconds
5153
5588
 
5154
5589
  ---
5155
5590
 
5591
+ ## Connect the Dots (Puzzle Type #56)
5592
+
5593
+ * [**Mobile App (Android)**](https://play.google.com/store/apps/details?id=com.playvalve.connect.dots&hl=en_US)
5594
+
5595
+ * [**Mobile App (iOS)**](https://apps.apple.com/us/app/dot-link-connect-the-dots/id6444312485)
5596
+
5597
+ * [**Solver Code**][56]
5598
+
5599
+ <details>
5600
+ <summary><strong>Rules</strong></summary>
5601
+
5602
+ 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.
5603
+ </details>
5604
+
5605
+ **Unsolved puzzle**
5606
+
5607
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_unsolved.png" alt="Connect the Dots unsolved" width="500">
5608
+
5609
+ Code to utilize this package and solve the puzzle:
5610
+
5611
+ ```python
5612
+ import numpy as np
5613
+ from puzzle_solver import connect_the_dots_solver as solver
5614
+ board = np.array([
5615
+ ['R', ' ', 'B', ' ', ' ', ' ', ' ', ' '],
5616
+ ['Y', ' ', ' ', 'R', 'G', ' ', 'G', ' '],
5617
+ [' ', 'M', ' ', ' ', ' ', 'P', ' ', ' '],
5618
+ [' ', 'O', ' ', ' ', ' ', 'M', ' ', ' '],
5619
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
5620
+ ['Br', 'B', ' ', ' ', 'Y', 'O', ' ', ' '],
5621
+ [' ', ' ', ' ', ' ', ' ', 'P', ' ', ' '],
5622
+ [' ', ' ', ' ', 'Br', ' ', ' ', ' ', ' '],
5623
+ ])
5624
+ binst = solver.Board(board=board)
5625
+ solutions = binst.solve_and_print()
5626
+ ```
5627
+
5628
+ **Script Output**
5629
+
5630
+ ```python
5631
+ Solution found
5632
+ 0 1 2 3 4 5 6 7
5633
+ ┌───────┬───────────────────────┐
5634
+ 0│ R R │ B B B B B B │
5635
+ ├───┐ └───────┬───────────┐ │
5636
+ 1│ Y │ R R R │ G G G │ B │
5637
+ │ ├───────────┴───┬───────┤ │
5638
+ 2│ Y │ M M M M │ P P │ B │
5639
+ │ ├───────────┐ └───┐ │ │
5640
+ 3│ Y │ O O O │ M M │ P │ B │
5641
+ │ └───────┐ └───────┤ │ │
5642
+ 4│ Y Y Y │ O O O │ P │ B │
5643
+ ├───┬───┐ └───────┐ │ │ │
5644
+ 5│Br │ B │ Y Y Y │ O │ P │ B │
5645
+ │ │ └───────────┼───┘ │ │
5646
+ 6│Br │ B B B B │ P P │ B │
5647
+ │ └───────────┐ └───────┘ │
5648
+ 7│Br Br Br Br │ B B B B │
5649
+ └───────────────┴───────────────┘
5650
+ Solutions found: 1
5651
+ status: OPTIMAL
5652
+ Time taken: 2.91 seconds
5653
+ ```
5654
+
5655
+ **Solved puzzle**
5656
+
5657
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_solved.png" alt="Connect the Dots solved" width="500">
5658
+
5659
+ ---
5660
+
5661
+ ## Nonograms Colored (Puzzle Type #57)
5662
+
5663
+ * [**Play online**](https://www.nonograms.org/nonograms2)
5664
+
5665
+ * [**Solver Code**][57]
5666
+
5667
+ <details>
5668
+ <summary><strong>Rules</strong></summary>
5669
+
5670
+ You have a grid of squares, which must all be filled in either white or one of the specified colors. Beside each row of the grid are listed, in order, the lengths of the runs of the specified colors on that row; above each column are listed, in order, the lengths of the runs of the specified colors in that column. Your aim is to fill in the entire grid white or one of the specified colors.
5671
+
5672
+ </details>
5673
+
5674
+ **Unsolved puzzle**
5675
+
5676
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nonograms_colored_unsolved.png" alt="Nonograms Colored unsolved" width="500">
5677
+
5678
+ Code to utilize this package and solve the puzzle:
5679
+
5680
+ ```python
5681
+ import numpy as np
5682
+ from puzzle_solver.puzzles.nonograms import nonograms_colored as solver
5683
+ top = [
5684
+ ['5M'], ['8M'], ['1M', '3R', '6M'], ['1M', '5R', '5M'], ['8R', '4M'],
5685
+ ['10R', '4M'], ['10R', '4M'], ['1G', '2M', '2R', '3P', '7R', '3M'], ['1L', '2G', '1G', '2F', '3M', '1R', '5P', '6R', '3M'], ['2L', '2G', '2F', '4M', '1R', '6P', '5R', '3M'],
5686
+ ['3L', '1F', '1R', '2M', '8P', '5R', '3M'], ['1G', '1L', '1F', '1R', '2M', '8P', '5R', '3M'], ['1G', '2L', '2R', '1M', '8P', '5R', '3M'], ['1L', '1G', '3R', '1M', '8P', '5R', '3M'], ['1L', '3R', '2M', '7P', '6R', '3M'],
5687
+ ['1L', '3R', '1M', '8P', '5R', '4M'], ['1L', '3R', '1M', '8P', '5R', '4M'], ['2R', '1M', '9P', '5R', '3M'], ['1R', '9P', '5R', '3M'], ['10P', '5R', '3M'],
5688
+ ['1G', '1R', '9P', '5R', '4M'], ['1L', '1G', '1F', '2R', '8P', '5R', '6M'], ['1L', '2F', '3R', '6P', '5R', '7M'], ['1L', '1G', '1F', '4R', '5P', '5R', '3M', '3P', '2M'], ['1L', '1F', '6R', '2P', '6R', '3M', '4P', '2M'],
5689
+ ['1L', '1F', '12R', '4M', '6P', '1M'], ['1L', '1F', '1R', '3L', '1M', '3R', '7M', '7P', '1M'], ['1G', '3L', '1G', '11M', '7P', '1R', '1M'], ['1L', '1L', '3G', '11M', '1R', '6P', '2R'], ['1G', '3L', '1G', '4F', '6M', '9R'],
5690
+ ['3G', '2F', '2L', '1F', '4M', '7R'], ['4G', '1F', '4L'], ['1L', '1G', '1F', '1L', '2L'], ['2F', '1L']
5691
+ ]
5692
+ side = [
5693
+ ['1L', '1G'], ['1L', '1G'], ['1L', '2G'], ['6L', '1G', '2L', '2G'], ['2L', '1G', '3F', '1L', '2G', '1F', '1G'],
5694
+ ['1G', '1L', '1G', '2F', '3R', '1L', '1G', '2F', '1G', '1L'], ['2G', '1L', '1G', '2F', '3R', '2L', '1G', '1F', '1L', '1F', '1G'], ['1G', '1L', '2G', '4L', '5R', '1L', '1G', '1M', '1F', '2L', '1F'], ['1G', '1F', '3L', '1G', '4R', '6R', '1L', '2M', '2F', '2L', '1F'], ['4F', '1L', '6R', '3P', '4R', '5M', '1L', '1F'],
5695
+ ['1G', '1F', '1M', '7R', '1M', '6P', '3R', '4M', '2L'], ['5M', '2R', '3M', '8P', '2R', '4M', '2L'], ['8M', '10P', '2R', '4M'], ['2M', '14P', '2R', '4M'], ['3R', '14P', '2R', '4M'],
5696
+ ['3R', '15P', '3R', '3M'], ['3R', '15P', '4R', '3M'], ['1M', '3R', '14P', '4R', '4M'], ['1M', '4R', '13P', '5R', '3M', '2R'], ['1M', '6R', '10P', '6R', '3M', '2P', '2R'],
5697
+ ['1M', '7R', '5P', '9R', '3M', '3P', '2R'], ['2M', '20R', '3M', '4P', '2R'], ['3M', '18R', '3M', '5P', '2R'], ['4M', '16R', '3M', '6P', '2R'], ['5M', '13R', '5M', '6P', '2R'],
5698
+ ['7M', '8R', '8M', '5P', '3R'], ['24M', '2P', '3R'], ['16M', '7M'], ['12M']
5699
+ ]
5700
+ binst = solver.Board(top=top, side=side)
5701
+ solutions = binst.solve_and_print(visualize_colors={
5702
+ 'M': 'darkmagenta',
5703
+ 'R': 'magenta',
5704
+ 'G': 'green',
5705
+ 'P': 'pink',
5706
+ 'L': 'lime',
5707
+ 'F': 'forestgreen',
5708
+ })
5709
+ ```
5710
+
5711
+ **Script Output**
5712
+
5713
+ ```python
5714
+ Solution found
5715
+ 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 2 2 2 2 2 3 3 3 3
5716
+ 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 5 6 7 8 9 0 1 2 3
5717
+ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
5718
+ 0│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ L │ G │ │ │ │ │
5719
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5720
+ 1│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ L │ G │ │ │ │
5721
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5722
+ 2│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ L │ G │ G │ │ │
5723
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5724
+ 3│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ L │ L │ L │ L │ L │ L │ G │ L │ L │ G │ G │ │ │
5725
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5726
+ 4│ │ │ │ │ │ │ │ │ L │ L │ │ │ │ │ │ │ │ │ │ │ │ │ │ G │ F │ F │ F │ L │ G │ G │ F │ G │ │ │
5727
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5728
+ 5│ │ │ │ │ │ │ │ │ G │ L │ │ │ │ │ │ │ │ │ │ │ │ G │ F │ F │ R │ R │ R │ L │ G │ F │ F │ G │ L │ │
5729
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5730
+ 6│ │ │ │ │ │ │ │ │ G │ G │ L │ │ │ │ │ │ │ │ │ │ G │ F │ F │ R │ R │ R │ L │ L │ G │ F │ L │ F │ G │ │
5731
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5732
+ 7│ │ │ │ │ │ │ │ │ │ G │ L │ G │ G │ L │ L │ L │ L │ │ │ │ │ R │ R │ R │ R │ R │ L │ G │ M │ F │ L │ L │ F │ │
5733
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5734
+ 8│ │ │ │ │ │ │ │ │ G │ F │ L │ L │ L │ G │ R │ R │ R │ R │ │ │ R │ R │ R │ R │ R │ R │ L │ M │ M │ F │ F │ L │ L │ F │
5735
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5736
+ 9│ │ │ │ │ │ │ │ │ F │ F │ F │ F │ L │ R │ R │ R │ R │ R │ R │ P │ P │ P │ R │ R │ R │ R │ M │ M │ M │ M │ M │ L │ │ F │
5737
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5738
+ 10│ │ │ │ │ │ │ │ G │ F │ M │ R │ R │ R │ R │ R │ R │ R │ M │ P │ P │ P │ P │ P │ P │ R │ R │ R │ M │ M │ M │ M │ L │ L │ │
5739
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5740
+ 11│ │ │ │ │ │ │ │ M │ M │ M │ M │ M │ R │ R │ M │ M │ M │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ M │ M │ M │ M │ │ L │ L │
5741
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5742
+ 12│ │ │ │ │ │ │ │ M │ M │ M │ M │ M │ M │ M │ M │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ M │ M │ M │ M │ │ │ │
5743
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5744
+ 13│ │ │ │ │ │ │ │ │ M │ M │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ M │ M │ M │ M │ │ │ │ │
5745
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5746
+ 14│ │ │ │ │ │ │ │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ M │ M │ M │ M │ │ │ │ │
5747
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5748
+ 15│ │ │ │ │ │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ M │ M │ M │ │ │ │ │ │
5749
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5750
+ 16│ │ │ │ │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ R │ M │ M │ M │ │ │ │ │ │
5751
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5752
+ 17│ │ │ │ M │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ R │ M │ M │ M │ M │ │ │ │ │ │
5753
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5754
+ 18│ │ │ M │ R │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ R │ R │ M │ M │ M │ R │ R │ │ │ │ │
5755
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5756
+ 19│ │ M │ R │ R │ R │ R │ R │ R │ P │ P │ P │ P │ P │ P │ P │ P │ P │ P │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ R │ R │ │ │ │
5757
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5758
+ 20│ │ M │ R │ R │ R │ R │ R │ R │ R │ P │ P │ P │ P │ P │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ P │ R │ R │ │ │ │
5759
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5760
+ 21│ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ P │ P │ R │ R │ │ │ │
5761
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5762
+ 22│ M │ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ P │ P │ P │ R │ R │ │ │ │
5763
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5764
+ 23│ M │ M │ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ P │ P │ P │ P │ P │ P │ R │ R │ │ │ │
5765
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5766
+ 24│ M │ M │ M │ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ M │ M │ P │ P │ P │ P │ P │ P │ R │ R │ │ │ │
5767
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5768
+ 25│ M │ M │ M │ M │ M │ M │ M │ R │ R │ R │ R │ R │ R │ R │ R │ M │ M │ M │ M │ M │ M │ M │ M │ P │ P │ P │ P │ P │ R │ R │ R │ │ │ │
5769
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5770
+ 26│ │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ P │ P │ R │ R │ R │ │ │ │ │
5771
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5772
+ 27│ │ │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ │ │ │ M │ M │ M │ M │ M │ M │ M │ │ │ │ │ │ │
5773
+ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
5774
+ 28│ │ │ │ │ │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ M │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
5775
+ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
5776
+ Solutions found: 1
5777
+ status: OPTIMAL
5778
+ Time taken: 0.40 seconds
5779
+ ```
5780
+
5781
+ The script also visualizes the solution:
5782
+
5783
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nonograms_colored_script_output.png" alt="Nonograms Colored solved" width="500">
5784
+
5785
+ **Solved puzzle**
5786
+
5787
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/nonograms_colored_solved.png" alt="Nonograms Colored solved" width="500">
5788
+
5789
+ ---
5790
+
5156
5791
  ---
5157
5792
 
5158
5793
  ## Why SAT / CP-SAT?
@@ -5235,7 +5870,7 @@ Issues and PRs welcome!
5235
5870
  [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
5871
  [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
5872
  [31]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/star_battle "puzzle_solver/src/puzzle_solver/puzzles/star_battle at master · Ar-Kareem/puzzle_solver · GitHub"
5238
- [32]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/star_battle_shapeless "puzzle_solver/src/puzzle_solver/puzzles/star_battle_shapeless at master · Ar-Kareem/puzzle_solver · GitHub"
5873
+ [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
5874
  [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
5875
  [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
5876
  [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 +5887,12 @@ Issues and PRs welcome!
5252
5887
  [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
5888
  [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
5889
  [48]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/tapa "puzzle_solver/src/puzzle_solver/puzzles/tapa at master · Ar-Kareem/puzzle_solver · GitHub"
5255
- [49]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/binairo_plus "puzzle_solver/src/puzzle_solver/puzzles/binairo_plus at master · Ar-Kareem/puzzle_solver · GitHub"
5890
+ [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
5891
  [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
5892
  [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
5893
  [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
5894
  [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
5895
  [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
5896
  [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"
5897
+ [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"
5898
+ [57]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/nonograms "puzzle_solver/src/puzzle_solver/puzzles/nonograms at master · Ar-Kareem/puzzle_solver · GitHub"