@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
|
@@ -5,7 +5,55 @@ import { Color, Comparison, State, } from '../primitives.js';
|
|
|
5
5
|
import { array } from '../dataHelper.js';
|
|
6
6
|
import LetterSymbol from '../symbols/letterSymbol.js';
|
|
7
7
|
import GridConnections from '../gridConnections.js';
|
|
8
|
-
class SymbolsPerRegionRule extends Rule {
|
|
8
|
+
export default class SymbolsPerRegionRule extends Rule {
|
|
9
|
+
color;
|
|
10
|
+
count;
|
|
11
|
+
comparison;
|
|
12
|
+
title = 'Symbols Per Area';
|
|
13
|
+
static SYMBOL_POSITIONS = [
|
|
14
|
+
{ x: 1, y: 1 },
|
|
15
|
+
{ x: 2, y: 2 },
|
|
16
|
+
{ x: 2, y: 1 },
|
|
17
|
+
{ x: 3, y: 1 },
|
|
18
|
+
{ x: 1, y: 2 },
|
|
19
|
+
];
|
|
20
|
+
static CONFIGS = Object.freeze([
|
|
21
|
+
{
|
|
22
|
+
type: ConfigType.Number,
|
|
23
|
+
default: 1,
|
|
24
|
+
field: 'count',
|
|
25
|
+
description: 'Count',
|
|
26
|
+
configurable: true,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
type: ConfigType.Color,
|
|
30
|
+
default: Color.Light,
|
|
31
|
+
field: 'color',
|
|
32
|
+
description: 'Color',
|
|
33
|
+
configurable: true,
|
|
34
|
+
allowGray: true,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
type: ConfigType.Comparison,
|
|
38
|
+
default: Comparison.Equal,
|
|
39
|
+
field: 'comparison',
|
|
40
|
+
description: 'Comparison',
|
|
41
|
+
configurable: true,
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
44
|
+
static EXAMPLE_GRIDS = {
|
|
45
|
+
[Color.Dark]: GridData.create(['wwwww', 'wbbbw', 'wbbww', 'wwwww']),
|
|
46
|
+
[Color.Light]: GridData.create(['bbbbb', 'bwwwb', 'bwwbb', 'bbbbb']),
|
|
47
|
+
[Color.Gray]: GridData.create(['bwbwb', 'wnnnw', 'bnnwb', 'wbwbw']),
|
|
48
|
+
};
|
|
49
|
+
static SEARCH_VARIANTS = [
|
|
50
|
+
new SymbolsPerRegionRule(Color.Light, 1).searchVariant(),
|
|
51
|
+
new SymbolsPerRegionRule(Color.Dark, 1).searchVariant(),
|
|
52
|
+
new SymbolsPerRegionRule(Color.Light, 1, Comparison.AtLeast).searchVariant(),
|
|
53
|
+
new SymbolsPerRegionRule(Color.Dark, 1, Comparison.AtLeast).searchVariant(),
|
|
54
|
+
new SymbolsPerRegionRule(Color.Light, 1, Comparison.AtMost).searchVariant(),
|
|
55
|
+
new SymbolsPerRegionRule(Color.Dark, 1, Comparison.AtMost).searchVariant(),
|
|
56
|
+
];
|
|
9
57
|
/**
|
|
10
58
|
* **Exactly <count> symbols per <color> area**
|
|
11
59
|
*
|
|
@@ -15,30 +63,9 @@ class SymbolsPerRegionRule extends Rule {
|
|
|
15
63
|
*/
|
|
16
64
|
constructor(color, count, comparison = Comparison.Equal) {
|
|
17
65
|
super();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
writable: true,
|
|
22
|
-
value: color
|
|
23
|
-
});
|
|
24
|
-
Object.defineProperty(this, "count", {
|
|
25
|
-
enumerable: true,
|
|
26
|
-
configurable: true,
|
|
27
|
-
writable: true,
|
|
28
|
-
value: count
|
|
29
|
-
});
|
|
30
|
-
Object.defineProperty(this, "comparison", {
|
|
31
|
-
enumerable: true,
|
|
32
|
-
configurable: true,
|
|
33
|
-
writable: true,
|
|
34
|
-
value: comparison
|
|
35
|
-
});
|
|
36
|
-
Object.defineProperty(this, "title", {
|
|
37
|
-
enumerable: true,
|
|
38
|
-
configurable: true,
|
|
39
|
-
writable: true,
|
|
40
|
-
value: 'Symbols Per Area'
|
|
41
|
-
});
|
|
66
|
+
this.color = color;
|
|
67
|
+
this.count = count;
|
|
68
|
+
this.comparison = comparison;
|
|
42
69
|
this.color = color;
|
|
43
70
|
this.count = count;
|
|
44
71
|
this.comparison = comparison;
|
|
@@ -151,69 +178,4 @@ class SymbolsPerRegionRule extends Rule {
|
|
|
151
178
|
return count;
|
|
152
179
|
}
|
|
153
180
|
}
|
|
154
|
-
Object.defineProperty(SymbolsPerRegionRule, "SYMBOL_POSITIONS", {
|
|
155
|
-
enumerable: true,
|
|
156
|
-
configurable: true,
|
|
157
|
-
writable: true,
|
|
158
|
-
value: [
|
|
159
|
-
{ x: 1, y: 1 },
|
|
160
|
-
{ x: 2, y: 2 },
|
|
161
|
-
{ x: 2, y: 1 },
|
|
162
|
-
{ x: 3, y: 1 },
|
|
163
|
-
{ x: 1, y: 2 },
|
|
164
|
-
]
|
|
165
|
-
});
|
|
166
|
-
Object.defineProperty(SymbolsPerRegionRule, "CONFIGS", {
|
|
167
|
-
enumerable: true,
|
|
168
|
-
configurable: true,
|
|
169
|
-
writable: true,
|
|
170
|
-
value: Object.freeze([
|
|
171
|
-
{
|
|
172
|
-
type: ConfigType.Number,
|
|
173
|
-
default: 1,
|
|
174
|
-
field: 'count',
|
|
175
|
-
description: 'Count',
|
|
176
|
-
configurable: true,
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
type: ConfigType.Color,
|
|
180
|
-
default: Color.Light,
|
|
181
|
-
field: 'color',
|
|
182
|
-
description: 'Color',
|
|
183
|
-
configurable: true,
|
|
184
|
-
allowGray: true,
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
type: ConfigType.Comparison,
|
|
188
|
-
default: Comparison.Equal,
|
|
189
|
-
field: 'comparison',
|
|
190
|
-
description: 'Comparison',
|
|
191
|
-
configurable: true,
|
|
192
|
-
},
|
|
193
|
-
])
|
|
194
|
-
});
|
|
195
|
-
Object.defineProperty(SymbolsPerRegionRule, "EXAMPLE_GRIDS", {
|
|
196
|
-
enumerable: true,
|
|
197
|
-
configurable: true,
|
|
198
|
-
writable: true,
|
|
199
|
-
value: {
|
|
200
|
-
[Color.Dark]: GridData.create(['wwwww', 'wbbbw', 'wbbww', 'wwwww']),
|
|
201
|
-
[Color.Light]: GridData.create(['bbbbb', 'bwwwb', 'bwwbb', 'bbbbb']),
|
|
202
|
-
[Color.Gray]: GridData.create(['bwbwb', 'wnnnw', 'bnnwb', 'wbwbw']),
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
Object.defineProperty(SymbolsPerRegionRule, "SEARCH_VARIANTS", {
|
|
206
|
-
enumerable: true,
|
|
207
|
-
configurable: true,
|
|
208
|
-
writable: true,
|
|
209
|
-
value: [
|
|
210
|
-
new SymbolsPerRegionRule(Color.Light, 1).searchVariant(),
|
|
211
|
-
new SymbolsPerRegionRule(Color.Dark, 1).searchVariant(),
|
|
212
|
-
new SymbolsPerRegionRule(Color.Light, 1, Comparison.AtLeast).searchVariant(),
|
|
213
|
-
new SymbolsPerRegionRule(Color.Dark, 1, Comparison.AtLeast).searchVariant(),
|
|
214
|
-
new SymbolsPerRegionRule(Color.Light, 1, Comparison.AtMost).searchVariant(),
|
|
215
|
-
new SymbolsPerRegionRule(Color.Dark, 1, Comparison.AtMost).searchVariant(),
|
|
216
|
-
]
|
|
217
|
-
});
|
|
218
|
-
export default SymbolsPerRegionRule;
|
|
219
181
|
export const instance = new SymbolsPerRegionRule(Color.Dark, 1);
|
|
@@ -3,10 +3,20 @@ import { MajorRule, State } from '../primitives.js';
|
|
|
3
3
|
import AreaNumberSymbol from '../symbols/areaNumberSymbol.js';
|
|
4
4
|
import CustomTextSymbol from '../symbols/customTextSymbol.js';
|
|
5
5
|
import Rule from './rule.js';
|
|
6
|
-
class UndercluedRule extends Rule {
|
|
6
|
+
export default class UndercluedRule extends Rule {
|
|
7
|
+
title = 'Underclued';
|
|
7
8
|
get configExplanation() {
|
|
8
9
|
return 'A solution must be provided. The solvers may be used to generate one automatically.';
|
|
9
10
|
}
|
|
11
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['nbnnn', 'bwbnn', 'nbnnn', 'wwwnn'])
|
|
12
|
+
.addSymbol(new AreaNumberSymbol(1, 1, 1))
|
|
13
|
+
.addSymbol(new AreaNumberSymbol(0, 3, 4))
|
|
14
|
+
.addSymbol(new CustomTextSymbol('', GridData.create([]), 0, 2, '?'))
|
|
15
|
+
.addSymbol(new CustomTextSymbol('', GridData.create([]), 2, 2, '?'))
|
|
16
|
+
.addSymbol(new CustomTextSymbol('', GridData.create([]), 3, 3, '?')));
|
|
17
|
+
static SEARCH_VARIANTS = [
|
|
18
|
+
new UndercluedRule().searchVariant(),
|
|
19
|
+
];
|
|
10
20
|
/**
|
|
11
21
|
* **Underclued Grid: Mark only what is definitely true**
|
|
12
22
|
*
|
|
@@ -14,12 +24,6 @@ class UndercluedRule extends Rule {
|
|
|
14
24
|
*/
|
|
15
25
|
constructor() {
|
|
16
26
|
super();
|
|
17
|
-
Object.defineProperty(this, "title", {
|
|
18
|
-
enumerable: true,
|
|
19
|
-
configurable: true,
|
|
20
|
-
writable: true,
|
|
21
|
-
value: 'Underclued'
|
|
22
|
-
});
|
|
23
27
|
}
|
|
24
28
|
get id() {
|
|
25
29
|
return MajorRule.Underclued;
|
|
@@ -46,24 +50,4 @@ class UndercluedRule extends Rule {
|
|
|
46
50
|
return true;
|
|
47
51
|
}
|
|
48
52
|
}
|
|
49
|
-
Object.defineProperty(UndercluedRule, "EXAMPLE_GRID", {
|
|
50
|
-
enumerable: true,
|
|
51
|
-
configurable: true,
|
|
52
|
-
writable: true,
|
|
53
|
-
value: Object.freeze(GridData.create(['nbnnn', 'bwbnn', 'nbnnn', 'wwwnn'])
|
|
54
|
-
.addSymbol(new AreaNumberSymbol(1, 1, 1))
|
|
55
|
-
.addSymbol(new AreaNumberSymbol(0, 3, 4))
|
|
56
|
-
.addSymbol(new CustomTextSymbol('', GridData.create([]), 0, 2, '?'))
|
|
57
|
-
.addSymbol(new CustomTextSymbol('', GridData.create([]), 2, 2, '?'))
|
|
58
|
-
.addSymbol(new CustomTextSymbol('', GridData.create([]), 3, 3, '?')))
|
|
59
|
-
});
|
|
60
|
-
Object.defineProperty(UndercluedRule, "SEARCH_VARIANTS", {
|
|
61
|
-
enumerable: true,
|
|
62
|
-
configurable: true,
|
|
63
|
-
writable: true,
|
|
64
|
-
value: [
|
|
65
|
-
new UndercluedRule().searchVariant(),
|
|
66
|
-
]
|
|
67
|
-
});
|
|
68
|
-
export default UndercluedRule;
|
|
69
53
|
export const instance = new UndercluedRule();
|
|
@@ -2,7 +2,24 @@ import { ConfigType } from '../config.js';
|
|
|
2
2
|
import GridData from '../grid.js';
|
|
3
3
|
import { Color, State } from '../primitives.js';
|
|
4
4
|
import RegionShapeRule from './regionShapeRule.js';
|
|
5
|
-
class UniqueShapeRule extends RegionShapeRule {
|
|
5
|
+
export default class UniqueShapeRule extends RegionShapeRule {
|
|
6
|
+
title = 'Unique Shape Areas';
|
|
7
|
+
static CONFIGS = Object.freeze([
|
|
8
|
+
{
|
|
9
|
+
type: ConfigType.Color,
|
|
10
|
+
default: Color.Light,
|
|
11
|
+
allowGray: false,
|
|
12
|
+
field: 'color',
|
|
13
|
+
description: 'Color',
|
|
14
|
+
configurable: true,
|
|
15
|
+
},
|
|
16
|
+
]);
|
|
17
|
+
static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['bwbww', 'wwbww', 'wbwbb', 'bwwbw']));
|
|
18
|
+
static EXAMPLE_GRID_DARK = Object.freeze(GridData.create(['wbwbb', 'bbwbb', 'bwbww', 'wbbwb']));
|
|
19
|
+
static SEARCH_VARIANTS = [
|
|
20
|
+
new UniqueShapeRule(Color.Light).searchVariant(),
|
|
21
|
+
new UniqueShapeRule(Color.Dark).searchVariant(),
|
|
22
|
+
];
|
|
6
23
|
/**
|
|
7
24
|
* **No two <color> areas have the same shape and size**
|
|
8
25
|
*
|
|
@@ -10,12 +27,6 @@ class UniqueShapeRule extends RegionShapeRule {
|
|
|
10
27
|
*/
|
|
11
28
|
constructor(color) {
|
|
12
29
|
super(color);
|
|
13
|
-
Object.defineProperty(this, "title", {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
configurable: true,
|
|
16
|
-
writable: true,
|
|
17
|
-
value: 'Unique Shape Areas'
|
|
18
|
-
});
|
|
19
30
|
}
|
|
20
31
|
get id() {
|
|
21
32
|
return `unique_shape`;
|
|
@@ -51,41 +62,4 @@ class UniqueShapeRule extends RegionShapeRule {
|
|
|
51
62
|
return new UniqueShapeRule(color ?? this.color);
|
|
52
63
|
}
|
|
53
64
|
}
|
|
54
|
-
Object.defineProperty(UniqueShapeRule, "CONFIGS", {
|
|
55
|
-
enumerable: true,
|
|
56
|
-
configurable: true,
|
|
57
|
-
writable: true,
|
|
58
|
-
value: Object.freeze([
|
|
59
|
-
{
|
|
60
|
-
type: ConfigType.Color,
|
|
61
|
-
default: Color.Light,
|
|
62
|
-
allowGray: false,
|
|
63
|
-
field: 'color',
|
|
64
|
-
description: 'Color',
|
|
65
|
-
configurable: true,
|
|
66
|
-
},
|
|
67
|
-
])
|
|
68
|
-
});
|
|
69
|
-
Object.defineProperty(UniqueShapeRule, "EXAMPLE_GRID_LIGHT", {
|
|
70
|
-
enumerable: true,
|
|
71
|
-
configurable: true,
|
|
72
|
-
writable: true,
|
|
73
|
-
value: Object.freeze(GridData.create(['bwbww', 'wwbww', 'wbwbb', 'bwwbw']))
|
|
74
|
-
});
|
|
75
|
-
Object.defineProperty(UniqueShapeRule, "EXAMPLE_GRID_DARK", {
|
|
76
|
-
enumerable: true,
|
|
77
|
-
configurable: true,
|
|
78
|
-
writable: true,
|
|
79
|
-
value: Object.freeze(GridData.create(['wbwbb', 'bbwbb', 'bwbww', 'wbbwb']))
|
|
80
|
-
});
|
|
81
|
-
Object.defineProperty(UniqueShapeRule, "SEARCH_VARIANTS", {
|
|
82
|
-
enumerable: true,
|
|
83
|
-
configurable: true,
|
|
84
|
-
writable: true,
|
|
85
|
-
value: [
|
|
86
|
-
new UniqueShapeRule(Color.Light).searchVariant(),
|
|
87
|
-
new UniqueShapeRule(Color.Dark).searchVariant(),
|
|
88
|
-
]
|
|
89
|
-
});
|
|
90
|
-
export default UniqueShapeRule;
|
|
91
65
|
export const instance = new UniqueShapeRule(Color.Dark);
|
|
@@ -5,10 +5,106 @@ import { Color, MajorRule, Orientation, State, Wrapping, orientationToggle, } fr
|
|
|
5
5
|
import LetterSymbol from '../symbols/letterSymbol.js';
|
|
6
6
|
import MyopiaSymbol from '../symbols/myopiaSymbol.js';
|
|
7
7
|
import Rule from './rule.js';
|
|
8
|
-
class WrapAroundRule extends Rule {
|
|
8
|
+
export default class WrapAroundRule extends Rule {
|
|
9
|
+
horizontal;
|
|
10
|
+
vertical;
|
|
11
|
+
title = 'Wrap Around';
|
|
9
12
|
get configExplanation() {
|
|
10
13
|
return 'Allow edges to connect with each other and symbols / rules to take effect across edges.';
|
|
11
14
|
}
|
|
15
|
+
static EXAMPLE_GRID_NONE = Object.freeze(GridData.create(['wwwww', 'wwwww', 'wwwww', 'wwwww', 'wwwww']));
|
|
16
|
+
static EXAMPLE_GRID_HORIZONTAL = Object.freeze({
|
|
17
|
+
[Wrapping.None]: WrapAroundRule.EXAMPLE_GRID_NONE,
|
|
18
|
+
[Wrapping.Wrap]: GridData.create([
|
|
19
|
+
'wwwww',
|
|
20
|
+
'bwwwb',
|
|
21
|
+
'wwwww',
|
|
22
|
+
'bwwwb',
|
|
23
|
+
'wwwww',
|
|
24
|
+
])
|
|
25
|
+
.addSymbol(new LetterSymbol(0, 1, 'A'))
|
|
26
|
+
.addSymbol(new LetterSymbol(4, 1, 'A'))
|
|
27
|
+
.addSymbol(new LetterSymbol(0, 3, 'B'))
|
|
28
|
+
.addSymbol(new LetterSymbol(4, 3, 'B')),
|
|
29
|
+
[Wrapping.WrapReverse]: GridData.create([
|
|
30
|
+
'wwwww',
|
|
31
|
+
'bwwwb',
|
|
32
|
+
'wwwww',
|
|
33
|
+
'bwwwb',
|
|
34
|
+
'wwwww',
|
|
35
|
+
])
|
|
36
|
+
.addSymbol(new LetterSymbol(0, 1, 'A'))
|
|
37
|
+
.addSymbol(new LetterSymbol(4, 1, 'B'))
|
|
38
|
+
.addSymbol(new LetterSymbol(0, 3, 'B'))
|
|
39
|
+
.addSymbol(new LetterSymbol(4, 3, 'A')),
|
|
40
|
+
[Wrapping.ReflectReverse]: GridData.create([
|
|
41
|
+
'wwwww',
|
|
42
|
+
'bwwww',
|
|
43
|
+
'wwwww',
|
|
44
|
+
'wwwwb',
|
|
45
|
+
'wwwww',
|
|
46
|
+
])
|
|
47
|
+
.addSymbol(new MyopiaSymbol(0, 3, false, orientationToggle(Orientation.Left)))
|
|
48
|
+
.addSymbol(new MyopiaSymbol(4, 1, false, orientationToggle(Orientation.Right))),
|
|
49
|
+
});
|
|
50
|
+
static EXAMPLE_GRID_VERTICAL = Object.freeze({
|
|
51
|
+
[Wrapping.None]: WrapAroundRule.EXAMPLE_GRID_NONE,
|
|
52
|
+
[Wrapping.Wrap]: GridData.create([
|
|
53
|
+
'wbwbw',
|
|
54
|
+
'wwwww',
|
|
55
|
+
'wwwww',
|
|
56
|
+
'wwwww',
|
|
57
|
+
'wbwbw',
|
|
58
|
+
])
|
|
59
|
+
.addSymbol(new LetterSymbol(1, 0, 'C'))
|
|
60
|
+
.addSymbol(new LetterSymbol(3, 0, 'D'))
|
|
61
|
+
.addSymbol(new LetterSymbol(1, 4, 'C'))
|
|
62
|
+
.addSymbol(new LetterSymbol(3, 4, 'D')),
|
|
63
|
+
[Wrapping.WrapReverse]: GridData.create([
|
|
64
|
+
'wbwbw',
|
|
65
|
+
'wwwww',
|
|
66
|
+
'wwwww',
|
|
67
|
+
'wwwww',
|
|
68
|
+
'wbwbw',
|
|
69
|
+
])
|
|
70
|
+
.addSymbol(new LetterSymbol(1, 0, 'C'))
|
|
71
|
+
.addSymbol(new LetterSymbol(3, 0, 'D'))
|
|
72
|
+
.addSymbol(new LetterSymbol(1, 4, 'D'))
|
|
73
|
+
.addSymbol(new LetterSymbol(3, 4, 'C')),
|
|
74
|
+
[Wrapping.ReflectReverse]: GridData.create([
|
|
75
|
+
'wbwww',
|
|
76
|
+
'wwwww',
|
|
77
|
+
'wwwww',
|
|
78
|
+
'wwwww',
|
|
79
|
+
'wwwbw',
|
|
80
|
+
])
|
|
81
|
+
.addSymbol(new MyopiaSymbol(3, 0, false, orientationToggle(Orientation.Up)))
|
|
82
|
+
.addSymbol(new MyopiaSymbol(1, 4, false, orientationToggle(Orientation.Down))),
|
|
83
|
+
});
|
|
84
|
+
static SEARCH_VARIANTS = [
|
|
85
|
+
new WrapAroundRule(Wrapping.Wrap, Wrapping.None).searchVariant(),
|
|
86
|
+
new WrapAroundRule(Wrapping.None, Wrapping.Wrap).searchVariant(),
|
|
87
|
+
new WrapAroundRule(Wrapping.Wrap, Wrapping.Wrap).searchVariant(),
|
|
88
|
+
new WrapAroundRule(Wrapping.ReflectReverse, Wrapping.None).searchVariant(),
|
|
89
|
+
new WrapAroundRule(Wrapping.None, Wrapping.ReflectReverse).searchVariant(),
|
|
90
|
+
new WrapAroundRule(Wrapping.ReflectReverse, Wrapping.ReflectReverse).searchVariant(),
|
|
91
|
+
];
|
|
92
|
+
static CONFIGS = Object.freeze([
|
|
93
|
+
{
|
|
94
|
+
type: ConfigType.Wrapping,
|
|
95
|
+
default: Wrapping.Wrap,
|
|
96
|
+
field: 'horizontal',
|
|
97
|
+
description: 'Horizontal wrap',
|
|
98
|
+
configurable: true,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
type: ConfigType.Wrapping,
|
|
102
|
+
default: Wrapping.Wrap,
|
|
103
|
+
field: 'vertical',
|
|
104
|
+
description: 'Vertical wrap',
|
|
105
|
+
configurable: true,
|
|
106
|
+
},
|
|
107
|
+
]);
|
|
12
108
|
/**
|
|
13
109
|
* **The left and right edges are connected (in reverse)**
|
|
14
110
|
*
|
|
@@ -17,24 +113,8 @@ class WrapAroundRule extends Rule {
|
|
|
17
113
|
*/
|
|
18
114
|
constructor(horizontal, vertical) {
|
|
19
115
|
super();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: horizontal
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "vertical", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: vertical
|
|
31
|
-
});
|
|
32
|
-
Object.defineProperty(this, "title", {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
configurable: true,
|
|
35
|
-
writable: true,
|
|
36
|
-
value: 'Wrap Around'
|
|
37
|
-
});
|
|
116
|
+
this.horizontal = horizontal;
|
|
117
|
+
this.vertical = vertical;
|
|
38
118
|
this.horizontal = horizontal;
|
|
39
119
|
this.vertical = vertical;
|
|
40
120
|
}
|
|
@@ -158,123 +238,4 @@ class WrapAroundRule extends Rule {
|
|
|
158
238
|
return true;
|
|
159
239
|
}
|
|
160
240
|
}
|
|
161
|
-
Object.defineProperty(WrapAroundRule, "EXAMPLE_GRID_NONE", {
|
|
162
|
-
enumerable: true,
|
|
163
|
-
configurable: true,
|
|
164
|
-
writable: true,
|
|
165
|
-
value: Object.freeze(GridData.create(['wwwww', 'wwwww', 'wwwww', 'wwwww', 'wwwww']))
|
|
166
|
-
});
|
|
167
|
-
Object.defineProperty(WrapAroundRule, "EXAMPLE_GRID_HORIZONTAL", {
|
|
168
|
-
enumerable: true,
|
|
169
|
-
configurable: true,
|
|
170
|
-
writable: true,
|
|
171
|
-
value: Object.freeze({
|
|
172
|
-
[Wrapping.None]: WrapAroundRule.EXAMPLE_GRID_NONE,
|
|
173
|
-
[Wrapping.Wrap]: GridData.create([
|
|
174
|
-
'wwwww',
|
|
175
|
-
'bwwwb',
|
|
176
|
-
'wwwww',
|
|
177
|
-
'bwwwb',
|
|
178
|
-
'wwwww',
|
|
179
|
-
])
|
|
180
|
-
.addSymbol(new LetterSymbol(0, 1, 'A'))
|
|
181
|
-
.addSymbol(new LetterSymbol(4, 1, 'A'))
|
|
182
|
-
.addSymbol(new LetterSymbol(0, 3, 'B'))
|
|
183
|
-
.addSymbol(new LetterSymbol(4, 3, 'B')),
|
|
184
|
-
[Wrapping.WrapReverse]: GridData.create([
|
|
185
|
-
'wwwww',
|
|
186
|
-
'bwwwb',
|
|
187
|
-
'wwwww',
|
|
188
|
-
'bwwwb',
|
|
189
|
-
'wwwww',
|
|
190
|
-
])
|
|
191
|
-
.addSymbol(new LetterSymbol(0, 1, 'A'))
|
|
192
|
-
.addSymbol(new LetterSymbol(4, 1, 'B'))
|
|
193
|
-
.addSymbol(new LetterSymbol(0, 3, 'B'))
|
|
194
|
-
.addSymbol(new LetterSymbol(4, 3, 'A')),
|
|
195
|
-
[Wrapping.ReflectReverse]: GridData.create([
|
|
196
|
-
'wwwww',
|
|
197
|
-
'bwwww',
|
|
198
|
-
'wwwww',
|
|
199
|
-
'wwwwb',
|
|
200
|
-
'wwwww',
|
|
201
|
-
])
|
|
202
|
-
.addSymbol(new MyopiaSymbol(0, 3, false, orientationToggle(Orientation.Left)))
|
|
203
|
-
.addSymbol(new MyopiaSymbol(4, 1, false, orientationToggle(Orientation.Right))),
|
|
204
|
-
})
|
|
205
|
-
});
|
|
206
|
-
Object.defineProperty(WrapAroundRule, "EXAMPLE_GRID_VERTICAL", {
|
|
207
|
-
enumerable: true,
|
|
208
|
-
configurable: true,
|
|
209
|
-
writable: true,
|
|
210
|
-
value: Object.freeze({
|
|
211
|
-
[Wrapping.None]: WrapAroundRule.EXAMPLE_GRID_NONE,
|
|
212
|
-
[Wrapping.Wrap]: GridData.create([
|
|
213
|
-
'wbwbw',
|
|
214
|
-
'wwwww',
|
|
215
|
-
'wwwww',
|
|
216
|
-
'wwwww',
|
|
217
|
-
'wbwbw',
|
|
218
|
-
])
|
|
219
|
-
.addSymbol(new LetterSymbol(1, 0, 'C'))
|
|
220
|
-
.addSymbol(new LetterSymbol(3, 0, 'D'))
|
|
221
|
-
.addSymbol(new LetterSymbol(1, 4, 'C'))
|
|
222
|
-
.addSymbol(new LetterSymbol(3, 4, 'D')),
|
|
223
|
-
[Wrapping.WrapReverse]: GridData.create([
|
|
224
|
-
'wbwbw',
|
|
225
|
-
'wwwww',
|
|
226
|
-
'wwwww',
|
|
227
|
-
'wwwww',
|
|
228
|
-
'wbwbw',
|
|
229
|
-
])
|
|
230
|
-
.addSymbol(new LetterSymbol(1, 0, 'C'))
|
|
231
|
-
.addSymbol(new LetterSymbol(3, 0, 'D'))
|
|
232
|
-
.addSymbol(new LetterSymbol(1, 4, 'D'))
|
|
233
|
-
.addSymbol(new LetterSymbol(3, 4, 'C')),
|
|
234
|
-
[Wrapping.ReflectReverse]: GridData.create([
|
|
235
|
-
'wbwww',
|
|
236
|
-
'wwwww',
|
|
237
|
-
'wwwww',
|
|
238
|
-
'wwwww',
|
|
239
|
-
'wwwbw',
|
|
240
|
-
])
|
|
241
|
-
.addSymbol(new MyopiaSymbol(3, 0, false, orientationToggle(Orientation.Up)))
|
|
242
|
-
.addSymbol(new MyopiaSymbol(1, 4, false, orientationToggle(Orientation.Down))),
|
|
243
|
-
})
|
|
244
|
-
});
|
|
245
|
-
Object.defineProperty(WrapAroundRule, "SEARCH_VARIANTS", {
|
|
246
|
-
enumerable: true,
|
|
247
|
-
configurable: true,
|
|
248
|
-
writable: true,
|
|
249
|
-
value: [
|
|
250
|
-
new WrapAroundRule(Wrapping.Wrap, Wrapping.None).searchVariant(),
|
|
251
|
-
new WrapAroundRule(Wrapping.None, Wrapping.Wrap).searchVariant(),
|
|
252
|
-
new WrapAroundRule(Wrapping.Wrap, Wrapping.Wrap).searchVariant(),
|
|
253
|
-
new WrapAroundRule(Wrapping.ReflectReverse, Wrapping.None).searchVariant(),
|
|
254
|
-
new WrapAroundRule(Wrapping.None, Wrapping.ReflectReverse).searchVariant(),
|
|
255
|
-
new WrapAroundRule(Wrapping.ReflectReverse, Wrapping.ReflectReverse).searchVariant(),
|
|
256
|
-
]
|
|
257
|
-
});
|
|
258
|
-
Object.defineProperty(WrapAroundRule, "CONFIGS", {
|
|
259
|
-
enumerable: true,
|
|
260
|
-
configurable: true,
|
|
261
|
-
writable: true,
|
|
262
|
-
value: Object.freeze([
|
|
263
|
-
{
|
|
264
|
-
type: ConfigType.Wrapping,
|
|
265
|
-
default: Wrapping.Wrap,
|
|
266
|
-
field: 'horizontal',
|
|
267
|
-
description: 'Horizontal wrap',
|
|
268
|
-
configurable: true,
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
type: ConfigType.Wrapping,
|
|
272
|
-
default: Wrapping.Wrap,
|
|
273
|
-
field: 'vertical',
|
|
274
|
-
description: 'Vertical wrap',
|
|
275
|
-
configurable: true,
|
|
276
|
-
},
|
|
277
|
-
])
|
|
278
|
-
});
|
|
279
|
-
export default WrapAroundRule;
|
|
280
241
|
export const instance = new WrapAroundRule(Wrapping.Wrap, Wrapping.Wrap);
|
|
@@ -4,15 +4,7 @@ import { DIRECTIONS, ORIENTATIONS, } from '../primitives.js';
|
|
|
4
4
|
import { escape } from '../dataHelper.js';
|
|
5
5
|
import { normalizeShape, tilesToShape } from '../shapes.js';
|
|
6
6
|
export default class SerializerChecksum extends SerializerV0 {
|
|
7
|
-
|
|
8
|
-
super(...arguments);
|
|
9
|
-
Object.defineProperty(this, "version", {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
configurable: true,
|
|
12
|
-
writable: true,
|
|
13
|
-
value: 4
|
|
14
|
-
});
|
|
15
|
-
}
|
|
7
|
+
version = 4;
|
|
16
8
|
parseTile(_str) {
|
|
17
9
|
throw new Error('Checksum serializer does not support parsing');
|
|
18
10
|
}
|
|
@@ -26,15 +26,7 @@ export const orientationChars = {
|
|
|
26
26
|
[Orientation.UpLeft]: 'w',
|
|
27
27
|
};
|
|
28
28
|
export default class SerializerV0 extends SerializerBase {
|
|
29
|
-
|
|
30
|
-
super(...arguments);
|
|
31
|
-
Object.defineProperty(this, "version", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
configurable: true,
|
|
34
|
-
writable: true,
|
|
35
|
-
value: 0
|
|
36
|
-
});
|
|
37
|
-
}
|
|
29
|
+
version = 0;
|
|
38
30
|
stringifyTile(tile) {
|
|
39
31
|
if (!tile.exists)
|
|
40
32
|
return '.';
|
|
@@ -4,38 +4,22 @@ import { instance as offByXInstance } from '../../rules/offByXRule.js';
|
|
|
4
4
|
import { instance as lotusInstance } from '../../symbols/lotusSymbol.js';
|
|
5
5
|
import { instance as galaxyInstance } from '../../symbols/galaxySymbol.js';
|
|
6
6
|
import { instance as wrapAroundInstance } from '../../rules/wrapAroundRule.js';
|
|
7
|
+
import { instance as symbolsPerRegionInstance } from '../../rules/symbolsPerRegionRule.js';
|
|
7
8
|
import { allSolvers } from '../allSolvers.js';
|
|
8
9
|
import Solver from '../solver.js';
|
|
9
10
|
import UndercluedRule from '../../rules/undercluedRule.js';
|
|
10
11
|
import validateGrid from '../../validate.js';
|
|
11
|
-
class AutoSolver extends Solver {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: 'various contributors'
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "description", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: 'Automatically select the fastest solver based on supported instructions and environment.'
|
|
31
|
-
});
|
|
32
|
-
Object.defineProperty(this, "supportsCancellation", {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
configurable: true,
|
|
35
|
-
writable: true,
|
|
36
|
-
value: true
|
|
37
|
-
});
|
|
38
|
-
}
|
|
12
|
+
export default class AutoSolver extends Solver {
|
|
13
|
+
id = 'auto';
|
|
14
|
+
author = 'various contributors';
|
|
15
|
+
description = 'Automatically select the fastest solver based on supported instructions and environment.';
|
|
16
|
+
supportsCancellation = true;
|
|
17
|
+
static nonAdditiveInstructions = new Set([
|
|
18
|
+
offByXInstance.id,
|
|
19
|
+
lyingSymbolInstance.id,
|
|
20
|
+
wrapAroundInstance.id,
|
|
21
|
+
symbolsPerRegionInstance.id,
|
|
22
|
+
]);
|
|
39
23
|
isGridSupported(grid) {
|
|
40
24
|
for (const solver of allSolvers.values()) {
|
|
41
25
|
if (solver.id === this.id)
|
|
@@ -171,14 +155,3 @@ class AutoSolver extends Solver {
|
|
|
171
155
|
}
|
|
172
156
|
}
|
|
173
157
|
}
|
|
174
|
-
Object.defineProperty(AutoSolver, "nonAdditiveInstructions", {
|
|
175
|
-
enumerable: true,
|
|
176
|
-
configurable: true,
|
|
177
|
-
writable: true,
|
|
178
|
-
value: new Set([
|
|
179
|
-
offByXInstance.id,
|
|
180
|
-
lyingSymbolInstance.id,
|
|
181
|
-
wrapAroundInstance.id,
|
|
182
|
-
])
|
|
183
|
-
});
|
|
184
|
-
export default AutoSolver;
|