mirror of
https://github.com/kuhyx/testsAndMisc-archive.git
synced 2026-07-04 19:43:14 +02:00
- Move puzzle_solver/, poker_modifier_app/, articles/, tests/ into python_pkg/ - Move moviepy_showcase.py and _moviepy_*.py into python_pkg/moviepy_showcase/ - Update all imports to use python_pkg. prefix - Update pyproject.toml per-file-ignores and pytest testpaths - Add pre-commit hook to enforce Python files under python_pkg/
56 lines
1.9 KiB
Markdown
56 lines
1.9 KiB
Markdown
## Sliding-Square Puzzle Solver
|
||
|
||
Parses a screenshot of a sliding-square puzzle and solves it via BFS.
|
||
|
||
### Setup
|
||
|
||
```bash
|
||
cd puzzle_solver
|
||
python -m venv .venv && source .venv/bin/activate
|
||
pip install opencv-python-headless numpy
|
||
```
|
||
|
||
### Usage
|
||
|
||
```bash
|
||
# From workspace root, with venv active:
|
||
|
||
# Step 1 – Parse screenshot to editable JSON
|
||
python -m puzzle_solver parse screenshot.png -o puzzle.json
|
||
|
||
# Step 2 – Review & fix any "unknown" squares in puzzle.json
|
||
# (set "type" to: normal / portal / teleporter / key / lock)
|
||
|
||
# Step 3 – Solve
|
||
python -m puzzle_solver solve puzzle.json
|
||
|
||
# One-shot (no manual review)
|
||
python -m puzzle_solver run screenshot.png
|
||
|
||
# Debug overlay (visualise detected squares on image)
|
||
python -m puzzle_solver debug screenshot.png -o debug.png
|
||
```
|
||
|
||
### Game mechanics
|
||
|
||
| Square | JSON type | Description |
|
||
| ------------------- | ------------ | ------------------------------------------------- |
|
||
| Empty outline | `normal` | Regular landing square |
|
||
| Solid fill | `player` | Starting position |
|
||
| Ring inside | `goal` | Target destination |
|
||
| Inner square offset | `portal` | Pass through from the side marked by `"side"` |
|
||
| Antenna line(s) | `teleporter` | Warp to paired teleporter (`"group"` id) |
|
||
| Key symbol | `key` | Removes matching lock (`"lock_id"`) |
|
||
| Lock symbol | `lock` | Solid until matching key collected, then vanishes |
|
||
|
||
### Movement
|
||
|
||
You slide in a cardinal direction (up/down/left/right) until you hit
|
||
another square. If you slide off the grid without hitting anything, you
|
||
die.
|
||
|
||
### Algorithm
|
||
|
||
BFS over state = `(position, set_of_active_locks)`. Explores all
|
||
reachable states and returns the shortest move sequence to the goal.
|