Catalog npm
PACKAGE EXPLORERView in registry

15-puzzle

npm

A simple 15 puzzle library

15puzzlepuzzle
Versions collected28
Direct dependencies8From release 6.2.3
Last observed20 Oct, 18:15 UTC

README

Current package documentation

15-puzzle 🧩

15-puzzle is a simple 15 puzzle library with many useful features. 😎

Usage

Installation

Use npm to install (or yarn if you'd like).

npm install 15-puzzle

Then import the class RandomPuzzle from '15-puzzle' in your script.

import { RandomPuzzle } from '15-puzzle'      // ES Module
const { RandomPuzzle } = require('15-puzzle') // CommonJS

Generating

You can generate a random valid puzzle using a static method called generate() 🎰✨. To specify the size, give a number for both width and height, two numbers for width and height respectively, or nothing for 4x4.

import { RandomPuzzle } from '15-puzzle'

const foo = RandomPuzzle.generate()      // 4x4
const bar = RandomPuzzle.generate(5)     // 5x5
const baz = RandomPuzzle.generate(6, 7)  // 6x7

See the type definition to learn what you can do. 🧐

Now (actually since v2.0.2 😅), as we use random-seed to generate a puzzle, this feature is actually supported! 🎉 Just give a seed as the first argument. A seed must be a string, and here's why.

import { RandomPuzzle } from '15-puzzle'

const foo = RandomPuzzle.generate('kazukazu123123')        // 4x4
const bar = RandomPuzzle.generate('kazukazu123123', 5)     // 5x5
const baz = RandomPuzzle.generate('kazukazu123123', 6, 7)  // 6x7

If you have an array of pieces, instead, use Puzzle which allows you to create an instance without seed. Note that 0 means an empty square.

FYI, RandomPuzzle actually extends Puzzle.

import { Puzzle } from '15-puzzle'

const pieces = [ [  1 ,  2 ,  3 ,  4 ]
                 [  5 ,  6 ,  7 ,  8 ]
                 [  9 , 10 , 11 , 12 ]
                 [ 13 , 14 , 15 ,  0 ] ]

const puzzle = new Puzzle(pieces)

Checking

You can check if the puzzle is solvable, being solved, or completely solved. 🧐

import { Puzzle } from '15-puzzle'

const foo = new Puzzle([ [  1 ,  2 ,  3 ,  4 ]
                         [  5 ,  6 ,  7 ,  8 ]
                         [  9 , 10 , 11 , 12 ]
                         [ 13 , 14 , 15 ,  0 ] ])
foo.isSolvable() // true
foo.isSolving() // false
foo.isSolved() // true


const bar = new Puzzle([ [  1 ,  2 ,  3 ,  4 ]
                         [  5 ,  6 ,  7 ,  8 ]
                         [  9 , 10 , 11 , 12 ]
                         [ 13 ,  0 , 14 , 15 ] ])
bar.isSolvable() // true
bar.isSolving() // false
bar.isSolved() // false

bar.tap(2, 3)
bar.isSolving() // true
bar.isSolved() // false

bar.tap(3, 3)
bar.isSolving() // false
bar.isSolved() // true


const baz = new Puzzle([ [  1 ,  2 ,  3 ,  4 ]
                         [  5 ,  6 ,  7 ,  8 ]
                         [  9 , 10 , 11 , 12 ]
                         [ 13 , 15 , 14 ,  0 ] ])
baz.isSolvable() // false

Controlling

Use Puzzle.prototype.tap(x, y).

import { RandomPuzzle } from '15-puzzle'

const puzzle = RandomPuzzle.generate('kazukazu123123')
console.log(puzzle.toString())
// +--+--+--+--+
// | 5|  | 1|12|
// +--+--+--+--+
// |13|10| 8| 4|
// +--+--+--+--+
// | 3|14| 6| 7|
// +--+--+--+--+
// |11|15| 9| 2|
// +--+--+--+--+

puzzle.tap(0, 0)
console.log(puzzle.toString())
// +--+--+--+--+
// |  | 5| 1|12|
// +--+--+--+--+
// |13|10| 8| 4|
// +--+--+--+--+
// | 3|14| 6| 7|
// +--+--+--+--+
// |11|15| 9| 2|
// +--+--+--+--+

There's a method called swap which literally swaps two pieces, but using this method is not recommended, because calling this manually might make the puzzle become unsolvable.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 28

Collected releases
VersionPublishedDirect dependenciesOpen version
6.2.3Registry latest11 Dec 20218
6.2.26 Dec 20218
6.2.16 Dec 20218
6.2.05 Dec 20218
6.1.55 Dec 20218
6.1.35 Dec 20218
6.1.25 Dec 20218
6.1.15 Dec 20218
6.1.05 Dec 20218
6.0.02 Dec 20218
5.2.620 Jun 20213
5.2.59 Jun 20213
5.2.49 Jun 20213
5.2.39 Jun 20213
5.2.29 Jun 20213
5.2.19 Jun 20213
5.2.09 Jun 20213
5.1.09 Jun 20213
5.0.09 Jun 20213
4.0.08 Jun 20213

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
hiraginoyuki/15-puzzle

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:15 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:9f6245ad3fbc318f27537238e37d541822af184de26f242e3ede0d524020b263