bridges-generator
TypeScript icon, indicating that this package has built-in type declarations

1.0.4 • Public • Published

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 space
    • number 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

Package Sidebar

Install

npm i bridges-generator

Weekly Downloads

8

Version

1.0.4

License

MIT

Unpacked Size

26.3 kB

Total Files

6

Last publish

Collaborators

  • tonivrbic