@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
|
@@ -4,7 +4,25 @@ import { array } from '../dataHelper.js';
|
|
|
4
4
|
import { Color, State } from '../primitives.js';
|
|
5
5
|
import { getShapeVariants, sanitizePatternGrid, tilesToShape, } from '../shapes.js';
|
|
6
6
|
import Rule from './rule.js';
|
|
7
|
-
class BanPatternRule extends Rule {
|
|
7
|
+
export default class BanPatternRule extends Rule {
|
|
8
|
+
title = 'Ban Pattern';
|
|
9
|
+
static EXAMPLE_GRID = Object.freeze(GridData.create(['nnnnn', 'nnnnn', 'wwwwn', 'nnnnn', 'nnnnn']));
|
|
10
|
+
static CONFIGS = Object.freeze([
|
|
11
|
+
{
|
|
12
|
+
type: ConfigType.Shape,
|
|
13
|
+
default: BanPatternRule.EXAMPLE_GRID,
|
|
14
|
+
resizable: true,
|
|
15
|
+
field: 'pattern',
|
|
16
|
+
description: 'Pattern',
|
|
17
|
+
explanation: 'The pattern to be banned. Can be a mix of dark and light tiles.',
|
|
18
|
+
configurable: true,
|
|
19
|
+
},
|
|
20
|
+
]);
|
|
21
|
+
static SEARCH_VARIANTS = [
|
|
22
|
+
new BanPatternRule(BanPatternRule.EXAMPLE_GRID).searchVariant(),
|
|
23
|
+
];
|
|
24
|
+
pattern;
|
|
25
|
+
cache;
|
|
8
26
|
/**
|
|
9
27
|
* **Don't make this pattern**
|
|
10
28
|
*
|
|
@@ -12,24 +30,6 @@ class BanPatternRule extends Rule {
|
|
|
12
30
|
*/
|
|
13
31
|
constructor(pattern) {
|
|
14
32
|
super();
|
|
15
|
-
Object.defineProperty(this, "title", {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
configurable: true,
|
|
18
|
-
writable: true,
|
|
19
|
-
value: 'Ban Pattern'
|
|
20
|
-
});
|
|
21
|
-
Object.defineProperty(this, "pattern", {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
configurable: true,
|
|
24
|
-
writable: true,
|
|
25
|
-
value: void 0
|
|
26
|
-
});
|
|
27
|
-
Object.defineProperty(this, "cache", {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
configurable: true,
|
|
30
|
-
writable: true,
|
|
31
|
-
value: void 0
|
|
32
|
-
});
|
|
33
33
|
this.pattern = sanitizePatternGrid(pattern);
|
|
34
34
|
this.cache = getShapeVariants(tilesToShape(this.pattern.tiles));
|
|
35
35
|
}
|
|
@@ -122,35 +122,4 @@ class BanPatternRule extends Rule {
|
|
|
122
122
|
return this.copyWith({ pattern });
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
-
Object.defineProperty(BanPatternRule, "EXAMPLE_GRID", {
|
|
126
|
-
enumerable: true,
|
|
127
|
-
configurable: true,
|
|
128
|
-
writable: true,
|
|
129
|
-
value: Object.freeze(GridData.create(['nnnnn', 'nnnnn', 'wwwwn', 'nnnnn', 'nnnnn']))
|
|
130
|
-
});
|
|
131
|
-
Object.defineProperty(BanPatternRule, "CONFIGS", {
|
|
132
|
-
enumerable: true,
|
|
133
|
-
configurable: true,
|
|
134
|
-
writable: true,
|
|
135
|
-
value: Object.freeze([
|
|
136
|
-
{
|
|
137
|
-
type: ConfigType.Shape,
|
|
138
|
-
default: BanPatternRule.EXAMPLE_GRID,
|
|
139
|
-
resizable: true,
|
|
140
|
-
field: 'pattern',
|
|
141
|
-
description: 'Pattern',
|
|
142
|
-
explanation: 'The pattern to be banned. Can be a mix of dark and light tiles.',
|
|
143
|
-
configurable: true,
|
|
144
|
-
},
|
|
145
|
-
])
|
|
146
|
-
});
|
|
147
|
-
Object.defineProperty(BanPatternRule, "SEARCH_VARIANTS", {
|
|
148
|
-
enumerable: true,
|
|
149
|
-
configurable: true,
|
|
150
|
-
writable: true,
|
|
151
|
-
value: [
|
|
152
|
-
new BanPatternRule(BanPatternRule.EXAMPLE_GRID).searchVariant(),
|
|
153
|
-
]
|
|
154
|
-
});
|
|
155
|
-
export default BanPatternRule;
|
|
156
125
|
export const instance = new BanPatternRule(GridData.create([]));
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Color } from '../primitives.js';
|
|
2
2
|
import Rule from './rule.js';
|
|
3
3
|
export default class CellCountPerZoneRule extends Rule {
|
|
4
|
+
color;
|
|
4
5
|
get configExplanation() {
|
|
5
6
|
return 'Use the zone tool to define areas on the grid.';
|
|
6
7
|
}
|
|
@@ -9,12 +10,7 @@ export default class CellCountPerZoneRule extends Rule {
|
|
|
9
10
|
*/
|
|
10
11
|
constructor(color) {
|
|
11
12
|
super();
|
|
12
|
-
|
|
13
|
-
enumerable: true,
|
|
14
|
-
configurable: true,
|
|
15
|
-
writable: true,
|
|
16
|
-
value: color
|
|
17
|
-
});
|
|
13
|
+
this.color = color;
|
|
18
14
|
this.color = color;
|
|
19
15
|
}
|
|
20
16
|
getZoneCounts(grid) {
|
|
@@ -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([]));
|