UNPKG

@logic-pad/core

Version:
54 lines (53 loc) 1.78 kB
import GridData from '../grid.js'; import { MajorRule, State } from '../primitives.js'; import AreaNumberSymbol from '../symbols/areaNumberSymbol.js'; import CustomTextSymbol from '../symbols/customTextSymbol.js'; import Rule from './rule.js'; export default class UndercluedRule extends Rule { title = 'Underclued'; get configExplanation() { return 'A solution must be provided. The solvers may be used to generate one automatically.'; } static EXAMPLE_GRID = Object.freeze(GridData.create(['nbnnn', 'bwbnn', 'nbnnn', 'wwwnn']) .addSymbol(new AreaNumberSymbol(1, 1, 1)) .addSymbol(new AreaNumberSymbol(0, 3, 4)) .addSymbol(new CustomTextSymbol('', GridData.create([]), 0, 2, '?')) .addSymbol(new CustomTextSymbol('', GridData.create([]), 2, 2, '?')) .addSymbol(new CustomTextSymbol('', GridData.create([]), 3, 3, '?'))); static SEARCH_VARIANTS = [ new UndercluedRule().searchVariant(), ]; /** * **Underclued Grid: Mark only what is definitely true** * * This rule validates answers based on the provided solution. */ constructor() { super(); } get id() { return MajorRule.Underclued; } get explanation() { return `*Underclued Grid:* Mark only what is definitely true`; } createExampleGrid() { return UndercluedRule.EXAMPLE_GRID; } get searchVariants() { return UndercluedRule.SEARCH_VARIANTS; } validateGrid(_grid) { return { state: State.Incomplete }; } copyWith(_) { return new UndercluedRule(); } get validateWithSolution() { return true; } get isSingleton() { return true; } } export const instance = new UndercluedRule();