@turner_benjamin/genius-star-solver
v1.0.3
Published
A simple solver for Genius Star puzzles
Downloads
2
Readme
About The Project
Getting Started
Installation
$ npm install turnerbenjamin@genius-star-solver
Usage
Quick start
The default export is a solver object with a single public method, solve. You can call this with an array of 7 integers representing a roll of the dice.
import solver from "@turner_benjamin/genius-star-solver";
const roll = [9, 10, 28, 33, 34, 39, 47];
const solveReport = solver.solve(roll);
Solve Report
The solve method returns an object with several properties about the solve, e.g the number of solutions found.
The solutions property is an array of solutions, e.g:
[
{
"1": "pink",
"2": "bonus"
}
]
Each solution is a dictionary. The key being the cell number and the value a piece type. A dictionary of piece types may be imported as a named import:
import { pieceDictionary } from "@turner_benjamin/genius-star-solver";
Dice
The roll, passed to solve, must reflect a valid roll of the 7 dice provided by the genius star puzzle. A dice object may be imported as a named import:
import { dice } from "@turner_benjamin/genius-star-solver";
const isRollValid = dice.isValidRoll(roll);
const roll = dice.randomRoll();
Options
You may pass an options object as a second argument to the solve method:
| key | Type | Default | Description | | :--------------------------- | :----: | :-----: | :----------------------------------------------------- | | isBonus | bool | false | Whether the bonus set should be used | | solutionLimit | number | 1 | Limit the number of solutions the solver will look for | | solutionsRepositoryMaxLength | number | 1 | Limit the number of solutions stored and returned |
Async
The solve method is expensive, particularly when the solution limit is set to a high value.
The demo above uses a web worker to run solve asynchronously:
//worker.js
import solver from "@turner_benjamin/genius-star-solver";
self.onmessage = ({ data: args }) => {
const { roll, options } = args;
const solves = solver.solve(roll, options);
postMessage(solves);
};
//asyncSolve.js
import getWorker from "./worker.js?worker";
function runSolve(roll, options) {
return new Promise((resolve, reject) => {
const worker = getWorker();
worker.postMessage({ roll, options });
worker.onmessage = resolve;
worker.onerror = reject;
});
}
export default async function asyncSolve(roll, options) {
const { data: res } = await runSolve(roll, options);
return res;
}
License
Distributed under the MIT License. See LICENSE
for more information.
Contact
Project Link: https://github.com/turnerbenjamin/genius-star-solver