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
@@ -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.3'
120
+ __version__ = '1.0.6'
@@ -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