@logic-pad/core 0.26.1 → 0.26.2
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/README.md +31 -31
- package/assets/logic-core.global.d.ts +3264 -3262
- package/package.json +4 -1
- package/dist/benchmark/helper.d.ts +0 -21
- package/dist/benchmark/helper.js +0 -34
- package/dist/benchmark/prepareBench.d.ts +0 -1
- package/dist/benchmark/prepareBench.js +0 -140
- package/dist/benchmark/runBench.d.ts +0 -1
- package/dist/benchmark/runBench.js +0 -206
- package/dist/src/data/config.d.ts +0 -119
- package/dist/src/data/config.js +0 -72
- package/dist/src/data/configurable.d.ts +0 -14
- package/dist/src/data/configurable.js +0 -26
- package/dist/src/data/dataHelper.d.ts +0 -92
- package/dist/src/data/dataHelper.js +0 -217
- package/dist/src/data/events/eventHelper.d.ts +0 -1
- package/dist/src/data/events/eventHelper.js +0 -6
- package/dist/src/data/events/onFinalValidation.d.ts +0 -14
- package/dist/src/data/events/onFinalValidation.js +0 -4
- package/dist/src/data/events/onGetTile.d.ts +0 -7
- package/dist/src/data/events/onGetTile.js +0 -4
- package/dist/src/data/events/onGridChange.d.ts +0 -6
- package/dist/src/data/events/onGridChange.js +0 -4
- package/dist/src/data/events/onGridResize.d.ts +0 -9
- package/dist/src/data/events/onGridResize.js +0 -4
- package/dist/src/data/events/onSetGrid.d.ts +0 -7
- package/dist/src/data/events/onSetGrid.js +0 -19
- package/dist/src/data/events/onSymbolDisplay.d.ts +0 -16
- package/dist/src/data/events/onSymbolDisplay.js +0 -4
- package/dist/src/data/events/onSymbolMerge.d.ts +0 -10
- package/dist/src/data/events/onSymbolMerge.js +0 -4
- package/dist/src/data/events/onSymbolValidation.d.ts +0 -18
- package/dist/src/data/events/onSymbolValidation.js +0 -4
- package/dist/src/data/grid.d.ts +0 -410
- package/dist/src/data/grid.js +0 -1106
- package/dist/src/data/gridConnections.d.ts +0 -25
- package/dist/src/data/gridConnections.js +0 -309
- package/dist/src/data/gridZones.d.ts +0 -26
- package/dist/src/data/gridZones.js +0 -117
- package/dist/src/data/instruction.d.ts +0 -26
- package/dist/src/data/instruction.js +0 -29
- package/dist/src/data/primitives.d.ts +0 -138
- package/dist/src/data/primitives.js +0 -177
- package/dist/src/data/puzzle.d.ts +0 -73
- package/dist/src/data/puzzle.js +0 -105
- package/dist/src/data/rules/banPatternRule.d.ts +0 -30
- package/dist/src/data/rules/banPatternRule.js +0 -125
- package/dist/src/data/rules/cellCountPerZoneRule.d.ts +0 -23
- package/dist/src/data/rules/cellCountPerZoneRule.js +0 -39
- package/dist/src/data/rules/cellCountRule.d.ts +0 -33
- package/dist/src/data/rules/cellCountRule.js +0 -138
- package/dist/src/data/rules/completePatternRule.d.ts +0 -24
- package/dist/src/data/rules/completePatternRule.js +0 -46
- package/dist/src/data/rules/connectAllRule.d.ts +0 -29
- package/dist/src/data/rules/connectAllRule.js +0 -88
- package/dist/src/data/rules/connectZonesRule.d.ts +0 -29
- package/dist/src/data/rules/connectZonesRule.js +0 -111
- package/dist/src/data/rules/containsShapeRule.d.ts +0 -34
- package/dist/src/data/rules/containsShapeRule.js +0 -125
- package/dist/src/data/rules/customRule.d.ts +0 -34
- package/dist/src/data/rules/customRule.js +0 -74
- package/dist/src/data/rules/differentCountPerZoneRule.d.ts +0 -30
- package/dist/src/data/rules/differentCountPerZoneRule.js +0 -96
- package/dist/src/data/rules/exactCountPerZoneRule.d.ts +0 -33
- package/dist/src/data/rules/exactCountPerZoneRule.js +0 -99
- package/dist/src/data/rules/foresightRule.d.ts +0 -36
- package/dist/src/data/rules/foresightRule.js +0 -107
- package/dist/src/data/rules/index.d.ts +0 -3
- package/dist/src/data/rules/index.js +0 -10
- package/dist/src/data/rules/lyingSymbolRule.d.ts +0 -31
- package/dist/src/data/rules/lyingSymbolRule.js +0 -207
- package/dist/src/data/rules/musicControlLine.d.ts +0 -82
- package/dist/src/data/rules/musicControlLine.js +0 -167
- package/dist/src/data/rules/musicGridRule.d.ts +0 -51
- package/dist/src/data/rules/musicGridRule.js +0 -212
- package/dist/src/data/rules/mysteryRule.d.ts +0 -39
- package/dist/src/data/rules/mysteryRule.js +0 -146
- package/dist/src/data/rules/noLoopsRule.d.ts +0 -29
- package/dist/src/data/rules/noLoopsRule.js +0 -218
- package/dist/src/data/rules/offByXRule.d.ts +0 -32
- package/dist/src/data/rules/offByXRule.js +0 -124
- package/dist/src/data/rules/perfectionRule.d.ts +0 -45
- package/dist/src/data/rules/perfectionRule.js +0 -158
- package/dist/src/data/rules/regionAreaRule.d.ts +0 -34
- package/dist/src/data/rules/regionAreaRule.js +0 -149
- package/dist/src/data/rules/regionShapeRule.d.ts +0 -22
- package/dist/src/data/rules/regionShapeRule.js +0 -58
- package/dist/src/data/rules/rule.d.ts +0 -18
- package/dist/src/data/rules/rule.js +0 -19
- package/dist/src/data/rules/rules.gen.d.ts +0 -23
- package/dist/src/data/rules/rules.gen.js +0 -27
- package/dist/src/data/rules/sameCountPerZoneRule.d.ts +0 -30
- package/dist/src/data/rules/sameCountPerZoneRule.js +0 -95
- package/dist/src/data/rules/sameShapeRule.d.ts +0 -28
- package/dist/src/data/rules/sameShapeRule.js +0 -68
- package/dist/src/data/rules/symbolsPerRegionRule.d.ts +0 -38
- package/dist/src/data/rules/symbolsPerRegionRule.js +0 -181
- package/dist/src/data/rules/undercluedRule.d.ts +0 -24
- package/dist/src/data/rules/undercluedRule.js +0 -53
- package/dist/src/data/rules/uniqueShapeRule.d.ts +0 -28
- package/dist/src/data/rules/uniqueShapeRule.js +0 -65
- package/dist/src/data/rules/wrapAroundRule.d.ts +0 -36
- package/dist/src/data/rules/wrapAroundRule.js +0 -241
- package/dist/src/data/serializer/allSerializers.d.ts +0 -32
- package/dist/src/data/serializer/allSerializers.js +0 -71
- package/dist/src/data/serializer/compressor/allCompressors.d.ts +0 -14
- package/dist/src/data/serializer/compressor/allCompressors.js +0 -43
- package/dist/src/data/serializer/compressor/checksumCompressor.d.ts +0 -6
- package/dist/src/data/serializer/compressor/checksumCompressor.js +0 -21
- package/dist/src/data/serializer/compressor/compressorBase.d.ts +0 -16
- package/dist/src/data/serializer/compressor/compressorBase.js +0 -2
- package/dist/src/data/serializer/compressor/deflateCompressor.d.ts +0 -7
- package/dist/src/data/serializer/compressor/deflateCompressor.js +0 -17
- package/dist/src/data/serializer/compressor/gzipCompressor.d.ts +0 -5
- package/dist/src/data/serializer/compressor/gzipCompressor.js +0 -9
- package/dist/src/data/serializer/compressor/streamCompressor.d.ts +0 -6
- package/dist/src/data/serializer/compressor/streamCompressor.js +0 -41
- package/dist/src/data/serializer/serializerBase.d.ts +0 -32
- package/dist/src/data/serializer/serializerBase.js +0 -2
- package/dist/src/data/serializer/serializer_checksum.d.ts +0 -35
- package/dist/src/data/serializer/serializer_checksum.js +0 -179
- package/dist/src/data/serializer/serializer_v0.d.ts +0 -55
- package/dist/src/data/serializer/serializer_v0.js +0 -484
- package/dist/src/data/shapes.d.ts +0 -19
- package/dist/src/data/shapes.js +0 -137
- package/dist/src/data/solver/allSolvers.d.ts +0 -3
- package/dist/src/data/solver/allSolvers.js +0 -13
- package/dist/src/data/solver/auto/autoSolver.d.ts +0 -18
- package/dist/src/data/solver/auto/autoSolver.js +0 -156
- package/dist/src/data/solver/backtrack/backtrackSolver.d.ts +0 -11
- package/dist/src/data/solver/backtrack/backtrackSolver.js +0 -54
- package/dist/src/data/solver/backtrack/backtrackWorker.d.ts +0 -1
- package/dist/src/data/solver/backtrack/backtrackWorker.js +0 -312
- package/dist/src/data/solver/backtrack/data.d.ts +0 -47
- package/dist/src/data/solver/backtrack/data.js +0 -151
- package/dist/src/data/solver/backtrack/rules/banPattern.d.ts +0 -9
- package/dist/src/data/solver/backtrack/rules/banPattern.js +0 -77
- package/dist/src/data/solver/backtrack/rules/cellCount.d.ts +0 -7
- package/dist/src/data/solver/backtrack/rules/cellCount.js +0 -25
- package/dist/src/data/solver/backtrack/rules/connectAll.d.ts +0 -7
- package/dist/src/data/solver/backtrack/rules/connectAll.js +0 -44
- package/dist/src/data/solver/backtrack/rules/regionArea.d.ts +0 -8
- package/dist/src/data/solver/backtrack/rules/regionArea.js +0 -71
- package/dist/src/data/solver/backtrack/rules/regionShape.d.ts +0 -8
- package/dist/src/data/solver/backtrack/rules/regionShape.js +0 -57
- package/dist/src/data/solver/backtrack/rules/sameShape.d.ts +0 -8
- package/dist/src/data/solver/backtrack/rules/sameShape.js +0 -14
- package/dist/src/data/solver/backtrack/rules/symbolsPerRegion.d.ts +0 -10
- package/dist/src/data/solver/backtrack/rules/symbolsPerRegion.js +0 -82
- package/dist/src/data/solver/backtrack/rules/uniqueShape.d.ts +0 -8
- package/dist/src/data/solver/backtrack/rules/uniqueShape.js +0 -14
- package/dist/src/data/solver/backtrack/symbols/areaNumber.d.ts +0 -9
- package/dist/src/data/solver/backtrack/symbols/areaNumber.js +0 -75
- package/dist/src/data/solver/backtrack/symbols/dart.d.ts +0 -8
- package/dist/src/data/solver/backtrack/symbols/dart.js +0 -45
- package/dist/src/data/solver/backtrack/symbols/directionLinker.d.ts +0 -11
- package/dist/src/data/solver/backtrack/symbols/directionLinker.js +0 -121
- package/dist/src/data/solver/backtrack/symbols/focus.d.ts +0 -9
- package/dist/src/data/solver/backtrack/symbols/focus.js +0 -48
- package/dist/src/data/solver/backtrack/symbols/galaxy.d.ts +0 -9
- package/dist/src/data/solver/backtrack/symbols/galaxy.js +0 -14
- package/dist/src/data/solver/backtrack/symbols/letter.d.ts +0 -9
- package/dist/src/data/solver/backtrack/symbols/letter.js +0 -95
- package/dist/src/data/solver/backtrack/symbols/lotus.d.ts +0 -11
- package/dist/src/data/solver/backtrack/symbols/lotus.js +0 -55
- package/dist/src/data/solver/backtrack/symbols/minesweeper.d.ts +0 -9
- package/dist/src/data/solver/backtrack/symbols/minesweeper.js +0 -44
- package/dist/src/data/solver/backtrack/symbols/myopia.d.ts +0 -7
- package/dist/src/data/solver/backtrack/symbols/myopia.js +0 -73
- package/dist/src/data/solver/backtrack/symbols/viewpoint.d.ts +0 -7
- package/dist/src/data/solver/backtrack/symbols/viewpoint.js +0 -51
- package/dist/src/data/solver/cspuz/cspuzSolver.d.ts +0 -13
- package/dist/src/data/solver/cspuz/cspuzSolver.js +0 -124
- package/dist/src/data/solver/cspuz/cspuzWorker.d.ts +0 -1
- package/dist/src/data/solver/cspuz/cspuzWorker.js +0 -82
- package/dist/src/data/solver/cspuz/jsonify.d.ts +0 -3
- package/dist/src/data/solver/cspuz/jsonify.js +0 -215
- package/dist/src/data/solver/eventIteratingSolver.d.ts +0 -8
- package/dist/src/data/solver/eventIteratingSolver.js +0 -54
- package/dist/src/data/solver/solver.d.ts +0 -77
- package/dist/src/data/solver/solver.js +0 -59
- package/dist/src/data/solver/universal/universalSolver.d.ts +0 -7
- package/dist/src/data/solver/universal/universalSolver.js +0 -13
- package/dist/src/data/solver/universal/universalWorker.d.ts +0 -1
- package/dist/src/data/solver/universal/universalWorker.js +0 -128
- package/dist/src/data/symbols/areaNumberSymbol.d.ts +0 -31
- package/dist/src/data/symbols/areaNumberSymbol.js +0 -80
- package/dist/src/data/symbols/customIconSymbol.d.ts +0 -35
- package/dist/src/data/symbols/customIconSymbol.js +0 -94
- package/dist/src/data/symbols/customSymbol.d.ts +0 -25
- package/dist/src/data/symbols/customSymbol.js +0 -45
- package/dist/src/data/symbols/customTextSymbol.d.ts +0 -35
- package/dist/src/data/symbols/customTextSymbol.js +0 -95
- package/dist/src/data/symbols/dartSymbol.d.ts +0 -36
- package/dist/src/data/symbols/dartSymbol.js +0 -96
- package/dist/src/data/symbols/directionLinkerSymbol.d.ts +0 -29
- package/dist/src/data/symbols/directionLinkerSymbol.js +0 -232
- package/dist/src/data/symbols/everyLetterSymbol.d.ts +0 -32
- package/dist/src/data/symbols/everyLetterSymbol.js +0 -119
- package/dist/src/data/symbols/focusSymbol.d.ts +0 -40
- package/dist/src/data/symbols/focusSymbol.js +0 -159
- package/dist/src/data/symbols/galaxySymbol.d.ts +0 -27
- package/dist/src/data/symbols/galaxySymbol.js +0 -61
- package/dist/src/data/symbols/hiddenSymbol.d.ts +0 -38
- package/dist/src/data/symbols/hiddenSymbol.js +0 -113
- package/dist/src/data/symbols/houseSymbol.d.ts +0 -33
- package/dist/src/data/symbols/houseSymbol.js +0 -104
- package/dist/src/data/symbols/index.d.ts +0 -3
- package/dist/src/data/symbols/index.js +0 -10
- package/dist/src/data/symbols/letterSymbol.d.ts +0 -32
- package/dist/src/data/symbols/letterSymbol.js +0 -118
- package/dist/src/data/symbols/lotusSymbol.d.ts +0 -30
- package/dist/src/data/symbols/lotusSymbol.js +0 -132
- package/dist/src/data/symbols/minesweeperSymbol.d.ts +0 -33
- package/dist/src/data/symbols/minesweeperSymbol.js +0 -106
- package/dist/src/data/symbols/myopiaSymbol.d.ts +0 -37
- package/dist/src/data/symbols/myopiaSymbol.js +0 -182
- package/dist/src/data/symbols/numberSymbol.d.ts +0 -19
- package/dist/src/data/symbols/numberSymbol.js +0 -32
- package/dist/src/data/symbols/symbol.d.ts +0 -29
- package/dist/src/data/symbols/symbol.js +0 -87
- package/dist/src/data/symbols/symbols.gen.d.ts +0 -15
- package/dist/src/data/symbols/symbols.gen.js +0 -19
- package/dist/src/data/symbols/unsupportedSymbol.d.ts +0 -23
- package/dist/src/data/symbols/unsupportedSymbol.js +0 -47
- package/dist/src/data/symbols/viewpointSymbol.d.ts +0 -32
- package/dist/src/data/symbols/viewpointSymbol.js +0 -95
- package/dist/src/data/tile.d.ts +0 -26
- package/dist/src/data/tile.js +0 -56
- package/dist/src/data/tileConnections.d.ts +0 -25
- package/dist/src/data/tileConnections.js +0 -74
- package/dist/src/data/validate.d.ts +0 -5
- package/dist/src/data/validate.js +0 -131
- package/dist/src/data/validateAsync.d.ts +0 -15
- package/dist/src/data/validateAsync.js +0 -71
- package/dist/src/data/validateAsyncWorker.d.ts +0 -1
- package/dist/src/data/validateAsyncWorker.js +0 -9
- package/dist/src/index.d.ts +0 -109
- package/dist/src/index.js +0 -112
- package/dist/src/polyfill/streamPolyfill.d.ts +0 -2
- package/dist/src/polyfill/streamPolyfill.js +0 -1
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ConfigType } from '../config.js';
|
|
2
|
-
import GridData from '../grid.js';
|
|
3
|
-
import { State } from '../primitives.js';
|
|
4
|
-
import Rule from './rule.js';
|
|
5
|
-
export default class CustomRule extends Rule {
|
|
6
|
-
description;
|
|
7
|
-
grid;
|
|
8
|
-
title = 'Custom Rule';
|
|
9
|
-
get configExplanation() {
|
|
10
|
-
return 'A customizable rule. Your provided solution may override auto-validation.';
|
|
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
|
-
];
|
|
34
|
-
/**
|
|
35
|
-
* A custom rule with a description and thumbnail grid.
|
|
36
|
-
*
|
|
37
|
-
* This rule validates answers based on the provided solution.
|
|
38
|
-
*
|
|
39
|
-
* @param description - The description of the rule.
|
|
40
|
-
* @param grid - The thumbnail grid of the rule, preferably 5x4 in size.
|
|
41
|
-
*/
|
|
42
|
-
constructor(description, grid) {
|
|
43
|
-
super();
|
|
44
|
-
this.description = description;
|
|
45
|
-
this.grid = grid;
|
|
46
|
-
this.description = description;
|
|
47
|
-
this.grid = grid;
|
|
48
|
-
}
|
|
49
|
-
get id() {
|
|
50
|
-
return `custom`;
|
|
51
|
-
}
|
|
52
|
-
get explanation() {
|
|
53
|
-
return this.description;
|
|
54
|
-
}
|
|
55
|
-
get configs() {
|
|
56
|
-
return CustomRule.configs;
|
|
57
|
-
}
|
|
58
|
-
createExampleGrid() {
|
|
59
|
-
return this.grid;
|
|
60
|
-
}
|
|
61
|
-
get searchVariants() {
|
|
62
|
-
return CustomRule.SEARCH_VARIANTS;
|
|
63
|
-
}
|
|
64
|
-
validateGrid(_grid) {
|
|
65
|
-
return { state: State.Incomplete };
|
|
66
|
-
}
|
|
67
|
-
copyWith({ description, grid, }) {
|
|
68
|
-
return new CustomRule(description ?? this.description, grid ?? this.grid);
|
|
69
|
-
}
|
|
70
|
-
get validateWithSolution() {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
export const instance = new CustomRule('', GridData.create([]));
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { AnyConfig } from '../config.js';
|
|
2
|
-
import GridData from '../grid.js';
|
|
3
|
-
import { Color, RuleState } from '../primitives.js';
|
|
4
|
-
import CellCountPerZoneRule from './cellCountPerZoneRule.js';
|
|
5
|
-
import { SearchVariant } from './rule.js';
|
|
6
|
-
export default class DifferentCountPerZoneRule extends CellCountPerZoneRule {
|
|
7
|
-
readonly color: Color;
|
|
8
|
-
readonly title = "Different Count Per Zone";
|
|
9
|
-
private static readonly CONFIGS;
|
|
10
|
-
private static readonly EXAMPLE_GRID_LIGHT;
|
|
11
|
-
private static readonly EXAMPLE_GRID_DARK;
|
|
12
|
-
private static readonly EXAMPLE_GRID_GRAY;
|
|
13
|
-
private static readonly SEARCH_VARIANTS;
|
|
14
|
-
/**
|
|
15
|
-
* **Zones of the same size have different numbers of <color> cells.**
|
|
16
|
-
*
|
|
17
|
-
* @param color - The color of the cells to count.
|
|
18
|
-
*/
|
|
19
|
-
constructor(color: Color);
|
|
20
|
-
get id(): string;
|
|
21
|
-
get explanation(): string;
|
|
22
|
-
get configs(): readonly AnyConfig[] | null;
|
|
23
|
-
createExampleGrid(): GridData;
|
|
24
|
-
get searchVariants(): SearchVariant[];
|
|
25
|
-
validateGrid(grid: GridData): RuleState;
|
|
26
|
-
copyWith({ color }: {
|
|
27
|
-
color?: Color;
|
|
28
|
-
}): this;
|
|
29
|
-
}
|
|
30
|
-
export declare const instance: DifferentCountPerZoneRule;
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { ConfigType } from '../config.js';
|
|
2
|
-
import GridData from '../grid.js';
|
|
3
|
-
import GridZones from '../gridZones.js';
|
|
4
|
-
import { Color, State } from '../primitives.js';
|
|
5
|
-
import CellCountPerZoneRule from './cellCountPerZoneRule.js';
|
|
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
|
-
];
|
|
38
|
-
/**
|
|
39
|
-
* **Zones of the same size have different numbers of <color> cells.**
|
|
40
|
-
*
|
|
41
|
-
* @param color - The color of the cells to count.
|
|
42
|
-
*/
|
|
43
|
-
constructor(color) {
|
|
44
|
-
super(color);
|
|
45
|
-
this.color = color;
|
|
46
|
-
}
|
|
47
|
-
get id() {
|
|
48
|
-
return `zone_diff_count`;
|
|
49
|
-
}
|
|
50
|
-
get explanation() {
|
|
51
|
-
return `Zones of the same size have different numbers of ${this.color} cells`;
|
|
52
|
-
}
|
|
53
|
-
get configs() {
|
|
54
|
-
return DifferentCountPerZoneRule.CONFIGS;
|
|
55
|
-
}
|
|
56
|
-
createExampleGrid() {
|
|
57
|
-
if (this.color === Color.Light) {
|
|
58
|
-
return DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT;
|
|
59
|
-
}
|
|
60
|
-
else if (this.color === Color.Dark) {
|
|
61
|
-
return DifferentCountPerZoneRule.EXAMPLE_GRID_DARK;
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
return DifferentCountPerZoneRule.EXAMPLE_GRID_GRAY;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
get searchVariants() {
|
|
68
|
-
return DifferentCountPerZoneRule.SEARCH_VARIANTS;
|
|
69
|
-
}
|
|
70
|
-
validateGrid(grid) {
|
|
71
|
-
const { zones, complete } = this.getZoneCounts(grid);
|
|
72
|
-
if (zones.length <= 1) {
|
|
73
|
-
return { state: complete ? State.Satisfied : State.Incomplete };
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
const errorZone = zones.find(z => zones.some(zz => zz !== z &&
|
|
77
|
-
zz.positions.length === z.positions.length &&
|
|
78
|
-
zz.possible === 0 &&
|
|
79
|
-
z.possible === 0 &&
|
|
80
|
-
zz.completed === z.completed));
|
|
81
|
-
if (errorZone) {
|
|
82
|
-
return {
|
|
83
|
-
state: State.Error,
|
|
84
|
-
positions: errorZone.positions,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
return { state: complete ? State.Satisfied : State.Incomplete };
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
copyWith({ color }) {
|
|
93
|
-
return new DifferentCountPerZoneRule(color ?? this.color);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
export const instance = new DifferentCountPerZoneRule(Color.Light);
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { AnyConfig } from '../config.js';
|
|
2
|
-
import GridData from '../grid.js';
|
|
3
|
-
import { Color, RuleState } from '../primitives.js';
|
|
4
|
-
import CellCountPerZoneRule from './cellCountPerZoneRule.js';
|
|
5
|
-
import { SearchVariant } from './rule.js';
|
|
6
|
-
export default class ExactCountPerZoneRule extends CellCountPerZoneRule {
|
|
7
|
-
readonly color: Color;
|
|
8
|
-
readonly count: number;
|
|
9
|
-
readonly title = "Exact Count Per Zone";
|
|
10
|
-
private static readonly CONFIGS;
|
|
11
|
-
private static readonly EXAMPLE_GRID_LIGHT;
|
|
12
|
-
private static readonly EXAMPLE_GRID_DARK;
|
|
13
|
-
private static readonly EXAMPLE_GRID_GRAY;
|
|
14
|
-
private static readonly SEARCH_VARIANTS;
|
|
15
|
-
/**
|
|
16
|
-
* **Each zone has <count> <color> cells.**
|
|
17
|
-
*
|
|
18
|
-
* @param color - The color of the cells to count.
|
|
19
|
-
* @param count - The exact count of the cells in each zone.
|
|
20
|
-
*/
|
|
21
|
-
constructor(color: Color, count: number);
|
|
22
|
-
get id(): string;
|
|
23
|
-
get explanation(): string;
|
|
24
|
-
get configs(): readonly AnyConfig[] | null;
|
|
25
|
-
createExampleGrid(): GridData;
|
|
26
|
-
get searchVariants(): SearchVariant[];
|
|
27
|
-
validateGrid(grid: GridData): RuleState;
|
|
28
|
-
copyWith({ color, count }: {
|
|
29
|
-
color?: Color;
|
|
30
|
-
count?: number;
|
|
31
|
-
}): this;
|
|
32
|
-
}
|
|
33
|
-
export declare const instance: ExactCountPerZoneRule;
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { ConfigType } from '../config.js';
|
|
2
|
-
import GridData from '../grid.js';
|
|
3
|
-
import GridZones from '../gridZones.js';
|
|
4
|
-
import { Color, State } from '../primitives.js';
|
|
5
|
-
import CellCountPerZoneRule from './cellCountPerZoneRule.js';
|
|
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
|
-
];
|
|
47
|
-
/**
|
|
48
|
-
* **Each zone has <count> <color> cells.**
|
|
49
|
-
*
|
|
50
|
-
* @param color - The color of the cells to count.
|
|
51
|
-
* @param count - The exact count of the cells in each zone.
|
|
52
|
-
*/
|
|
53
|
-
constructor(color, count) {
|
|
54
|
-
super(color);
|
|
55
|
-
this.color = color;
|
|
56
|
-
this.count = count;
|
|
57
|
-
this.count = count;
|
|
58
|
-
}
|
|
59
|
-
get id() {
|
|
60
|
-
return `zone_exact_count`;
|
|
61
|
-
}
|
|
62
|
-
get explanation() {
|
|
63
|
-
return `Each zone has exactly ${this.count} ${this.color} cell${this.count === 1 ? '' : 's'}`;
|
|
64
|
-
}
|
|
65
|
-
get configs() {
|
|
66
|
-
return ExactCountPerZoneRule.CONFIGS;
|
|
67
|
-
}
|
|
68
|
-
createExampleGrid() {
|
|
69
|
-
if (this.color === Color.Light) {
|
|
70
|
-
return ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT;
|
|
71
|
-
}
|
|
72
|
-
else if (this.color === Color.Dark) {
|
|
73
|
-
return ExactCountPerZoneRule.EXAMPLE_GRID_DARK;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
return ExactCountPerZoneRule.EXAMPLE_GRID_GRAY;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
get searchVariants() {
|
|
80
|
-
return ExactCountPerZoneRule.SEARCH_VARIANTS;
|
|
81
|
-
}
|
|
82
|
-
validateGrid(grid) {
|
|
83
|
-
const { zones, complete } = this.getZoneCounts(grid);
|
|
84
|
-
const errorZone = zones.find(z => z.completed > this.count || z.completed + z.possible < this.count);
|
|
85
|
-
if (errorZone) {
|
|
86
|
-
return {
|
|
87
|
-
state: State.Error,
|
|
88
|
-
positions: errorZone.positions,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
return { state: complete ? State.Satisfied : State.Incomplete };
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
copyWith({ color, count }) {
|
|
96
|
-
return new ExactCountPerZoneRule(color ?? this.color, count ?? this.count);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
export const instance = new ExactCountPerZoneRule(Color.Light, 1);
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { AnyConfig } from '../config.js';
|
|
2
|
-
import GridData from '../grid.js';
|
|
3
|
-
import { RuleState, Position, Mode } from '../primitives.js';
|
|
4
|
-
import Rule, { SearchVariant } from './rule.js';
|
|
5
|
-
export default class ForesightRule extends Rule {
|
|
6
|
-
readonly count: number;
|
|
7
|
-
readonly regenInterval: number;
|
|
8
|
-
readonly startFull: boolean;
|
|
9
|
-
readonly solvePath: Position[];
|
|
10
|
-
readonly title = "Foresight";
|
|
11
|
-
get configExplanation(): string;
|
|
12
|
-
private static readonly EXAMPLE_GRID;
|
|
13
|
-
private static readonly CONFIGS;
|
|
14
|
-
private static readonly SEARCH_VARIANTS;
|
|
15
|
-
/**
|
|
16
|
-
* **Foresight: Show hints**
|
|
17
|
-
*/
|
|
18
|
-
constructor(count: number, regenInterval: number, startFull: boolean, solvePath?: Position[]);
|
|
19
|
-
get id(): string;
|
|
20
|
-
get explanation(): string;
|
|
21
|
-
get visibleWhenSolving(): boolean;
|
|
22
|
-
get configs(): readonly AnyConfig[] | null;
|
|
23
|
-
createExampleGrid(): GridData;
|
|
24
|
-
get searchVariants(): SearchVariant[];
|
|
25
|
-
validateGrid(_grid: GridData): RuleState;
|
|
26
|
-
get necessaryForCompletion(): boolean;
|
|
27
|
-
get isSingleton(): boolean;
|
|
28
|
-
modeVariant(mode: Mode): Rule | null;
|
|
29
|
-
copyWith({ count, regenInterval, startFull, solvePath, }: {
|
|
30
|
-
count?: number;
|
|
31
|
-
regenInterval?: number;
|
|
32
|
-
startFull?: boolean;
|
|
33
|
-
solvePath?: Position[];
|
|
34
|
-
}): this;
|
|
35
|
-
}
|
|
36
|
-
export declare const instance: ForesightRule;
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { ConfigType } from '../config.js';
|
|
2
|
-
import GridData from '../grid.js';
|
|
3
|
-
import { State, Mode } from '../primitives.js';
|
|
4
|
-
import CustomIconSymbol from '../symbols/customIconSymbol.js';
|
|
5
|
-
import Rule from './rule.js';
|
|
6
|
-
export default class ForesightRule extends Rule {
|
|
7
|
-
count;
|
|
8
|
-
regenInterval;
|
|
9
|
-
startFull;
|
|
10
|
-
solvePath;
|
|
11
|
-
title = 'Foresight';
|
|
12
|
-
get configExplanation() {
|
|
13
|
-
return 'Provide automatic hints to the player.';
|
|
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
|
-
];
|
|
55
|
-
/**
|
|
56
|
-
* **Foresight: Show hints**
|
|
57
|
-
*/
|
|
58
|
-
constructor(count, regenInterval, startFull, solvePath = []) {
|
|
59
|
-
super();
|
|
60
|
-
this.count = count;
|
|
61
|
-
this.regenInterval = regenInterval;
|
|
62
|
-
this.startFull = startFull;
|
|
63
|
-
this.solvePath = solvePath;
|
|
64
|
-
this.count = count;
|
|
65
|
-
this.regenInterval = regenInterval;
|
|
66
|
-
this.startFull = startFull;
|
|
67
|
-
this.solvePath = solvePath;
|
|
68
|
-
}
|
|
69
|
-
get id() {
|
|
70
|
-
return `foresight`;
|
|
71
|
-
}
|
|
72
|
-
get explanation() {
|
|
73
|
-
return `*Foresight:* Show hints`;
|
|
74
|
-
}
|
|
75
|
-
get visibleWhenSolving() {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
get configs() {
|
|
79
|
-
return ForesightRule.CONFIGS;
|
|
80
|
-
}
|
|
81
|
-
createExampleGrid() {
|
|
82
|
-
return ForesightRule.EXAMPLE_GRID;
|
|
83
|
-
}
|
|
84
|
-
get searchVariants() {
|
|
85
|
-
return ForesightRule.SEARCH_VARIANTS;
|
|
86
|
-
}
|
|
87
|
-
validateGrid(_grid) {
|
|
88
|
-
return { state: State.Incomplete };
|
|
89
|
-
}
|
|
90
|
-
get necessaryForCompletion() {
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
get isSingleton() {
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
modeVariant(mode) {
|
|
97
|
-
// foresight is disabled in perfection mode
|
|
98
|
-
if (mode === Mode.Perfection) {
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
return this;
|
|
102
|
-
}
|
|
103
|
-
copyWith({ count, regenInterval, startFull, solvePath, }) {
|
|
104
|
-
return new ForesightRule(count ?? this.count, regenInterval ?? this.regenInterval, startFull ?? this.startFull, solvePath ?? this.solvePath);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
export const instance = new ForesightRule(5, 30, false);
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { AnyConfig } from '../config.js';
|
|
2
|
-
import { FinalValidationHandler } from '../events/onFinalValidation.js';
|
|
3
|
-
import GridData from '../grid.js';
|
|
4
|
-
import { GridState, RuleState } from '../primitives.js';
|
|
5
|
-
import Rule, { SearchVariant } from './rule.js';
|
|
6
|
-
export default class LyingSymbolRule extends Rule implements FinalValidationHandler {
|
|
7
|
-
readonly count: number;
|
|
8
|
-
readonly title = "Lying Symbols";
|
|
9
|
-
private static readonly EXAMPLE_GRID;
|
|
10
|
-
private static readonly CONFIGS;
|
|
11
|
-
private static readonly SEARCH_VARIANTS;
|
|
12
|
-
/**
|
|
13
|
-
* **<count> symbols are lying and are incorrect**
|
|
14
|
-
*
|
|
15
|
-
* @param count Number of lying symbols
|
|
16
|
-
*/
|
|
17
|
-
constructor(count: number);
|
|
18
|
-
get id(): string;
|
|
19
|
-
get explanation(): string;
|
|
20
|
-
get configs(): readonly AnyConfig[] | null;
|
|
21
|
-
createExampleGrid(): GridData;
|
|
22
|
-
get searchVariants(): SearchVariant[];
|
|
23
|
-
validateGrid(_: GridData): RuleState;
|
|
24
|
-
get isSingleton(): boolean;
|
|
25
|
-
onFinalValidation(grid: GridData, solution: GridData | null, state: GridState): GridState;
|
|
26
|
-
copyWith({ count }: {
|
|
27
|
-
count?: number;
|
|
28
|
-
}): this;
|
|
29
|
-
withCount(count: number): this;
|
|
30
|
-
}
|
|
31
|
-
export declare const instance: LyingSymbolRule;
|