@logic-pad/core
Version:
54 lines (53 loc) • 1.78 kB
JavaScript
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();