bridges-generator
v1.0.4
Published
Generates a Hashi puzzle
Downloads
23
Maintainers
Readme
Hashi Puzzle Generator
A library for generating random Hashi puzzles written in TypeScript. Hashi (also known as Bridges, and Hashiwokakero) is a logic puzzle that involves connecting islands with bridges without creating any loops. This library provides a simple API for generating Hashi puzzles of various sizes and difficulty levels.
Links
Generator
You can play with the generator on the Hashi Puzzles application at the following link:
Solver
Also, I have a hashi solver library that is available on
Installation
To install the library, run the following command in your terminal:
npm install bridges-generator
Usage instructions
The library exports a function called generate
that takes four parameters:
rows
: The number of rows in the puzzle.columns
: The number of columns in the puzzle.numberOfIslands
: The number of islands in the puzzle.doubleBridges
: (Optional) The percentage of double bridges in the generated puzzle. The value must be between 0 and 1. If not specified, a default value of 0.2 will be used.
The generate
function returns an object with two properties:
puzzle
: A two-dimensional array representing the puzzle grid. Each element in the array represents the number of that island (0 if there is no island).solution
: A two-dimensional array representing the solution to the puzzle. Each element in the array is a string representing the island or the bridge. The following element are can be in the solution:0
- represents empty spacenumber from 1 to 8
- represents the island|
- one vertical bridge$
- two vertical bridges-
- one horizontal bridge=
- two horizontal bridges
Here is an example of how to use the library to generate a 10x10 puzzle with 5 islands and 20% double bridges:
import { generate } from 'bridges-generator';
const generated = generate(10, 10, 5, 0.2);
console.log(generated.puzzle);
console.log(generated.solution);
Result
Example of generated puzzle:
[
[0, 2, 0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 2, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 5, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 3, 0, 0, 2, 0, 2, 0, 1, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
The solution to the generated puzzle:
[
['0', '2', '-', '-', '-', '3', '-', '-', '1', '0', '0', '0', '0', '1', '0'],
['0', '|', '0', '0', '0', '|', '0', '0', '0', '0', '0', '0', '0', '|', '0'],
['0', '|', '0', '0', '0', '|', '0', '0', '0', '0', '0', '0', '0', '|', '0'],
['0', '|', '1', '-', '-', '4', '-', '-', '-', '-', '4', '-', '-', '2', '0'],
['0', '|', '0', '0', '0', '|', '0', '0', '0', '0', '$', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '1', '0', '0', '0', '0', '$', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '0', '0', '0', '0', '0', '$', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '0', '0', '0', '0', '0', '$', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '0', '0', '0', '0', '0', '$', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '0', '0', '0', '0', '0', '$', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '0', '0', '0', '0', '0', '$', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '3', '=', '=', '=', '=', '5', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '|', '0', '0', '0', '0', '|', '0', '0', '0', '0'],
['0', '|', '0', '0', '0', '3', '=', '=', '2', '0', '2', '-', '1', '0', '0'],
['0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
]
Without code, the solution looks like this:
2---3--1 1
| | |
| | |
|1--4----4--2
| | $
| 1 $
| $
| $
| $
| $
| $
| 3====5
| | |
| 3==2 2-1
1