@logic-pad/core 0.26.0 → 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 -3247
- 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 -153
- package/dist/src/data/solver/backtrack/backtrackSolver.d.ts +0 -11
- package/dist/src/data/solver/backtrack/backtrackSolver.js +0 -52
- package/dist/src/data/solver/backtrack/backtrackWorker.d.ts +0 -1
- package/dist/src/data/solver/backtrack/backtrackWorker.js +0 -308
- 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 -93
- 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 -117
- 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 -211
- 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 -14
- package/dist/src/data/symbols/symbols.gen.js +0 -18
- 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 -108
- package/dist/src/index.js +0 -111
- package/dist/src/polyfill/streamPolyfill.d.ts +0 -2
- package/dist/src/polyfill/streamPolyfill.js +0 -1
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
import { ConfigType } from '../config.js';
|
|
2
|
-
import { array } from '../dataHelper.js';
|
|
3
|
-
import GridData from '../grid.js';
|
|
4
|
-
import { Color, MajorRule, Orientation, State, Wrapping, orientationToggle, } from '../primitives.js';
|
|
5
|
-
import LetterSymbol from '../symbols/letterSymbol.js';
|
|
6
|
-
import MyopiaSymbol from '../symbols/myopiaSymbol.js';
|
|
7
|
-
import Rule from './rule.js';
|
|
8
|
-
export default class WrapAroundRule extends Rule {
|
|
9
|
-
horizontal;
|
|
10
|
-
vertical;
|
|
11
|
-
title = 'Wrap Around';
|
|
12
|
-
get configExplanation() {
|
|
13
|
-
return 'Allow edges to connect with each other and symbols / rules to take effect across edges.';
|
|
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
|
-
]);
|
|
108
|
-
/**
|
|
109
|
-
* **The left and right edges are connected (in reverse)**
|
|
110
|
-
*
|
|
111
|
-
* @param horizontal - The horizontal wrapping.
|
|
112
|
-
* @param vertical - The vertical wrapping.
|
|
113
|
-
*/
|
|
114
|
-
constructor(horizontal, vertical) {
|
|
115
|
-
super();
|
|
116
|
-
this.horizontal = horizontal;
|
|
117
|
-
this.vertical = vertical;
|
|
118
|
-
this.horizontal = horizontal;
|
|
119
|
-
this.vertical = vertical;
|
|
120
|
-
}
|
|
121
|
-
onGetTile(x, y, grid) {
|
|
122
|
-
if (grid.width === 0 || grid.height === 0) {
|
|
123
|
-
return { x, y };
|
|
124
|
-
}
|
|
125
|
-
if (this.horizontal !== Wrapping.None) {
|
|
126
|
-
const idx = Math.abs(Math.floor(x / grid.width));
|
|
127
|
-
x = ((x % grid.width) + grid.width) % grid.width;
|
|
128
|
-
if ((this.horizontal === Wrapping.WrapReverse ||
|
|
129
|
-
this.horizontal === Wrapping.ReflectReverse) &&
|
|
130
|
-
idx % 2 === 1) {
|
|
131
|
-
y = grid.height - 1 - y;
|
|
132
|
-
}
|
|
133
|
-
if (this.horizontal === Wrapping.ReflectReverse && idx % 2 === 1) {
|
|
134
|
-
x = grid.width - 1 - x;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (this.vertical !== Wrapping.None) {
|
|
138
|
-
const idx = Math.abs(Math.floor(y / grid.height));
|
|
139
|
-
y = ((y % grid.height) + grid.height) % grid.height;
|
|
140
|
-
if ((this.vertical === Wrapping.WrapReverse ||
|
|
141
|
-
this.vertical === Wrapping.ReflectReverse) &&
|
|
142
|
-
idx % 2 === 1) {
|
|
143
|
-
x = grid.width - 1 - x;
|
|
144
|
-
}
|
|
145
|
-
if (this.vertical === Wrapping.ReflectReverse && idx % 2 === 1) {
|
|
146
|
-
y = grid.height - 1 - y;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
return { x, y };
|
|
150
|
-
}
|
|
151
|
-
get id() {
|
|
152
|
-
return MajorRule.WrapAround;
|
|
153
|
-
}
|
|
154
|
-
get explanation() {
|
|
155
|
-
if (this.horizontal === Wrapping.None && this.vertical === Wrapping.None) {
|
|
156
|
-
return `No edges are connected.`;
|
|
157
|
-
}
|
|
158
|
-
const horizontal = this.horizontal === Wrapping.None
|
|
159
|
-
? null
|
|
160
|
-
: this.horizontal === Wrapping.Wrap ||
|
|
161
|
-
this.horizontal === Wrapping.WrapReverse
|
|
162
|
-
? 'connected'
|
|
163
|
-
: 'reflective';
|
|
164
|
-
const vertical = this.vertical === Wrapping.None
|
|
165
|
-
? null
|
|
166
|
-
: this.vertical === Wrapping.Wrap ||
|
|
167
|
-
this.vertical === Wrapping.WrapReverse
|
|
168
|
-
? 'connected'
|
|
169
|
-
: 'reflective';
|
|
170
|
-
const horizontalReverse = this.horizontal === Wrapping.WrapReverse ||
|
|
171
|
-
this.horizontal === Wrapping.ReflectReverse
|
|
172
|
-
? ' in reverse'
|
|
173
|
-
: '';
|
|
174
|
-
const verticalReverse = this.vertical === Wrapping.WrapReverse ||
|
|
175
|
-
this.vertical === Wrapping.ReflectReverse
|
|
176
|
-
? ' in reverse'
|
|
177
|
-
: '';
|
|
178
|
-
if (this.horizontal === this.vertical) {
|
|
179
|
-
return `All four edges are ${horizontal}${horizontalReverse}.`;
|
|
180
|
-
}
|
|
181
|
-
if (this.horizontal === Wrapping.None) {
|
|
182
|
-
return `The top and bottom edges are ${vertical}${verticalReverse}.`;
|
|
183
|
-
}
|
|
184
|
-
if (this.vertical === Wrapping.None) {
|
|
185
|
-
return `The left and right edges are ${horizontal}${horizontalReverse}.`;
|
|
186
|
-
}
|
|
187
|
-
if (horizontal === vertical) {
|
|
188
|
-
if (horizontalReverse !== '') {
|
|
189
|
-
return `All four edges are ${horizontal}, with the left and right edges${horizontalReverse}.`;
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
return `All four edges are ${horizontal}, with the top and bottom edges${verticalReverse}.`;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return `The left and right edges are ${horizontal}${horizontalReverse}. The top and bottom edges are ${vertical}${verticalReverse}.`;
|
|
196
|
-
}
|
|
197
|
-
createExampleGrid() {
|
|
198
|
-
const horizontal = WrapAroundRule.EXAMPLE_GRID_HORIZONTAL[this.horizontal];
|
|
199
|
-
const vertical = WrapAroundRule.EXAMPLE_GRID_VERTICAL[this.vertical];
|
|
200
|
-
if (horizontal === WrapAroundRule.EXAMPLE_GRID_NONE) {
|
|
201
|
-
return vertical;
|
|
202
|
-
}
|
|
203
|
-
else if (vertical === WrapAroundRule.EXAMPLE_GRID_NONE) {
|
|
204
|
-
return horizontal;
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
const tiles = array(5, 5, (x, y) => {
|
|
208
|
-
const hTile = horizontal.getTile(x, y);
|
|
209
|
-
const vTile = vertical.getTile(x, y);
|
|
210
|
-
return hTile.withColor(hTile.color === Color.Dark || vTile.color === Color.Dark
|
|
211
|
-
? Color.Dark
|
|
212
|
-
: Color.Light);
|
|
213
|
-
});
|
|
214
|
-
const symbols = [];
|
|
215
|
-
horizontal.symbols.forEach(list => symbols.push(...list));
|
|
216
|
-
vertical.symbols.forEach(list => symbols.push(...list));
|
|
217
|
-
return horizontal.withTiles(tiles).withSymbols(symbols);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
get configs() {
|
|
221
|
-
return WrapAroundRule.CONFIGS;
|
|
222
|
-
}
|
|
223
|
-
get searchVariants() {
|
|
224
|
-
return WrapAroundRule.SEARCH_VARIANTS;
|
|
225
|
-
}
|
|
226
|
-
validateGrid(grid) {
|
|
227
|
-
if (grid.getTileCount(true, false, Color.Gray) > 0) {
|
|
228
|
-
return { state: State.Incomplete };
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
return { state: State.Satisfied };
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
copyWith({ horizontal, vertical, }) {
|
|
235
|
-
return new WrapAroundRule(horizontal ?? this.horizontal, vertical ?? this.vertical);
|
|
236
|
-
}
|
|
237
|
-
get isSingleton() {
|
|
238
|
-
return true;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
export const instance = new WrapAroundRule(Wrapping.Wrap, Wrapping.Wrap);
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import GridData from '../grid.js';
|
|
2
|
-
import { Puzzle, PuzzleData } from '../puzzle.js';
|
|
3
|
-
import Rule from '../rules/rule.js';
|
|
4
|
-
import Symbol from '../symbols/symbol.js';
|
|
5
|
-
/**
|
|
6
|
-
* The master serializer for puzzles.
|
|
7
|
-
*
|
|
8
|
-
* It uses the default serializer when stringifying puzzles, and select the correct deserializer when parsing puzzles.
|
|
9
|
-
*/
|
|
10
|
-
declare const Serializer: {
|
|
11
|
-
stringifyRule(rule: Rule): string;
|
|
12
|
-
parseRule(input: string): Rule;
|
|
13
|
-
stringifySymbol(symbol: Symbol): string;
|
|
14
|
-
parseSymbol(input: string): Symbol;
|
|
15
|
-
stringifyGrid(grid: GridData): string;
|
|
16
|
-
parseGrid(input: string): GridData;
|
|
17
|
-
stringifyGridWithSolution(puzzle: PuzzleData): string;
|
|
18
|
-
parseGridWithSolution(input: string): PuzzleData;
|
|
19
|
-
/**
|
|
20
|
-
* Convert a puzzle to a string.
|
|
21
|
-
* @param puzzle The puzzle to convert.
|
|
22
|
-
* @returns The string representation of the puzzle.
|
|
23
|
-
*/
|
|
24
|
-
stringifyPuzzle(puzzle: Puzzle): string;
|
|
25
|
-
/**
|
|
26
|
-
* Parse a puzzle from a string.
|
|
27
|
-
* @param input The string to parse.
|
|
28
|
-
* @returns The parsed puzzle.
|
|
29
|
-
*/
|
|
30
|
-
parsePuzzle(input: string): Puzzle;
|
|
31
|
-
};
|
|
32
|
-
export { Serializer };
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import SerializerV0 from './serializer_v0.js';
|
|
2
|
-
const allSerializers = new Map();
|
|
3
|
-
function register(prototype) {
|
|
4
|
-
allSerializers.set(prototype.version, prototype);
|
|
5
|
-
}
|
|
6
|
-
let defaultSerializer;
|
|
7
|
-
register((defaultSerializer = new SerializerV0()));
|
|
8
|
-
function selectSerializer(input) {
|
|
9
|
-
const match = /^(\d+)_/.exec(input);
|
|
10
|
-
const version = match ? parseInt(match[1]) : 0;
|
|
11
|
-
const serializer = allSerializers.get(version);
|
|
12
|
-
if (serializer) {
|
|
13
|
-
return { serializer, data: input.slice(match?.[0].length ?? 0) };
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
throw new Error(`Unknown serializer version for ${input}`);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* The master serializer for puzzles.
|
|
21
|
-
*
|
|
22
|
-
* It uses the default serializer when stringifying puzzles, and select the correct deserializer when parsing puzzles.
|
|
23
|
-
*/
|
|
24
|
-
const Serializer = {
|
|
25
|
-
stringifyRule(rule) {
|
|
26
|
-
return `${defaultSerializer.version}_${defaultSerializer.stringifyRule(rule)}`;
|
|
27
|
-
},
|
|
28
|
-
parseRule(input) {
|
|
29
|
-
const { serializer, data } = selectSerializer(input);
|
|
30
|
-
return serializer.parseRule(data);
|
|
31
|
-
},
|
|
32
|
-
stringifySymbol(symbol) {
|
|
33
|
-
return `${defaultSerializer.version}_${defaultSerializer.stringifySymbol(symbol)}`;
|
|
34
|
-
},
|
|
35
|
-
parseSymbol(input) {
|
|
36
|
-
const { serializer, data } = selectSerializer(input);
|
|
37
|
-
return serializer.parseSymbol(data);
|
|
38
|
-
},
|
|
39
|
-
stringifyGrid(grid) {
|
|
40
|
-
return `${defaultSerializer.version}_${defaultSerializer.stringifyGrid(grid)}`;
|
|
41
|
-
},
|
|
42
|
-
parseGrid(input) {
|
|
43
|
-
const { serializer, data } = selectSerializer(input);
|
|
44
|
-
return serializer.parseGrid(data);
|
|
45
|
-
},
|
|
46
|
-
stringifyGridWithSolution(puzzle) {
|
|
47
|
-
return `${defaultSerializer.version}_${defaultSerializer.stringifyGridWithSolution(puzzle)}`;
|
|
48
|
-
},
|
|
49
|
-
parseGridWithSolution(input) {
|
|
50
|
-
const { serializer, data } = selectSerializer(input);
|
|
51
|
-
return serializer.parseGridWithSolution(data);
|
|
52
|
-
},
|
|
53
|
-
/**
|
|
54
|
-
* Convert a puzzle to a string.
|
|
55
|
-
* @param puzzle The puzzle to convert.
|
|
56
|
-
* @returns The string representation of the puzzle.
|
|
57
|
-
*/
|
|
58
|
-
stringifyPuzzle(puzzle) {
|
|
59
|
-
return `${defaultSerializer.version}_${defaultSerializer.stringifyPuzzle(puzzle)}`;
|
|
60
|
-
},
|
|
61
|
-
/**
|
|
62
|
-
* Parse a puzzle from a string.
|
|
63
|
-
* @param input The string to parse.
|
|
64
|
-
* @returns The parsed puzzle.
|
|
65
|
-
*/
|
|
66
|
-
parsePuzzle(input) {
|
|
67
|
-
const { serializer, data } = selectSerializer(input);
|
|
68
|
-
return serializer.parsePuzzle(data);
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
export { Serializer };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import CompressorBase from './compressorBase.js';
|
|
2
|
-
/**
|
|
3
|
-
* The master compressor for compressing and decompressing strings.
|
|
4
|
-
*
|
|
5
|
-
* It compares the output of multiple compressors and selects the one with the smallest size (slow),
|
|
6
|
-
* and selects the correct decompressor when decompressing.
|
|
7
|
-
*/
|
|
8
|
-
declare class MasterCompressor extends CompressorBase {
|
|
9
|
-
get id(): string;
|
|
10
|
-
compress(input: string): Promise<string>;
|
|
11
|
-
decompress(input: string): Promise<string>;
|
|
12
|
-
}
|
|
13
|
-
declare const Compressor: MasterCompressor;
|
|
14
|
-
export { Compressor };
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { minBy } from '../../dataHelper.js';
|
|
2
|
-
import CompressorBase from './compressorBase.js';
|
|
3
|
-
import GzipCompressor from './gzipCompressor.js';
|
|
4
|
-
import DeflateCompressor from './deflateCompressor.js';
|
|
5
|
-
const allCompressors = new Map();
|
|
6
|
-
function register(prototype) {
|
|
7
|
-
allCompressors.set(prototype.id, prototype);
|
|
8
|
-
}
|
|
9
|
-
const activeCompressors = [new DeflateCompressor()];
|
|
10
|
-
activeCompressors.forEach(register);
|
|
11
|
-
register(new GzipCompressor());
|
|
12
|
-
/**
|
|
13
|
-
* The master compressor for compressing and decompressing strings.
|
|
14
|
-
*
|
|
15
|
-
* It compares the output of multiple compressors and selects the one with the smallest size (slow),
|
|
16
|
-
* and selects the correct decompressor when decompressing.
|
|
17
|
-
*/
|
|
18
|
-
class MasterCompressor extends CompressorBase {
|
|
19
|
-
get id() {
|
|
20
|
-
return `compressor`;
|
|
21
|
-
}
|
|
22
|
-
async compress(input) {
|
|
23
|
-
const compressed = await Promise.all(activeCompressors.map(async (compressor) => `${compressor.id}_${await compressor.compress(input)}`));
|
|
24
|
-
return minBy(compressed, c => encodeURIComponent(c).length) ?? '';
|
|
25
|
-
}
|
|
26
|
-
async decompress(input) {
|
|
27
|
-
const match = /^([^_]+?)_(.+)$/.exec(input);
|
|
28
|
-
let compressorId;
|
|
29
|
-
let compressed;
|
|
30
|
-
if (match) {
|
|
31
|
-
compressorId = match[1];
|
|
32
|
-
compressed = match[2];
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
compressorId = 'gzip';
|
|
36
|
-
compressed = input;
|
|
37
|
-
}
|
|
38
|
-
const compressor = allCompressors.get(compressorId);
|
|
39
|
-
return compressor.decompress(compressed);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
const Compressor = new MasterCompressor();
|
|
43
|
-
export { Compressor };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import SerializerChecksum from '../serializer_checksum.js';
|
|
2
|
-
import CompressorBase from './compressorBase.js';
|
|
3
|
-
const checksumSerializer = new SerializerChecksum();
|
|
4
|
-
const encoder = new TextEncoder();
|
|
5
|
-
export default class ChecksumCompressor extends CompressorBase {
|
|
6
|
-
get id() {
|
|
7
|
-
return `cs${checksumSerializer.version}`;
|
|
8
|
-
}
|
|
9
|
-
async compress(input) {
|
|
10
|
-
const data = encoder.encode(input);
|
|
11
|
-
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
|
|
12
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
13
|
-
const hashHex = hashArray
|
|
14
|
-
.map(b => b.toString(16).padStart(2, '0'))
|
|
15
|
-
.join('');
|
|
16
|
-
return `${this.id}_${hashHex}`;
|
|
17
|
-
}
|
|
18
|
-
decompress(_input) {
|
|
19
|
-
throw new Error('Checksum decompression is not supported');
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export default abstract class CompressorBase {
|
|
2
|
-
/**
|
|
3
|
-
* The unique identifier for this compressor.
|
|
4
|
-
*/
|
|
5
|
-
abstract get id(): string;
|
|
6
|
-
/**
|
|
7
|
-
* Compress the given input string into URL-safe compressed string.
|
|
8
|
-
* @param input The input string to compress.
|
|
9
|
-
*/
|
|
10
|
-
abstract compress(input: string): Promise<string>;
|
|
11
|
-
/**
|
|
12
|
-
* Decompress the given compressed string back into the original string.
|
|
13
|
-
* @param input The compressed string to decompress.
|
|
14
|
-
*/
|
|
15
|
-
abstract decompress(input: string): Promise<string>;
|
|
16
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import StreamCompressor from './streamCompressor.js';
|
|
2
|
-
export default class DeflateCompressor extends StreamCompressor {
|
|
3
|
-
get id(): string;
|
|
4
|
-
protected get algorithm(): CompressionFormat;
|
|
5
|
-
compress(input: string): Promise<string>;
|
|
6
|
-
decompress(input: string): Promise<string>;
|
|
7
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import StreamCompressor from './streamCompressor.js';
|
|
2
|
-
export default class DeflateCompressor extends StreamCompressor {
|
|
3
|
-
get id() {
|
|
4
|
-
return `dfl`;
|
|
5
|
-
}
|
|
6
|
-
get algorithm() {
|
|
7
|
-
return 'deflate-raw';
|
|
8
|
-
}
|
|
9
|
-
async compress(input) {
|
|
10
|
-
const result = await super.compress(input);
|
|
11
|
-
return result.replace(/\+/g, '-').replace(/\//g, '_');
|
|
12
|
-
}
|
|
13
|
-
async decompress(input) {
|
|
14
|
-
input = input.replace(/-/g, '+').replace(/_/g, '/');
|
|
15
|
-
return await super.decompress(input);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import CompressorBase from './compressorBase.js';
|
|
2
|
-
export default abstract class StreamCompressor extends CompressorBase {
|
|
3
|
-
protected abstract get algorithm(): CompressionFormat;
|
|
4
|
-
compress(input: string): Promise<string>;
|
|
5
|
-
decompress(input: string): Promise<string>;
|
|
6
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import CompressorBase from './compressorBase.js';
|
|
2
|
-
function ensureCompressionStream() {
|
|
3
|
-
if (!globalThis.CompressionStream || !globalThis.DecompressionStream) {
|
|
4
|
-
console.log('CompressionStream not supported. Loading polyfill.');
|
|
5
|
-
return import('../../../polyfill/streamPolyfill.js');
|
|
6
|
-
}
|
|
7
|
-
return Promise.resolve();
|
|
8
|
-
}
|
|
9
|
-
const encoder = new TextEncoder();
|
|
10
|
-
const decoder = new TextDecoder();
|
|
11
|
-
export default class StreamCompressor extends CompressorBase {
|
|
12
|
-
async compress(input) {
|
|
13
|
-
await ensureCompressionStream();
|
|
14
|
-
const blobToBase64 = (blob) => new Promise(resolve => {
|
|
15
|
-
const reader = new FileReader();
|
|
16
|
-
reader.onloadend = () => resolve(reader.result.split(',')[1]);
|
|
17
|
-
reader.readAsDataURL(blob);
|
|
18
|
-
});
|
|
19
|
-
const byteArray = encoder.encode(input);
|
|
20
|
-
const cs = new CompressionStream(this.algorithm);
|
|
21
|
-
const writer = cs.writable.getWriter();
|
|
22
|
-
writer.ready
|
|
23
|
-
.then(() => writer.write(byteArray))
|
|
24
|
-
.then(() => writer.close())
|
|
25
|
-
.catch(console.log);
|
|
26
|
-
return new Response(cs.readable).blob().then(blobToBase64);
|
|
27
|
-
}
|
|
28
|
-
async decompress(input) {
|
|
29
|
-
await ensureCompressionStream();
|
|
30
|
-
const bytes = Uint8Array.from(atob(input), c => c.charCodeAt(0));
|
|
31
|
-
const cs = new DecompressionStream(this.algorithm);
|
|
32
|
-
const writer = cs.writable.getWriter();
|
|
33
|
-
writer.ready
|
|
34
|
-
.then(() => writer.write(bytes))
|
|
35
|
-
.then(() => writer.close())
|
|
36
|
-
.catch(console.log);
|
|
37
|
-
return new Response(cs.readable).arrayBuffer().then(arrayBuffer => {
|
|
38
|
-
return decoder.decode(arrayBuffer);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import GridData from '../grid.js';
|
|
2
|
-
import GridConnections from '../gridConnections.js';
|
|
3
|
-
import Rule from '../rules/rule.js';
|
|
4
|
-
import TileData from '../tile.js';
|
|
5
|
-
import Symbol from '../symbols/symbol.js';
|
|
6
|
-
import { Puzzle, PuzzleData } from '../puzzle.js';
|
|
7
|
-
import GridZones from '../gridZones.js';
|
|
8
|
-
export default abstract class SerializerBase {
|
|
9
|
-
abstract get version(): number;
|
|
10
|
-
abstract stringifyTile(tile: TileData): string;
|
|
11
|
-
abstract parseTile(str: string): TileData;
|
|
12
|
-
abstract stringifyRule(rule: Rule): string;
|
|
13
|
-
abstract stringifySymbol(symbol: Symbol): string;
|
|
14
|
-
abstract parseRule(str: string): Rule;
|
|
15
|
-
abstract parseSymbol(str: string): Symbol;
|
|
16
|
-
abstract stringifyConnections(connections: GridConnections): string;
|
|
17
|
-
abstract parseConnections(input: string): GridConnections;
|
|
18
|
-
abstract stringifyZones(zones: GridZones): string;
|
|
19
|
-
abstract parseZones(input: string): GridZones;
|
|
20
|
-
abstract stringifyTiles(tiles: readonly (readonly TileData[])[]): string;
|
|
21
|
-
abstract parseTiles(input: string): TileData[][];
|
|
22
|
-
abstract stringifyRules(rules: readonly Rule[]): string;
|
|
23
|
-
abstract parseRules(input: string): Rule[];
|
|
24
|
-
abstract stringifySymbols(symbols: ReadonlyMap<string, readonly Symbol[]>): string;
|
|
25
|
-
abstract parseSymbols(input: string): Map<string, Symbol[]>;
|
|
26
|
-
abstract stringifyGrid(grid: GridData): string;
|
|
27
|
-
abstract parseGrid(input: string): GridData;
|
|
28
|
-
abstract stringifyGridWithSolution(puzzle: PuzzleData): string;
|
|
29
|
-
abstract parseGridWithSolution(input: string): PuzzleData;
|
|
30
|
-
abstract stringifyPuzzle(puzzle: Puzzle): string;
|
|
31
|
-
abstract parsePuzzle(input: string): Puzzle;
|
|
32
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import GridData from '../grid.js';
|
|
2
|
-
import GridConnections from '../gridConnections.js';
|
|
3
|
-
import Rule from '../rules/rule.js';
|
|
4
|
-
import TileData from '../tile.js';
|
|
5
|
-
import Symbol from '../symbols/symbol.js';
|
|
6
|
-
import { AnyConfig } from '../config.js';
|
|
7
|
-
import { Puzzle, PuzzleData } from '../puzzle.js';
|
|
8
|
-
import { ControlLine } from '../rules/musicControlLine.js';
|
|
9
|
-
import GridZones from '../gridZones.js';
|
|
10
|
-
import SerializerV0 from './serializer_v0.js';
|
|
11
|
-
import Instruction from '../instruction.js';
|
|
12
|
-
export default class SerializerChecksum extends SerializerV0 {
|
|
13
|
-
readonly version: number;
|
|
14
|
-
parseTile(_str: string): TileData;
|
|
15
|
-
stringifyControlLine(line: ControlLine): string;
|
|
16
|
-
parseControlLine(_str: string): ControlLine;
|
|
17
|
-
stringifyConfig(instruction: Instruction, config: AnyConfig): string;
|
|
18
|
-
parseConfig(_configs: readonly AnyConfig[], _entry: string): [string, unknown];
|
|
19
|
-
parseRule(_str: string): Rule;
|
|
20
|
-
parseSymbol(_str: string): Symbol;
|
|
21
|
-
parseConnections(_input: string): GridConnections;
|
|
22
|
-
stringifyZones(zones: GridZones): string;
|
|
23
|
-
parseZones(_input: string): GridZones;
|
|
24
|
-
parseTiles(_input: string): TileData[][];
|
|
25
|
-
stringifyRules(rules: readonly Rule[]): string;
|
|
26
|
-
parseRules(_input: string): Rule[];
|
|
27
|
-
stringifySymbols(symbols: ReadonlyMap<string, readonly Symbol[]>): string;
|
|
28
|
-
parseSymbols(_input: string): Map<string, Symbol[]>;
|
|
29
|
-
stringifyGrid(grid: GridData): string;
|
|
30
|
-
parseGrid(_input: string): GridData;
|
|
31
|
-
stringifyGridWithSolution(puzzle: PuzzleData): string;
|
|
32
|
-
parseGridWithSolution(_input: string): PuzzleData;
|
|
33
|
-
stringifyPuzzle(puzzle: Puzzle): string;
|
|
34
|
-
parsePuzzle(_input: string): Puzzle;
|
|
35
|
-
}
|