@logic-pad/core 0.23.2 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/logic-core.global.d.ts +53 -0
- package/dist/benchmark/helper.d.ts +21 -0
- package/dist/benchmark/helper.js +34 -0
- package/dist/benchmark/prepareBench.js +140 -0
- package/dist/benchmark/runBench.js +206 -0
- package/dist/{data → src/data}/dataHelper.js +4 -18
- package/dist/{data → src/data}/grid.js +22 -70
- package/dist/{data → src/data}/gridZones.js +1 -6
- package/dist/{data → src/data}/rules/banPatternRule.js +19 -50
- package/dist/{data → src/data}/rules/cellCountPerZoneRule.js +2 -6
- package/dist/{data → src/data}/rules/cellCountRule.js +62 -96
- package/dist/{data → src/data}/rules/completePatternRule.js +6 -22
- package/dist/{data → src/data}/rules/connectAllRule.js +20 -50
- package/dist/{data → src/data}/rules/connectZonesRule.js +28 -58
- package/dist/{data → src/data}/rules/containsShapeRule.js +29 -65
- package/dist/{data → src/data}/rules/customRule.js +28 -57
- package/dist/{data → src/data}/rules/differentCountPerZoneRule.js +33 -68
- package/dist/{data → src/data}/rules/exactCountPerZoneRule.js +43 -82
- package/dist/{data → src/data}/rules/foresightRule.js +50 -87
- package/dist/{data → src/data}/rules/lyingSymbolRule.js +37 -88
- package/dist/{data → src/data}/rules/musicControlLine.js +69 -131
- package/dist/{data → src/data}/rules/musicGridRule.js +43 -76
- package/dist/{data → src/data}/rules/mysteryRule.js +29 -58
- package/dist/src/data/rules/noLoopsRule.d.ts +29 -0
- package/dist/src/data/rules/noLoopsRule.js +111 -0
- package/dist/{data → src/data}/rules/offByXRule.js +49 -74
- package/dist/{data → src/data}/rules/perfectionRule.js +8 -28
- package/dist/{data → src/data}/rules/regionAreaRule.js +47 -86
- package/dist/{data → src/data}/rules/regionShapeRule.js +2 -6
- package/dist/{data → src/data}/rules/rules.gen.d.ts +1 -0
- package/dist/{data → src/data}/rules/rules.gen.js +1 -0
- package/dist/{data → src/data}/rules/sameCountPerZoneRule.js +33 -68
- package/dist/{data → src/data}/rules/sameShapeRule.js +18 -44
- package/dist/{data → src/data}/rules/symbolsPerRegionRule.js +52 -90
- package/dist/{data → src/data}/rules/undercluedRule.js +11 -27
- package/dist/{data → src/data}/rules/uniqueShapeRule.js +18 -44
- package/dist/{data → src/data}/rules/wrapAroundRule.js +99 -138
- package/dist/{data → src/data}/serializer/serializer_checksum.js +1 -9
- package/dist/{data → src/data}/serializer/serializer_v0.js +1 -9
- package/dist/{data → src/data}/solver/auto/autoSolver.js +12 -39
- package/dist/{data → src/data}/solver/backtrack/backtrackSolver.js +15 -39
- package/dist/{data → src/data}/solver/backtrack/backtrackWorker.js +1 -1
- package/dist/{data → src/data}/solver/backtrack/data.js +16 -48
- package/dist/{data → src/data}/solver/backtrack/rules/banPattern.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/cellCount.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/connectAll.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/regionArea.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/regionShape.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/sameShape.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/symbolsPerRegion.js +2 -12
- package/dist/{data → src/data}/solver/backtrack/rules/uniqueShape.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/areaNumber.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/dart.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/directionLinker.js +3 -13
- package/dist/{data → src/data}/solver/backtrack/symbols/focus.js +3 -13
- package/dist/{data → src/data}/solver/backtrack/symbols/galaxy.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/letter.js +2 -12
- package/dist/{data → src/data}/solver/backtrack/symbols/lotus.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/minesweeper.js +3 -13
- package/dist/{data → src/data}/solver/backtrack/symbols/myopia.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/viewpoint.js +1 -6
- package/dist/{data → src/data}/solver/cspuz/cspuzSolver.js +22 -46
- package/dist/{data → src/data}/solver/eventIteratingSolver.js +9 -12
- package/dist/{data → src/data}/solver/solver.js +1 -8
- package/dist/src/data/solver/universal/universalSolver.js +20 -0
- package/dist/src/data/solver/universal/universalWorker.d.ts +1 -0
- package/dist/{data → src/data}/solver/z3/modules/areaNumberModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/cellCountModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/connectAllModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/dartModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/letterModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/myopiaModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/regionAreaModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/viewpointModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/z3Solver.js +4 -27
- package/dist/{data → src/data}/solver/z3/z3SolverContext.js +3 -12
- package/dist/{data → src/data}/symbols/areaNumberSymbol.js +28 -44
- package/dist/{data → src/data}/symbols/customIconSymbol.js +40 -64
- package/dist/{data → src/data}/symbols/customSymbol.js +4 -12
- package/dist/{data → src/data}/symbols/customTextSymbol.js +40 -64
- package/dist/{data → src/data}/symbols/dartSymbol.js +39 -59
- package/dist/{data → src/data}/symbols/directionLinkerSymbol.js +34 -63
- package/dist/src/data/symbols/everyLetterSymbol.d.ts +32 -0
- package/dist/src/data/symbols/everyLetterSymbol.js +117 -0
- package/dist/{data → src/data}/symbols/focusSymbol.js +49 -69
- package/dist/{data → src/data}/symbols/galaxySymbol.js +12 -31
- package/dist/{data → src/data}/symbols/hiddenSymbol.js +34 -62
- package/dist/{data → src/data}/symbols/houseSymbol.js +39 -67
- package/dist/{data → src/data}/symbols/letterSymbol.js +40 -68
- package/dist/{data → src/data}/symbols/lotusSymbol.js +58 -81
- package/dist/{data → src/data}/symbols/minesweeperSymbol.js +30 -46
- package/dist/{data → src/data}/symbols/myopiaSymbol.js +45 -69
- package/dist/{data → src/data}/symbols/numberSymbol.js +6 -18
- package/dist/{data → src/data}/symbols/symbol.js +4 -12
- package/dist/{data → src/data}/symbols/symbols.gen.d.ts +1 -0
- package/dist/{data → src/data}/symbols/symbols.gen.js +1 -0
- package/dist/{data → src/data}/symbols/viewpointSymbol.js +26 -42
- package/dist/{data → src/data}/tile.js +6 -18
- package/dist/src/data/validateAsync.js +71 -0
- package/dist/src/data/validateAsyncWorker.d.ts +1 -0
- package/dist/{index.d.ts → src/index.d.ts} +3 -1
- package/dist/{index.js → src/index.js} +3 -1
- package/package.json +6 -2
- package/dist/data/solver/universal/universalSolver.js +0 -38
- package/dist/data/validateAsync.js +0 -128
- /package/dist/{data/solver/backtrack/backtrackWorker.d.ts → benchmark/prepareBench.d.ts} +0 -0
- /package/dist/{data/solver/cspuz/cspuzWorker.d.ts → benchmark/runBench.d.ts} +0 -0
- /package/dist/{data → src/data}/config.d.ts +0 -0
- /package/dist/{data → src/data}/config.js +0 -0
- /package/dist/{data → src/data}/configurable.d.ts +0 -0
- /package/dist/{data → src/data}/configurable.js +0 -0
- /package/dist/{data → src/data}/dataHelper.d.ts +0 -0
- /package/dist/{data → src/data}/events/eventHelper.d.ts +0 -0
- /package/dist/{data → src/data}/events/eventHelper.js +0 -0
- /package/dist/{data → src/data}/events/onFinalValidation.d.ts +0 -0
- /package/dist/{data → src/data}/events/onFinalValidation.js +0 -0
- /package/dist/{data → src/data}/events/onGetTile.d.ts +0 -0
- /package/dist/{data → src/data}/events/onGetTile.js +0 -0
- /package/dist/{data → src/data}/events/onGridChange.d.ts +0 -0
- /package/dist/{data → src/data}/events/onGridChange.js +0 -0
- /package/dist/{data → src/data}/events/onGridResize.d.ts +0 -0
- /package/dist/{data → src/data}/events/onGridResize.js +0 -0
- /package/dist/{data → src/data}/events/onSetGrid.d.ts +0 -0
- /package/dist/{data → src/data}/events/onSetGrid.js +0 -0
- /package/dist/{data → src/data}/events/onSymbolDisplay.d.ts +0 -0
- /package/dist/{data → src/data}/events/onSymbolDisplay.js +0 -0
- /package/dist/{data → src/data}/events/onSymbolMerge.d.ts +0 -0
- /package/dist/{data → src/data}/events/onSymbolMerge.js +0 -0
- /package/dist/{data → src/data}/events/onSymbolValidation.d.ts +0 -0
- /package/dist/{data → src/data}/events/onSymbolValidation.js +0 -0
- /package/dist/{data → src/data}/grid.d.ts +0 -0
- /package/dist/{data → src/data}/gridConnections.d.ts +0 -0
- /package/dist/{data → src/data}/gridConnections.js +0 -0
- /package/dist/{data → src/data}/gridZones.d.ts +0 -0
- /package/dist/{data → src/data}/instruction.d.ts +0 -0
- /package/dist/{data → src/data}/instruction.js +0 -0
- /package/dist/{data → src/data}/primitives.d.ts +0 -0
- /package/dist/{data → src/data}/primitives.js +0 -0
- /package/dist/{data → src/data}/puzzle.d.ts +0 -0
- /package/dist/{data → src/data}/puzzle.js +0 -0
- /package/dist/{data → src/data}/rules/banPatternRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/cellCountPerZoneRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/cellCountRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/completePatternRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/connectAllRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/connectZonesRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/containsShapeRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/customRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/differentCountPerZoneRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/exactCountPerZoneRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/foresightRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/index.d.ts +0 -0
- /package/dist/{data → src/data}/rules/index.js +0 -0
- /package/dist/{data → src/data}/rules/lyingSymbolRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/musicControlLine.d.ts +0 -0
- /package/dist/{data → src/data}/rules/musicGridRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/mysteryRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/offByXRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/perfectionRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/regionAreaRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/regionShapeRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/rule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/rule.js +0 -0
- /package/dist/{data → src/data}/rules/sameCountPerZoneRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/sameShapeRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/symbolsPerRegionRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/undercluedRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/uniqueShapeRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/wrapAroundRule.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/allSerializers.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/allSerializers.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/allCompressors.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/allCompressors.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/checksumCompressor.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/checksumCompressor.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/compressorBase.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/compressorBase.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/deflateCompressor.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/deflateCompressor.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/gzipCompressor.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/gzipCompressor.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/streamCompressor.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/streamCompressor.js +0 -0
- /package/dist/{data → src/data}/serializer/serializerBase.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/serializerBase.js +0 -0
- /package/dist/{data → src/data}/serializer/serializer_checksum.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/serializer_v0.d.ts +0 -0
- /package/dist/{data → src/data}/shapes.d.ts +0 -0
- /package/dist/{data → src/data}/shapes.js +0 -0
- /package/dist/{data → src/data}/solver/allSolvers.d.ts +0 -0
- /package/dist/{data → src/data}/solver/allSolvers.js +0 -0
- /package/dist/{data → src/data}/solver/auto/autoSolver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/backtrackSolver.d.ts +0 -0
- /package/dist/{data/solver/universal/universalWorker.d.ts → src/data/solver/backtrack/backtrackWorker.d.ts} +0 -0
- /package/dist/{data → src/data}/solver/backtrack/data.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/banPattern.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/cellCount.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/connectAll.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/regionArea.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/regionShape.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/sameShape.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/symbolsPerRegion.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/uniqueShape.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/areaNumber.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/dart.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/directionLinker.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/focus.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/galaxy.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/letter.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/lotus.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/minesweeper.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/myopia.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/viewpoint.d.ts +0 -0
- /package/dist/{data → src/data}/solver/cspuz/cspuzSolver.d.ts +0 -0
- /package/dist/{data/validateAsyncWorker.d.ts → src/data/solver/cspuz/cspuzWorker.d.ts} +0 -0
- /package/dist/{data → src/data}/solver/cspuz/cspuzWorker.js +0 -0
- /package/dist/{data → src/data}/solver/cspuz/jsonify.d.ts +0 -0
- /package/dist/{data → src/data}/solver/cspuz/jsonify.js +0 -0
- /package/dist/{data → src/data}/solver/eventIteratingSolver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/solver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/universal/universalSolver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/universal/universalWorker.js +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/areaNumberModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/cellCountModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/connectAllModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/dartModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/index.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/index.js +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/letterModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/modules.gen.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/modules.gen.js +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/myopiaModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/regionAreaModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/viewpointModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/z3Module.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/z3Module.js +0 -0
- /package/dist/{data → src/data}/solver/z3/utils.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/utils.js +0 -0
- /package/dist/{data → src/data}/solver/z3/z3Solver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/z3SolverContext.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/areaNumberSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/customIconSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/customSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/customTextSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/dartSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/directionLinkerSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/focusSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/galaxySymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/hiddenSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/houseSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/index.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/index.js +0 -0
- /package/dist/{data → src/data}/symbols/letterSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/lotusSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/minesweeperSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/myopiaSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/numberSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/symbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/viewpointSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/tile.d.ts +0 -0
- /package/dist/{data → src/data}/tileConnections.d.ts +0 -0
- /package/dist/{data → src/data}/tileConnections.js +0 -0
- /package/dist/{data → src/data}/validate.d.ts +0 -0
- /package/dist/{data → src/data}/validate.js +0 -0
- /package/dist/{data → src/data}/validateAsync.d.ts +0 -0
- /package/dist/{data → src/data}/validateAsyncWorker.js +0 -0
- /package/dist/{polyfill → src/polyfill}/streamPolyfill.d.ts +0 -0
- /package/dist/{polyfill → src/polyfill}/streamPolyfill.js +0 -0
|
@@ -2,10 +2,35 @@ import { ConfigType } from '../config.js';
|
|
|
2
2
|
import GridData from '../grid.js';
|
|
3
3
|
import { State } from '../primitives.js';
|
|
4
4
|
import Rule from './rule.js';
|
|
5
|
-
class CustomRule extends Rule {
|
|
5
|
+
export default class CustomRule extends Rule {
|
|
6
|
+
description;
|
|
7
|
+
grid;
|
|
8
|
+
title = 'Custom Rule';
|
|
6
9
|
get configExplanation() {
|
|
7
10
|
return 'A customizable rule. Your provided solution may override auto-validation.';
|
|
8
11
|
}
|
|
12
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(5, 4));
|
|
13
|
+
static configs = Object.freeze([
|
|
14
|
+
{
|
|
15
|
+
type: ConfigType.String,
|
|
16
|
+
default: 'A *custom* rule',
|
|
17
|
+
field: 'description',
|
|
18
|
+
description: 'Description',
|
|
19
|
+
explanation: 'A short descriptive text. Use *asterisks* to highlight keywords.',
|
|
20
|
+
configurable: true,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: ConfigType.Grid,
|
|
24
|
+
default: CustomRule.EXAMPLE_GRID,
|
|
25
|
+
field: 'grid',
|
|
26
|
+
description: 'Thumbnail Grid',
|
|
27
|
+
explanation: 'An example grid showing the rule.',
|
|
28
|
+
configurable: true,
|
|
29
|
+
},
|
|
30
|
+
]);
|
|
31
|
+
static SEARCH_VARIANTS = [
|
|
32
|
+
new CustomRule('A *custom* rule', CustomRule.EXAMPLE_GRID).searchVariant(),
|
|
33
|
+
];
|
|
9
34
|
/**
|
|
10
35
|
* A custom rule with a description and thumbnail grid.
|
|
11
36
|
*
|
|
@@ -16,24 +41,8 @@ class CustomRule extends Rule {
|
|
|
16
41
|
*/
|
|
17
42
|
constructor(description, grid) {
|
|
18
43
|
super();
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
configurable: true,
|
|
22
|
-
writable: true,
|
|
23
|
-
value: description
|
|
24
|
-
});
|
|
25
|
-
Object.defineProperty(this, "grid", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
configurable: true,
|
|
28
|
-
writable: true,
|
|
29
|
-
value: grid
|
|
30
|
-
});
|
|
31
|
-
Object.defineProperty(this, "title", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
configurable: true,
|
|
34
|
-
writable: true,
|
|
35
|
-
value: 'Custom Rule'
|
|
36
|
-
});
|
|
44
|
+
this.description = description;
|
|
45
|
+
this.grid = grid;
|
|
37
46
|
this.description = description;
|
|
38
47
|
this.grid = grid;
|
|
39
48
|
}
|
|
@@ -62,42 +71,4 @@ class CustomRule extends Rule {
|
|
|
62
71
|
return true;
|
|
63
72
|
}
|
|
64
73
|
}
|
|
65
|
-
Object.defineProperty(CustomRule, "EXAMPLE_GRID", {
|
|
66
|
-
enumerable: true,
|
|
67
|
-
configurable: true,
|
|
68
|
-
writable: true,
|
|
69
|
-
value: Object.freeze(GridData.create(5, 4))
|
|
70
|
-
});
|
|
71
|
-
Object.defineProperty(CustomRule, "configs", {
|
|
72
|
-
enumerable: true,
|
|
73
|
-
configurable: true,
|
|
74
|
-
writable: true,
|
|
75
|
-
value: Object.freeze([
|
|
76
|
-
{
|
|
77
|
-
type: ConfigType.String,
|
|
78
|
-
default: 'A *custom* rule',
|
|
79
|
-
field: 'description',
|
|
80
|
-
description: 'Description',
|
|
81
|
-
explanation: 'A short descriptive text. Use *asterisks* to highlight keywords.',
|
|
82
|
-
configurable: true,
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
type: ConfigType.Grid,
|
|
86
|
-
default: CustomRule.EXAMPLE_GRID,
|
|
87
|
-
field: 'grid',
|
|
88
|
-
description: 'Thumbnail Grid',
|
|
89
|
-
explanation: 'An example grid showing the rule.',
|
|
90
|
-
configurable: true,
|
|
91
|
-
},
|
|
92
|
-
])
|
|
93
|
-
});
|
|
94
|
-
Object.defineProperty(CustomRule, "SEARCH_VARIANTS", {
|
|
95
|
-
enumerable: true,
|
|
96
|
-
configurable: true,
|
|
97
|
-
writable: true,
|
|
98
|
-
value: [
|
|
99
|
-
new CustomRule('A *custom* rule', CustomRule.EXAMPLE_GRID).searchVariant(),
|
|
100
|
-
]
|
|
101
|
-
});
|
|
102
|
-
export default CustomRule;
|
|
103
74
|
export const instance = new CustomRule('', GridData.create([]));
|
|
@@ -3,7 +3,38 @@ import GridData from '../grid.js';
|
|
|
3
3
|
import GridZones from '../gridZones.js';
|
|
4
4
|
import { Color, State } from '../primitives.js';
|
|
5
5
|
import CellCountPerZoneRule from './cellCountPerZoneRule.js';
|
|
6
|
-
class DifferentCountPerZoneRule extends CellCountPerZoneRule {
|
|
6
|
+
export default class DifferentCountPerZoneRule extends CellCountPerZoneRule {
|
|
7
|
+
color;
|
|
8
|
+
title = 'Different Count Per Zone';
|
|
9
|
+
static CONFIGS = Object.freeze([
|
|
10
|
+
{
|
|
11
|
+
type: ConfigType.Color,
|
|
12
|
+
default: Color.Light,
|
|
13
|
+
allowGray: true,
|
|
14
|
+
field: 'color',
|
|
15
|
+
description: 'Color',
|
|
16
|
+
configurable: true,
|
|
17
|
+
},
|
|
18
|
+
]);
|
|
19
|
+
static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['wwbbw', 'wbbwb', 'bbbwb', 'bwbwb'])
|
|
20
|
+
.withZones(new GridZones([
|
|
21
|
+
{ x1: 0, y1: 1, x2: 0, y2: 2 },
|
|
22
|
+
{ x1: 1, y1: 1, x2: 1, y2: 2 },
|
|
23
|
+
{ x1: 2, y1: 1, x2: 2, y2: 2 },
|
|
24
|
+
{ x1: 3, y1: 1, x2: 3, y2: 2 },
|
|
25
|
+
{ x1: 4, y1: 1, x2: 4, y2: 2 },
|
|
26
|
+
{ x1: 1, y1: 0, x2: 2, y2: 0 },
|
|
27
|
+
{ x1: 1, y1: 1, x2: 2, y2: 1 },
|
|
28
|
+
{ x1: 2, y1: 2, x2: 3, y2: 2 },
|
|
29
|
+
{ x1: 2, y1: 3, x2: 3, y2: 3 },
|
|
30
|
+
]))
|
|
31
|
+
.addRule(new DifferentCountPerZoneRule(Color.Light)));
|
|
32
|
+
static EXAMPLE_GRID_DARK = Object.freeze(DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))));
|
|
33
|
+
static EXAMPLE_GRID_GRAY = Object.freeze(DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))));
|
|
34
|
+
static SEARCH_VARIANTS = [
|
|
35
|
+
new DifferentCountPerZoneRule(Color.Light).searchVariant(),
|
|
36
|
+
new DifferentCountPerZoneRule(Color.Dark).searchVariant(),
|
|
37
|
+
];
|
|
7
38
|
/**
|
|
8
39
|
* **Zones of the same size have different numbers of <color> cells.**
|
|
9
40
|
*
|
|
@@ -11,18 +42,7 @@ class DifferentCountPerZoneRule extends CellCountPerZoneRule {
|
|
|
11
42
|
*/
|
|
12
43
|
constructor(color) {
|
|
13
44
|
super(color);
|
|
14
|
-
|
|
15
|
-
enumerable: true,
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true,
|
|
18
|
-
value: color
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(this, "title", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: 'Different Count Per Zone'
|
|
25
|
-
});
|
|
45
|
+
this.color = color;
|
|
26
46
|
}
|
|
27
47
|
get id() {
|
|
28
48
|
return `zone_diff_count`;
|
|
@@ -73,59 +93,4 @@ class DifferentCountPerZoneRule extends CellCountPerZoneRule {
|
|
|
73
93
|
return new DifferentCountPerZoneRule(color ?? this.color);
|
|
74
94
|
}
|
|
75
95
|
}
|
|
76
|
-
Object.defineProperty(DifferentCountPerZoneRule, "CONFIGS", {
|
|
77
|
-
enumerable: true,
|
|
78
|
-
configurable: true,
|
|
79
|
-
writable: true,
|
|
80
|
-
value: Object.freeze([
|
|
81
|
-
{
|
|
82
|
-
type: ConfigType.Color,
|
|
83
|
-
default: Color.Light,
|
|
84
|
-
allowGray: true,
|
|
85
|
-
field: 'color',
|
|
86
|
-
description: 'Color',
|
|
87
|
-
configurable: true,
|
|
88
|
-
},
|
|
89
|
-
])
|
|
90
|
-
});
|
|
91
|
-
Object.defineProperty(DifferentCountPerZoneRule, "EXAMPLE_GRID_LIGHT", {
|
|
92
|
-
enumerable: true,
|
|
93
|
-
configurable: true,
|
|
94
|
-
writable: true,
|
|
95
|
-
value: Object.freeze(GridData.create(['wwbbw', 'wbbwb', 'bbbwb', 'bwbwb'])
|
|
96
|
-
.withZones(new GridZones([
|
|
97
|
-
{ x1: 0, y1: 1, x2: 0, y2: 2 },
|
|
98
|
-
{ x1: 1, y1: 1, x2: 1, y2: 2 },
|
|
99
|
-
{ x1: 2, y1: 1, x2: 2, y2: 2 },
|
|
100
|
-
{ x1: 3, y1: 1, x2: 3, y2: 2 },
|
|
101
|
-
{ x1: 4, y1: 1, x2: 4, y2: 2 },
|
|
102
|
-
{ x1: 1, y1: 0, x2: 2, y2: 0 },
|
|
103
|
-
{ x1: 1, y1: 1, x2: 2, y2: 1 },
|
|
104
|
-
{ x1: 2, y1: 2, x2: 3, y2: 2 },
|
|
105
|
-
{ x1: 2, y1: 3, x2: 3, y2: 3 },
|
|
106
|
-
]))
|
|
107
|
-
.addRule(new DifferentCountPerZoneRule(Color.Light)))
|
|
108
|
-
});
|
|
109
|
-
Object.defineProperty(DifferentCountPerZoneRule, "EXAMPLE_GRID_DARK", {
|
|
110
|
-
enumerable: true,
|
|
111
|
-
configurable: true,
|
|
112
|
-
writable: true,
|
|
113
|
-
value: Object.freeze(DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))))
|
|
114
|
-
});
|
|
115
|
-
Object.defineProperty(DifferentCountPerZoneRule, "EXAMPLE_GRID_GRAY", {
|
|
116
|
-
enumerable: true,
|
|
117
|
-
configurable: true,
|
|
118
|
-
writable: true,
|
|
119
|
-
value: Object.freeze(DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))))
|
|
120
|
-
});
|
|
121
|
-
Object.defineProperty(DifferentCountPerZoneRule, "SEARCH_VARIANTS", {
|
|
122
|
-
enumerable: true,
|
|
123
|
-
configurable: true,
|
|
124
|
-
writable: true,
|
|
125
|
-
value: [
|
|
126
|
-
new DifferentCountPerZoneRule(Color.Light).searchVariant(),
|
|
127
|
-
new DifferentCountPerZoneRule(Color.Dark).searchVariant(),
|
|
128
|
-
]
|
|
129
|
-
});
|
|
130
|
-
export default DifferentCountPerZoneRule;
|
|
131
96
|
export const instance = new DifferentCountPerZoneRule(Color.Light);
|
|
@@ -3,7 +3,47 @@ import GridData from '../grid.js';
|
|
|
3
3
|
import GridZones from '../gridZones.js';
|
|
4
4
|
import { Color, State } from '../primitives.js';
|
|
5
5
|
import CellCountPerZoneRule from './cellCountPerZoneRule.js';
|
|
6
|
-
class ExactCountPerZoneRule extends CellCountPerZoneRule {
|
|
6
|
+
export default class ExactCountPerZoneRule extends CellCountPerZoneRule {
|
|
7
|
+
color;
|
|
8
|
+
count;
|
|
9
|
+
title = 'Exact Count Per Zone';
|
|
10
|
+
static CONFIGS = Object.freeze([
|
|
11
|
+
{
|
|
12
|
+
type: ConfigType.Color,
|
|
13
|
+
default: Color.Light,
|
|
14
|
+
allowGray: true,
|
|
15
|
+
field: 'color',
|
|
16
|
+
description: 'Color',
|
|
17
|
+
configurable: true,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: ConfigType.Number,
|
|
21
|
+
default: 1,
|
|
22
|
+
min: 0,
|
|
23
|
+
field: 'count',
|
|
24
|
+
description: 'Count',
|
|
25
|
+
configurable: true,
|
|
26
|
+
},
|
|
27
|
+
]);
|
|
28
|
+
static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['wbbbb', 'bbbwb', 'bbbwb', 'bwbbb'])
|
|
29
|
+
.withZones(new GridZones([
|
|
30
|
+
{ x1: 0, y1: 1, x2: 0, y2: 2 },
|
|
31
|
+
{ x1: 1, y1: 1, x2: 1, y2: 2 },
|
|
32
|
+
{ x1: 2, y1: 1, x2: 2, y2: 2 },
|
|
33
|
+
{ x1: 3, y1: 1, x2: 3, y2: 2 },
|
|
34
|
+
{ x1: 4, y1: 1, x2: 4, y2: 2 },
|
|
35
|
+
{ x1: 1, y1: 0, x2: 2, y2: 0 },
|
|
36
|
+
{ x1: 1, y1: 1, x2: 2, y2: 1 },
|
|
37
|
+
{ x1: 2, y1: 2, x2: 3, y2: 2 },
|
|
38
|
+
{ x1: 2, y1: 3, x2: 3, y2: 3 },
|
|
39
|
+
]))
|
|
40
|
+
.addRule(new ExactCountPerZoneRule(Color.Light, 1)));
|
|
41
|
+
static EXAMPLE_GRID_DARK = Object.freeze(ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))));
|
|
42
|
+
static EXAMPLE_GRID_GRAY = Object.freeze(ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))));
|
|
43
|
+
static SEARCH_VARIANTS = [
|
|
44
|
+
new ExactCountPerZoneRule(Color.Light, 1).searchVariant(),
|
|
45
|
+
new ExactCountPerZoneRule(Color.Dark, 1).searchVariant(),
|
|
46
|
+
];
|
|
7
47
|
/**
|
|
8
48
|
* **Each zone has <count> <color> cells.**
|
|
9
49
|
*
|
|
@@ -12,24 +52,8 @@ class ExactCountPerZoneRule extends CellCountPerZoneRule {
|
|
|
12
52
|
*/
|
|
13
53
|
constructor(color, count) {
|
|
14
54
|
super(color);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
configurable: true,
|
|
18
|
-
writable: true,
|
|
19
|
-
value: color
|
|
20
|
-
});
|
|
21
|
-
Object.defineProperty(this, "count", {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
configurable: true,
|
|
24
|
-
writable: true,
|
|
25
|
-
value: count
|
|
26
|
-
});
|
|
27
|
-
Object.defineProperty(this, "title", {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
configurable: true,
|
|
30
|
-
writable: true,
|
|
31
|
-
value: 'Exact Count Per Zone'
|
|
32
|
-
});
|
|
55
|
+
this.color = color;
|
|
56
|
+
this.count = count;
|
|
33
57
|
this.count = count;
|
|
34
58
|
}
|
|
35
59
|
get id() {
|
|
@@ -72,67 +96,4 @@ class ExactCountPerZoneRule extends CellCountPerZoneRule {
|
|
|
72
96
|
return new ExactCountPerZoneRule(color ?? this.color, count ?? this.count);
|
|
73
97
|
}
|
|
74
98
|
}
|
|
75
|
-
Object.defineProperty(ExactCountPerZoneRule, "CONFIGS", {
|
|
76
|
-
enumerable: true,
|
|
77
|
-
configurable: true,
|
|
78
|
-
writable: true,
|
|
79
|
-
value: Object.freeze([
|
|
80
|
-
{
|
|
81
|
-
type: ConfigType.Color,
|
|
82
|
-
default: Color.Light,
|
|
83
|
-
allowGray: true,
|
|
84
|
-
field: 'color',
|
|
85
|
-
description: 'Color',
|
|
86
|
-
configurable: true,
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
type: ConfigType.Number,
|
|
90
|
-
default: 1,
|
|
91
|
-
min: 0,
|
|
92
|
-
field: 'count',
|
|
93
|
-
description: 'Count',
|
|
94
|
-
configurable: true,
|
|
95
|
-
},
|
|
96
|
-
])
|
|
97
|
-
});
|
|
98
|
-
Object.defineProperty(ExactCountPerZoneRule, "EXAMPLE_GRID_LIGHT", {
|
|
99
|
-
enumerable: true,
|
|
100
|
-
configurable: true,
|
|
101
|
-
writable: true,
|
|
102
|
-
value: Object.freeze(GridData.create(['wbbbb', 'bbbwb', 'bbbwb', 'bwbbb'])
|
|
103
|
-
.withZones(new GridZones([
|
|
104
|
-
{ x1: 0, y1: 1, x2: 0, y2: 2 },
|
|
105
|
-
{ x1: 1, y1: 1, x2: 1, y2: 2 },
|
|
106
|
-
{ x1: 2, y1: 1, x2: 2, y2: 2 },
|
|
107
|
-
{ x1: 3, y1: 1, x2: 3, y2: 2 },
|
|
108
|
-
{ x1: 4, y1: 1, x2: 4, y2: 2 },
|
|
109
|
-
{ x1: 1, y1: 0, x2: 2, y2: 0 },
|
|
110
|
-
{ x1: 1, y1: 1, x2: 2, y2: 1 },
|
|
111
|
-
{ x1: 2, y1: 2, x2: 3, y2: 2 },
|
|
112
|
-
{ x1: 2, y1: 3, x2: 3, y2: 3 },
|
|
113
|
-
]))
|
|
114
|
-
.addRule(new ExactCountPerZoneRule(Color.Light, 1)))
|
|
115
|
-
});
|
|
116
|
-
Object.defineProperty(ExactCountPerZoneRule, "EXAMPLE_GRID_DARK", {
|
|
117
|
-
enumerable: true,
|
|
118
|
-
configurable: true,
|
|
119
|
-
writable: true,
|
|
120
|
-
value: Object.freeze(ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))))
|
|
121
|
-
});
|
|
122
|
-
Object.defineProperty(ExactCountPerZoneRule, "EXAMPLE_GRID_GRAY", {
|
|
123
|
-
enumerable: true,
|
|
124
|
-
configurable: true,
|
|
125
|
-
writable: true,
|
|
126
|
-
value: Object.freeze(ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))))
|
|
127
|
-
});
|
|
128
|
-
Object.defineProperty(ExactCountPerZoneRule, "SEARCH_VARIANTS", {
|
|
129
|
-
enumerable: true,
|
|
130
|
-
configurable: true,
|
|
131
|
-
writable: true,
|
|
132
|
-
value: [
|
|
133
|
-
new ExactCountPerZoneRule(Color.Light, 1).searchVariant(),
|
|
134
|
-
new ExactCountPerZoneRule(Color.Dark, 1).searchVariant(),
|
|
135
|
-
]
|
|
136
|
-
});
|
|
137
|
-
export default ExactCountPerZoneRule;
|
|
138
99
|
export const instance = new ExactCountPerZoneRule(Color.Light, 1);
|
|
@@ -3,45 +3,64 @@ import GridData from '../grid.js';
|
|
|
3
3
|
import { State, Mode } from '../primitives.js';
|
|
4
4
|
import CustomIconSymbol from '../symbols/customIconSymbol.js';
|
|
5
5
|
import Rule from './rule.js';
|
|
6
|
-
class ForesightRule extends Rule {
|
|
6
|
+
export default class ForesightRule extends Rule {
|
|
7
|
+
count;
|
|
8
|
+
regenInterval;
|
|
9
|
+
startFull;
|
|
10
|
+
solvePath;
|
|
11
|
+
title = 'Foresight';
|
|
7
12
|
get configExplanation() {
|
|
8
13
|
return 'Provide automatic hints to the player.';
|
|
9
14
|
}
|
|
15
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['.']).addSymbol(new CustomIconSymbol('', GridData.create([]), 0, 0, 'MdRemoveRedEye')));
|
|
16
|
+
static CONFIGS = Object.freeze([
|
|
17
|
+
{
|
|
18
|
+
type: ConfigType.Number,
|
|
19
|
+
default: 5,
|
|
20
|
+
min: 1,
|
|
21
|
+
field: 'count',
|
|
22
|
+
description: 'Foresight count',
|
|
23
|
+
explanation: 'Maximum number of foresight charges that can be stored.',
|
|
24
|
+
configurable: true,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: ConfigType.Number,
|
|
28
|
+
default: 30,
|
|
29
|
+
min: 1,
|
|
30
|
+
field: 'regenInterval',
|
|
31
|
+
description: 'Regen Interval (seconds)',
|
|
32
|
+
explanation: 'Time taken for one foresight charge to regenerate.',
|
|
33
|
+
configurable: true,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: ConfigType.Boolean,
|
|
37
|
+
default: false,
|
|
38
|
+
field: 'startFull',
|
|
39
|
+
description: 'Start with full foresight',
|
|
40
|
+
explanation: 'Whether to start with all foresight charges available.',
|
|
41
|
+
configurable: true,
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: ConfigType.SolvePath,
|
|
45
|
+
default: [],
|
|
46
|
+
field: 'solvePath',
|
|
47
|
+
description: 'Intended solve path',
|
|
48
|
+
explanation: 'A logical solve path of the puzzle. Foresight will hint at the location of the next tile if this is available.',
|
|
49
|
+
configurable: true,
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
static SEARCH_VARIANTS = [
|
|
53
|
+
new ForesightRule(5, 30, false).searchVariant(),
|
|
54
|
+
];
|
|
10
55
|
/**
|
|
11
56
|
* **Foresight: Show hints**
|
|
12
57
|
*/
|
|
13
58
|
constructor(count, regenInterval, startFull, solvePath = []) {
|
|
14
59
|
super();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
value: count
|
|
20
|
-
});
|
|
21
|
-
Object.defineProperty(this, "regenInterval", {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
configurable: true,
|
|
24
|
-
writable: true,
|
|
25
|
-
value: regenInterval
|
|
26
|
-
});
|
|
27
|
-
Object.defineProperty(this, "startFull", {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
configurable: true,
|
|
30
|
-
writable: true,
|
|
31
|
-
value: startFull
|
|
32
|
-
});
|
|
33
|
-
Object.defineProperty(this, "solvePath", {
|
|
34
|
-
enumerable: true,
|
|
35
|
-
configurable: true,
|
|
36
|
-
writable: true,
|
|
37
|
-
value: solvePath
|
|
38
|
-
});
|
|
39
|
-
Object.defineProperty(this, "title", {
|
|
40
|
-
enumerable: true,
|
|
41
|
-
configurable: true,
|
|
42
|
-
writable: true,
|
|
43
|
-
value: 'Foresight'
|
|
44
|
-
});
|
|
60
|
+
this.count = count;
|
|
61
|
+
this.regenInterval = regenInterval;
|
|
62
|
+
this.startFull = startFull;
|
|
63
|
+
this.solvePath = solvePath;
|
|
45
64
|
this.count = count;
|
|
46
65
|
this.regenInterval = regenInterval;
|
|
47
66
|
this.startFull = startFull;
|
|
@@ -85,60 +104,4 @@ class ForesightRule extends Rule {
|
|
|
85
104
|
return new ForesightRule(count ?? this.count, regenInterval ?? this.regenInterval, startFull ?? this.startFull, solvePath ?? this.solvePath);
|
|
86
105
|
}
|
|
87
106
|
}
|
|
88
|
-
Object.defineProperty(ForesightRule, "EXAMPLE_GRID", {
|
|
89
|
-
enumerable: true,
|
|
90
|
-
configurable: true,
|
|
91
|
-
writable: true,
|
|
92
|
-
value: Object.freeze(GridData.create(['.']).addSymbol(new CustomIconSymbol('', GridData.create([]), 0, 0, 'MdRemoveRedEye')))
|
|
93
|
-
});
|
|
94
|
-
Object.defineProperty(ForesightRule, "CONFIGS", {
|
|
95
|
-
enumerable: true,
|
|
96
|
-
configurable: true,
|
|
97
|
-
writable: true,
|
|
98
|
-
value: Object.freeze([
|
|
99
|
-
{
|
|
100
|
-
type: ConfigType.Number,
|
|
101
|
-
default: 5,
|
|
102
|
-
min: 1,
|
|
103
|
-
field: 'count',
|
|
104
|
-
description: 'Foresight count',
|
|
105
|
-
explanation: 'Maximum number of foresight charges that can be stored.',
|
|
106
|
-
configurable: true,
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
type: ConfigType.Number,
|
|
110
|
-
default: 30,
|
|
111
|
-
min: 1,
|
|
112
|
-
field: 'regenInterval',
|
|
113
|
-
description: 'Regen Interval (seconds)',
|
|
114
|
-
explanation: 'Time taken for one foresight charge to regenerate.',
|
|
115
|
-
configurable: true,
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
type: ConfigType.Boolean,
|
|
119
|
-
default: false,
|
|
120
|
-
field: 'startFull',
|
|
121
|
-
description: 'Start with full foresight',
|
|
122
|
-
explanation: 'Whether to start with all foresight charges available.',
|
|
123
|
-
configurable: true,
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
type: ConfigType.SolvePath,
|
|
127
|
-
default: [],
|
|
128
|
-
field: 'solvePath',
|
|
129
|
-
description: 'Intended solve path',
|
|
130
|
-
explanation: 'A logical solve path of the puzzle. Foresight will hint at the location of the next tile if this is available.',
|
|
131
|
-
configurable: true,
|
|
132
|
-
},
|
|
133
|
-
])
|
|
134
|
-
});
|
|
135
|
-
Object.defineProperty(ForesightRule, "SEARCH_VARIANTS", {
|
|
136
|
-
enumerable: true,
|
|
137
|
-
configurable: true,
|
|
138
|
-
writable: true,
|
|
139
|
-
value: [
|
|
140
|
-
new ForesightRule(5, 30, false).searchVariant(),
|
|
141
|
-
]
|
|
142
|
-
});
|
|
143
|
-
export default ForesightRule;
|
|
144
107
|
export const instance = new ForesightRule(5, 30, false);
|
|
@@ -9,26 +9,13 @@ import GalaxySymbol from '../symbols/galaxySymbol.js';
|
|
|
9
9
|
import LotusSymbol from '../symbols/lotusSymbol.js';
|
|
10
10
|
import AreaNumberSymbol from '../symbols/areaNumberSymbol.js';
|
|
11
11
|
class IgnoredSymbol extends Symbol {
|
|
12
|
+
symbol;
|
|
13
|
+
state;
|
|
14
|
+
title = 'Ignored Symbol';
|
|
12
15
|
constructor(symbol, state) {
|
|
13
16
|
super(symbol.x, symbol.y);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true,
|
|
18
|
-
value: symbol
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(this, "state", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: state
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "title", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: 'Ignored Symbol'
|
|
31
|
-
});
|
|
17
|
+
this.symbol = symbol;
|
|
18
|
+
this.state = state;
|
|
32
19
|
this.symbol = symbol;
|
|
33
20
|
this.state = state;
|
|
34
21
|
}
|
|
@@ -67,26 +54,13 @@ class IgnoredSymbol extends Symbol {
|
|
|
67
54
|
}
|
|
68
55
|
}
|
|
69
56
|
class IgnoredRule extends Rule {
|
|
57
|
+
rule;
|
|
58
|
+
state;
|
|
59
|
+
title = 'Ignored Rule';
|
|
70
60
|
constructor(rule, state) {
|
|
71
61
|
super();
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
configurable: true,
|
|
75
|
-
writable: true,
|
|
76
|
-
value: rule
|
|
77
|
-
});
|
|
78
|
-
Object.defineProperty(this, "state", {
|
|
79
|
-
enumerable: true,
|
|
80
|
-
configurable: true,
|
|
81
|
-
writable: true,
|
|
82
|
-
value: state
|
|
83
|
-
});
|
|
84
|
-
Object.defineProperty(this, "title", {
|
|
85
|
-
enumerable: true,
|
|
86
|
-
configurable: true,
|
|
87
|
-
writable: true,
|
|
88
|
-
value: 'Ignored Rule'
|
|
89
|
-
});
|
|
62
|
+
this.rule = rule;
|
|
63
|
+
this.state = state;
|
|
90
64
|
this.rule = rule;
|
|
91
65
|
this.state = state;
|
|
92
66
|
}
|
|
@@ -127,7 +101,32 @@ class IgnoredRule extends Rule {
|
|
|
127
101
|
return other === this;
|
|
128
102
|
}
|
|
129
103
|
}
|
|
130
|
-
class LyingSymbolRule extends Rule {
|
|
104
|
+
export default class LyingSymbolRule extends Rule {
|
|
105
|
+
count;
|
|
106
|
+
title = 'Lying Symbols';
|
|
107
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['bbbbw', 'wwbbb', 'bbbbw', 'wbbww']).withSymbols([
|
|
108
|
+
new LetterSymbol(4, 0, 'A'),
|
|
109
|
+
new GalaxySymbol(1, 1),
|
|
110
|
+
new LotusSymbol(2, 2, Orientation.Up),
|
|
111
|
+
new LetterSymbol(0, 3, 'A'),
|
|
112
|
+
new AreaNumberSymbol(4, 3, 1),
|
|
113
|
+
]));
|
|
114
|
+
static CONFIGS = Object.freeze([
|
|
115
|
+
{
|
|
116
|
+
type: ConfigType.Number,
|
|
117
|
+
default: 1,
|
|
118
|
+
min: 1,
|
|
119
|
+
max: 100,
|
|
120
|
+
step: 1,
|
|
121
|
+
field: 'count',
|
|
122
|
+
description: 'Number of liars',
|
|
123
|
+
explanation: 'Number of symbols that are not satisfied in the final solution.',
|
|
124
|
+
configurable: true,
|
|
125
|
+
},
|
|
126
|
+
]);
|
|
127
|
+
static SEARCH_VARIANTS = [
|
|
128
|
+
new LyingSymbolRule(1).searchVariant(),
|
|
129
|
+
];
|
|
131
130
|
/**
|
|
132
131
|
* **<count> symbols are lying and are incorrect**
|
|
133
132
|
*
|
|
@@ -135,18 +134,7 @@ class LyingSymbolRule extends Rule {
|
|
|
135
134
|
*/
|
|
136
135
|
constructor(count) {
|
|
137
136
|
super();
|
|
138
|
-
|
|
139
|
-
enumerable: true,
|
|
140
|
-
configurable: true,
|
|
141
|
-
writable: true,
|
|
142
|
-
value: count
|
|
143
|
-
});
|
|
144
|
-
Object.defineProperty(this, "title", {
|
|
145
|
-
enumerable: true,
|
|
146
|
-
configurable: true,
|
|
147
|
-
writable: true,
|
|
148
|
-
value: 'Lying Symbols'
|
|
149
|
-
});
|
|
137
|
+
this.count = count;
|
|
150
138
|
this.count = count;
|
|
151
139
|
}
|
|
152
140
|
get id() {
|
|
@@ -216,43 +204,4 @@ class LyingSymbolRule extends Rule {
|
|
|
216
204
|
return this.copyWith({ count });
|
|
217
205
|
}
|
|
218
206
|
}
|
|
219
|
-
Object.defineProperty(LyingSymbolRule, "EXAMPLE_GRID", {
|
|
220
|
-
enumerable: true,
|
|
221
|
-
configurable: true,
|
|
222
|
-
writable: true,
|
|
223
|
-
value: Object.freeze(GridData.create(['bbbbw', 'wwbbb', 'bbbbw', 'wbbww']).withSymbols([
|
|
224
|
-
new LetterSymbol(4, 0, 'A'),
|
|
225
|
-
new GalaxySymbol(1, 1),
|
|
226
|
-
new LotusSymbol(2, 2, Orientation.Up),
|
|
227
|
-
new LetterSymbol(0, 3, 'A'),
|
|
228
|
-
new AreaNumberSymbol(4, 3, 1),
|
|
229
|
-
]))
|
|
230
|
-
});
|
|
231
|
-
Object.defineProperty(LyingSymbolRule, "CONFIGS", {
|
|
232
|
-
enumerable: true,
|
|
233
|
-
configurable: true,
|
|
234
|
-
writable: true,
|
|
235
|
-
value: Object.freeze([
|
|
236
|
-
{
|
|
237
|
-
type: ConfigType.Number,
|
|
238
|
-
default: 1,
|
|
239
|
-
min: 1,
|
|
240
|
-
max: 100,
|
|
241
|
-
step: 1,
|
|
242
|
-
field: 'count',
|
|
243
|
-
description: 'Number of liars',
|
|
244
|
-
explanation: 'Number of symbols that are not satisfied in the final solution.',
|
|
245
|
-
configurable: true,
|
|
246
|
-
},
|
|
247
|
-
])
|
|
248
|
-
});
|
|
249
|
-
Object.defineProperty(LyingSymbolRule, "SEARCH_VARIANTS", {
|
|
250
|
-
enumerable: true,
|
|
251
|
-
configurable: true,
|
|
252
|
-
writable: true,
|
|
253
|
-
value: [
|
|
254
|
-
new LyingSymbolRule(1).searchVariant(),
|
|
255
|
-
]
|
|
256
|
-
});
|
|
257
|
-
export default LyingSymbolRule;
|
|
258
207
|
export const instance = new LyingSymbolRule(1);
|