@logic-pad/core 0.24.0 → 0.25.1
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 +22 -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 +15 -68
- 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 +11 -40
- 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/{data → src/data}/symbols/everyLetterSymbol.js +37 -65
- 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/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} +2 -1
- package/dist/{index.js → src/index.js} +2 -1
- package/package.json +13 -10
- 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/everyLetterSymbol.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/symbols.gen.d.ts +0 -0
- /package/dist/{data → src/data}/symbols/symbols.gen.js +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
|
@@ -3,7 +3,66 @@ import GridData from '../grid.js';
|
|
|
3
3
|
import { Color, State } from '../primitives.js';
|
|
4
4
|
import AreaNumberSymbol from '../symbols/areaNumberSymbol.js';
|
|
5
5
|
import Rule from './rule.js';
|
|
6
|
-
class CellCountRule extends Rule {
|
|
6
|
+
export default class CellCountRule extends Rule {
|
|
7
|
+
color;
|
|
8
|
+
count;
|
|
9
|
+
title = 'Total Count';
|
|
10
|
+
static CONFIGS = Object.freeze([
|
|
11
|
+
{
|
|
12
|
+
type: ConfigType.Color,
|
|
13
|
+
default: Color.Light,
|
|
14
|
+
allowGray: false,
|
|
15
|
+
field: 'color',
|
|
16
|
+
description: 'Color',
|
|
17
|
+
configurable: true,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: ConfigType.Number,
|
|
21
|
+
default: 10,
|
|
22
|
+
min: 0,
|
|
23
|
+
field: 'count',
|
|
24
|
+
description: 'Count',
|
|
25
|
+
configurable: true,
|
|
26
|
+
},
|
|
27
|
+
]);
|
|
28
|
+
static EXAMPLE_GRID_LIGHT = Object.freeze([
|
|
29
|
+
GridData.create(['bbbbb', 'bbbbb', 'bbbbb', 'bbbbb']),
|
|
30
|
+
GridData.create(['bbbbb', 'bbbbb', 'bwbbb', 'bbbbb']).withSymbols([
|
|
31
|
+
new AreaNumberSymbol(1, 2, 1),
|
|
32
|
+
]),
|
|
33
|
+
GridData.create(['bbbbb', 'bbbbb', 'bwwbb', 'bbbbb']).withSymbols([
|
|
34
|
+
new AreaNumberSymbol(1, 2, 2),
|
|
35
|
+
]),
|
|
36
|
+
GridData.create(['bbbbb', 'bwbbb', 'bwwbb', 'bbbbb']).withSymbols([
|
|
37
|
+
new AreaNumberSymbol(1, 2, 3),
|
|
38
|
+
]),
|
|
39
|
+
GridData.create(['bbbbb', 'bwwbb', 'bwwbb', 'bbbbb']).withSymbols([
|
|
40
|
+
new AreaNumberSymbol(1, 2, 4),
|
|
41
|
+
]),
|
|
42
|
+
GridData.create(['bbbbb', 'bwwbb', 'bwwwb', 'bbbbb']).withSymbols([
|
|
43
|
+
new AreaNumberSymbol(1, 2, 5),
|
|
44
|
+
]),
|
|
45
|
+
GridData.create(['bbbbb', 'bwwwb', 'bwwwb', 'bbbbb']).withSymbols([
|
|
46
|
+
new AreaNumberSymbol(1, 2, 6),
|
|
47
|
+
]),
|
|
48
|
+
GridData.create(['bbbbb', 'bbbbb', 'wwwbb', 'wwwwb']).withSymbols([
|
|
49
|
+
new AreaNumberSymbol(1, 2, 7),
|
|
50
|
+
]),
|
|
51
|
+
GridData.create(['bbbbb', 'wbbbb', 'wwwbb', 'wwwwb']).withSymbols([
|
|
52
|
+
new AreaNumberSymbol(1, 2, 8),
|
|
53
|
+
]),
|
|
54
|
+
GridData.create(['bbbbb', 'wwbbb', 'wwwbb', 'wwwwb']).withSymbols([
|
|
55
|
+
new AreaNumberSymbol(1, 2, 9),
|
|
56
|
+
]),
|
|
57
|
+
GridData.create(['wbbbb', 'wwbbb', 'wwwbb', 'wwwwb']).withSymbols([
|
|
58
|
+
new AreaNumberSymbol(1, 2, 10),
|
|
59
|
+
]),
|
|
60
|
+
]);
|
|
61
|
+
static EXAMPLE_GRID_DARK = Object.freeze(CellCountRule.EXAMPLE_GRID_LIGHT.map(grid => grid.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark))))));
|
|
62
|
+
static SEARCH_VARIANTS = [
|
|
63
|
+
new CellCountRule(Color.Light, 10).searchVariant(),
|
|
64
|
+
new CellCountRule(Color.Dark, 10).searchVariant(),
|
|
65
|
+
];
|
|
7
66
|
/**
|
|
8
67
|
* **There are <count> <color> cells in total**
|
|
9
68
|
*
|
|
@@ -12,24 +71,8 @@ class CellCountRule extends Rule {
|
|
|
12
71
|
*/
|
|
13
72
|
constructor(color, count) {
|
|
14
73
|
super();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
configurable: true,
|
|
18
|
-
writable: true,
|
|
19
|
-
value: color
|
|
20
|
-
});
|
|
21
|
-
Object.defineProperty(this, "count", {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
configurable: true,
|
|
24
|
-
writable: true,
|
|
25
|
-
value: count
|
|
26
|
-
});
|
|
27
|
-
Object.defineProperty(this, "title", {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
configurable: true,
|
|
30
|
-
writable: true,
|
|
31
|
-
value: 'Total Count'
|
|
32
|
-
});
|
|
74
|
+
this.color = color;
|
|
75
|
+
this.count = count;
|
|
33
76
|
this.color = color;
|
|
34
77
|
this.count = count;
|
|
35
78
|
}
|
|
@@ -92,81 +135,4 @@ class CellCountRule extends Rule {
|
|
|
92
135
|
return this.copyWith({ count });
|
|
93
136
|
}
|
|
94
137
|
}
|
|
95
|
-
Object.defineProperty(CellCountRule, "CONFIGS", {
|
|
96
|
-
enumerable: true,
|
|
97
|
-
configurable: true,
|
|
98
|
-
writable: true,
|
|
99
|
-
value: Object.freeze([
|
|
100
|
-
{
|
|
101
|
-
type: ConfigType.Color,
|
|
102
|
-
default: Color.Light,
|
|
103
|
-
allowGray: false,
|
|
104
|
-
field: 'color',
|
|
105
|
-
description: 'Color',
|
|
106
|
-
configurable: true,
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
type: ConfigType.Number,
|
|
110
|
-
default: 10,
|
|
111
|
-
min: 0,
|
|
112
|
-
field: 'count',
|
|
113
|
-
description: 'Count',
|
|
114
|
-
configurable: true,
|
|
115
|
-
},
|
|
116
|
-
])
|
|
117
|
-
});
|
|
118
|
-
Object.defineProperty(CellCountRule, "EXAMPLE_GRID_LIGHT", {
|
|
119
|
-
enumerable: true,
|
|
120
|
-
configurable: true,
|
|
121
|
-
writable: true,
|
|
122
|
-
value: Object.freeze([
|
|
123
|
-
GridData.create(['bbbbb', 'bbbbb', 'bbbbb', 'bbbbb']),
|
|
124
|
-
GridData.create(['bbbbb', 'bbbbb', 'bwbbb', 'bbbbb']).withSymbols([
|
|
125
|
-
new AreaNumberSymbol(1, 2, 1),
|
|
126
|
-
]),
|
|
127
|
-
GridData.create(['bbbbb', 'bbbbb', 'bwwbb', 'bbbbb']).withSymbols([
|
|
128
|
-
new AreaNumberSymbol(1, 2, 2),
|
|
129
|
-
]),
|
|
130
|
-
GridData.create(['bbbbb', 'bwbbb', 'bwwbb', 'bbbbb']).withSymbols([
|
|
131
|
-
new AreaNumberSymbol(1, 2, 3),
|
|
132
|
-
]),
|
|
133
|
-
GridData.create(['bbbbb', 'bwwbb', 'bwwbb', 'bbbbb']).withSymbols([
|
|
134
|
-
new AreaNumberSymbol(1, 2, 4),
|
|
135
|
-
]),
|
|
136
|
-
GridData.create(['bbbbb', 'bwwbb', 'bwwwb', 'bbbbb']).withSymbols([
|
|
137
|
-
new AreaNumberSymbol(1, 2, 5),
|
|
138
|
-
]),
|
|
139
|
-
GridData.create(['bbbbb', 'bwwwb', 'bwwwb', 'bbbbb']).withSymbols([
|
|
140
|
-
new AreaNumberSymbol(1, 2, 6),
|
|
141
|
-
]),
|
|
142
|
-
GridData.create(['bbbbb', 'bbbbb', 'wwwbb', 'wwwwb']).withSymbols([
|
|
143
|
-
new AreaNumberSymbol(1, 2, 7),
|
|
144
|
-
]),
|
|
145
|
-
GridData.create(['bbbbb', 'wbbbb', 'wwwbb', 'wwwwb']).withSymbols([
|
|
146
|
-
new AreaNumberSymbol(1, 2, 8),
|
|
147
|
-
]),
|
|
148
|
-
GridData.create(['bbbbb', 'wwbbb', 'wwwbb', 'wwwwb']).withSymbols([
|
|
149
|
-
new AreaNumberSymbol(1, 2, 9),
|
|
150
|
-
]),
|
|
151
|
-
GridData.create(['wbbbb', 'wwbbb', 'wwwbb', 'wwwwb']).withSymbols([
|
|
152
|
-
new AreaNumberSymbol(1, 2, 10),
|
|
153
|
-
]),
|
|
154
|
-
])
|
|
155
|
-
});
|
|
156
|
-
Object.defineProperty(CellCountRule, "EXAMPLE_GRID_DARK", {
|
|
157
|
-
enumerable: true,
|
|
158
|
-
configurable: true,
|
|
159
|
-
writable: true,
|
|
160
|
-
value: Object.freeze(CellCountRule.EXAMPLE_GRID_LIGHT.map(grid => grid.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark))))))
|
|
161
|
-
});
|
|
162
|
-
Object.defineProperty(CellCountRule, "SEARCH_VARIANTS", {
|
|
163
|
-
enumerable: true,
|
|
164
|
-
configurable: true,
|
|
165
|
-
writable: true,
|
|
166
|
-
value: [
|
|
167
|
-
new CellCountRule(Color.Light, 10).searchVariant(),
|
|
168
|
-
new CellCountRule(Color.Dark, 10).searchVariant(),
|
|
169
|
-
]
|
|
170
|
-
});
|
|
171
|
-
export default CellCountRule;
|
|
172
138
|
export const instance = new CellCountRule(Color.Dark, 10);
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import GridData from '../grid.js';
|
|
2
2
|
import { MajorRule, State } from '../primitives.js';
|
|
3
3
|
import Rule from './rule.js';
|
|
4
|
-
class CompletePatternRule extends Rule {
|
|
4
|
+
export default class CompletePatternRule extends Rule {
|
|
5
|
+
title = 'Complete The Pattern';
|
|
5
6
|
get configExplanation() {
|
|
6
7
|
return 'Complete the grid by pattern recognition. Your provided solution may override auto-validation.';
|
|
7
8
|
}
|
|
9
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['wbwbw', 'bwbwb', 'wbwbw', 'bwbwb']));
|
|
10
|
+
static SEARCH_VARIANTS = [
|
|
11
|
+
new CompletePatternRule().searchVariant(),
|
|
12
|
+
];
|
|
8
13
|
/**
|
|
9
14
|
* **Complete the pattern**
|
|
10
15
|
*
|
|
@@ -12,12 +17,6 @@ class CompletePatternRule extends Rule {
|
|
|
12
17
|
*/
|
|
13
18
|
constructor() {
|
|
14
19
|
super();
|
|
15
|
-
Object.defineProperty(this, "title", {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
configurable: true,
|
|
18
|
-
writable: true,
|
|
19
|
-
value: 'Complete The Pattern'
|
|
20
|
-
});
|
|
21
20
|
}
|
|
22
21
|
get id() {
|
|
23
22
|
return MajorRule.CompletePattern;
|
|
@@ -44,19 +43,4 @@ class CompletePatternRule extends Rule {
|
|
|
44
43
|
return true;
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
|
-
Object.defineProperty(CompletePatternRule, "EXAMPLE_GRID", {
|
|
48
|
-
enumerable: true,
|
|
49
|
-
configurable: true,
|
|
50
|
-
writable: true,
|
|
51
|
-
value: Object.freeze(GridData.create(['wbwbw', 'bwbwb', 'wbwbw', 'bwbwb']))
|
|
52
|
-
});
|
|
53
|
-
Object.defineProperty(CompletePatternRule, "SEARCH_VARIANTS", {
|
|
54
|
-
enumerable: true,
|
|
55
|
-
configurable: true,
|
|
56
|
-
writable: true,
|
|
57
|
-
value: [
|
|
58
|
-
new CompletePatternRule().searchVariant(),
|
|
59
|
-
]
|
|
60
|
-
});
|
|
61
|
-
export default CompletePatternRule;
|
|
62
46
|
export const instance = new CompletePatternRule();
|
|
@@ -3,7 +3,25 @@ import GridData from '../grid.js';
|
|
|
3
3
|
import { array, minBy } from '../dataHelper.js';
|
|
4
4
|
import { Color, State } from '../primitives.js';
|
|
5
5
|
import Rule from './rule.js';
|
|
6
|
-
class ConnectAllRule extends Rule {
|
|
6
|
+
export default class ConnectAllRule extends Rule {
|
|
7
|
+
color;
|
|
8
|
+
title = 'Connect All';
|
|
9
|
+
static CONFIGS = Object.freeze([
|
|
10
|
+
{
|
|
11
|
+
type: ConfigType.Color,
|
|
12
|
+
default: Color.Light,
|
|
13
|
+
allowGray: false,
|
|
14
|
+
field: 'color',
|
|
15
|
+
description: 'Color',
|
|
16
|
+
configurable: true,
|
|
17
|
+
},
|
|
18
|
+
]);
|
|
19
|
+
static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['bwwwb', 'bwbww', 'wwwbb', 'wbwww']));
|
|
20
|
+
static EXAMPLE_GRID_DARK = Object.freeze(GridData.create(['wbbbw', 'wbwbb', 'bbbww', 'bwbbb']));
|
|
21
|
+
static SEARCH_VARIANTS = [
|
|
22
|
+
new ConnectAllRule(Color.Light).searchVariant(),
|
|
23
|
+
new ConnectAllRule(Color.Dark).searchVariant(),
|
|
24
|
+
];
|
|
7
25
|
/**
|
|
8
26
|
* **Connect all <color> cells**
|
|
9
27
|
*
|
|
@@ -11,18 +29,7 @@ class ConnectAllRule extends Rule {
|
|
|
11
29
|
*/
|
|
12
30
|
constructor(color) {
|
|
13
31
|
super();
|
|
14
|
-
|
|
15
|
-
enumerable: true,
|
|
16
|
-
configurable: true,
|
|
17
|
-
writable: true,
|
|
18
|
-
value: color
|
|
19
|
-
});
|
|
20
|
-
Object.defineProperty(this, "title", {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true,
|
|
24
|
-
value: 'Connect All'
|
|
25
|
-
});
|
|
32
|
+
this.color = color;
|
|
26
33
|
this.color = color;
|
|
27
34
|
}
|
|
28
35
|
get id() {
|
|
@@ -78,41 +85,4 @@ class ConnectAllRule extends Rule {
|
|
|
78
85
|
return this.copyWith({ color });
|
|
79
86
|
}
|
|
80
87
|
}
|
|
81
|
-
Object.defineProperty(ConnectAllRule, "CONFIGS", {
|
|
82
|
-
enumerable: true,
|
|
83
|
-
configurable: true,
|
|
84
|
-
writable: true,
|
|
85
|
-
value: Object.freeze([
|
|
86
|
-
{
|
|
87
|
-
type: ConfigType.Color,
|
|
88
|
-
default: Color.Light,
|
|
89
|
-
allowGray: false,
|
|
90
|
-
field: 'color',
|
|
91
|
-
description: 'Color',
|
|
92
|
-
configurable: true,
|
|
93
|
-
},
|
|
94
|
-
])
|
|
95
|
-
});
|
|
96
|
-
Object.defineProperty(ConnectAllRule, "EXAMPLE_GRID_LIGHT", {
|
|
97
|
-
enumerable: true,
|
|
98
|
-
configurable: true,
|
|
99
|
-
writable: true,
|
|
100
|
-
value: Object.freeze(GridData.create(['bwwwb', 'bwbww', 'wwwbb', 'wbwww']))
|
|
101
|
-
});
|
|
102
|
-
Object.defineProperty(ConnectAllRule, "EXAMPLE_GRID_DARK", {
|
|
103
|
-
enumerable: true,
|
|
104
|
-
configurable: true,
|
|
105
|
-
writable: true,
|
|
106
|
-
value: Object.freeze(GridData.create(['wbbbw', 'wbwbb', 'bbbww', 'bwbbb']))
|
|
107
|
-
});
|
|
108
|
-
Object.defineProperty(ConnectAllRule, "SEARCH_VARIANTS", {
|
|
109
|
-
enumerable: true,
|
|
110
|
-
configurable: true,
|
|
111
|
-
writable: true,
|
|
112
|
-
value: [
|
|
113
|
-
new ConnectAllRule(Color.Light).searchVariant(),
|
|
114
|
-
new ConnectAllRule(Color.Dark).searchVariant(),
|
|
115
|
-
]
|
|
116
|
-
});
|
|
117
|
-
export default ConnectAllRule;
|
|
118
88
|
export const instance = new ConnectAllRule(Color.Dark);
|
|
@@ -4,7 +4,33 @@ import { array, minBy } from '../dataHelper.js';
|
|
|
4
4
|
import { Color, State } from '../primitives.js';
|
|
5
5
|
import Rule from './rule.js';
|
|
6
6
|
import GridZones from '../gridZones.js';
|
|
7
|
-
class ConnectZonesRule extends Rule {
|
|
7
|
+
export default class ConnectZonesRule extends Rule {
|
|
8
|
+
color;
|
|
9
|
+
title = 'Connect Zones';
|
|
10
|
+
static CONFIGS = Object.freeze([
|
|
11
|
+
{
|
|
12
|
+
type: ConfigType.Color,
|
|
13
|
+
default: Color.Light,
|
|
14
|
+
allowGray: false,
|
|
15
|
+
field: 'color',
|
|
16
|
+
description: 'Color',
|
|
17
|
+
configurable: true,
|
|
18
|
+
},
|
|
19
|
+
]);
|
|
20
|
+
static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['wbbwb', 'wbbwb', 'wbbww', 'wwbbb'])
|
|
21
|
+
.withZones(new GridZones([
|
|
22
|
+
{ x1: 2, y1: 1, x2: 2, y2: 2 },
|
|
23
|
+
{ x1: 1, y1: 0, x2: 2, y2: 0 },
|
|
24
|
+
{ x1: 1, y1: 1, x2: 2, y2: 1 },
|
|
25
|
+
{ x1: 2, y1: 2, x2: 3, y2: 2 },
|
|
26
|
+
{ x1: 2, y1: 3, x2: 3, y2: 3 },
|
|
27
|
+
]))
|
|
28
|
+
.addRule(new ConnectZonesRule(Color.Light)));
|
|
29
|
+
static EXAMPLE_GRID_DARK = Object.freeze(ConnectZonesRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))));
|
|
30
|
+
static SEARCH_VARIANTS = [
|
|
31
|
+
new ConnectZonesRule(Color.Light).searchVariant(),
|
|
32
|
+
new ConnectZonesRule(Color.Dark).searchVariant(),
|
|
33
|
+
];
|
|
8
34
|
/**
|
|
9
35
|
* **Connect all <color> cells in each zone**
|
|
10
36
|
*
|
|
@@ -12,18 +38,7 @@ class ConnectZonesRule extends Rule {
|
|
|
12
38
|
*/
|
|
13
39
|
constructor(color) {
|
|
14
40
|
super();
|
|
15
|
-
|
|
16
|
-
enumerable: true,
|
|
17
|
-
configurable: true,
|
|
18
|
-
writable: true,
|
|
19
|
-
value: color
|
|
20
|
-
});
|
|
21
|
-
Object.defineProperty(this, "title", {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
configurable: true,
|
|
24
|
-
writable: true,
|
|
25
|
-
value: 'Connect Zones'
|
|
26
|
-
});
|
|
41
|
+
this.color = color;
|
|
27
42
|
this.color = color;
|
|
28
43
|
}
|
|
29
44
|
get id() {
|
|
@@ -93,49 +108,4 @@ class ConnectZonesRule extends Rule {
|
|
|
93
108
|
return this.copyWith({ color });
|
|
94
109
|
}
|
|
95
110
|
}
|
|
96
|
-
Object.defineProperty(ConnectZonesRule, "CONFIGS", {
|
|
97
|
-
enumerable: true,
|
|
98
|
-
configurable: true,
|
|
99
|
-
writable: true,
|
|
100
|
-
value: Object.freeze([
|
|
101
|
-
{
|
|
102
|
-
type: ConfigType.Color,
|
|
103
|
-
default: Color.Light,
|
|
104
|
-
allowGray: false,
|
|
105
|
-
field: 'color',
|
|
106
|
-
description: 'Color',
|
|
107
|
-
configurable: true,
|
|
108
|
-
},
|
|
109
|
-
])
|
|
110
|
-
});
|
|
111
|
-
Object.defineProperty(ConnectZonesRule, "EXAMPLE_GRID_LIGHT", {
|
|
112
|
-
enumerable: true,
|
|
113
|
-
configurable: true,
|
|
114
|
-
writable: true,
|
|
115
|
-
value: Object.freeze(GridData.create(['wbbwb', 'wbbwb', 'wbbww', 'wwbbb'])
|
|
116
|
-
.withZones(new GridZones([
|
|
117
|
-
{ x1: 2, y1: 1, x2: 2, y2: 2 },
|
|
118
|
-
{ x1: 1, y1: 0, x2: 2, y2: 0 },
|
|
119
|
-
{ x1: 1, y1: 1, x2: 2, y2: 1 },
|
|
120
|
-
{ x1: 2, y1: 2, x2: 3, y2: 2 },
|
|
121
|
-
{ x1: 2, y1: 3, x2: 3, y2: 3 },
|
|
122
|
-
]))
|
|
123
|
-
.addRule(new ConnectZonesRule(Color.Light)))
|
|
124
|
-
});
|
|
125
|
-
Object.defineProperty(ConnectZonesRule, "EXAMPLE_GRID_DARK", {
|
|
126
|
-
enumerable: true,
|
|
127
|
-
configurable: true,
|
|
128
|
-
writable: true,
|
|
129
|
-
value: Object.freeze(ConnectZonesRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))))
|
|
130
|
-
});
|
|
131
|
-
Object.defineProperty(ConnectZonesRule, "SEARCH_VARIANTS", {
|
|
132
|
-
enumerable: true,
|
|
133
|
-
configurable: true,
|
|
134
|
-
writable: true,
|
|
135
|
-
value: [
|
|
136
|
-
new ConnectZonesRule(Color.Light).searchVariant(),
|
|
137
|
-
new ConnectZonesRule(Color.Dark).searchVariant(),
|
|
138
|
-
]
|
|
139
|
-
});
|
|
140
|
-
export default ConnectZonesRule;
|
|
141
111
|
export const instance = new ConnectZonesRule(Color.Dark);
|
|
@@ -4,7 +4,35 @@ import GridData from '../grid.js';
|
|
|
4
4
|
import { Color, State } from '../primitives.js';
|
|
5
5
|
import { getShapeVariants, sanitizePatternGrid, tilesToShape, } from '../shapes.js';
|
|
6
6
|
import RegionShapeRule from './regionShapeRule.js';
|
|
7
|
-
class ContainsShapeRule extends RegionShapeRule {
|
|
7
|
+
export default class ContainsShapeRule extends RegionShapeRule {
|
|
8
|
+
title = 'Areas Contain Pattern';
|
|
9
|
+
static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['nnnnn', 'nnnnn', 'wwwwn', 'nnnnn', 'nnnnn']));
|
|
10
|
+
static EXAMPLE_GRID_DARK = Object.freeze(GridData.create(['nnnnn', 'nnnnn', 'bbbbn', 'nnnnn', 'nnnnn']));
|
|
11
|
+
static CONFIGS = Object.freeze([
|
|
12
|
+
{
|
|
13
|
+
type: ConfigType.Color,
|
|
14
|
+
default: Color.Light,
|
|
15
|
+
allowGray: false,
|
|
16
|
+
field: 'color',
|
|
17
|
+
description: 'Color',
|
|
18
|
+
configurable: true,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
type: ConfigType.Shape,
|
|
22
|
+
default: ContainsShapeRule.EXAMPLE_GRID_LIGHT,
|
|
23
|
+
resizable: true,
|
|
24
|
+
field: 'pattern',
|
|
25
|
+
description: 'Pattern',
|
|
26
|
+
explanation: 'The pattern to be contained. Must only include tiles of the selected color.',
|
|
27
|
+
configurable: true,
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
30
|
+
static SEARCH_VARIANTS = [
|
|
31
|
+
new ContainsShapeRule(Color.Light, ContainsShapeRule.EXAMPLE_GRID_LIGHT).searchVariant(),
|
|
32
|
+
new ContainsShapeRule(Color.Dark, ContainsShapeRule.EXAMPLE_GRID_DARK).searchVariant(),
|
|
33
|
+
];
|
|
34
|
+
pattern;
|
|
35
|
+
cache;
|
|
8
36
|
/**
|
|
9
37
|
* **All <color> areas must contain this pattern**
|
|
10
38
|
*
|
|
@@ -13,24 +41,6 @@ class ContainsShapeRule extends RegionShapeRule {
|
|
|
13
41
|
*/
|
|
14
42
|
constructor(color, pattern) {
|
|
15
43
|
super(color);
|
|
16
|
-
Object.defineProperty(this, "title", {
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true,
|
|
20
|
-
value: 'Areas Contain Pattern'
|
|
21
|
-
});
|
|
22
|
-
Object.defineProperty(this, "pattern", {
|
|
23
|
-
enumerable: true,
|
|
24
|
-
configurable: true,
|
|
25
|
-
writable: true,
|
|
26
|
-
value: void 0
|
|
27
|
-
});
|
|
28
|
-
Object.defineProperty(this, "cache", {
|
|
29
|
-
enumerable: true,
|
|
30
|
-
configurable: true,
|
|
31
|
-
writable: true,
|
|
32
|
-
value: void 0
|
|
33
|
-
});
|
|
34
44
|
this.pattern = sanitizePatternGrid(pattern, t => t.color === color ? t : t.withColor(Color.Gray));
|
|
35
45
|
this.cache = getShapeVariants(tilesToShape(this.pattern.tiles));
|
|
36
46
|
}
|
|
@@ -112,50 +122,4 @@ class ContainsShapeRule extends RegionShapeRule {
|
|
|
112
122
|
return this.copyWith({ pattern });
|
|
113
123
|
}
|
|
114
124
|
}
|
|
115
|
-
Object.defineProperty(ContainsShapeRule, "EXAMPLE_GRID_LIGHT", {
|
|
116
|
-
enumerable: true,
|
|
117
|
-
configurable: true,
|
|
118
|
-
writable: true,
|
|
119
|
-
value: Object.freeze(GridData.create(['nnnnn', 'nnnnn', 'wwwwn', 'nnnnn', 'nnnnn']))
|
|
120
|
-
});
|
|
121
|
-
Object.defineProperty(ContainsShapeRule, "EXAMPLE_GRID_DARK", {
|
|
122
|
-
enumerable: true,
|
|
123
|
-
configurable: true,
|
|
124
|
-
writable: true,
|
|
125
|
-
value: Object.freeze(GridData.create(['nnnnn', 'nnnnn', 'bbbbn', 'nnnnn', 'nnnnn']))
|
|
126
|
-
});
|
|
127
|
-
Object.defineProperty(ContainsShapeRule, "CONFIGS", {
|
|
128
|
-
enumerable: true,
|
|
129
|
-
configurable: true,
|
|
130
|
-
writable: true,
|
|
131
|
-
value: Object.freeze([
|
|
132
|
-
{
|
|
133
|
-
type: ConfigType.Color,
|
|
134
|
-
default: Color.Light,
|
|
135
|
-
allowGray: false,
|
|
136
|
-
field: 'color',
|
|
137
|
-
description: 'Color',
|
|
138
|
-
configurable: true,
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
type: ConfigType.Shape,
|
|
142
|
-
default: ContainsShapeRule.EXAMPLE_GRID_LIGHT,
|
|
143
|
-
resizable: true,
|
|
144
|
-
field: 'pattern',
|
|
145
|
-
description: 'Pattern',
|
|
146
|
-
explanation: 'The pattern to be contained. Must only include tiles of the selected color.',
|
|
147
|
-
configurable: true,
|
|
148
|
-
},
|
|
149
|
-
])
|
|
150
|
-
});
|
|
151
|
-
Object.defineProperty(ContainsShapeRule, "SEARCH_VARIANTS", {
|
|
152
|
-
enumerable: true,
|
|
153
|
-
configurable: true,
|
|
154
|
-
writable: true,
|
|
155
|
-
value: [
|
|
156
|
-
new ContainsShapeRule(Color.Light, ContainsShapeRule.EXAMPLE_GRID_LIGHT).searchVariant(),
|
|
157
|
-
new ContainsShapeRule(Color.Dark, ContainsShapeRule.EXAMPLE_GRID_DARK).searchVariant(),
|
|
158
|
-
]
|
|
159
|
-
});
|
|
160
|
-
export default ContainsShapeRule;
|
|
161
125
|
export const instance = new ContainsShapeRule(Color.Dark, GridData.create([]));
|
|
@@ -2,10 +2,35 @@ import { ConfigType } from '../config.js';
|
|
|
2
2
|
import GridData from '../grid.js';
|
|
3
3
|
import { State } from '../primitives.js';
|
|
4
4
|
import Rule from './rule.js';
|
|
5
|
-
class CustomRule extends Rule {
|
|
5
|
+
export default class CustomRule extends Rule {
|
|
6
|
+
description;
|
|
7
|
+
grid;
|
|
8
|
+
title = 'Custom Rule';
|
|
6
9
|
get configExplanation() {
|
|
7
10
|
return 'A customizable rule. Your provided solution may override auto-validation.';
|
|
8
11
|
}
|
|
12
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(5, 4));
|
|
13
|
+
static configs = Object.freeze([
|
|
14
|
+
{
|
|
15
|
+
type: ConfigType.String,
|
|
16
|
+
default: 'A *custom* rule',
|
|
17
|
+
field: 'description',
|
|
18
|
+
description: 'Description',
|
|
19
|
+
explanation: 'A short descriptive text. Use *asterisks* to highlight keywords.',
|
|
20
|
+
configurable: true,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: ConfigType.Grid,
|
|
24
|
+
default: CustomRule.EXAMPLE_GRID,
|
|
25
|
+
field: 'grid',
|
|
26
|
+
description: 'Thumbnail Grid',
|
|
27
|
+
explanation: 'An example grid showing the rule.',
|
|
28
|
+
configurable: true,
|
|
29
|
+
},
|
|
30
|
+
]);
|
|
31
|
+
static SEARCH_VARIANTS = [
|
|
32
|
+
new CustomRule('A *custom* rule', CustomRule.EXAMPLE_GRID).searchVariant(),
|
|
33
|
+
];
|
|
9
34
|
/**
|
|
10
35
|
* A custom rule with a description and thumbnail grid.
|
|
11
36
|
*
|
|
@@ -16,24 +41,8 @@ class CustomRule extends Rule {
|
|
|
16
41
|
*/
|
|
17
42
|
constructor(description, grid) {
|
|
18
43
|
super();
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
configurable: true,
|
|
22
|
-
writable: true,
|
|
23
|
-
value: description
|
|
24
|
-
});
|
|
25
|
-
Object.defineProperty(this, "grid", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
configurable: true,
|
|
28
|
-
writable: true,
|
|
29
|
-
value: grid
|
|
30
|
-
});
|
|
31
|
-
Object.defineProperty(this, "title", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
configurable: true,
|
|
34
|
-
writable: true,
|
|
35
|
-
value: 'Custom Rule'
|
|
36
|
-
});
|
|
44
|
+
this.description = description;
|
|
45
|
+
this.grid = grid;
|
|
37
46
|
this.description = description;
|
|
38
47
|
this.grid = grid;
|
|
39
48
|
}
|
|
@@ -62,42 +71,4 @@ class CustomRule extends Rule {
|
|
|
62
71
|
return true;
|
|
63
72
|
}
|
|
64
73
|
}
|
|
65
|
-
Object.defineProperty(CustomRule, "EXAMPLE_GRID", {
|
|
66
|
-
enumerable: true,
|
|
67
|
-
configurable: true,
|
|
68
|
-
writable: true,
|
|
69
|
-
value: Object.freeze(GridData.create(5, 4))
|
|
70
|
-
});
|
|
71
|
-
Object.defineProperty(CustomRule, "configs", {
|
|
72
|
-
enumerable: true,
|
|
73
|
-
configurable: true,
|
|
74
|
-
writable: true,
|
|
75
|
-
value: Object.freeze([
|
|
76
|
-
{
|
|
77
|
-
type: ConfigType.String,
|
|
78
|
-
default: 'A *custom* rule',
|
|
79
|
-
field: 'description',
|
|
80
|
-
description: 'Description',
|
|
81
|
-
explanation: 'A short descriptive text. Use *asterisks* to highlight keywords.',
|
|
82
|
-
configurable: true,
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
type: ConfigType.Grid,
|
|
86
|
-
default: CustomRule.EXAMPLE_GRID,
|
|
87
|
-
field: 'grid',
|
|
88
|
-
description: 'Thumbnail Grid',
|
|
89
|
-
explanation: 'An example grid showing the rule.',
|
|
90
|
-
configurable: true,
|
|
91
|
-
},
|
|
92
|
-
])
|
|
93
|
-
});
|
|
94
|
-
Object.defineProperty(CustomRule, "SEARCH_VARIANTS", {
|
|
95
|
-
enumerable: true,
|
|
96
|
-
configurable: true,
|
|
97
|
-
writable: true,
|
|
98
|
-
value: [
|
|
99
|
-
new CustomRule('A *custom* rule', CustomRule.EXAMPLE_GRID).searchVariant(),
|
|
100
|
-
]
|
|
101
|
-
});
|
|
102
|
-
export default CustomRule;
|
|
103
74
|
export const instance = new CustomRule('', GridData.create([]));
|