@logic-pad/core 0.24.0 → 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 +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 +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/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
|
@@ -18,42 +18,8 @@ import { instance as connectAllInstance } from '../../rules/connectAllRule.js';
|
|
|
18
18
|
import EventIteratingSolver from '../eventIteratingSolver.js';
|
|
19
19
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
20
20
|
('vite-apply-code-mod');
|
|
21
|
-
class BacktrackSolver extends EventIteratingSolver {
|
|
22
|
-
|
|
23
|
-
super(...arguments);
|
|
24
|
-
Object.defineProperty(this, "id", {
|
|
25
|
-
enumerable: true,
|
|
26
|
-
configurable: true,
|
|
27
|
-
writable: true,
|
|
28
|
-
value: 'backtrack'
|
|
29
|
-
});
|
|
30
|
-
Object.defineProperty(this, "author", {
|
|
31
|
-
enumerable: true,
|
|
32
|
-
configurable: true,
|
|
33
|
-
writable: true,
|
|
34
|
-
value: 'ALaggyDev'
|
|
35
|
-
});
|
|
36
|
-
Object.defineProperty(this, "description", {
|
|
37
|
-
enumerable: true,
|
|
38
|
-
configurable: true,
|
|
39
|
-
writable: true,
|
|
40
|
-
value: 'Solves puzzles pretty fast using backtracking with optimizations. Support most rules and symbols (including underclued).'
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
createWorker() {
|
|
44
|
-
return new Worker(new URL(`./backtrackWorker.js`, import.meta.url), {
|
|
45
|
-
type: 'module',
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
isInstructionSupported(instructionId) {
|
|
49
|
-
return BacktrackSolver.supportedInstrs.includes(instructionId);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
Object.defineProperty(BacktrackSolver, "supportedInstrs", {
|
|
53
|
-
enumerable: true,
|
|
54
|
-
configurable: true,
|
|
55
|
-
writable: true,
|
|
56
|
-
value: [
|
|
21
|
+
export default class BacktrackSolver extends EventIteratingSolver {
|
|
22
|
+
static supportedInstrs = [
|
|
57
23
|
areaNumberInstance.id,
|
|
58
24
|
viewpointInstance.id,
|
|
59
25
|
dartInstance.id,
|
|
@@ -71,6 +37,16 @@ Object.defineProperty(BacktrackSolver, "supportedInstrs", {
|
|
|
71
37
|
cellCountInstance.id,
|
|
72
38
|
sameShapeInstance.id,
|
|
73
39
|
uniqueShapeInstance.id,
|
|
74
|
-
]
|
|
75
|
-
|
|
76
|
-
|
|
40
|
+
];
|
|
41
|
+
id = 'backtrack';
|
|
42
|
+
author = 'ALaggyDev';
|
|
43
|
+
description = 'Solves puzzles pretty fast using backtracking with optimizations. Support most rules and symbols (including underclued).';
|
|
44
|
+
createWorker() {
|
|
45
|
+
return new Worker(new URL(`./backtrackWorker.js`, import.meta.url), {
|
|
46
|
+
type: 'module',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
isInstructionSupported(instructionId) {
|
|
50
|
+
return BacktrackSolver.supportedInstrs.includes(instructionId);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -7,37 +7,17 @@ export var BTTile;
|
|
|
7
7
|
BTTile[BTTile["NonExist"] = 3] = "NonExist";
|
|
8
8
|
})(BTTile || (BTTile = {}));
|
|
9
9
|
export class BTGridData {
|
|
10
|
+
tiles;
|
|
11
|
+
connections;
|
|
12
|
+
modules;
|
|
13
|
+
width;
|
|
14
|
+
height;
|
|
10
15
|
constructor(tiles, connections, modules, width, height) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
});
|
|
17
|
-
Object.defineProperty(this, "connections", {
|
|
18
|
-
enumerable: true,
|
|
19
|
-
configurable: true,
|
|
20
|
-
writable: true,
|
|
21
|
-
value: connections
|
|
22
|
-
});
|
|
23
|
-
Object.defineProperty(this, "modules", {
|
|
24
|
-
enumerable: true,
|
|
25
|
-
configurable: true,
|
|
26
|
-
writable: true,
|
|
27
|
-
value: modules
|
|
28
|
-
});
|
|
29
|
-
Object.defineProperty(this, "width", {
|
|
30
|
-
enumerable: true,
|
|
31
|
-
configurable: true,
|
|
32
|
-
writable: true,
|
|
33
|
-
value: width
|
|
34
|
-
});
|
|
35
|
-
Object.defineProperty(this, "height", {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true,
|
|
39
|
-
value: height
|
|
40
|
-
});
|
|
16
|
+
this.tiles = tiles;
|
|
17
|
+
this.connections = connections;
|
|
18
|
+
this.modules = modules;
|
|
19
|
+
this.width = width;
|
|
20
|
+
this.height = height;
|
|
41
21
|
this.tiles = tiles;
|
|
42
22
|
this.connections = connections;
|
|
43
23
|
this.modules = modules;
|
|
@@ -80,25 +60,13 @@ export class BTGridData {
|
|
|
80
60
|
}
|
|
81
61
|
}
|
|
82
62
|
export class IntArray2D {
|
|
63
|
+
array;
|
|
64
|
+
width;
|
|
65
|
+
height;
|
|
83
66
|
constructor(array, width, height) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
writable: true,
|
|
88
|
-
value: array
|
|
89
|
-
});
|
|
90
|
-
Object.defineProperty(this, "width", {
|
|
91
|
-
enumerable: true,
|
|
92
|
-
configurable: true,
|
|
93
|
-
writable: true,
|
|
94
|
-
value: width
|
|
95
|
-
});
|
|
96
|
-
Object.defineProperty(this, "height", {
|
|
97
|
-
enumerable: true,
|
|
98
|
-
configurable: true,
|
|
99
|
-
writable: true,
|
|
100
|
-
value: height
|
|
101
|
-
});
|
|
67
|
+
this.array = array;
|
|
68
|
+
this.width = width;
|
|
69
|
+
this.height = height;
|
|
102
70
|
this.array = array;
|
|
103
71
|
this.width = width;
|
|
104
72
|
this.height = height;
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import BTModule, { BTTile, colorToBTTile, } from '../data.js';
|
|
2
2
|
export default class BanPatternBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
checkGlobal(grid) {
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import BTModule, { BTTile, colorToBTTile, } from '../data.js';
|
|
2
2
|
export default class CellCountBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
checkGlobal(grid) {
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import BTModule, { IntArray2D, colorToBTTile, getOppositeColor, } from '../data.js';
|
|
2
2
|
export default class ConnectAllBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
checkGlobal(grid) {
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import BTModule, { BTTile, IntArray2D, colorToBTTile, } from '../data.js';
|
|
2
2
|
export default class RegionAreaBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
checkGlobal(grid) {
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { normalizeShape, positionsToShape, shapeEquals, } from '../../../shapes.js';
|
|
2
2
|
import BTModule, { BTTile, IntArray2D, colorToBTTile, } from '../data.js';
|
|
3
3
|
export default class RegionShapeBTModule extends BTModule {
|
|
4
|
+
instr;
|
|
4
5
|
constructor(instr) {
|
|
5
6
|
super();
|
|
6
|
-
Object.defineProperty(this, "instr", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
configurable: true,
|
|
9
|
-
writable: true,
|
|
10
|
-
value: void 0
|
|
11
|
-
});
|
|
12
7
|
this.instr = instr;
|
|
13
8
|
}
|
|
14
9
|
getShapeRegions(grid) {
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import RegionShapeBTModule from './regionShape.js';
|
|
2
2
|
export default class SameShapeBTModule extends RegionShapeBTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super(instr);
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
checkGlobal(grid) {
|
|
@@ -1,20 +1,10 @@
|
|
|
1
1
|
import { Comparison } from '../../../primitives.js';
|
|
2
2
|
import BTModule, { BTTile, IntArray2D, colorToBTTile, } from '../data.js';
|
|
3
3
|
export default class SymbolsPerRegionBTModule extends BTModule {
|
|
4
|
+
instr;
|
|
5
|
+
symbolCount;
|
|
4
6
|
constructor(instr, width, height, allSymbols) {
|
|
5
7
|
super();
|
|
6
|
-
Object.defineProperty(this, "instr", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
configurable: true,
|
|
9
|
-
writable: true,
|
|
10
|
-
value: void 0
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(this, "symbolCount", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
configurable: true,
|
|
15
|
-
writable: true,
|
|
16
|
-
value: void 0
|
|
17
|
-
});
|
|
18
8
|
this.instr = instr;
|
|
19
9
|
this.symbolCount = IntArray2D.create(width, height);
|
|
20
10
|
for (const symbol of allSymbols) {
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import RegionShapeBTModule from './regionShape.js';
|
|
2
2
|
export default class UniqueShapeBTModule extends RegionShapeBTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super(instr);
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
checkGlobal(grid) {
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import BTModule, { BTTile, IntArray2D, createOneTileResult, } from '../data.js';
|
|
2
2
|
export default class AreaNumberBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
checkGlobal(grid) {
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { move } from '../../../dataHelper.js';
|
|
2
2
|
import BTModule, { BTTile, IntArray2D, createOneTileResult, getOppositeColor, } from '../data.js';
|
|
3
3
|
export default class DartBTModule extends BTModule {
|
|
4
|
+
instr;
|
|
4
5
|
constructor(instr) {
|
|
5
6
|
super();
|
|
6
|
-
Object.defineProperty(this, "instr", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
configurable: true,
|
|
9
|
-
writable: true,
|
|
10
|
-
value: void 0
|
|
11
|
-
});
|
|
12
7
|
this.instr = instr;
|
|
13
8
|
}
|
|
14
9
|
checkGlobal(grid) {
|
|
@@ -1,21 +1,11 @@
|
|
|
1
1
|
import BTModule, { BTTile, IntArray2D, } from '../data.js';
|
|
2
2
|
export default class DirectionLinkerBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
|
-
Object.defineProperty(this, "initialPositions", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
configurable: true,
|
|
14
|
-
writable: true,
|
|
15
|
-
value: null
|
|
16
|
-
});
|
|
17
6
|
this.instr = instr;
|
|
18
7
|
}
|
|
8
|
+
initialPositions = null;
|
|
19
9
|
getInitialPositions() {
|
|
20
10
|
if (this.instr.x % 1 !== 0 && this.instr.y % 1 !== 0)
|
|
21
11
|
return [
|
|
@@ -38,7 +28,7 @@ export default class DirectionLinkerBTModule extends BTModule {
|
|
|
38
28
|
return [{ x: this.instr.x, y: this.instr.y }];
|
|
39
29
|
}
|
|
40
30
|
checkGlobal(grid) {
|
|
41
|
-
this.initialPositions
|
|
31
|
+
this.initialPositions ??= this.getInitialPositions();
|
|
42
32
|
const tilesNeedCheck = IntArray2D.create(grid.width, grid.height);
|
|
43
33
|
const ratings = [];
|
|
44
34
|
for (const pos of this.initialPositions) {
|
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
import BTModule, { BTTile, IntArray2D, createOneTileResult, } from '../data.js';
|
|
2
2
|
export default class FocusBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
4
|
+
cachedCheckResult;
|
|
3
5
|
constructor(instr) {
|
|
4
6
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
|
-
Object.defineProperty(this, "cachedCheckResult", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
configurable: true,
|
|
14
|
-
writable: true,
|
|
15
|
-
value: void 0
|
|
16
|
-
});
|
|
17
7
|
this.instr = instr;
|
|
18
8
|
}
|
|
19
9
|
checkGlobal(grid) {
|
|
@@ -37,7 +27,7 @@ export default class FocusBTModule extends BTModule {
|
|
|
37
27
|
}
|
|
38
28
|
if (same > this.instr.number || same + gray < this.instr.number)
|
|
39
29
|
return false;
|
|
40
|
-
this.cachedCheckResult
|
|
30
|
+
this.cachedCheckResult ??= this.buildCheckAndRating(grid);
|
|
41
31
|
return this.cachedCheckResult;
|
|
42
32
|
}
|
|
43
33
|
buildCheckAndRating(grid) {
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import DirectionLinkerBTModule from './directionLinker.js';
|
|
2
2
|
export default class GalaxyBTModule extends DirectionLinkerBTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super(instr);
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
// Translate a position in relative to a galaxy symbol
|
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
import BTModule, { BTTile, IntArray2D, } from '../data.js';
|
|
2
2
|
export default class LetterBTModule extends BTModule {
|
|
3
|
+
letters;
|
|
4
|
+
letterGrid;
|
|
3
5
|
constructor(instrs, width, height) {
|
|
4
6
|
super();
|
|
5
|
-
Object.defineProperty(this, "letters", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
|
-
Object.defineProperty(this, "letterGrid", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
configurable: true,
|
|
14
|
-
writable: true,
|
|
15
|
-
value: void 0
|
|
16
|
-
});
|
|
17
7
|
this.letters = [];
|
|
18
8
|
this.letterGrid = IntArray2D.create(width, height);
|
|
19
9
|
const letterMap = new Map();
|
|
@@ -2,14 +2,9 @@ import { Orientation } from '../../../primitives.js';
|
|
|
2
2
|
import { BTTile } from '../data.js';
|
|
3
3
|
import DirectionLinkerBTModule from './directionLinker.js';
|
|
4
4
|
export default class LotusBTModule extends DirectionLinkerBTModule {
|
|
5
|
+
instr;
|
|
5
6
|
constructor(instr) {
|
|
6
7
|
super(instr);
|
|
7
|
-
Object.defineProperty(this, "instr", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
configurable: true,
|
|
10
|
-
writable: true,
|
|
11
|
-
value: void 0
|
|
12
|
-
});
|
|
13
8
|
this.instr = instr;
|
|
14
9
|
}
|
|
15
10
|
// Translate a position in relative to a lotus symbol
|
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
import BTModule, { BTTile, IntArray2D, createOneTileResult, getOppositeColor, } from '../data.js';
|
|
2
2
|
export default class MinesweeperBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
4
|
+
cachedCheckResult;
|
|
3
5
|
constructor(instr) {
|
|
4
6
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
|
-
Object.defineProperty(this, "cachedCheckResult", {
|
|
12
|
-
enumerable: true,
|
|
13
|
-
configurable: true,
|
|
14
|
-
writable: true,
|
|
15
|
-
value: void 0
|
|
16
|
-
});
|
|
17
7
|
this.instr = instr;
|
|
18
8
|
}
|
|
19
9
|
checkGlobal(grid) {
|
|
@@ -35,7 +25,7 @@ export default class MinesweeperBTModule extends BTModule {
|
|
|
35
25
|
}
|
|
36
26
|
if (opposite > this.instr.number || opposite + gray < this.instr.number)
|
|
37
27
|
return false;
|
|
38
|
-
this.cachedCheckResult
|
|
28
|
+
this.cachedCheckResult ??= this.buildCheckAndRating(grid);
|
|
39
29
|
return this.cachedCheckResult;
|
|
40
30
|
}
|
|
41
31
|
buildCheckAndRating(grid) {
|
|
@@ -2,14 +2,9 @@ import { move } from '../../../dataHelper.js';
|
|
|
2
2
|
import { ORIENTATIONS, Orientation } from '../../../primitives.js';
|
|
3
3
|
import BTModule, { BTTile, createOneTileResult, getOppositeColor, } from '../data.js';
|
|
4
4
|
export default class MyopiaBTModule extends BTModule {
|
|
5
|
+
instr;
|
|
5
6
|
constructor(instr) {
|
|
6
7
|
super();
|
|
7
|
-
Object.defineProperty(this, "instr", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
configurable: true,
|
|
10
|
-
writable: true,
|
|
11
|
-
value: void 0
|
|
12
|
-
});
|
|
13
8
|
this.instr = instr;
|
|
14
9
|
}
|
|
15
10
|
checkGlobal(grid) {
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import BTModule, { BTTile, IntArray2D, createOneTileResult, getOppositeColor, } from '../data.js';
|
|
2
2
|
export default class ViewpointBTModule extends BTModule {
|
|
3
|
+
instr;
|
|
3
4
|
constructor(instr) {
|
|
4
5
|
super();
|
|
5
|
-
Object.defineProperty(this, "instr", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
configurable: true,
|
|
8
|
-
writable: true,
|
|
9
|
-
value: void 0
|
|
10
|
-
});
|
|
11
6
|
this.instr = instr;
|
|
12
7
|
}
|
|
13
8
|
checkGlobal(grid) {
|
|
@@ -19,28 +19,28 @@ import GridData from '../../grid.js';
|
|
|
19
19
|
import { Color } from '../../primitives.js';
|
|
20
20
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
21
21
|
('vite-apply-code-mod');
|
|
22
|
-
class CspuzSolver extends EventIteratingSolver {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
22
|
+
export default class CspuzSolver extends EventIteratingSolver {
|
|
23
|
+
static supportedInstrs = [
|
|
24
|
+
minesweeperInstance.id,
|
|
25
|
+
areaNumberInstance.id,
|
|
26
|
+
letterInstance.id,
|
|
27
|
+
dartInstance.id,
|
|
28
|
+
viewpointInstance.id,
|
|
29
|
+
lotusInstance.id,
|
|
30
|
+
galaxyInstance.id,
|
|
31
|
+
connectAllInstance.id,
|
|
32
|
+
banPatternInstance.id,
|
|
33
|
+
sameShapeInstance.id,
|
|
34
|
+
uniqueShapeInstance.id,
|
|
35
|
+
regionAreaInstance.id,
|
|
36
|
+
cellCountInstance.id,
|
|
37
|
+
offByXInstance.id,
|
|
38
|
+
undercluedInstance.id,
|
|
39
|
+
symbolsPerRegionInstance.id,
|
|
40
|
+
];
|
|
41
|
+
id = 'cspuz';
|
|
42
|
+
author = 'semiexp';
|
|
43
|
+
description = 'A blazingly fast WebAssembly solver that supports most rules and symbols (including underclued).';
|
|
44
44
|
createWorker() {
|
|
45
45
|
return new Worker(new URL('./cspuzWorker.js', import.meta.url), {
|
|
46
46
|
type: 'module',
|
|
@@ -88,27 +88,3 @@ class CspuzSolver extends EventIteratingSolver {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
Object.defineProperty(CspuzSolver, "supportedInstrs", {
|
|
92
|
-
enumerable: true,
|
|
93
|
-
configurable: true,
|
|
94
|
-
writable: true,
|
|
95
|
-
value: [
|
|
96
|
-
minesweeperInstance.id,
|
|
97
|
-
areaNumberInstance.id,
|
|
98
|
-
letterInstance.id,
|
|
99
|
-
dartInstance.id,
|
|
100
|
-
viewpointInstance.id,
|
|
101
|
-
lotusInstance.id,
|
|
102
|
-
galaxyInstance.id,
|
|
103
|
-
connectAllInstance.id,
|
|
104
|
-
banPatternInstance.id,
|
|
105
|
-
sameShapeInstance.id,
|
|
106
|
-
uniqueShapeInstance.id,
|
|
107
|
-
regionAreaInstance.id,
|
|
108
|
-
cellCountInstance.id,
|
|
109
|
-
offByXInstance.id,
|
|
110
|
-
undercluedInstance.id,
|
|
111
|
-
symbolsPerRegionInstance.id,
|
|
112
|
-
]
|
|
113
|
-
});
|
|
114
|
-
export default CspuzSolver;
|
|
@@ -2,15 +2,7 @@ import { Serializer } from '../serializer/allSerializers.js';
|
|
|
2
2
|
import Solver from './solver.js';
|
|
3
3
|
import { EventIterator } from 'event-iterator';
|
|
4
4
|
export default class EventIteratingSolver extends Solver {
|
|
5
|
-
|
|
6
|
-
super(...arguments);
|
|
7
|
-
Object.defineProperty(this, "supportsCancellation", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
configurable: true,
|
|
10
|
-
writable: true,
|
|
11
|
-
value: true
|
|
12
|
-
});
|
|
13
|
-
}
|
|
5
|
+
supportsCancellation = true;
|
|
14
6
|
isEnvironmentSupported() {
|
|
15
7
|
try {
|
|
16
8
|
const worker = this.createWorker();
|
|
@@ -23,10 +15,14 @@ export default class EventIteratingSolver extends Solver {
|
|
|
23
15
|
}
|
|
24
16
|
async *solve(grid, abortSignal) {
|
|
25
17
|
const worker = this.createWorker();
|
|
26
|
-
|
|
27
|
-
abortSignal?.addEventListener('abort', terminateHandler);
|
|
18
|
+
let terminateHandler;
|
|
28
19
|
try {
|
|
29
20
|
const iterator = new EventIterator(({ push, stop, fail }) => {
|
|
21
|
+
terminateHandler = () => {
|
|
22
|
+
worker.terminate();
|
|
23
|
+
stop();
|
|
24
|
+
};
|
|
25
|
+
abortSignal?.addEventListener('abort', terminateHandler);
|
|
30
26
|
worker.postMessage(Serializer.stringifyGrid(grid.resetTiles()));
|
|
31
27
|
worker.addEventListener('message', (e) => {
|
|
32
28
|
if (e.data) {
|
|
@@ -51,7 +47,8 @@ export default class EventIteratingSolver extends Solver {
|
|
|
51
47
|
}
|
|
52
48
|
finally {
|
|
53
49
|
worker.terminate();
|
|
54
|
-
|
|
50
|
+
if (terminateHandler)
|
|
51
|
+
abortSignal?.removeEventListener('abort', terminateHandler);
|
|
55
52
|
}
|
|
56
53
|
}
|
|
57
54
|
}
|
|
@@ -5,14 +5,6 @@ import { allSymbols } from '../symbols/index.js';
|
|
|
5
5
|
* Base class that all solvers must extend.
|
|
6
6
|
*/
|
|
7
7
|
export default class Solver {
|
|
8
|
-
constructor() {
|
|
9
|
-
Object.defineProperty(this, "environmentCheck", {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
configurable: true,
|
|
12
|
-
writable: true,
|
|
13
|
-
value: CachedAccess.of(() => this.isEnvironmentSupported())
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
8
|
/**
|
|
17
9
|
* Check if the solver supports the current browser environment. This method is called once when the user first clicks
|
|
18
10
|
* the "Solve" button, and the result is cached for the duration of the editor session.
|
|
@@ -25,6 +17,7 @@ export default class Solver {
|
|
|
25
17
|
isEnvironmentSupported() {
|
|
26
18
|
return Promise.resolve(true);
|
|
27
19
|
}
|
|
20
|
+
environmentCheck = CachedAccess.of(() => this.isEnvironmentSupported());
|
|
28
21
|
/**
|
|
29
22
|
* Check if the solver supports the given instruction. This is used to render a small indication in the UI for each
|
|
30
23
|
* instruction in the editor.
|