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.
- {multi_puzzle_solver-1.0.3.dist-info → multi_puzzle_solver-1.0.6.dist-info}/METADATA +1024 -387
- multi_puzzle_solver-1.0.6.dist-info/RECORD +73 -0
- puzzle_solver/__init__.py +7 -1
- puzzle_solver/core/utils.py +17 -1
- puzzle_solver/core/utils_visualizer.py +257 -201
- puzzle_solver/puzzles/aquarium/aquarium.py +8 -23
- puzzle_solver/puzzles/battleships/battleships.py +39 -53
- puzzle_solver/puzzles/binairo/binairo.py +2 -2
- puzzle_solver/puzzles/black_box/black_box.py +6 -70
- puzzle_solver/puzzles/connect_the_dots/connect_the_dots.py +50 -0
- puzzle_solver/puzzles/filling/filling.py +11 -34
- puzzle_solver/puzzles/flood_it/parse_map/parse_map.py +0 -1
- puzzle_solver/puzzles/galaxies/galaxies.py +110 -110
- puzzle_solver/puzzles/heyawake/heyawake.py +6 -2
- puzzle_solver/puzzles/kakurasu/kakurasu.py +5 -13
- puzzle_solver/puzzles/kakuro/kakuro.py +6 -2
- puzzle_solver/puzzles/lits/lits.py +6 -4
- puzzle_solver/puzzles/mosaic/mosaic.py +8 -18
- puzzle_solver/puzzles/nonograms/nonograms.py +80 -85
- puzzle_solver/puzzles/nonograms/nonograms_colored.py +221 -0
- puzzle_solver/puzzles/norinori/norinori.py +5 -10
- puzzle_solver/puzzles/nurikabe/nurikabe.py +6 -2
- puzzle_solver/puzzles/palisade/palisade.py +4 -3
- puzzle_solver/puzzles/pearl/pearl.py +15 -27
- puzzle_solver/puzzles/pipes/pipes.py +2 -1
- puzzle_solver/puzzles/range/range.py +19 -55
- puzzle_solver/puzzles/rectangles/rectangles.py +4 -2
- puzzle_solver/puzzles/shingoki/shingoki.py +2 -2
- puzzle_solver/puzzles/singles/singles.py +6 -2
- puzzle_solver/puzzles/slant/slant.py +13 -19
- puzzle_solver/puzzles/slitherlink/slitherlink.py +2 -2
- puzzle_solver/puzzles/star_battle/star_battle.py +13 -7
- puzzle_solver/puzzles/stitches/stitches.py +8 -21
- puzzle_solver/puzzles/sudoku/sudoku.py +5 -11
- puzzle_solver/puzzles/tapa/tapa.py +6 -2
- puzzle_solver/puzzles/tents/tents.py +50 -80
- puzzle_solver/puzzles/tracks/tracks.py +19 -66
- puzzle_solver/puzzles/twiddle/twiddle.py +112 -0
- puzzle_solver/puzzles/unruly/unruly.py +17 -49
- puzzle_solver/puzzles/yin_yang/yin_yang.py +3 -10
- multi_puzzle_solver-1.0.3.dist-info/RECORD +0 -70
- {multi_puzzle_solver-1.0.3.dist-info → multi_puzzle_solver-1.0.6.dist-info}/WHEEL +0 -0
- {multi_puzzle_solver-1.0.3.dist-info → multi_puzzle_solver-1.0.6.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
puzzle_solver/__init__.py,sha256=OBCEdCUd7-i81fEAhMa5DSirGbfhID5IwVk1jTkNxC4,5298
|
|
2
|
+
puzzle_solver/core/utils.py,sha256=FE0106dfQRsgCn2FRBvRq5zILLK7-Z3cPHkAlBWUX0w,8785
|
|
3
|
+
puzzle_solver/core/utils_ortools.py,sha256=ACV3HgKWpEUTt1lpqsPryK1DeZpu7kdWQKEWTLJ2tfs,10384
|
|
4
|
+
puzzle_solver/core/utils_visualizer.py,sha256=AmVeBuEMaJzVY2zBbRoONlC9x3AGLKcdaNn8mD-nrLs,23347
|
|
5
|
+
puzzle_solver/puzzles/aquarium/aquarium.py,sha256=dGqYEWMoh4di5DN4sd-GtYb6QeTpVYFQJHBkrrmrudQ,5649
|
|
6
|
+
puzzle_solver/puzzles/battleships/battleships.py,sha256=U4xJ_NJC2baHvfaAfJ01YEBjixq9gD0h8GP9L1V-_oM,7223
|
|
7
|
+
puzzle_solver/puzzles/binairo/binairo.py,sha256=qKvpixLIBUcugAyJgpBGHV-9q_4nzA1ZOxeDFnltsXA,6843
|
|
8
|
+
puzzle_solver/puzzles/binairo/binairo_plus.py,sha256=TvLG3olwANtft3LuCF-y4OofpU9PNa4IXDqgZqsD-g0,267
|
|
9
|
+
puzzle_solver/puzzles/black_box/black_box.py,sha256=RXTXQhMAb_Oce9Mk1XpouniYIyy9k3kYGdey-SEeRMU,12559
|
|
10
|
+
puzzle_solver/puzzles/bridges/bridges.py,sha256=QwOhZyO5urbatkNyPmQxZ_lGM01ZejndMr_eoiBkr7g,5394
|
|
11
|
+
puzzle_solver/puzzles/chess_range/chess_melee.py,sha256=D-_Oi8OyxsVe1j3dIKYwRlxgeb3NWLmDWGcv-oclY0c,195
|
|
12
|
+
puzzle_solver/puzzles/chess_range/chess_range.py,sha256=_VHlpUPnqeBstvSIt9RtTV-w2etSK7UrEHg6sErNqtU,21068
|
|
13
|
+
puzzle_solver/puzzles/chess_range/chess_solo.py,sha256=ByDfcRsk5FVmFicpU_DpLoLTJ99Kr___vX4y8ln8_EQ,400
|
|
14
|
+
puzzle_solver/puzzles/chess_sequence/chess_sequence.py,sha256=6ap3Wouf2PxHV4P56B9ol1QT98Ym6VHaxorQZWl6LnY,13692
|
|
15
|
+
puzzle_solver/puzzles/connect_the_dots/connect_the_dots.py,sha256=0axF_jtB34mUM6s3j4grjkIWTCjvaw4NZ4oVogZsNvs,2677
|
|
16
|
+
puzzle_solver/puzzles/dominosa/dominosa.py,sha256=Nmb7pn8U27QJwGy9F3wo8ylqo2_U51OAo3GN2soaNpc,7195
|
|
17
|
+
puzzle_solver/puzzles/filling/filling.py,sha256=ILgGJqVI7yd6HPvWeKEsr620qorxLtAQYKTq65PqarY,4952
|
|
18
|
+
puzzle_solver/puzzles/flip/flip.py,sha256=ZngJLUhRNc7qqo2wtNLdMPx4u9w9JTUge27PmdXyDCw,3985
|
|
19
|
+
puzzle_solver/puzzles/flood_it/flood_it.py,sha256=jnCtH1sZIt6K4hbQDSsiM1Cd8FjQNP7cfw2ObUW5fEQ,7948
|
|
20
|
+
puzzle_solver/puzzles/flood_it/parse_map/parse_map.py,sha256=m7gcpvN3THZdYLowdR_Jwx3HyttaV4K2DqrX_U7uFqU,8209
|
|
21
|
+
puzzle_solver/puzzles/galaxies/galaxies.py,sha256=IiKPU3fz5Aokhj5OjeT5jd_vdNuWnLzjZylGOTepsNU,5600
|
|
22
|
+
puzzle_solver/puzzles/galaxies/parse_map/parse_map.py,sha256=XmFqVN_oRfq9AZFWy5ViUJ2Szjgx-srrRkFPJXEEyFo,9358
|
|
23
|
+
puzzle_solver/puzzles/guess/guess.py,sha256=MpyrF6YVu0S1fzX-BllwxGKRGacWJpeLbNn5GetuEyo,10792
|
|
24
|
+
puzzle_solver/puzzles/heyawake/heyawake.py,sha256=U0nWSX8SMDmaLwA0K555ru_mMX2MLjCiZVNSz8T0Ksg,5687
|
|
25
|
+
puzzle_solver/puzzles/inertia/inertia.py,sha256=-Y5fr7aK20zwmGHsZql7pYCq1kyMZglvkVZ6uIDf1HA,5658
|
|
26
|
+
puzzle_solver/puzzles/inertia/tsp.py,sha256=mAhlSjCWespASeN8uLZ0JkYDw-ZqFEpal6NM-ubpCXw,15313
|
|
27
|
+
puzzle_solver/puzzles/inertia/parse_map/parse_map.py,sha256=x0d64gTBd0HC2lO5uOpX2VKWfwj8rRiz0mQM_lqNmWs,8457
|
|
28
|
+
puzzle_solver/puzzles/kakurasu/kakurasu.py,sha256=ts4oPrFNeakNGi1rgAd6CIVQgeWSgnBGtA3qev_6ffY,1894
|
|
29
|
+
puzzle_solver/puzzles/kakuro/kakuro.py,sha256=9Sk-Q3EQsflyaJo5zywV-OpJn4WnNbbNAfiMFzN00F4,4440
|
|
30
|
+
puzzle_solver/puzzles/keen/keen.py,sha256=adSA_pc1m6F6jV7a-PpQxdci1bv4psCNRNt9hMIQdSY,5034
|
|
31
|
+
puzzle_solver/puzzles/light_up/light_up.py,sha256=iSA1rjZMFsnI0V0Nxivxox4qZkB7PvUrROSHXcoUXds,4541
|
|
32
|
+
puzzle_solver/puzzles/lits/lits.py,sha256=QeXFiCnWNI9jzUj3QLgU20mXxE2DD9o4BJsUb0TswKk,7231
|
|
33
|
+
puzzle_solver/puzzles/magnets/magnets.py,sha256=-Wl49JD_PKeq735zQVMQ3XSQX6gdHiY-7PKw-Sh16jw,6474
|
|
34
|
+
puzzle_solver/puzzles/map/map.py,sha256=sxc57tapB8Tsgam-yoDitln1o-EB_SbIYvO6WEYy3us,2582
|
|
35
|
+
puzzle_solver/puzzles/minesweeper/minesweeper.py,sha256=gSdFsuZ-KrwVxgI1HF2q_pYleZ6vBm9jjRTFlboVnLY,5871
|
|
36
|
+
puzzle_solver/puzzles/mosaic/mosaic.py,sha256=T89tkyTbob3LT20vwY3hkkEtNi8bxp2_CLaVi1gzhBc,1974
|
|
37
|
+
puzzle_solver/puzzles/nonograms/nonograms.py,sha256=Q-VHI0IPR2igccnE617HPThj5tnBgt27MiLWIZPtYcI,5587
|
|
38
|
+
puzzle_solver/puzzles/nonograms/nonograms_colored.py,sha256=Qy3CGNNs0MoZQv-qHyMMP8-fK7s7f_utK-Rc1hQaX_A,10750
|
|
39
|
+
puzzle_solver/puzzles/norinori/norinori.py,sha256=ZEDWrD7zvEuqXOdXGOrELh1n_mWzhzZa3chs6Zqd3Pc,4570
|
|
40
|
+
puzzle_solver/puzzles/nurikabe/nurikabe.py,sha256=hX0VcjPwO8PfY2kiIpQV45FWIvKRosFebk588tp5wzk,6603
|
|
41
|
+
puzzle_solver/puzzles/palisade/palisade.py,sha256=q_uQbp6Ef0RXcELMX97msurQk_F53_AlZdEfKVq-NlI,5075
|
|
42
|
+
puzzle_solver/puzzles/pearl/pearl.py,sha256=slPVCzPObQLNk4EYqe55YR4JeRCUs07Mjdks1fWKZSY,6696
|
|
43
|
+
puzzle_solver/puzzles/pipes/pipes.py,sha256=2HDHCWhD-fLYTRoJsx15gOrsgt_SbjlGF2QDS5UX6m8,4680
|
|
44
|
+
puzzle_solver/puzzles/range/range.py,sha256=sJVMKzoT5unihMKurriAUTGLY0f7OQXSZfSHWezPPkw,3387
|
|
45
|
+
puzzle_solver/puzzles/rectangles/rectangles.py,sha256=6MuJHyw7woIljlqxt76zfhw8F2_2biKMFM7oiXdXZsg,7010
|
|
46
|
+
puzzle_solver/puzzles/shakashaka/shakashaka.py,sha256=PRpg_qI7XA3ysAo_g1TRJsT3VwB5Vial2UcFyBOMwKQ,9571
|
|
47
|
+
puzzle_solver/puzzles/shingoki/shingoki.py,sha256=u-r6nLlF4WAlSUsQxNMjaPPdojFOIe7eJgiSgLa883s,7496
|
|
48
|
+
puzzle_solver/puzzles/signpost/signpost.py,sha256=38LlMvP5Fx4qrTXmw4aNCt3yUbG3fhdSk6-YXmhAHFg,3861
|
|
49
|
+
puzzle_solver/puzzles/singles/singles.py,sha256=AugO2Gnd_OEyrxXUnqg3oPypdmeiFais_fu19-gm4Eg,2945
|
|
50
|
+
puzzle_solver/puzzles/slant/slant.py,sha256=l4q9g0BfqQsA6zsySiemJC5iFsqsO6LoqTUqcTEqYEk,5897
|
|
51
|
+
puzzle_solver/puzzles/slant/parse_map/parse_map.py,sha256=8thQxWbq0qjehKb2VzgUP22PGj-9n9djwbt3LGMVLJw,4811
|
|
52
|
+
puzzle_solver/puzzles/slitherlink/slitherlink.py,sha256=AQsOMHB_vP4bDHbhq5hTRRblv01DecdEzy6F4k23OA0,7118
|
|
53
|
+
puzzle_solver/puzzles/star_battle/star_battle.py,sha256=GqrattaxVM7eHtPQYUWHAlLG8DQkDm7p1B3R8VeU9g8,4018
|
|
54
|
+
puzzle_solver/puzzles/star_battle/star_battle_shapeless.py,sha256=lj05V0Y3A3NjMo1boMkPIwBhMtm6SWydjgAMeCf5EIo,225
|
|
55
|
+
puzzle_solver/puzzles/stitches/stitches.py,sha256=wj9z9979FaVtp2hcVu3YDTGlxtwljoQNBgMMM5U3icc,6109
|
|
56
|
+
puzzle_solver/puzzles/stitches/parse_map/parse_map.py,sha256=b21SQvlnDM6wOl_1iUhZ7X6akpBZoOnj3kEzImBCh8Q,10497
|
|
57
|
+
puzzle_solver/puzzles/sudoku/sudoku.py,sha256=lj3DD98sdA9jNre8Nwe8s_OKpYe7K4iPCmXtJMKfIDs,13344
|
|
58
|
+
puzzle_solver/puzzles/tapa/tapa.py,sha256=554Xun39M3oJ5kOUwrhLUtbUXbsAYj4DH-GBhtJbjoY,5439
|
|
59
|
+
puzzle_solver/puzzles/tents/tents.py,sha256=81hAtmNNYIgzh0tEa0BuExmdzQfGVrlwjn_Dw8hEp3c,4943
|
|
60
|
+
puzzle_solver/puzzles/thermometers/thermometers.py,sha256=bGcVmpPeqL5AJtj8jkK8gYThzv9aGCd_QrWEiYBCA2s,4011
|
|
61
|
+
puzzle_solver/puzzles/towers/towers.py,sha256=OLyTf9nTFR5L32-S_fhVyBmpz4i5YUNJotwOwbw_Fjg,6500
|
|
62
|
+
puzzle_solver/puzzles/tracks/tracks.py,sha256=u34nOCvLHQrQFdInGpM3Y1dX_A30SNh4o6W4l7BSPmE,5516
|
|
63
|
+
puzzle_solver/puzzles/twiddle/twiddle.py,sha256=3gPoeD0DoiiZbIhtptdXFldO_t1QShL6IxkDqJMzjkk,5446
|
|
64
|
+
puzzle_solver/puzzles/undead/undead.py,sha256=IGFQysgoaKZH8rKjqlrkoHsH28ve4_hKor2f0QOsWY0,6596
|
|
65
|
+
puzzle_solver/puzzles/unequal/unequal.py,sha256=ExY2XDCrqROCDpRLfHo8uVr1zuli1QvbCdNCiDhlCac,6978
|
|
66
|
+
puzzle_solver/puzzles/unruly/unruly.py,sha256=_C6FhYm9rqwhlQa6TMTxYr3rWcP_QS-E93xo86CZQjg,2846
|
|
67
|
+
puzzle_solver/puzzles/yin_yang/yin_yang.py,sha256=D0JacUdK5yPrfScmGqX-p8144VbwxfDgIaqF8hwLXlM,5039
|
|
68
|
+
puzzle_solver/puzzles/yin_yang/parse_map/parse_map.py,sha256=drjfoHqmFf6U-ZQUwrBbfGINRxDQpgbvy4U3D9QyMhM,6617
|
|
69
|
+
puzzle_solver/utils/visualizer.py,sha256=T2g5We9J3tkhyXWoN2OrIDIJDjt6w5sDd2ksOub0ZI8,6819
|
|
70
|
+
multi_puzzle_solver-1.0.6.dist-info/METADATA,sha256=L-BnSETryC5gEqJYM6b-bSm2iGPkvJYWg47lHzRiwSw,450669
|
|
71
|
+
multi_puzzle_solver-1.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
72
|
+
multi_puzzle_solver-1.0.6.dist-info/top_level.txt,sha256=exwVUQa-anK9vYrpKzBPvH8bX43iElWI4VeNiAyBGJY,14
|
|
73
|
+
multi_puzzle_solver-1.0.6.dist-info/RECORD,,
|
puzzle_solver/__init__.py
CHANGED
|
@@ -7,6 +7,7 @@ from puzzle_solver.puzzles.bridges import bridges as bridges_solver
|
|
|
7
7
|
from puzzle_solver.puzzles.chess_range import chess_range as chess_range_solver
|
|
8
8
|
from puzzle_solver.puzzles.chess_range import chess_solo as chess_solo_solver
|
|
9
9
|
from puzzle_solver.puzzles.chess_range import chess_melee as chess_melee_solver
|
|
10
|
+
from puzzle_solver.puzzles.connect_the_dots import connect_the_dots as connect_the_dots_solver
|
|
10
11
|
from puzzle_solver.puzzles.dominosa import dominosa as dominosa_solver
|
|
11
12
|
from puzzle_solver.puzzles.filling import filling as filling_solver
|
|
12
13
|
from puzzle_solver.puzzles.flood_it import flood_it as flood_it_solver
|
|
@@ -24,6 +25,7 @@ from puzzle_solver.puzzles.map import map as map_solver
|
|
|
24
25
|
from puzzle_solver.puzzles.minesweeper import minesweeper as minesweeper_solver
|
|
25
26
|
from puzzle_solver.puzzles.mosaic import mosaic as mosaic_solver
|
|
26
27
|
from puzzle_solver.puzzles.nonograms import nonograms as nonograms_solver
|
|
28
|
+
from puzzle_solver.puzzles.nonograms import nonograms_colored as nonograms_colored_solver
|
|
27
29
|
from puzzle_solver.puzzles.norinori import norinori as norinori_solver
|
|
28
30
|
from puzzle_solver.puzzles.nurikabe import nurikabe as nurikabe_solver
|
|
29
31
|
from puzzle_solver.puzzles.palisade import palisade as palisade_solver
|
|
@@ -47,6 +49,7 @@ from puzzle_solver.puzzles.tents import tents as tents_solver
|
|
|
47
49
|
from puzzle_solver.puzzles.thermometers import thermometers as thermometers_solver
|
|
48
50
|
from puzzle_solver.puzzles.towers import towers as towers_solver
|
|
49
51
|
from puzzle_solver.puzzles.tracks import tracks as tracks_solver
|
|
52
|
+
from puzzle_solver.puzzles.twiddle import twiddle as twiddle_solver
|
|
50
53
|
from puzzle_solver.puzzles.undead import undead as undead_solver
|
|
51
54
|
from puzzle_solver.puzzles.unequal import unequal as unequal_solver
|
|
52
55
|
from puzzle_solver.puzzles.unruly import unruly as unruly_solver
|
|
@@ -64,6 +67,7 @@ __all__ = [
|
|
|
64
67
|
chess_range_solver,
|
|
65
68
|
chess_solo_solver,
|
|
66
69
|
chess_melee_solver,
|
|
70
|
+
connect_the_dots_solver,
|
|
67
71
|
dominosa_solver,
|
|
68
72
|
filling_solver,
|
|
69
73
|
flood_it_solver,
|
|
@@ -82,6 +86,7 @@ __all__ = [
|
|
|
82
86
|
mosaic_solver,
|
|
83
87
|
nonograms_solver,
|
|
84
88
|
norinori_solver,
|
|
89
|
+
nonograms_colored_solver,
|
|
85
90
|
nurikabe_solver,
|
|
86
91
|
palisade_solver,
|
|
87
92
|
lits_solver,
|
|
@@ -104,6 +109,7 @@ __all__ = [
|
|
|
104
109
|
thermometers_solver,
|
|
105
110
|
towers_solver,
|
|
106
111
|
tracks_solver,
|
|
112
|
+
twiddle_solver,
|
|
107
113
|
undead_solver,
|
|
108
114
|
unequal_solver,
|
|
109
115
|
unruly_solver,
|
|
@@ -111,4 +117,4 @@ __all__ = [
|
|
|
111
117
|
inertia_image_parser,
|
|
112
118
|
]
|
|
113
119
|
|
|
114
|
-
__version__ = '1.0.
|
|
120
|
+
__version__ = '1.0.6'
|
puzzle_solver/core/utils.py
CHANGED
|
@@ -101,7 +101,7 @@ def in_bounds(pos: Pos, V: int, H: int = None) -> bool:
|
|
|
101
101
|
return 0 <= pos.y < V and 0 <= pos.x < H
|
|
102
102
|
|
|
103
103
|
|
|
104
|
-
def get_opposite_direction(direction: Direction) -> Direction:
|
|
104
|
+
def get_opposite_direction(direction: Union[Direction, Direction8]) -> Union[Direction, Direction8]:
|
|
105
105
|
if direction == Direction.RIGHT:
|
|
106
106
|
return Direction.LEFT
|
|
107
107
|
elif direction == Direction.LEFT:
|
|
@@ -110,6 +110,22 @@ def get_opposite_direction(direction: Direction) -> Direction:
|
|
|
110
110
|
return Direction.UP
|
|
111
111
|
elif direction == Direction.UP:
|
|
112
112
|
return Direction.DOWN
|
|
113
|
+
elif direction == Direction8.RIGHT:
|
|
114
|
+
return Direction8.LEFT
|
|
115
|
+
elif direction == Direction8.LEFT:
|
|
116
|
+
return Direction8.RIGHT
|
|
117
|
+
elif direction == Direction8.DOWN:
|
|
118
|
+
return Direction8.UP
|
|
119
|
+
elif direction == Direction8.UP:
|
|
120
|
+
return Direction8.DOWN
|
|
121
|
+
elif direction == Direction8.UP_LEFT:
|
|
122
|
+
return Direction8.DOWN_RIGHT
|
|
123
|
+
elif direction == Direction8.UP_RIGHT:
|
|
124
|
+
return Direction8.DOWN_LEFT
|
|
125
|
+
elif direction == Direction8.DOWN_LEFT:
|
|
126
|
+
return Direction8.UP_RIGHT
|
|
127
|
+
elif direction == Direction8.DOWN_RIGHT:
|
|
128
|
+
return Direction8.UP_LEFT
|
|
113
129
|
else:
|
|
114
130
|
raise ValueError(f'invalid direction: {direction}')
|
|
115
131
|
|