@logic-pad/core 0.23.2 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/logic-core.global.d.ts +53 -0
- package/dist/benchmark/helper.d.ts +21 -0
- package/dist/benchmark/helper.js +34 -0
- package/dist/benchmark/prepareBench.js +140 -0
- package/dist/benchmark/runBench.js +206 -0
- package/dist/{data → src/data}/dataHelper.js +4 -18
- package/dist/{data → src/data}/grid.js +22 -70
- package/dist/{data → src/data}/gridZones.js +1 -6
- package/dist/{data → src/data}/rules/banPatternRule.js +19 -50
- package/dist/{data → src/data}/rules/cellCountPerZoneRule.js +2 -6
- package/dist/{data → src/data}/rules/cellCountRule.js +62 -96
- package/dist/{data → src/data}/rules/completePatternRule.js +6 -22
- package/dist/{data → src/data}/rules/connectAllRule.js +20 -50
- package/dist/{data → src/data}/rules/connectZonesRule.js +28 -58
- package/dist/{data → src/data}/rules/containsShapeRule.js +29 -65
- package/dist/{data → src/data}/rules/customRule.js +28 -57
- package/dist/{data → src/data}/rules/differentCountPerZoneRule.js +33 -68
- package/dist/{data → src/data}/rules/exactCountPerZoneRule.js +43 -82
- package/dist/{data → src/data}/rules/foresightRule.js +50 -87
- package/dist/{data → src/data}/rules/lyingSymbolRule.js +37 -88
- package/dist/{data → src/data}/rules/musicControlLine.js +69 -131
- package/dist/{data → src/data}/rules/musicGridRule.js +43 -76
- package/dist/{data → src/data}/rules/mysteryRule.js +29 -58
- package/dist/src/data/rules/noLoopsRule.d.ts +29 -0
- package/dist/src/data/rules/noLoopsRule.js +111 -0
- package/dist/{data → src/data}/rules/offByXRule.js +49 -74
- package/dist/{data → src/data}/rules/perfectionRule.js +8 -28
- package/dist/{data → src/data}/rules/regionAreaRule.js +47 -86
- package/dist/{data → src/data}/rules/regionShapeRule.js +2 -6
- package/dist/{data → src/data}/rules/rules.gen.d.ts +1 -0
- package/dist/{data → src/data}/rules/rules.gen.js +1 -0
- package/dist/{data → src/data}/rules/sameCountPerZoneRule.js +33 -68
- package/dist/{data → src/data}/rules/sameShapeRule.js +18 -44
- package/dist/{data → src/data}/rules/symbolsPerRegionRule.js +52 -90
- package/dist/{data → src/data}/rules/undercluedRule.js +11 -27
- package/dist/{data → src/data}/rules/uniqueShapeRule.js +18 -44
- package/dist/{data → src/data}/rules/wrapAroundRule.js +99 -138
- package/dist/{data → src/data}/serializer/serializer_checksum.js +1 -9
- package/dist/{data → src/data}/serializer/serializer_v0.js +1 -9
- package/dist/{data → src/data}/solver/auto/autoSolver.js +12 -39
- package/dist/{data → src/data}/solver/backtrack/backtrackSolver.js +15 -39
- package/dist/{data → src/data}/solver/backtrack/backtrackWorker.js +1 -1
- package/dist/{data → src/data}/solver/backtrack/data.js +16 -48
- package/dist/{data → src/data}/solver/backtrack/rules/banPattern.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/cellCount.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/connectAll.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/regionArea.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/regionShape.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/sameShape.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/rules/symbolsPerRegion.js +2 -12
- package/dist/{data → src/data}/solver/backtrack/rules/uniqueShape.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/areaNumber.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/dart.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/directionLinker.js +3 -13
- package/dist/{data → src/data}/solver/backtrack/symbols/focus.js +3 -13
- package/dist/{data → src/data}/solver/backtrack/symbols/galaxy.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/letter.js +2 -12
- package/dist/{data → src/data}/solver/backtrack/symbols/lotus.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/minesweeper.js +3 -13
- package/dist/{data → src/data}/solver/backtrack/symbols/myopia.js +1 -6
- package/dist/{data → src/data}/solver/backtrack/symbols/viewpoint.js +1 -6
- package/dist/{data → src/data}/solver/cspuz/cspuzSolver.js +22 -46
- package/dist/{data → src/data}/solver/eventIteratingSolver.js +9 -12
- package/dist/{data → src/data}/solver/solver.js +1 -8
- package/dist/src/data/solver/universal/universalSolver.js +20 -0
- package/dist/src/data/solver/universal/universalWorker.d.ts +1 -0
- package/dist/{data → src/data}/solver/z3/modules/areaNumberModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/cellCountModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/connectAllModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/dartModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/letterModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/myopiaModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/regionAreaModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/modules/viewpointModule.js +1 -9
- package/dist/{data → src/data}/solver/z3/z3Solver.js +4 -27
- package/dist/{data → src/data}/solver/z3/z3SolverContext.js +3 -12
- package/dist/{data → src/data}/symbols/areaNumberSymbol.js +28 -44
- package/dist/{data → src/data}/symbols/customIconSymbol.js +40 -64
- package/dist/{data → src/data}/symbols/customSymbol.js +4 -12
- package/dist/{data → src/data}/symbols/customTextSymbol.js +40 -64
- package/dist/{data → src/data}/symbols/dartSymbol.js +39 -59
- package/dist/{data → src/data}/symbols/directionLinkerSymbol.js +34 -63
- package/dist/src/data/symbols/everyLetterSymbol.d.ts +32 -0
- package/dist/src/data/symbols/everyLetterSymbol.js +117 -0
- package/dist/{data → src/data}/symbols/focusSymbol.js +49 -69
- package/dist/{data → src/data}/symbols/galaxySymbol.js +12 -31
- package/dist/{data → src/data}/symbols/hiddenSymbol.js +34 -62
- package/dist/{data → src/data}/symbols/houseSymbol.js +39 -67
- package/dist/{data → src/data}/symbols/letterSymbol.js +40 -68
- package/dist/{data → src/data}/symbols/lotusSymbol.js +58 -81
- package/dist/{data → src/data}/symbols/minesweeperSymbol.js +30 -46
- package/dist/{data → src/data}/symbols/myopiaSymbol.js +45 -69
- package/dist/{data → src/data}/symbols/numberSymbol.js +6 -18
- package/dist/{data → src/data}/symbols/symbol.js +4 -12
- package/dist/{data → src/data}/symbols/symbols.gen.d.ts +1 -0
- package/dist/{data → src/data}/symbols/symbols.gen.js +1 -0
- package/dist/{data → src/data}/symbols/viewpointSymbol.js +26 -42
- package/dist/{data → src/data}/tile.js +6 -18
- package/dist/src/data/validateAsync.js +71 -0
- package/dist/src/data/validateAsyncWorker.d.ts +1 -0
- package/dist/{index.d.ts → src/index.d.ts} +3 -1
- package/dist/{index.js → src/index.js} +3 -1
- package/package.json +6 -2
- package/dist/data/solver/universal/universalSolver.js +0 -38
- package/dist/data/validateAsync.js +0 -128
- /package/dist/{data/solver/backtrack/backtrackWorker.d.ts → benchmark/prepareBench.d.ts} +0 -0
- /package/dist/{data/solver/cspuz/cspuzWorker.d.ts → benchmark/runBench.d.ts} +0 -0
- /package/dist/{data → src/data}/config.d.ts +0 -0
- /package/dist/{data → src/data}/config.js +0 -0
- /package/dist/{data → src/data}/configurable.d.ts +0 -0
- /package/dist/{data → src/data}/configurable.js +0 -0
- /package/dist/{data → src/data}/dataHelper.d.ts +0 -0
- /package/dist/{data → src/data}/events/eventHelper.d.ts +0 -0
- /package/dist/{data → src/data}/events/eventHelper.js +0 -0
- /package/dist/{data → src/data}/events/onFinalValidation.d.ts +0 -0
- /package/dist/{data → src/data}/events/onFinalValidation.js +0 -0
- /package/dist/{data → src/data}/events/onGetTile.d.ts +0 -0
- /package/dist/{data → src/data}/events/onGetTile.js +0 -0
- /package/dist/{data → src/data}/events/onGridChange.d.ts +0 -0
- /package/dist/{data → src/data}/events/onGridChange.js +0 -0
- /package/dist/{data → src/data}/events/onGridResize.d.ts +0 -0
- /package/dist/{data → src/data}/events/onGridResize.js +0 -0
- /package/dist/{data → src/data}/events/onSetGrid.d.ts +0 -0
- /package/dist/{data → src/data}/events/onSetGrid.js +0 -0
- /package/dist/{data → src/data}/events/onSymbolDisplay.d.ts +0 -0
- /package/dist/{data → src/data}/events/onSymbolDisplay.js +0 -0
- /package/dist/{data → src/data}/events/onSymbolMerge.d.ts +0 -0
- /package/dist/{data → src/data}/events/onSymbolMerge.js +0 -0
- /package/dist/{data → src/data}/events/onSymbolValidation.d.ts +0 -0
- /package/dist/{data → src/data}/events/onSymbolValidation.js +0 -0
- /package/dist/{data → src/data}/grid.d.ts +0 -0
- /package/dist/{data → src/data}/gridConnections.d.ts +0 -0
- /package/dist/{data → src/data}/gridConnections.js +0 -0
- /package/dist/{data → src/data}/gridZones.d.ts +0 -0
- /package/dist/{data → src/data}/instruction.d.ts +0 -0
- /package/dist/{data → src/data}/instruction.js +0 -0
- /package/dist/{data → src/data}/primitives.d.ts +0 -0
- /package/dist/{data → src/data}/primitives.js +0 -0
- /package/dist/{data → src/data}/puzzle.d.ts +0 -0
- /package/dist/{data → src/data}/puzzle.js +0 -0
- /package/dist/{data → src/data}/rules/banPatternRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/cellCountPerZoneRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/cellCountRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/completePatternRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/connectAllRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/connectZonesRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/containsShapeRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/customRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/differentCountPerZoneRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/exactCountPerZoneRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/foresightRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/index.d.ts +0 -0
- /package/dist/{data → src/data}/rules/index.js +0 -0
- /package/dist/{data → src/data}/rules/lyingSymbolRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/musicControlLine.d.ts +0 -0
- /package/dist/{data → src/data}/rules/musicGridRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/mysteryRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/offByXRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/perfectionRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/regionAreaRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/regionShapeRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/rule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/rule.js +0 -0
- /package/dist/{data → src/data}/rules/sameCountPerZoneRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/sameShapeRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/symbolsPerRegionRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/undercluedRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/uniqueShapeRule.d.ts +0 -0
- /package/dist/{data → src/data}/rules/wrapAroundRule.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/allSerializers.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/allSerializers.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/allCompressors.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/allCompressors.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/checksumCompressor.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/checksumCompressor.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/compressorBase.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/compressorBase.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/deflateCompressor.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/deflateCompressor.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/gzipCompressor.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/gzipCompressor.js +0 -0
- /package/dist/{data → src/data}/serializer/compressor/streamCompressor.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/compressor/streamCompressor.js +0 -0
- /package/dist/{data → src/data}/serializer/serializerBase.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/serializerBase.js +0 -0
- /package/dist/{data → src/data}/serializer/serializer_checksum.d.ts +0 -0
- /package/dist/{data → src/data}/serializer/serializer_v0.d.ts +0 -0
- /package/dist/{data → src/data}/shapes.d.ts +0 -0
- /package/dist/{data → src/data}/shapes.js +0 -0
- /package/dist/{data → src/data}/solver/allSolvers.d.ts +0 -0
- /package/dist/{data → src/data}/solver/allSolvers.js +0 -0
- /package/dist/{data → src/data}/solver/auto/autoSolver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/backtrackSolver.d.ts +0 -0
- /package/dist/{data/solver/universal/universalWorker.d.ts → src/data/solver/backtrack/backtrackWorker.d.ts} +0 -0
- /package/dist/{data → src/data}/solver/backtrack/data.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/banPattern.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/cellCount.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/connectAll.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/regionArea.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/regionShape.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/sameShape.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/symbolsPerRegion.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/rules/uniqueShape.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/areaNumber.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/dart.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/directionLinker.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/focus.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/galaxy.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/letter.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/lotus.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/minesweeper.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/myopia.d.ts +0 -0
- /package/dist/{data → src/data}/solver/backtrack/symbols/viewpoint.d.ts +0 -0
- /package/dist/{data → src/data}/solver/cspuz/cspuzSolver.d.ts +0 -0
- /package/dist/{data/validateAsyncWorker.d.ts → src/data/solver/cspuz/cspuzWorker.d.ts} +0 -0
- /package/dist/{data → src/data}/solver/cspuz/cspuzWorker.js +0 -0
- /package/dist/{data → src/data}/solver/cspuz/jsonify.d.ts +0 -0
- /package/dist/{data → src/data}/solver/cspuz/jsonify.js +0 -0
- /package/dist/{data → src/data}/solver/eventIteratingSolver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/solver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/universal/universalSolver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/universal/universalWorker.js +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/areaNumberModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/cellCountModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/connectAllModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/dartModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/index.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/index.js +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/letterModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/modules.gen.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/modules.gen.js +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/myopiaModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/regionAreaModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/viewpointModule.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/z3Module.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/modules/z3Module.js +0 -0
- /package/dist/{data → src/data}/solver/z3/utils.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/utils.js +0 -0
- /package/dist/{data → src/data}/solver/z3/z3Solver.d.ts +0 -0
- /package/dist/{data → src/data}/solver/z3/z3SolverContext.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/areaNumberSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/customIconSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/customSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/customTextSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/dartSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/directionLinkerSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/focusSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/galaxySymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/hiddenSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/houseSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/index.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/index.js +0 -0
- /package/dist/{data → src/data}/symbols/letterSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/lotusSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/minesweeperSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/myopiaSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/numberSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/symbol.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/viewpointSymbol.d.ts +0 -0
- /package/dist/{data → src/data}/tile.d.ts +0 -0
- /package/dist/{data → src/data}/tileConnections.d.ts +0 -0
- /package/dist/{data → src/data}/tileConnections.js +0 -0
- /package/dist/{data → src/data}/validate.d.ts +0 -0
- /package/dist/{data → src/data}/validate.js +0 -0
- /package/dist/{data → src/data}/validateAsync.d.ts +0 -0
- /package/dist/{data → src/data}/validateAsyncWorker.js +0 -0
- /package/dist/{polyfill → src/polyfill}/streamPolyfill.d.ts +0 -0
- /package/dist/{polyfill → src/polyfill}/streamPolyfill.js +0 -0
|
@@ -2,7 +2,44 @@ import { ConfigType } from '../config.js';
|
|
|
2
2
|
import GridData from '../grid.js';
|
|
3
3
|
import { Color, Orientation } from '../primitives.js';
|
|
4
4
|
import NumberSymbol from './numberSymbol.js';
|
|
5
|
-
class DartSymbol extends NumberSymbol {
|
|
5
|
+
export default class DartSymbol extends NumberSymbol {
|
|
6
|
+
orientation;
|
|
7
|
+
title = 'Dart';
|
|
8
|
+
static CONFIGS = Object.freeze([
|
|
9
|
+
{
|
|
10
|
+
type: ConfigType.Number,
|
|
11
|
+
default: 0,
|
|
12
|
+
field: 'x',
|
|
13
|
+
description: 'X',
|
|
14
|
+
configurable: false,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
type: ConfigType.Number,
|
|
18
|
+
default: 0,
|
|
19
|
+
field: 'y',
|
|
20
|
+
description: 'Y',
|
|
21
|
+
configurable: false,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
type: ConfigType.Number,
|
|
25
|
+
default: 1,
|
|
26
|
+
field: 'number',
|
|
27
|
+
description: 'Number',
|
|
28
|
+
configurable: true,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: ConfigType.Orientation,
|
|
32
|
+
default: Orientation.Right,
|
|
33
|
+
field: 'orientation',
|
|
34
|
+
description: 'Orientation',
|
|
35
|
+
configurable: true,
|
|
36
|
+
},
|
|
37
|
+
]);
|
|
38
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['wwbbw', 'wwwww', 'wbwbb', 'wwwww'])
|
|
39
|
+
.addSymbol(new DartSymbol(1, 0, 1, Orientation.Down))
|
|
40
|
+
.addSymbol(new DartSymbol(4, 0, 2, Orientation.Left))
|
|
41
|
+
.addSymbol(new DartSymbol(3, 1, 1, Orientation.Down))
|
|
42
|
+
.addSymbol(new DartSymbol(0, 2, 3, Orientation.Right)));
|
|
6
43
|
/**
|
|
7
44
|
* **Darts count opposite color cells in that direction**
|
|
8
45
|
*
|
|
@@ -13,18 +50,7 @@ class DartSymbol extends NumberSymbol {
|
|
|
13
50
|
*/
|
|
14
51
|
constructor(x, y, number, orientation) {
|
|
15
52
|
super(x, y, number);
|
|
16
|
-
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true,
|
|
20
|
-
value: orientation
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(this, "title", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
configurable: true,
|
|
25
|
-
writable: true,
|
|
26
|
-
value: 'Dart'
|
|
27
|
-
});
|
|
53
|
+
this.orientation = orientation;
|
|
28
54
|
this.orientation = orientation;
|
|
29
55
|
}
|
|
30
56
|
get id() {
|
|
@@ -67,50 +93,4 @@ class DartSymbol extends NumberSymbol {
|
|
|
67
93
|
return this.copyWith({ number });
|
|
68
94
|
}
|
|
69
95
|
}
|
|
70
|
-
Object.defineProperty(DartSymbol, "CONFIGS", {
|
|
71
|
-
enumerable: true,
|
|
72
|
-
configurable: true,
|
|
73
|
-
writable: true,
|
|
74
|
-
value: Object.freeze([
|
|
75
|
-
{
|
|
76
|
-
type: ConfigType.Number,
|
|
77
|
-
default: 0,
|
|
78
|
-
field: 'x',
|
|
79
|
-
description: 'X',
|
|
80
|
-
configurable: false,
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
type: ConfigType.Number,
|
|
84
|
-
default: 0,
|
|
85
|
-
field: 'y',
|
|
86
|
-
description: 'Y',
|
|
87
|
-
configurable: false,
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
type: ConfigType.Number,
|
|
91
|
-
default: 1,
|
|
92
|
-
field: 'number',
|
|
93
|
-
description: 'Number',
|
|
94
|
-
configurable: true,
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
type: ConfigType.Orientation,
|
|
98
|
-
default: Orientation.Right,
|
|
99
|
-
field: 'orientation',
|
|
100
|
-
description: 'Orientation',
|
|
101
|
-
configurable: true,
|
|
102
|
-
},
|
|
103
|
-
])
|
|
104
|
-
});
|
|
105
|
-
Object.defineProperty(DartSymbol, "EXAMPLE_GRID", {
|
|
106
|
-
enumerable: true,
|
|
107
|
-
configurable: true,
|
|
108
|
-
writable: true,
|
|
109
|
-
value: Object.freeze(GridData.create(['wwbbw', 'wwwww', 'wbwbb', 'wwwww'])
|
|
110
|
-
.addSymbol(new DartSymbol(1, 0, 1, Orientation.Down))
|
|
111
|
-
.addSymbol(new DartSymbol(4, 0, 2, Orientation.Left))
|
|
112
|
-
.addSymbol(new DartSymbol(3, 1, 1, Orientation.Down))
|
|
113
|
-
.addSymbol(new DartSymbol(0, 2, 3, Orientation.Right)))
|
|
114
|
-
});
|
|
115
|
-
export default DartSymbol;
|
|
116
96
|
export const instance = new DartSymbol(0, 0, 1, Orientation.Right);
|
|
@@ -16,7 +16,38 @@ function makeTurtle(pos1, pos2, grid) {
|
|
|
16
16
|
color2: getColor(pos2, grid),
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
-
class DirectionLinkerSymbol extends Symbol {
|
|
19
|
+
export default class DirectionLinkerSymbol extends Symbol {
|
|
20
|
+
x;
|
|
21
|
+
y;
|
|
22
|
+
static CONFIGS = Object.freeze([
|
|
23
|
+
{
|
|
24
|
+
type: ConfigType.Number,
|
|
25
|
+
default: 0,
|
|
26
|
+
field: 'x',
|
|
27
|
+
description: 'X',
|
|
28
|
+
configurable: false,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: ConfigType.Number,
|
|
32
|
+
default: 0,
|
|
33
|
+
field: 'y',
|
|
34
|
+
description: 'Y',
|
|
35
|
+
configurable: false,
|
|
36
|
+
},
|
|
37
|
+
]);
|
|
38
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['wwbbw', 'wwwww', 'wwwww', 'wwwww']));
|
|
39
|
+
static directionDeltas = {
|
|
40
|
+
[Direction.Up]: { dx: 0, dy: -1 },
|
|
41
|
+
[Direction.Down]: { dx: 0, dy: 1 },
|
|
42
|
+
[Direction.Left]: { dx: -1, dy: 0 },
|
|
43
|
+
[Direction.Right]: { dx: 1, dy: 0 },
|
|
44
|
+
};
|
|
45
|
+
linkedDirections = {
|
|
46
|
+
[Direction.Left]: Direction.Left,
|
|
47
|
+
[Direction.Up]: Direction.Up,
|
|
48
|
+
[Direction.Right]: Direction.Right,
|
|
49
|
+
[Direction.Down]: Direction.Down,
|
|
50
|
+
};
|
|
20
51
|
/**
|
|
21
52
|
* **Darts count opposite color cells in that direction**
|
|
22
53
|
*
|
|
@@ -25,29 +56,8 @@ class DirectionLinkerSymbol extends Symbol {
|
|
|
25
56
|
*/
|
|
26
57
|
constructor(x, y) {
|
|
27
58
|
super(x, y);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
configurable: true,
|
|
31
|
-
writable: true,
|
|
32
|
-
value: x
|
|
33
|
-
});
|
|
34
|
-
Object.defineProperty(this, "y", {
|
|
35
|
-
enumerable: true,
|
|
36
|
-
configurable: true,
|
|
37
|
-
writable: true,
|
|
38
|
-
value: y
|
|
39
|
-
});
|
|
40
|
-
Object.defineProperty(this, "linkedDirections", {
|
|
41
|
-
enumerable: true,
|
|
42
|
-
configurable: true,
|
|
43
|
-
writable: true,
|
|
44
|
-
value: {
|
|
45
|
-
[Direction.Left]: Direction.Left,
|
|
46
|
-
[Direction.Up]: Direction.Up,
|
|
47
|
-
[Direction.Right]: Direction.Right,
|
|
48
|
-
[Direction.Down]: Direction.Down,
|
|
49
|
-
}
|
|
50
|
-
});
|
|
59
|
+
this.x = x;
|
|
60
|
+
this.y = y;
|
|
51
61
|
}
|
|
52
62
|
changeDirections(linkedDirections) {
|
|
53
63
|
this.linkedDirections = linkedDirections;
|
|
@@ -219,43 +229,4 @@ class DirectionLinkerSymbol extends Symbol {
|
|
|
219
229
|
];
|
|
220
230
|
}
|
|
221
231
|
}
|
|
222
|
-
Object.defineProperty(DirectionLinkerSymbol, "CONFIGS", {
|
|
223
|
-
enumerable: true,
|
|
224
|
-
configurable: true,
|
|
225
|
-
writable: true,
|
|
226
|
-
value: Object.freeze([
|
|
227
|
-
{
|
|
228
|
-
type: ConfigType.Number,
|
|
229
|
-
default: 0,
|
|
230
|
-
field: 'x',
|
|
231
|
-
description: 'X',
|
|
232
|
-
configurable: false,
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
type: ConfigType.Number,
|
|
236
|
-
default: 0,
|
|
237
|
-
field: 'y',
|
|
238
|
-
description: 'Y',
|
|
239
|
-
configurable: false,
|
|
240
|
-
},
|
|
241
|
-
])
|
|
242
|
-
});
|
|
243
|
-
Object.defineProperty(DirectionLinkerSymbol, "EXAMPLE_GRID", {
|
|
244
|
-
enumerable: true,
|
|
245
|
-
configurable: true,
|
|
246
|
-
writable: true,
|
|
247
|
-
value: Object.freeze(GridData.create(['wwbbw', 'wwwww', 'wwwww', 'wwwww']))
|
|
248
|
-
});
|
|
249
|
-
Object.defineProperty(DirectionLinkerSymbol, "directionDeltas", {
|
|
250
|
-
enumerable: true,
|
|
251
|
-
configurable: true,
|
|
252
|
-
writable: true,
|
|
253
|
-
value: {
|
|
254
|
-
[Direction.Up]: { dx: 0, dy: -1 },
|
|
255
|
-
[Direction.Down]: { dx: 0, dy: 1 },
|
|
256
|
-
[Direction.Left]: { dx: -1, dy: 0 },
|
|
257
|
-
[Direction.Right]: { dx: 1, dy: 0 },
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
export default DirectionLinkerSymbol;
|
|
261
232
|
export const instance = undefined;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AnyConfig } from '../config.js';
|
|
2
|
+
import GridData from '../grid.js';
|
|
3
|
+
import { State } from '../primitives.js';
|
|
4
|
+
import Symbol from './symbol.js';
|
|
5
|
+
export default class EveryLetterSymbol extends Symbol {
|
|
6
|
+
readonly x: number;
|
|
7
|
+
readonly y: number;
|
|
8
|
+
readonly letter: string;
|
|
9
|
+
readonly title = "Hollow Letter";
|
|
10
|
+
private static readonly CONFIGS;
|
|
11
|
+
private static readonly EXAMPLE_GRID;
|
|
12
|
+
/**
|
|
13
|
+
* **Include each Hollow Letter once per region**
|
|
14
|
+
*
|
|
15
|
+
* @param x - The x-coordinate of the symbol.
|
|
16
|
+
* @param y - The y-coordinate of the symbol.
|
|
17
|
+
* @param letter - The letter of the symbol.
|
|
18
|
+
*/
|
|
19
|
+
constructor(x: number, y: number, letter: string);
|
|
20
|
+
get id(): string;
|
|
21
|
+
get explanation(): string;
|
|
22
|
+
get configs(): readonly AnyConfig[] | null;
|
|
23
|
+
createExampleGrid(): GridData;
|
|
24
|
+
validateSymbol(grid: GridData): State;
|
|
25
|
+
copyWith({ x, y, letter, }: {
|
|
26
|
+
x?: number;
|
|
27
|
+
y?: number;
|
|
28
|
+
letter?: string;
|
|
29
|
+
}): this;
|
|
30
|
+
withLetter(letter: string): this;
|
|
31
|
+
}
|
|
32
|
+
export declare const instance: EveryLetterSymbol;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { ConfigType } from '../config.js';
|
|
2
|
+
import GridData from '../grid.js';
|
|
3
|
+
import { array } from '../dataHelper.js';
|
|
4
|
+
import { Color, State } from '../primitives.js';
|
|
5
|
+
import Symbol from './symbol.js';
|
|
6
|
+
export default class EveryLetterSymbol extends Symbol {
|
|
7
|
+
x;
|
|
8
|
+
y;
|
|
9
|
+
letter;
|
|
10
|
+
title = 'Hollow Letter';
|
|
11
|
+
static CONFIGS = Object.freeze([
|
|
12
|
+
{
|
|
13
|
+
type: ConfigType.Number,
|
|
14
|
+
default: 0,
|
|
15
|
+
field: 'x',
|
|
16
|
+
description: 'X',
|
|
17
|
+
configurable: false,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: ConfigType.Number,
|
|
21
|
+
default: 0,
|
|
22
|
+
field: 'y',
|
|
23
|
+
description: 'Y',
|
|
24
|
+
configurable: false,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
type: ConfigType.String,
|
|
28
|
+
default: 'a',
|
|
29
|
+
field: 'letter',
|
|
30
|
+
description: 'Letter',
|
|
31
|
+
explanation: 'Use single lowercase letters by convention.',
|
|
32
|
+
configurable: true,
|
|
33
|
+
},
|
|
34
|
+
]);
|
|
35
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['bwwbw', 'bwbbw', 'wwbww', 'bbbwb'])
|
|
36
|
+
.addSymbol(new EveryLetterSymbol(2, 0, 'b'))
|
|
37
|
+
.addSymbol(new EveryLetterSymbol(4, 1, 'a'))
|
|
38
|
+
.addSymbol(new EveryLetterSymbol(0, 2, 'a'))
|
|
39
|
+
.addSymbol(new EveryLetterSymbol(3, 2, 'b')));
|
|
40
|
+
/**
|
|
41
|
+
* **Include each Hollow Letter once per region**
|
|
42
|
+
*
|
|
43
|
+
* @param x - The x-coordinate of the symbol.
|
|
44
|
+
* @param y - The y-coordinate of the symbol.
|
|
45
|
+
* @param letter - The letter of the symbol.
|
|
46
|
+
*/
|
|
47
|
+
constructor(x, y, letter) {
|
|
48
|
+
super(x, y);
|
|
49
|
+
this.x = x;
|
|
50
|
+
this.y = y;
|
|
51
|
+
this.letter = letter;
|
|
52
|
+
this.letter = letter;
|
|
53
|
+
}
|
|
54
|
+
get id() {
|
|
55
|
+
return `every_letter`;
|
|
56
|
+
}
|
|
57
|
+
get explanation() {
|
|
58
|
+
return 'Include each *Hollow Letter* once per region';
|
|
59
|
+
}
|
|
60
|
+
get configs() {
|
|
61
|
+
return EveryLetterSymbol.CONFIGS;
|
|
62
|
+
}
|
|
63
|
+
createExampleGrid() {
|
|
64
|
+
return EveryLetterSymbol.EXAMPLE_GRID;
|
|
65
|
+
}
|
|
66
|
+
validateSymbol(grid) {
|
|
67
|
+
const uniqueLetters = new Set(grid.symbols.get(this.id)?.map(s => s.letter));
|
|
68
|
+
if (uniqueLetters.size === 0) {
|
|
69
|
+
return State.Satisfied;
|
|
70
|
+
}
|
|
71
|
+
const possibleLetters = new Set(uniqueLetters);
|
|
72
|
+
const thisX = Math.floor(this.x);
|
|
73
|
+
const thisY = Math.floor(this.y);
|
|
74
|
+
let complete = true;
|
|
75
|
+
const visited = array(grid.width, grid.height, () => false);
|
|
76
|
+
const connected = array(grid.width, grid.height, () => false);
|
|
77
|
+
const color = grid.getTile(thisX, thisY).color;
|
|
78
|
+
if (color !== Color.Gray) {
|
|
79
|
+
grid.iterateArea({ x: thisX, y: thisY }, tile => tile.color === Color.Gray || tile.color === color, (tile, x, y) => {
|
|
80
|
+
visited[y][x] = true;
|
|
81
|
+
if (tile.color === Color.Gray)
|
|
82
|
+
complete = false;
|
|
83
|
+
});
|
|
84
|
+
grid.iterateArea({ x: thisX, y: thisY }, tile => tile.color === color, (_, x, y) => {
|
|
85
|
+
connected[y][x] = true;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
return State.Incomplete;
|
|
90
|
+
}
|
|
91
|
+
for (const symbol of grid.symbols.get(this.id) ?? []) {
|
|
92
|
+
if (symbol instanceof EveryLetterSymbol) {
|
|
93
|
+
const symbolX = Math.floor(symbol.x);
|
|
94
|
+
const symbolY = Math.floor(symbol.y);
|
|
95
|
+
if (visited[symbolY][symbolX]) {
|
|
96
|
+
possibleLetters.delete(symbol.letter);
|
|
97
|
+
}
|
|
98
|
+
if (connected[symbolY][symbolX]) {
|
|
99
|
+
if (!uniqueLetters.delete(symbol.letter)) {
|
|
100
|
+
return State.Error;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (possibleLetters.size > 0) {
|
|
106
|
+
return State.Error;
|
|
107
|
+
}
|
|
108
|
+
return complete ? State.Satisfied : State.Incomplete;
|
|
109
|
+
}
|
|
110
|
+
copyWith({ x, y, letter, }) {
|
|
111
|
+
return new EveryLetterSymbol(x ?? this.x, y ?? this.y, letter ?? this.letter);
|
|
112
|
+
}
|
|
113
|
+
withLetter(letter) {
|
|
114
|
+
return this.copyWith({ letter });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export const instance = new EveryLetterSymbol(0, 0, 'a');
|
|
@@ -10,7 +10,8 @@ const OFFSETS = [
|
|
|
10
10
|
[0, 1],
|
|
11
11
|
[-1, 0],
|
|
12
12
|
];
|
|
13
|
-
class FocusSymbol extends NumberSymbol {
|
|
13
|
+
export default class FocusSymbol extends NumberSymbol {
|
|
14
|
+
deadEnd;
|
|
14
15
|
get title() {
|
|
15
16
|
if (this.deadEnd) {
|
|
16
17
|
return 'Dead End';
|
|
@@ -19,6 +20,52 @@ class FocusSymbol extends NumberSymbol {
|
|
|
19
20
|
return 'Focus Number';
|
|
20
21
|
}
|
|
21
22
|
}
|
|
23
|
+
static CONFIGS = Object.freeze([
|
|
24
|
+
{
|
|
25
|
+
type: ConfigType.Number,
|
|
26
|
+
default: 0,
|
|
27
|
+
field: 'x',
|
|
28
|
+
description: 'X',
|
|
29
|
+
configurable: false,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: ConfigType.Number,
|
|
33
|
+
default: 0,
|
|
34
|
+
field: 'y',
|
|
35
|
+
description: 'Y',
|
|
36
|
+
configurable: false,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
type: ConfigType.Boolean,
|
|
40
|
+
default: false,
|
|
41
|
+
field: 'deadEnd',
|
|
42
|
+
description: 'Dead End',
|
|
43
|
+
explanation: 'A Dead End is a Focus Number of 1 that can be stacked with other symbols.',
|
|
44
|
+
configurable: true,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
type: ConfigType.Number,
|
|
48
|
+
default: 1,
|
|
49
|
+
field: 'number',
|
|
50
|
+
description: 'Number',
|
|
51
|
+
explanation: 'Must be 1 for Dead Ends. Between 0 and 4 for Focus Numbers.',
|
|
52
|
+
configurable: true,
|
|
53
|
+
},
|
|
54
|
+
]);
|
|
55
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['wwwww', 'bbbbw', 'wwbbw', 'wwwww']).withSymbols([
|
|
56
|
+
new FocusSymbol(0, 0, false, 1),
|
|
57
|
+
new FocusSymbol(4, 1, false, 2),
|
|
58
|
+
new FocusSymbol(1, 3, false, 3),
|
|
59
|
+
]));
|
|
60
|
+
static EXAMPLE_GRID_DEAD_END = Object.freeze(GridData.create(['wwwww', 'bbbbw', 'wwwbw', 'bbbbw']).withSymbols([
|
|
61
|
+
new FocusSymbol(0, 0, true, 1),
|
|
62
|
+
new FocusSymbol(4, 3, true, 1),
|
|
63
|
+
new FocusSymbol(0, 2, true, 1),
|
|
64
|
+
new FocusSymbol(2, 2, true, 1),
|
|
65
|
+
new AreaNumberSymbol(0, 2, 3),
|
|
66
|
+
new LetterSymbol(0, 0, 'A'),
|
|
67
|
+
new LetterSymbol(4, 3, 'A'),
|
|
68
|
+
]));
|
|
22
69
|
/**
|
|
23
70
|
* **Focus Numbers count directly adjacent cells of the same color**
|
|
24
71
|
* @param x - The x-coordinate of the symbol.
|
|
@@ -31,12 +78,7 @@ class FocusSymbol extends NumberSymbol {
|
|
|
31
78
|
number = 1;
|
|
32
79
|
}
|
|
33
80
|
super(x, y, number);
|
|
34
|
-
|
|
35
|
-
enumerable: true,
|
|
36
|
-
configurable: true,
|
|
37
|
-
writable: true,
|
|
38
|
-
value: deadEnd
|
|
39
|
-
});
|
|
81
|
+
this.deadEnd = deadEnd;
|
|
40
82
|
this.deadEnd = deadEnd;
|
|
41
83
|
}
|
|
42
84
|
get id() {
|
|
@@ -114,66 +156,4 @@ class FocusSymbol extends NumberSymbol {
|
|
|
114
156
|
return this.copyWith({ deadEnd });
|
|
115
157
|
}
|
|
116
158
|
}
|
|
117
|
-
Object.defineProperty(FocusSymbol, "CONFIGS", {
|
|
118
|
-
enumerable: true,
|
|
119
|
-
configurable: true,
|
|
120
|
-
writable: true,
|
|
121
|
-
value: Object.freeze([
|
|
122
|
-
{
|
|
123
|
-
type: ConfigType.Number,
|
|
124
|
-
default: 0,
|
|
125
|
-
field: 'x',
|
|
126
|
-
description: 'X',
|
|
127
|
-
configurable: false,
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
type: ConfigType.Number,
|
|
131
|
-
default: 0,
|
|
132
|
-
field: 'y',
|
|
133
|
-
description: 'Y',
|
|
134
|
-
configurable: false,
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
type: ConfigType.Boolean,
|
|
138
|
-
default: false,
|
|
139
|
-
field: 'deadEnd',
|
|
140
|
-
description: 'Dead End',
|
|
141
|
-
explanation: 'A Dead End is a Focus Number of 1 that can be stacked with other symbols.',
|
|
142
|
-
configurable: true,
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
type: ConfigType.Number,
|
|
146
|
-
default: 1,
|
|
147
|
-
field: 'number',
|
|
148
|
-
description: 'Number',
|
|
149
|
-
explanation: 'Must be 1 for Dead Ends. Between 0 and 4 for Focus Numbers.',
|
|
150
|
-
configurable: true,
|
|
151
|
-
},
|
|
152
|
-
])
|
|
153
|
-
});
|
|
154
|
-
Object.defineProperty(FocusSymbol, "EXAMPLE_GRID", {
|
|
155
|
-
enumerable: true,
|
|
156
|
-
configurable: true,
|
|
157
|
-
writable: true,
|
|
158
|
-
value: Object.freeze(GridData.create(['wwwww', 'bbbbw', 'wwbbw', 'wwwww']).withSymbols([
|
|
159
|
-
new FocusSymbol(0, 0, false, 1),
|
|
160
|
-
new FocusSymbol(4, 1, false, 2),
|
|
161
|
-
new FocusSymbol(1, 3, false, 3),
|
|
162
|
-
]))
|
|
163
|
-
});
|
|
164
|
-
Object.defineProperty(FocusSymbol, "EXAMPLE_GRID_DEAD_END", {
|
|
165
|
-
enumerable: true,
|
|
166
|
-
configurable: true,
|
|
167
|
-
writable: true,
|
|
168
|
-
value: Object.freeze(GridData.create(['wwwww', 'bbbbw', 'wwwbw', 'bbbbw']).withSymbols([
|
|
169
|
-
new FocusSymbol(0, 0, true, 1),
|
|
170
|
-
new FocusSymbol(4, 3, true, 1),
|
|
171
|
-
new FocusSymbol(0, 2, true, 1),
|
|
172
|
-
new FocusSymbol(2, 2, true, 1),
|
|
173
|
-
new AreaNumberSymbol(0, 2, 3),
|
|
174
|
-
new LetterSymbol(0, 0, 'A'),
|
|
175
|
-
new LetterSymbol(4, 3, 'A'),
|
|
176
|
-
]))
|
|
177
|
-
});
|
|
178
|
-
export default FocusSymbol;
|
|
179
159
|
export const instance = new FocusSymbol(0, 0, false, 1);
|
|
@@ -2,7 +2,16 @@ import { ConfigType } from '../config.js';
|
|
|
2
2
|
import GridData from '../grid.js';
|
|
3
3
|
import { Direction } from '../primitives.js';
|
|
4
4
|
import DirectionLinkerSymbol from './directionLinkerSymbol.js';
|
|
5
|
-
class GalaxySymbol extends DirectionLinkerSymbol {
|
|
5
|
+
export default class GalaxySymbol extends DirectionLinkerSymbol {
|
|
6
|
+
x;
|
|
7
|
+
y;
|
|
8
|
+
title = 'Galaxy';
|
|
9
|
+
static linkedDirections = {
|
|
10
|
+
[Direction.Left]: Direction.Right,
|
|
11
|
+
[Direction.Up]: Direction.Down,
|
|
12
|
+
[Direction.Right]: Direction.Left,
|
|
13
|
+
[Direction.Down]: Direction.Up,
|
|
14
|
+
};
|
|
6
15
|
/**
|
|
7
16
|
* **Galaxies are centers of rotational symmetry**
|
|
8
17
|
*
|
|
@@ -11,24 +20,8 @@ class GalaxySymbol extends DirectionLinkerSymbol {
|
|
|
11
20
|
*/
|
|
12
21
|
constructor(x, y) {
|
|
13
22
|
super(x, y);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true,
|
|
18
|
-
value: x
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(this, "y", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: y
|
|
25
|
-
});
|
|
26
|
-
Object.defineProperty(this, "title", {
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
writable: true,
|
|
30
|
-
value: 'Galaxy'
|
|
31
|
-
});
|
|
23
|
+
this.x = x;
|
|
24
|
+
this.y = y;
|
|
32
25
|
super.changeDirections(GalaxySymbol.linkedDirections);
|
|
33
26
|
}
|
|
34
27
|
get id() {
|
|
@@ -65,16 +58,4 @@ class GalaxySymbol extends DirectionLinkerSymbol {
|
|
|
65
58
|
return new GalaxySymbol(x ?? this.x, y ?? this.y);
|
|
66
59
|
}
|
|
67
60
|
}
|
|
68
|
-
Object.defineProperty(GalaxySymbol, "linkedDirections", {
|
|
69
|
-
enumerable: true,
|
|
70
|
-
configurable: true,
|
|
71
|
-
writable: true,
|
|
72
|
-
value: {
|
|
73
|
-
[Direction.Left]: Direction.Right,
|
|
74
|
-
[Direction.Up]: Direction.Down,
|
|
75
|
-
[Direction.Right]: Direction.Left,
|
|
76
|
-
[Direction.Down]: Direction.Up,
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
export default GalaxySymbol;
|
|
80
61
|
export const instance = new GalaxySymbol(0, 0);
|
|
@@ -3,10 +3,40 @@ import GridData from '../grid.js';
|
|
|
3
3
|
import { Color, State } from '../primitives.js';
|
|
4
4
|
import CustomIconSymbol from './customIconSymbol.js';
|
|
5
5
|
import Symbol from './symbol.js';
|
|
6
|
-
class HiddenSymbol extends Symbol {
|
|
6
|
+
export default class HiddenSymbol extends Symbol {
|
|
7
|
+
x;
|
|
8
|
+
y;
|
|
9
|
+
revealLocation;
|
|
10
|
+
title = 'Hidden Symbol Marker';
|
|
7
11
|
get configExplanation() {
|
|
8
12
|
return 'Other symbols in the same location will be hidden until this tile is colored correctly.';
|
|
9
13
|
}
|
|
14
|
+
static CONFIGS = Object.freeze([
|
|
15
|
+
{
|
|
16
|
+
type: ConfigType.Number,
|
|
17
|
+
default: 0,
|
|
18
|
+
field: 'x',
|
|
19
|
+
description: 'X',
|
|
20
|
+
configurable: false,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: ConfigType.Number,
|
|
24
|
+
default: 0,
|
|
25
|
+
field: 'y',
|
|
26
|
+
description: 'Y',
|
|
27
|
+
configurable: false,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
type: ConfigType.Boolean,
|
|
31
|
+
default: false,
|
|
32
|
+
field: 'revealLocation',
|
|
33
|
+
description: 'Reveal symbol location',
|
|
34
|
+
explanation: 'Whether to show this symbol when the tile is not yet colored correctly.',
|
|
35
|
+
configurable: true,
|
|
36
|
+
},
|
|
37
|
+
]);
|
|
38
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['w']).addSymbol(new CustomIconSymbol('', GridData.create(['.']), 0, 0, 'MdHideSource') // Not using HiddenSymbol here because it is meant to be hidden in non-edit mode
|
|
39
|
+
));
|
|
10
40
|
/**
|
|
11
41
|
* **Hidden Symbols: color cells correctly to reveal more clues**
|
|
12
42
|
*
|
|
@@ -16,30 +46,9 @@ class HiddenSymbol extends Symbol {
|
|
|
16
46
|
*/
|
|
17
47
|
constructor(x, y, revealLocation = false) {
|
|
18
48
|
super(x, y);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
writable: true,
|
|
23
|
-
value: x
|
|
24
|
-
});
|
|
25
|
-
Object.defineProperty(this, "y", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
configurable: true,
|
|
28
|
-
writable: true,
|
|
29
|
-
value: y
|
|
30
|
-
});
|
|
31
|
-
Object.defineProperty(this, "revealLocation", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
configurable: true,
|
|
34
|
-
writable: true,
|
|
35
|
-
value: revealLocation
|
|
36
|
-
});
|
|
37
|
-
Object.defineProperty(this, "title", {
|
|
38
|
-
enumerable: true,
|
|
39
|
-
configurable: true,
|
|
40
|
-
writable: true,
|
|
41
|
-
value: 'Hidden Symbol Marker'
|
|
42
|
-
});
|
|
49
|
+
this.x = x;
|
|
50
|
+
this.y = y;
|
|
51
|
+
this.revealLocation = revealLocation;
|
|
43
52
|
this.revealLocation = revealLocation;
|
|
44
53
|
}
|
|
45
54
|
get id() {
|
|
@@ -101,41 +110,4 @@ class HiddenSymbol extends Symbol {
|
|
|
101
110
|
return this.copyWith({ revealLocation });
|
|
102
111
|
}
|
|
103
112
|
}
|
|
104
|
-
Object.defineProperty(HiddenSymbol, "CONFIGS", {
|
|
105
|
-
enumerable: true,
|
|
106
|
-
configurable: true,
|
|
107
|
-
writable: true,
|
|
108
|
-
value: Object.freeze([
|
|
109
|
-
{
|
|
110
|
-
type: ConfigType.Number,
|
|
111
|
-
default: 0,
|
|
112
|
-
field: 'x',
|
|
113
|
-
description: 'X',
|
|
114
|
-
configurable: false,
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
type: ConfigType.Number,
|
|
118
|
-
default: 0,
|
|
119
|
-
field: 'y',
|
|
120
|
-
description: 'Y',
|
|
121
|
-
configurable: false,
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
type: ConfigType.Boolean,
|
|
125
|
-
default: false,
|
|
126
|
-
field: 'revealLocation',
|
|
127
|
-
description: 'Reveal symbol location',
|
|
128
|
-
explanation: 'Whether to show this symbol when the tile is not yet colored correctly.',
|
|
129
|
-
configurable: true,
|
|
130
|
-
},
|
|
131
|
-
])
|
|
132
|
-
});
|
|
133
|
-
Object.defineProperty(HiddenSymbol, "EXAMPLE_GRID", {
|
|
134
|
-
enumerable: true,
|
|
135
|
-
configurable: true,
|
|
136
|
-
writable: true,
|
|
137
|
-
value: Object.freeze(GridData.create(['w']).addSymbol(new CustomIconSymbol('', GridData.create(['.']), 0, 0, 'MdHideSource') // Not using HiddenSymbol here because it is meant to be hidden in non-edit mode
|
|
138
|
-
))
|
|
139
|
-
});
|
|
140
|
-
export default HiddenSymbol;
|
|
141
113
|
export const instance = new HiddenSymbol(0, 0);
|