https://github.com/kevinychen/nikoli-puzzle-solver
Solver for over 100 types of Nikoli-style logic puzzles
https://github.com/kevinychen/nikoli-puzzle-solver
logic-puzzle-solver nurikabe-solver puzzle-hunt puzzle-solver sudoku-solver wasm z3
Last synced: 5 months ago
JSON representation
Solver for over 100 types of Nikoli-style logic puzzles
- Host: GitHub
- URL: https://github.com/kevinychen/nikoli-puzzle-solver
- Owner: kevinychen
- License: mit
- Created: 2021-12-23T17:23:30.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-01-11T06:16:32.000Z (over 2 years ago)
- Last Synced: 2024-04-09T23:02:40.049Z (about 2 years ago)
- Topics: logic-puzzle-solver, nurikabe-solver, puzzle-hunt, puzzle-solver, sudoku-solver, wasm, z3
- Language: TypeScript
- Homepage: https://util.in:8102/
- Size: 4.06 MB
- Stars: 19
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# Nikoli Puzzle Solver
Solver for over 100 types of Nikoli-style logic puzzles, including Sudoku, Slitherlink, Masyu, Nonograms, Skyscrapers, Light Up, Kakuro, and many more, conveniently deployed as a web app for easy use. Try it at https://util.in:8102.
The app hooks up to the [Penpa UI](https://github.com/swaroopg92/penpa-edit) to make it easy to input and view puzzles.

## Features
- Supports [over 100 puzzle types](src/solvers)
- Supports unique solution checking
- Supports irregularly shaped grids and grids with holes (when appropriate for the puzzle type)
- Supports different tilings, such as hexagonal and triangular grids (when appropriate for the puzzle type)
- Easy for someone with programming experience to modify solvers for puzzle variants, or add new solvers
## Instructions
- Go to https://util.in:8102.
- Input a puzzle, or choose a sample puzzle from the list on the bottom left. (You can also click Load to load any Penpa URL from the web.)
- In the dropdown menu on the bottom right, select the desired puzzle type/rules to solve with.
- Click "Solve". The grid will be automatically filled if a solution is found.
## Development
### One-time setup
To host the server yourself, you need Node.js. This was tested with Node.js v20.6.1.
Run the following:
git clone https://github.com/kevinychen/nikoli-puzzle-solver.git
cd nikoli-puzzle-solver
npm install
git submodule update --init
### Running the server
To generate production assets and start the server, run:
npx webpack --mode production
node server.js
Then go to http://localhost:8080.
To run a development server, which will automatically refresh when the source code changes:
npx webpack serve --mode development
### Running tests
Start the development server with `npx webpack serve --mode development`, then go to http://localhost:8080/test.html.
### Adding a solver
- Create a new file in the [solvers](src/solvers) directory.
- Using the existing solvers as examples, define a solve function that takes a Z3 `Context` (to construct constraints) and a `Puzzle` (that contains the contents from the Penpa UI) as input.
- At the bottom of the file, add it to the solver registry with `solverRegistry.push({...})`.
- You can construct the sample puzzle in Penpa, and click "Share" -> "Editing URL" to get the encoded puzzle.
- To fill in the sample answer, solve the sample puzzle in the UI and copy the puzzle answer string from the developer console logs.
- Run the tests to verify the new solver implementation and sample puzzle are correct.
### Credits
This project was based on and inspired by the brilliant puzzle solver library [Grilops](https://github.com/obijywk/grilops).
Thanks to puzz.link and similar sites for puzzle rules and sample puzzles.