multi-puzzle-solver 1.0.2__py3-none-any.whl → 1.0.4__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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multi-puzzle-solver
3
- Version: 1.0.2
3
+ Version: 1.0.4
4
4
  Summary: Efficient solvers for numerous popular and esoteric logic puzzles using CP-SAT
5
5
  Author: Ar-Kareem
6
6
  Project-URL: Homepage, https://github.com/Ar-Kareem/puzzle_solver
@@ -390,6 +390,18 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
390
390
  <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/flood_it_unsolved.png" alt="Flood It" width="140">
391
391
  </a>
392
392
  </td>
393
+ <td align="center">
394
+ <a href="#pipes-puzzle-type-55"><b>Pipes</b><br><br>
395
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/pipes_solved.png" alt="Pipes" width="140">
396
+ </a>
397
+ </td>
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>
393
405
  </tr>
394
406
  </table>
395
407
 
@@ -459,6 +471,8 @@ These are all the puzzles that are implemented in this repo. <br> Click on any o
459
471
  - [Sudoku Jigsaw (Puzzle Type #52)](#sudoku-jigsaw-puzzle-type-52)
460
472
  - [Sudoku Killer (Puzzle Type #53)](#sudoku-killer-puzzle-type-53)
461
473
  - [Flood It (Puzzle Type #54)](#flood-it-puzzle-type-54)
474
+ - [Pipes (Puzzle Type #55)](#pipes-puzzle-type-55)
475
+ - [Connect the Dots (Puzzle Type #56)](#connect-the-dots-puzzle-type-56)
462
476
  - [Why SAT / CP-SAT?](#why-sat--cp-sat)
463
477
  - [Testing](#testing)
464
478
  - [Contributing](#contributing)
@@ -472,7 +486,7 @@ The puzzles that have solvers implemented are listed below. Each puzzle has a si
472
486
 
473
487
  ## Nonograms (Puzzle Type #1)
474
488
 
475
- Called "Pattern" in the website.
489
+ Also known as Hanjie, Paint by Numbers, Griddlers, Pic-a-Pix, Picross, and Pattern.
476
490
 
477
491
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/pattern.html)
478
492
 
@@ -560,7 +574,7 @@ Time taken: 0.04 seconds
560
574
 
561
575
  ## Sudoku (Puzzle Type #2)
562
576
 
563
- Called "Solo" in the website.
577
+ Also known as Number Place and Solo.
564
578
 
565
579
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/solo.html)
566
580
 
@@ -792,6 +806,8 @@ Time taken: 0.02 seconds
792
806
 
793
807
  ## Light Up (Puzzle Type #5)
794
808
 
809
+ Also called Akari.
810
+
795
811
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/lightup.html)
796
812
 
797
813
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/lightup.html#lightup)
@@ -943,6 +959,8 @@ Time taken: 0.02 seconds
943
959
 
944
960
  ## Filling (Puzzle Type #7)
945
961
 
962
+ Also known as Fillomino
963
+
946
964
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/filling.html)
947
965
 
948
966
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/filling.html#filling)
@@ -1002,6 +1020,8 @@ Time taken: 0.10 seconds
1002
1020
 
1003
1021
  ## Keen (Puzzle Type #8)
1004
1022
 
1023
+ Also known as KenKen
1024
+
1005
1025
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/keen.html)
1006
1026
 
1007
1027
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/keen.html#keen)
@@ -1146,7 +1166,7 @@ Time taken: 0.03 seconds
1146
1166
 
1147
1167
  ## Singles (Puzzle Type #10)
1148
1168
 
1149
- Also known as "Hitori",
1169
+ Also known as Hitori.
1150
1170
 
1151
1171
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/singles.html)
1152
1172
 
@@ -1369,7 +1389,7 @@ Time taken: 0.03 seconds
1369
1389
 
1370
1390
  ## Range (Puzzle Type #13)
1371
1391
 
1372
- Also known as "Kurodoko"
1392
+ Also known as Kurodoko.
1373
1393
 
1374
1394
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/range.html)
1375
1395
 
@@ -1779,6 +1799,8 @@ Time taken: 0.01 seconds
1779
1799
 
1780
1800
  ## Pearl (Puzzle Type #19)
1781
1801
 
1802
+ Also known as Masyu
1803
+
1782
1804
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/pearl.html)
1783
1805
 
1784
1806
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/pearl.html#pearl)
@@ -1843,6 +1865,8 @@ Time taken: 0.98 seconds
1843
1865
 
1844
1866
  ## Bridges (Puzzle Type #20)
1845
1867
 
1868
+ Also known as Hashiwokakero
1869
+
1846
1870
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/bridges.html)
1847
1871
 
1848
1872
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/bridges.html#bridges)
@@ -2769,34 +2793,62 @@ solutions = binst.solve_and_print()
2769
2793
 
2770
2794
  ```python
2771
2795
  Solution found
2772
- [' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' '],
2773
- ['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' '],
2774
- [' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2775
- ['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2776
- [' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2777
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2778
- [' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2779
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2780
- [' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2781
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2782
- [' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2783
- ['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2784
- [' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2785
- ['*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2786
- [' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' '],
2787
- [' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*'],
2788
- [' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' '],
2789
- [' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*'],
2790
- [' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
2791
- ['*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' '],
2792
- [' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
2793
- ['*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' '],
2794
- [' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
2795
- [' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*'],
2796
- [' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
2796
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2
2797
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
2798
+ ┌───────────────────┬───────────────────────────────────┬───────────┬───────────────────────────────┐
2799
+ 0│ . . . . X . X . X . . . . . . . . X . X . X . . .
2800
+ │ ┌───┐ ┌───────┘ ┌───────┐ ┌───┘ ├───────────────────────┐ │
2801
+ 1│ X . X . . . . . . . X . X . X . . . . . . . . X .
2802
+ │ │ └───┘ ┌───┘ └───┴───┐ ┌───┘ ┌───┘ │
2803
+ 2│ . . . . X . X . X . . . . . . . X . X . X . . . .
2804
+ │ │ ┌───┬───────────────────────┘ │ ┌───┘ │ ┌───┐ │
2805
+ 3│ X . X . . . . . . . X . X . . . . . . . . . X . X
2806
+ │ │ │ └───────────────────────┐ ┌───┘ └───────────┐ └───┤ │ │
2807
+ 4│ . . . . . X . X . . . . . . X . X . X . X . . . .
2808
+ │ └───┼───┐ ┌───────────────┐ │ │ │ ┌───┘ └───┤
2809
+ 5│ . X . X . . . . . X . X . . . . . . . . . . X . X
2810
+ │ ┌───┘ └───┴───┐ ┌───┘ └───┐ └───┐ ┌───┘ ┌───────┘ │
2811
+ 6│ . . . . . X . X . . . . . X . X . . X . X . . . .
2812
+ │ └───┐ │ └───────┐ ├───────────────┤ │ ┌───────┴───────┐ │
2813
+ 7│ . X . X . . . . . X . X . . . . . . . . . . X . X
2814
+ ├───────┘ ┌───┘ └───┤ ┌───┘ ├───┘ └───┐ ┌───┤
2815
+ 8│ . . . . . X . X . . . . . X . X . X . X . . . . .
2816
+ │ │ ┌───┘ │ ┌───┘ │ │ │
2817
+ 9│ . X . X . . . . . X . X . . . . . . . . . X . X .
2818
+ │ ┌───┘ ┌───┘ ├───────────┴───┐ └───┘ │
2819
+ 10│ . . . . . X . X . . . . . X . X . X . X . . . . .
2820
+ │ ┌───┘ ┌───┤ └───────────┐ │ ┌───┐ ┌───┐ │
2821
+ 11│ X . │ X . . . . │ . │ . X . X . . . . │ . │ . . . . │ X │ . │ X │ . │
2822
+ ├───┐ └───────────────────┘ │ ┌───────────┘ └───┐ │ │ │ ├───┤
2823
+ 12│ . │ . . . X . X . │ . . . . . │ X . X . X │ . X . │ . │ . │ . │ . │
2824
+ │ └───────────┬───┐ ┌───────┼───┐ └───────────────┐ ├───────────┘ └───┘ │ │
2825
+ 13│ X . X . │ . │ . │ . . │ X │ . X . . . . . . │ . │ . . . X . X │ . │
2826
+ │ │ └───┘ │ │ ┌───────┐ ┌───┐ ┌───┘ │ ┌───────────────────┘ │
2827
+ 14│ . . . . │ X . X . │ . │ . . │ . X │ . │ X │ . │ X . │ X │ . . . . . . │
2828
+ │ └───┐ ┌───┘ ├───────┘ ┌───┴───┘ │ └───────┤ │ │
2829
+ 15│ . X . . . │ . . │ . X │ . X . │ . . . │ . . . │ . │ . X . X . X │
2830
+ │ ┌───────┘ │ ┌───┘ ┌───────┤ ┌───┐ └───────────┤ │ │
2831
+ 16│ . . . │ X . X . │ . │ . . │ . . │ X │ . │ X . X . │ X │ . . . . . . │
2832
+ │ ┌───────┘ │ │ │ ┌───┴───┘ └───┐ ┌───┐ ├───┘ ┌───┐ │
2833
+ 17│ . │ X . . . . . │ X │ . X │ . │ . . . . │ . │ . │ . │ . . │ X │ . X . X │
2834
+ │ └───────┐ ┌───────┘ │ ┌───┘ │ ┌───┐ │ │ │ │ ┌───┘ │ │
2835
+ 18│ . . . │ X . │ X . . │ . │ . . │ X │ . │ X . │ X │ . │ X │ . │ . . │ . . . . │
2836
+ │ │ └───┐ │ └───┐ └───┘ └───┐ └───┘ └───┴───┘ ┌───┘ ┌───────┐ │
2837
+ 19│ X . . │ . . . │ . X │ . X │ . . . . │ . . . . . X │ . X │ . X │ . │
2838
+ │ └───┬───┐ │ ┌───┤ ┌───┘ └───┐ ┌───────────┐ │ │ ┌───┘ │
2839
+ 20│ . . X . │ X │ . │ . │ . │ . │ . . X . X . │ X │ . X . │ . │ . . │ . │ . . │
2840
+ │ │ ├───┤ │ │ │ ┌───────┴───┘ │ │ ┌───┘ └───┐ │
2841
+ 21│ X . . . │ . │ . │ X │ . │ X │ . . . . │ . . . . . . │ X │ . │ X . X │ . │
2842
+ │ ┌───────┐ │ │ └───┘ │ │ │ └───┴───┴───────┐ │ │
2843
+ 22│ . │ . X │ . │ X │ . . . │ . │ . X . X │ . X . X . . . . . . │ . │ . │
2844
+ │ │ ┌───┘ │ │ ┌───┐ │ │ │ ┌───────────┘ └───┤
2845
+ 23│ . │ . │ . . │ . │ . │ X │ . │ X │ . . . . │ . . . . . X . │ X . X . X │
2846
+ │ │ └───────┘ └───┘ │ └───┘ │ └───────────────────┤
2847
+ 24│ . │ X . X . . . │ . . . X . X │ . X . X . . . . . . . . │
2848
+ └───┴───────────────────────┴───────────────────────┴───────────────────────────────────────────────┘
2797
2849
  Solutions found: 1
2798
2850
  status: OPTIMAL
2799
- Time taken: 0.38 seconds
2851
+ Time taken: 0.39 seconds
2800
2852
  ```
2801
2853
 
2802
2854
  **Solved puzzle**
@@ -2854,16 +2906,29 @@ solutions = binst.solve_and_print()
2854
2906
 
2855
2907
  ```python
2856
2908
  Solution found
2857
- ['*', ' ', ' ', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2858
- [' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*', ' '],
2859
- [' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' ', ' '],
2860
- [' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' ', '*'],
2861
- [' ', ' ', '*', ' ', ' ', '*', ' ', ' ', ' ', ' '],
2862
- ['*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*', ' '],
2863
- [' ', ' ', ' ', '*', ' ', ' ', '*', ' ', ' ', ' '],
2864
- [' ', '*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'],
2865
- [' ', ' ', ' ', '*', ' ', '*', ' ', ' ', ' ', ' '],
2866
- [' ', '*', ' ', ' ', ' ', ' ', ' ', '*', ' ', ' ']
2909
+ 0 0 0 0 0 0 0 0 0 0
2910
+ 0 1 2 3 4 5 6 7 8 9
2911
+ ┌───────────────────────────────────────┐
2912
+ 0│ X . . . X . . . . .
2913
+ ├───┐ │
2914
+ 1│ │ . . . . . X . X .
2915
+ │ │ ┌───┐ │
2916
+ 2│ │ . X . X . . . │ │ .
2917
+ │ └───┐ ┌───┐ └───┘ │
2918
+ 3│ │ . . │ │ . . X . X
2919
+ │ │ │ │ │
2920
+ 4│ │ X . │ │ X . . . . │
2921
+ ├───────┘ └───┘ │
2922
+ 5│ X . . . . . . . X . │
2923
+ │ ┌───┐ ┌───┐ │
2924
+ 6│ . . . X │ │ . X . │ │ . │
2925
+ ├───┐ └───┘ ┌───┘ │ │
2926
+ 7│ │ X . . . . . │ │ X │
2927
+ │ └───┐ ┌───┘ │ │
2928
+ 8│ │ . X . X │ │ . │
2929
+ │ ┌───┘ ┌───┐ └───────────┘ │
2930
+ 9│ │ X . . │ │ . . X . . │
2931
+ └───┴───────────┴───┴───────────────────┘
2867
2932
  Solutions found: 1
2868
2933
  status: OPTIMAL
2869
2934
  Time taken: 0.02 seconds
@@ -2934,30 +2999,52 @@ solutions = binst.solve_then_constrain() # solve_then_constrain NOT solve_and_p
2934
2999
 
2935
3000
  ```python
2936
3001
  Solution found
2937
- [
2938
- ['X', 'X', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' '],
2939
- [' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', 'X', 'X', ' ', ' '],
2940
- ['X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' '],
2941
- ['X', ' ', ' ', ' ', 'X', ' ', 'X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', ' ', 'X', 'X', ' '],
2942
- [' ', ' ', ' ', 'X', 'X', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' '],
2943
- ['X', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', ' '],
2944
- ['X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X'],
2945
- ['X', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X'],
2946
- [' ', 'X', ' ', 'X', ' ', 'X', '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', ' ', ' ', ' ', ' '],
2949
- [' ', 'X', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' '],
2950
- [' ', 'X', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', 'X', 'X', 'X', ' ', 'X', 'X', ' ', ' '],
2951
- [' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', 'X', ' ', 'X', ' ', 'X', 'X', 'X', ' ', ' ', 'X'],
2952
- [' ', 'X', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X'],
2953
- ['X', 'X', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X'],
2954
- [' ', 'X', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', ' ', ' ', 'X', 'X', 'X'],
2955
- ['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', 'X', ' ', 'X', ' ', ' ', ' ', ' ', ' '],
2958
- ]
3002
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3003
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3004
+ ┌───────────┬───────┬───────────┬───────────┬───────┬───┬───┬───────┬───────┬───┐
3005
+ 0│▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒ ▒▒▒│ │ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│ │
3006
+ │ └───┐ │ ┌───────┘ ┌───┬───┘ ┌───┘ │ │ ┌───┘ ┌───┘ │
3007
+ 1│ ▒▒▒ │▒▒▒│▒▒▒│ │▒▒▒│ │▒▒▒ ▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ │
3008
+ ├───────────┬───┘ │ └───┐ ┌───┘ │ │ ┌───┘ │ └───────┤ ┌───┤
3009
+ 2│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒│ │
3010
+ │ ┌───────┴───┐ │ ┌───┘ └───┐ │ ├───┘ │ ┌───┬───┘ │ │
3011
+ 3│▒▒▒│ │▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│ │▒▒▒ ▒▒▒│ │
3012
+ │ └───────┐ ├───┴───┤ ┌───────┤ │ │ ┌───────┼───┘ │ ┌───┘ │
3013
+ 4│ │▒▒▒│▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │▒▒▒ │▒▒▒│ │ │▒▒▒│ │
3014
+ ├───┬───────┘ │ │ └───┐ └───┤ ├───┘ │ └───┘ ┌───┤
3015
+ 5│▒▒▒│ ▒▒▒ ▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒│ │
3016
+ │ │ ┌───┐ ├───┐ │ │ ┌───┘ ┌───┘ ┌───────┼───┬───────────┤ │
3017
+ 6│▒▒▒│ │ │▒▒▒│ │▒▒▒│ │▒▒▒│ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒│ │▒▒▒│
3018
+ │ └───┤ └───┤ └───┤ ├───┴───────┼───────┴───┐ │ │ ┌───┘ │
3019
+ 7│▒▒▒ ▒▒▒│ ▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒ │ │▒▒▒│ ▒▒▒│ ▒▒▒│
3020
+ │ ┌───┤ │ └───┬───┘ ┌───────┤ ┌───┘ │ └───┐ └───┐ │
3021
+ 8│ │▒▒▒│ ▒▒▒│ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒│
3022
+ ├───┘ └───┐ └───┐ └───────┘ ┌───┘ ┌───┘ └───────┤ ┌───┤ │
3023
+ 9│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ ▒▒▒ │▒▒▒│ │▒▒▒│
3024
+ ├───────────┼───────┴───────┐ ┌───┴───┐ ├───┬───────────┐ ├───┘ └───┤
3025
+ 10│ │ ▒▒▒ ▒▒▒│ │ ▒▒▒│ │ │▒▒▒ ▒▒▒ ▒▒▒│ │ │
3026
+ │ ┌───┐ └───────────┐ ├───────┼───┐ └───┤ └───────┐ └───┼───────┐ │
3027
+ 11│ │▒▒▒│ ▒▒▒ ▒▒▒ │▒▒▒│ │▒▒▒│▒▒▒ ▒▒▒│ ▒▒▒ │▒▒▒ │▒▒▒ ▒▒▒│ │
3028
+ │ │ └───┐ ┌───┘ │ │ └───┐ │ │ ┌───┘ ┌───┘ │
3029
+ 12│ │▒▒▒ ▒▒▒│ ▒▒▒│ ▒▒▒│ │▒▒▒ │▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒│ │
3030
+ │ │ ┌───┴───┐ │ ┌───┘ ┌───┘ ┌───┴───┼───────┬───┴───┴───────┤ ┌───┤
3031
+ 13│ │▒▒▒│ │▒▒▒│ │▒▒▒ │▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ │▒▒▒ ▒▒▒ ▒▒▒ │ │▒▒▒│
3032
+ │ ├───┘ ├───┼───┘ ├───┬───┘ │ ├───────┐ │ │ │
3033
+ 14│ │▒▒▒ ▒▒▒ │▒▒▒│ ▒▒▒ │▒▒▒│ ▒▒▒ │▒▒▒ ▒▒▒│ │▒▒▒ │ │▒▒▒│
3034
+ ├───┘ ┌───────┘ │ ┌───┘ └───┐ ┌───┘ │ ├───────┘ │ │
3035
+ 15│▒▒▒ ▒▒▒│ ▒▒▒ ▒▒▒│ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│
3036
+ ├───────┴───┐ ┌───┤ └───────┬───┘ ├───────────┤ └───┐ │ │
3037
+ 16│ ▒▒▒ ▒▒▒│▒▒▒│ │ ▒▒▒ │ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ │▒▒▒ ▒▒▒│▒▒▒│
3038
+ ├───┐ ├───┘ └───────┐ ┌───┴───────┤ ┌───────┘ ┌───┐ ├───┐ └───┤
3039
+ 17│▒▒▒│ ▒▒▒│ ▒▒▒ ▒▒▒ ▒▒▒│ │▒▒▒ ▒▒▒ │▒▒▒│ ▒▒▒│ │ │▒▒▒│ │
3040
+ │ └───┐ │ ┌───┐ ├───┴───┐ ├───┤ ┌───┐ │ ├───┘ └───┐ │
3041
+ 18│▒▒▒ ▒▒▒│▒▒▒│ ▒▒▒│ │ │▒▒▒ │▒▒▒ │▒▒▒│ │ │▒▒▒│ │▒▒▒ ▒▒▒ ▒▒▒│ │
3042
+ │ ┌───┴───┴───────┘ ├───┘ │ ┌───┘ └───┘ │ │ └───────────┘ │
3043
+ 19│▒▒▒│ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒│▒▒▒ ▒▒▒ ▒▒▒│▒▒▒│▒▒▒ ▒▒▒ ▒▒▒ │▒▒▒│ │
3044
+ └───┴───────────────────┴───────────┴───┴───────────────┴───┴───────────────────┘
2959
3045
  Solutions found: 1
2960
- Time taken: 0.38 seconds
3046
+ status: OPTIMAL
3047
+ Time taken: 0.09 seconds
2961
3048
  ```
2962
3049
 
2963
3050
  **Solved puzzle**
@@ -3128,26 +3215,42 @@ As the instructions say, the solution to this puzzle is not garunteed to be uniq
3128
3215
 
3129
3216
  ```python
3130
3217
  Solution found
3131
- [
3132
- ['00', '00', '00', '00', '00', '01', '01', '02', '02', '03', '03', '04', '04', '04', '04'],
3133
- ['05', '05', '15', '06', '06', '01', '01', '02', '02', '10', '10', '07', '07', '07', '13'],
3134
- ['08', '15', '15', '15', '06', '06', '09', '09', '10', '10', '10', '10', '10', '13', '13'],
3135
- ['14', '15', '15', '15', '15', '15', '11', '11', '12', '20', '10', '10', '16', '13', '13'],
3136
- ['14', '15', '15', '15', '15', '15', '11', '11', '20', '20', '20', '20', '16', '13', '13'],
3137
- ['14', '17', '17', '15', '15', '15', '15', '15', '20', '20', '20', '20', '16', '13', '18'],
3138
- ['17', '17', '19', '15', '15', '15', '15', '15', '20', '20', '20', '24', '16', '21', '18'],
3139
- ['26', '22', '27', '27', '23', '15', '15', '15', '20', '20', '20', '24', '24', '21', '25'],
3140
- ['26', '27', '27', '28', '28', '29', '15', '20', '20', '20', '20', '32', '24', '30', '30'],
3141
- ['26', '27', '27', '28', '28', '31', '31', '20', '20', '20', '20', '32', '37', '30', '30'],
3142
- ['27', '27', '33', '33', '33', '31', '31', '34', '34', '20', '35', '32', '37', '37', '37'],
3143
- ['36', '38', '38', '33', '33', '33', '34', '34', '41', '41', '41', '41', '37', '37', '37'],
3144
- ['44', '44', '38', '38', '45', '39', '46', '40', '40', '41', '41', '42', '37', '37', '37'],
3145
- ['43', '44', '38', '38', '45', '45', '46', '40', '40', '41', '41', '42', '37', '37', '37'],
3146
- ['43', '44', '44', '38', '38', '45', '46', '47', '41', '41', '41', '41', '48', '48', '37'],
3147
- ]
3218
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
3219
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
3220
+ ┌───────────────────┬───────┬───────┬───────┬───────────────┐
3221
+ 0│ . │ . . . . . . │ . . │
3222
+ ├───────┬───┬───────┤ │ ├───────┼───────────┬───┤
3223
+ 1│ . . │ │ . . . . . │ │ . │ │
3224
+ ├───┬───┘ └───┐ └───┬───┴───┬───┘ └───────┬───┘ │
3225
+ 2│ . │ │ . │ . . │ . │ │
3226
+ ├───┤ └───────┼───────┼───┬───┐ ┌───┤ │
3227
+ 3│ │ │ . . . │ │ │ │ . .
3228
+ │ │ │ ├───┘ └───────┤ │ │
3229
+ 4│ . │ . │ . . │ │ . │ │
3230
+ │ ├───────┐ └───────┤ │ │ ┌───┤
3231
+ 5│ │ . │ . │ │ . │ │ .
3232
+ ├───┘ ┌───┤ │ ┌───┤ ├───┤ │
3233
+ 6│ . . │ │ . │ │ │ . .
3234
+ ├───┬───┼───┴───┬───┐ │ │ └───┤ ├───┤
3235
+ 7│ │ . │ │ . │ │ . │ . . │ . │ . │
3236
+ │ ├───┘ ┌───┴───┼───┐ ┌───┘ ├───┐ ├───┴───┤
3237
+ 8│ . │ . . │ . . │ . │ │ │ │ │ . . │
3238
+ │ │ │ ├───┴───┤ │ ├───┤ │
3239
+ 9│ │ . . │ . . │ . . │ │ . │ │ . . │
3240
+ ├───┘ ┌───┴───────┤ ├───────┐ ┌───┤ │ └───────┤
3241
+ 10│ │ . . │ . . │ . │ │ . │ │ │
3242
+ ├───┬───┴───┐ └───┬───┘ ┌───┴───┴───┴───┤ │
3243
+ 11│ . │ │ . . │ . │ │ . │
3244
+ ├───┴───┐ └───┬───┬───┼───┬───┴───┐ ┌───┤ │
3245
+ 12│ │ . . │ │ . │ │ . . │ . . │ . │ . │
3246
+ ├───┐ │ │ └───┤ │ │ │ │ │
3247
+ 13│ . │ . │ . . │ . . │ . │ . . │ . . │ . │ │
3248
+ │ │ └───┐ └───┐ │ ├───┬───┘ └───┼───────┐ │
3249
+ 14│ . │ │ │ │ │ . │ │ . . │ │
3250
+ └───┴───────┴───────┴───┴───┴───┴───────────────┴───────┴───┘
3148
3251
  Solutions found: 1
3149
3252
  status: OPTIMAL
3150
- Time taken: 0.07 seconds
3253
+ Time taken: 0.06 seconds
3151
3254
  ```
3152
3255
 
3153
3256
  **Solved puzzle**
@@ -3236,7 +3339,11 @@ Applying the solution to the puzzle visually:
3236
3339
 
3237
3340
  Also called "Futoshiki" or Renzoku"
3238
3341
 
3239
- * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/unequal.html)
3342
+ * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/unequal.html)
3343
+
3344
+ * [**Play online 2**](https://www.puzzle-futoshiki.com/futoshiki-4x4-easy/) (Futoshiki variant)
3345
+
3346
+ * [**Play online 3**](https://www.puzzle-futoshiki.com/renzoku-4x4-easy/) (Renzoku variant)
3240
3347
 
3241
3348
  * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/unequal.html#unequal)
3242
3349
 
@@ -3381,28 +3488,49 @@ solutions = binst.solve_and_print()
3381
3488
 
3382
3489
  ```python
3383
3490
  Solution found
3384
- [
3385
- [ 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3386
- [ 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3387
- [ ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ' ],
3388
- [ 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X' ],
3389
- [ ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X' ],
3390
- [ ' ', 'X', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ' ],
3391
- [ ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X' ],
3392
- [ 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X' ],
3393
- [ 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', ' ' ],
3394
- [ ' ', 'X', 'X', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ' ],
3395
- [ 'X', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', 'X', ' ' ],
3396
- [ 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3397
- [ ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3398
- [ 'X', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ' ],
3399
- [ 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', ' ', ' ' ],
3400
- [ ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X' ],
3401
- [ ' ', 'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X' ],
3402
- [ ' ', 'X', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', 'X', ' ' ],
3403
- [ 'X', ' ', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', 'X', ' ', ' ', ' ' ],
3404
- [ 'X', ' ', 'X', ' ', ' ', 'X', 'X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', 'X', ' ', 'X', 'X' ],
3405
- ]
3491
+ 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
3492
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
3493
+ ┌───┬───────────────┬───┬───────┬───────────┬───────────┬───┬───┬───────┬───────┐
3494
+ 0│ X │ │ X X X X X │ │ X X X
3495
+ │ └───┐ │ │ ┌───┘ ┌───┬───┴───┐ ┌───┘ │ │ ├───────┤
3496
+ 1│ X │ X X │ │ X X X │ │ X │ │ X │ │
3497
+ ├───────┴───┐ ├───┘ ├───────┘ │ ┌───┤ ├───┬───┘ └───┬───┘ │
3498
+ 2│ X X X X X │ │ X X │ │ X
3499
+ │ ┌───┐ ├───────┴───┬───┴───────┬───┴───┤ └───┘ │ └───────┐ │
3500
+ 3│ X X │ │ X │ X X X │ │ X X
3501
+ │ │ └───┤ ┌───────┤ │ └───┐ ┌───┤ ┌───────────┴───┤
3502
+ 4│ │ X X │ │ │ X X │ │ X X X
3503
+ │ ├───────┴───┘ │ ┌───────┴───────┐ │ │ └───┐ │ ┌───────┐ │
3504
+ 5│ │ X X │ │ X X │ │ │ X X │ │ │ X X │ │
3505
+ ├───┴───┬───────────────┼───┼───────────┬───┴───┼───┘ ┌───┴───┼───┴───┬───┴───┤
3506
+ 6│ X │ X │ X X X │ │ X X │ X
3507
+ │ │ ┌───┬───────┤ │ ┌───┤ ┌───┴───┬───┴───┐ ├───┐ │ │
3508
+ 7│ X │ X X │ │ X │ │ X │ │ X X X │ │ │ X X
3509
+ ├───┬───┴───┘ │ ┌───┴───┘ │ │ └───┐ └───┬───┘ │ └───┤ ┌───┤
3510
+ 8│ X │ │ X X │ │ │ │ X X │ │ │
3511
+ │ └───┐ ┌───┤ ├───┬───────────┘ │ ┌───┘ ├───┬───┘ └───┘ │
3512
+ 9│ X │ X │ │ X │ │ X │ X │ X │ │ X │
3513
+ ├───┐ ├───┘ ├───┘ ├───────┐ ┌───┤ │ ┌───────┤ └───────────┬───────┤
3514
+ 10│ X │ │ │ │ X X │ │ X │ │ │ X X │ X │ X │
3515
+ │ └───┤ ┌───┴───┐ └───┬───┴───┘ ├───┴───┴───────┴───┐ ┌───────┴───┐ │
3516
+ 11│ X │ │ X X │ │ X │ X │ │ X │ │
3517
+ ├───────┤ └───┬───┘ └───┬───────┴───┬───┐ ┌───┤ ├───────┐ │ │
3518
+ 12│ X │ X │ X │ X │ X │ │ X │ │ X │ X │ X │
3519
+ │ ┌───┘ ┌───┴───┐ ├───┐ │ ├───┐ │ │ └───┐ │ │ │
3520
+ 13│ X │ │ X X │ X │ │ X │ X │ │ X │ │ X │ X │ │ │
3521
+ ├───┘ ├───┬───┴───────────┘ └───┬───┴───┘ └───┘ ├───────┴───┼───┴───┤
3522
+ 14│ X │ │ X X │ X │ X X │ │
3523
+ ├───┐ │ └───┬───────────┬───┐ └───┬───────────────┴───┬───────┘ │
3524
+ 15│ │ │ X X │ X │ X │ │ X X │ X X │
3525
+ │ ├───┬───┴───┬───┘ ┌───────┤ └───────┼───┐ ┌───┬───┴───────────────┤
3526
+ 16│ │ X │ │ X │ X │ X │ X │ │ X │ X X │
3527
+ │ │ │ └───────┤ ┌───┴───────────┤ └───┬───┤ │ ┌───┬───────┐ │
3528
+ 17│ │ X │ X X │ │ X X │ X │ X │ │ │ │ X X │ │
3529
+ │ └───┴───┐ ┌───────┘ └───┬───┬───────┴───┐ │ │ └───┤ │ └───┤
3530
+ 18│ X X │ │ X │ │ X X │ │ │ X │ X │ │
3531
+ ├───────────┴───┴───┬───────┬───┘ └───────┬───┘ │ └───────┤ │ ┌───────┤
3532
+ 19│ X X │ X X │ X X │ │ X │ X │ │ X X │
3533
+ └───────────────────┴───────┴───────────────┴───────┴───────────┴───┴───┴───────┘
3406
3534
  Solutions found: 1
3407
3535
  status: OPTIMAL
3408
3536
  Time taken: 0.04 seconds
@@ -3418,7 +3546,7 @@ Applying the solution to the puzzle visually:
3418
3546
 
3419
3547
  ## Slitherlink (Puzzle Type #39)
3420
3548
 
3421
- Also known as Fences, Loop the Loop, and Loopy
3549
+ Also known as Fences, Loop the Loop, and Loopy.
3422
3550
 
3423
3551
  * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/loopy.html)
3424
3552
 
@@ -3735,7 +3863,7 @@ Applying the solution to the puzzle visually:
3735
3863
 
3736
3864
  ## Rectangles (Puzzle Type #42)
3737
3865
 
3738
- Also called "Shikaku".
3866
+ Also known as Shikaku.
3739
3867
 
3740
3868
  * [**Play online**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/rect.html)
3741
3869
 
@@ -4232,7 +4360,7 @@ Time taken: 38.04 seconds
4232
4360
 
4233
4361
  ## Shingoki (Puzzle Type #47)
4234
4362
 
4235
- Also called "Semaphores".
4363
+ Also known as Semaphores.
4236
4364
 
4237
4365
  * [**Play online**](https://www.puzzle-shingoki.com/)
4238
4366
 
@@ -4591,7 +4719,7 @@ Time taken: 0.00 seconds
4591
4719
 
4592
4720
  ## Shakashaka (Puzzle Type #50)
4593
4721
 
4594
- Also called "Proof of Quilt"
4722
+ Also known as Proof of Quilt.
4595
4723
 
4596
4724
  * [**Play online**](https://www.puzzle-shakashaka.com/)
4597
4725
 
@@ -5074,6 +5202,149 @@ Note that the solved solution on the bottom left says that only 18 moves were us
5074
5202
 
5075
5203
  ---
5076
5204
 
5205
+ ## Pipes (Puzzle Type #55)
5206
+
5207
+ Also known as Net.
5208
+
5209
+ * [**Play online 1**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/js/net.html)
5210
+
5211
+ * [**Play online 2**](https://www.puzzle-pipes.com/)
5212
+
5213
+ * [**Instructions**](https://www.chiark.greenend.org.uk/~sgtatham/puzzles/doc/net.html#net)
5214
+
5215
+ * [**Solver Code**][55]
5216
+
5217
+ <details>
5218
+ <summary><strong>Rules</strong></summary>
5219
+
5220
+ You are given a grid of cells where each cell has 1, 2, 3, or 4 connections to its neighbors. Each cell can be freely rotated in multiple of 90 degrees, thus your can rotate the cells to be one of four possible states.
5221
+
5222
+ The goal is to create a single fully connected graph where each cell's connection must be towards another cell's connection. No loose ends or loops are allowed.
5223
+
5224
+ </details>
5225
+
5226
+ **Unsolved puzzle**
5227
+
5228
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/pipes_unsolved.png" alt="Pipes unsolved" width="500">
5229
+
5230
+ Code to utilize this package and solve the puzzle:
5231
+
5232
+ (Note: cells with 1 or 3 active connections only have 1 unique orientation under rotational symmetry. However, cells with 2 active connections can be either a straight line (2I) or curved line (2L))
5233
+
5234
+ ```python
5235
+ import numpy as np
5236
+ from puzzle_solver import pipes_solver as solver
5237
+ board=np.array([
5238
+ [ '1 ', '3 ', '3 ', '3 ', '1 ', '1 ', '2L', '2L', '2I', '1 ' ],
5239
+ [ '1 ', '1 ', '1 ', '3 ', '2I', '1 ', '2I', '3 ', '2I', '1 ' ],
5240
+ [ '2I', '1 ', '1 ', '3 ', '2L', '1 ', '3 ', '2I', '1 ', '1 ' ],
5241
+ [ '2I', '2I', '1 ', '3 ', '3 ', '3 ', '2L', '3 ', '3 ', '2L' ],
5242
+ [ '3 ', '3 ', '2I', '3 ', '1 ', '3 ', '2I', '2L', '1 ', '2L' ],
5243
+ [ '1 ', '1 ', '3 ', '2I', '3 ', '2L', '1 ', '1 ', '2L', '2L' ],
5244
+ [ '1 ', '1 ', '3 ', '1 ', '1 ', '1 ', '3 ', '3 ', '3 ', '2L' ],
5245
+ [ '3 ', '2I', '3 ', '3 ', '2L', '3 ', '3 ', '2I', '2L', '1 ' ],
5246
+ [ '1 ', '1 ', '3 ', '3 ', '3 ', '3 ', '1 ', '2L', '3 ', '2L' ],
5247
+ [ '1 ', '2I', '3 ', '2I', '1 ', '1 ', '1 ', '3 ', '1 ', '1 ' ],
5248
+ ])
5249
+ binst = solver.Board(board=board)
5250
+ solutions = binst.solve_and_print()
5251
+ ```
5252
+
5253
+ **Script Output**
5254
+
5255
+ ```python
5256
+ Solution found
5257
+ [['R' 'DLR' 'DLR' 'DLR' 'L' 'R' 'DL' 'DR' 'LR' 'L']
5258
+ ['D' 'U' 'U' 'UDR' 'LR' 'L' 'UD' 'UDR' 'LR' 'L']
5259
+ ['UD' 'D' 'R' 'ULR' 'DL' 'R' 'UDL' 'UD' 'D' 'D']
5260
+ ['UD' 'UD' 'R' 'DLR' 'ULR' 'DLR' 'UL' 'UDR' 'ULR' 'UL']
5261
+ ['UDR' 'ULR' 'LR' 'ULR' 'L' 'UDR' 'LR' 'UL' 'R' 'DL']
5262
+ ['U' 'R' 'DLR' 'LR' 'DLR' 'UL' 'D' 'D' 'DR' 'UL']
5263
+ ['D' 'R' 'UDL' 'D' 'U' 'D' 'UDR' 'ULR' 'ULR' 'DL']
5264
+ ['UDR' 'LR' 'ULR' 'UDL' 'DR' 'ULR' 'ULR' 'LR' 'DL' 'U']
5265
+ ['U' 'R' 'DLR' 'ULR' 'ULR' 'DLR' 'L' 'DR' 'ULR' 'DL']
5266
+ ['R' 'LR' 'ULR' 'LR' 'L' 'U' 'R' 'ULR' 'L' 'U']]
5267
+ Solutions found: 1
5268
+ status: OPTIMAL
5269
+ Time taken: 5.65 seconds
5270
+ ```
5271
+
5272
+ **Solved puzzle**
5273
+
5274
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/pipes_solved.png" alt="Pipes solved" width="500">
5275
+
5276
+ ---
5277
+
5278
+ ## Connect the Dots (Puzzle Type #56)
5279
+
5280
+ * [**Mobile App (Android)**](https://play.google.com/store/apps/details?id=com.playvalve.connect.dots&hl=en_US)
5281
+
5282
+ * [**Mobile App (iOS)**](https://apps.apple.com/us/app/dot-link-connect-the-dots/id6444312485)
5283
+
5284
+ * [**Solver Code**][56]
5285
+
5286
+ <details>
5287
+ <summary><strong>Rules</strong></summary>
5288
+
5289
+ You are given a grid of empty cells and 2 filled cell per color. The goal is to connect the dots of the same color to form a single fully connected graph for each color.
5290
+ </details>
5291
+
5292
+ **Unsolved puzzle**
5293
+
5294
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_unsolved.png" alt="Connect the Dots unsolved" width="500">
5295
+
5296
+ Code to utilize this package and solve the puzzle:
5297
+
5298
+ ```python
5299
+ import numpy as np
5300
+ from puzzle_solver import connect_the_dots_solver as solver
5301
+ board = np.array([
5302
+ ['R', ' ', 'B', ' ', ' ', ' ', ' ', ' '],
5303
+ ['Y', ' ', ' ', 'R', 'G', ' ', 'G', ' '],
5304
+ [' ', 'M', ' ', ' ', ' ', 'P', ' ', ' '],
5305
+ [' ', 'O', ' ', ' ', ' ', 'M', ' ', ' '],
5306
+ [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
5307
+ ['Br', 'B', ' ', ' ', 'Y', 'O', ' ', ' '],
5308
+ [' ', ' ', ' ', ' ', ' ', 'P', ' ', ' '],
5309
+ [' ', ' ', ' ', 'Br', ' ', ' ', ' ', ' '],
5310
+ ])
5311
+ binst = solver.Board(board=board)
5312
+ solutions = binst.solve_and_print()
5313
+ ```
5314
+
5315
+ **Script Output**
5316
+
5317
+ ```python
5318
+ Solution found
5319
+ 0 1 2 3 4 5 6 7
5320
+ ┌───────┬───────────────────────┐
5321
+ 0│ R R │ B B B B B B │
5322
+ ├───┐ └───────┬───────────┐ │
5323
+ 1│ Y │ R R R │ G G G │ B │
5324
+ │ ├───────────┴───┬───────┤ │
5325
+ 2│ Y │ M M M M │ P P │ B │
5326
+ │ ├───────────┐ └───┐ │ │
5327
+ 3│ Y │ O O O │ M M │ P │ B │
5328
+ │ └───────┐ └───────┤ │ │
5329
+ 4│ Y Y Y │ O O O │ P │ B │
5330
+ ├───┬───┐ └───────┐ │ │ │
5331
+ 5│Br │ B │ Y Y Y │ O │ P │ B │
5332
+ │ │ └───────────┼───┘ │ │
5333
+ 6│Br │ B B B B │ P P │ B │
5334
+ │ └───────────┐ └───────┘ │
5335
+ 7│Br Br Br Br │ B B B B │
5336
+ └───────────────┴───────────────┘
5337
+ Solutions found: 1
5338
+ status: OPTIMAL
5339
+ Time taken: 2.91 seconds
5340
+ ```
5341
+
5342
+ **Solved puzzle**
5343
+
5344
+ <img src="https://raw.githubusercontent.com/Ar-Kareem/puzzle_solver/master/images/connect_the_dots_solved.png" alt="Connect the Dots solved" width="500">
5345
+
5346
+ ---
5347
+
5077
5348
  ---
5078
5349
 
5079
5350
  ## Why SAT / CP-SAT?
@@ -5156,7 +5427,7 @@ Issues and PRs welcome!
5156
5427
  [29]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/battleships "puzzle_solver/src/puzzle_solver/puzzles/battleships at master · Ar-Kareem/puzzle_solver · GitHub"
5157
5428
  [30]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/kakurasu "puzzle_solver/src/puzzle_solver/puzzles/kakurasu at master · Ar-Kareem/puzzle_solver · GitHub"
5158
5429
  [31]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/star_battle "puzzle_solver/src/puzzle_solver/puzzles/star_battle at master · Ar-Kareem/puzzle_solver · GitHub"
5159
- [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"
5430
+ [32]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/star_battle "puzzle_solver/src/puzzle_solver/puzzles/star_battle_shapeless at master · Ar-Kareem/puzzle_solver · GitHub"
5160
5431
  [33]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/lits "puzzle_solver/src/puzzle_solver/puzzles/lits at master · Ar-Kareem/puzzle_solver · GitHub"
5161
5432
  [34]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/black_box "puzzle_solver/src/puzzle_solver/puzzles/black_box at master · Ar-Kareem/puzzle_solver · GitHub"
5162
5433
  [35]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/galaxies "puzzle_solver/src/puzzle_solver/puzzles/galaxies at master · Ar-Kareem/puzzle_solver · GitHub"
@@ -5173,9 +5444,11 @@ Issues and PRs welcome!
5173
5444
  [46]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/heyawake "puzzle_solver/src/puzzle_solver/puzzles/heyawake at master · Ar-Kareem/puzzle_solver · GitHub"
5174
5445
  [47]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/shingoki "puzzle_solver/src/puzzle_solver/puzzles/shingoki at master · Ar-Kareem/puzzle_solver · GitHub"
5175
5446
  [48]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/tapa "puzzle_solver/src/puzzle_solver/puzzles/tapa at master · Ar-Kareem/puzzle_solver · GitHub"
5176
- [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"
5447
+ [49]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/binairo "puzzle_solver/src/puzzle_solver/puzzles/binairo_plus at master · Ar-Kareem/puzzle_solver · GitHub"
5177
5448
  [50]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/shakashaka "puzzle_solver/src/puzzle_solver/puzzles/shakashaka at master · Ar-Kareem/puzzle_solver · GitHub"
5178
5449
  [51]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/kakuro "puzzle_solver/src/puzzle_solver/puzzles/kakuro at master · Ar-Kareem/puzzle_solver · GitHub"
5179
5450
  [52]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/sudoku "puzzle_solver/src/puzzle_solver/puzzles/sudoku at master · Ar-Kareem/puzzle_solver · GitHub"
5180
5451
  [53]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/sudoku "puzzle_solver/src/puzzle_solver/puzzles/sudoku at master · Ar-Kareem/puzzle_solver · GitHub"
5181
5452
  [54]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/flood_it "puzzle_solver/src/puzzle_solver/puzzles/flood_it at master · Ar-Kareem/puzzle_solver · GitHub"
5453
+ [55]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/pipes "puzzle_solver/src/puzzle_solver/puzzles/pipes at master · Ar-Kareem/puzzle_solver · GitHub"
5454
+ [56]: https://github.com/Ar-Kareem/puzzle_solver/tree/master/src/puzzle_solver/puzzles/connect_the_dots "puzzle_solver/src/puzzle_solver/puzzles/connect_the_dots at master · Ar-Kareem/puzzle_solver · GitHub"