testsAndMisc-archive/python_pkg/puzzle_solver/README.md
Krzysztof kuhy Rudnicki 4cf523bf6d refactor: move Python packages under python_pkg/
- 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/
2026-03-18 22:54:45 +01:00

56 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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.