@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.
Files changed (268) hide show
  1. package/assets/logic-core.global.d.ts +22 -0
  2. package/dist/benchmark/helper.d.ts +21 -0
  3. package/dist/benchmark/helper.js +34 -0
  4. package/dist/benchmark/prepareBench.js +140 -0
  5. package/dist/benchmark/runBench.js +206 -0
  6. package/dist/{data → src/data}/dataHelper.js +4 -18
  7. package/dist/{data → src/data}/grid.js +15 -68
  8. package/dist/{data → src/data}/gridZones.js +1 -6
  9. package/dist/{data → src/data}/rules/banPatternRule.js +19 -50
  10. package/dist/{data → src/data}/rules/cellCountPerZoneRule.js +2 -6
  11. package/dist/{data → src/data}/rules/cellCountRule.js +62 -96
  12. package/dist/{data → src/data}/rules/completePatternRule.js +6 -22
  13. package/dist/{data → src/data}/rules/connectAllRule.js +20 -50
  14. package/dist/{data → src/data}/rules/connectZonesRule.js +28 -58
  15. package/dist/{data → src/data}/rules/containsShapeRule.js +29 -65
  16. package/dist/{data → src/data}/rules/customRule.js +28 -57
  17. package/dist/{data → src/data}/rules/differentCountPerZoneRule.js +33 -68
  18. package/dist/{data → src/data}/rules/exactCountPerZoneRule.js +43 -82
  19. package/dist/{data → src/data}/rules/foresightRule.js +50 -87
  20. package/dist/{data → src/data}/rules/lyingSymbolRule.js +37 -88
  21. package/dist/{data → src/data}/rules/musicControlLine.js +69 -131
  22. package/dist/{data → src/data}/rules/musicGridRule.js +43 -76
  23. package/dist/{data → src/data}/rules/mysteryRule.js +29 -58
  24. package/dist/src/data/rules/noLoopsRule.d.ts +29 -0
  25. package/dist/src/data/rules/noLoopsRule.js +111 -0
  26. package/dist/{data → src/data}/rules/offByXRule.js +49 -74
  27. package/dist/{data → src/data}/rules/perfectionRule.js +8 -28
  28. package/dist/{data → src/data}/rules/regionAreaRule.js +47 -86
  29. package/dist/{data → src/data}/rules/regionShapeRule.js +2 -6
  30. package/dist/{data → src/data}/rules/rules.gen.d.ts +1 -0
  31. package/dist/{data → src/data}/rules/rules.gen.js +1 -0
  32. package/dist/{data → src/data}/rules/sameCountPerZoneRule.js +33 -68
  33. package/dist/{data → src/data}/rules/sameShapeRule.js +18 -44
  34. package/dist/{data → src/data}/rules/symbolsPerRegionRule.js +52 -90
  35. package/dist/{data → src/data}/rules/undercluedRule.js +11 -27
  36. package/dist/{data → src/data}/rules/uniqueShapeRule.js +18 -44
  37. package/dist/{data → src/data}/rules/wrapAroundRule.js +99 -138
  38. package/dist/{data → src/data}/serializer/serializer_checksum.js +1 -9
  39. package/dist/{data → src/data}/serializer/serializer_v0.js +1 -9
  40. package/dist/{data → src/data}/solver/auto/autoSolver.js +11 -40
  41. package/dist/{data → src/data}/solver/backtrack/backtrackSolver.js +15 -39
  42. package/dist/{data → src/data}/solver/backtrack/backtrackWorker.js +1 -1
  43. package/dist/{data → src/data}/solver/backtrack/data.js +16 -48
  44. package/dist/{data → src/data}/solver/backtrack/rules/banPattern.js +1 -6
  45. package/dist/{data → src/data}/solver/backtrack/rules/cellCount.js +1 -6
  46. package/dist/{data → src/data}/solver/backtrack/rules/connectAll.js +1 -6
  47. package/dist/{data → src/data}/solver/backtrack/rules/regionArea.js +1 -6
  48. package/dist/{data → src/data}/solver/backtrack/rules/regionShape.js +1 -6
  49. package/dist/{data → src/data}/solver/backtrack/rules/sameShape.js +1 -6
  50. package/dist/{data → src/data}/solver/backtrack/rules/symbolsPerRegion.js +2 -12
  51. package/dist/{data → src/data}/solver/backtrack/rules/uniqueShape.js +1 -6
  52. package/dist/{data → src/data}/solver/backtrack/symbols/areaNumber.js +1 -6
  53. package/dist/{data → src/data}/solver/backtrack/symbols/dart.js +1 -6
  54. package/dist/{data → src/data}/solver/backtrack/symbols/directionLinker.js +3 -13
  55. package/dist/{data → src/data}/solver/backtrack/symbols/focus.js +3 -13
  56. package/dist/{data → src/data}/solver/backtrack/symbols/galaxy.js +1 -6
  57. package/dist/{data → src/data}/solver/backtrack/symbols/letter.js +2 -12
  58. package/dist/{data → src/data}/solver/backtrack/symbols/lotus.js +1 -6
  59. package/dist/{data → src/data}/solver/backtrack/symbols/minesweeper.js +3 -13
  60. package/dist/{data → src/data}/solver/backtrack/symbols/myopia.js +1 -6
  61. package/dist/{data → src/data}/solver/backtrack/symbols/viewpoint.js +1 -6
  62. package/dist/{data → src/data}/solver/cspuz/cspuzSolver.js +22 -46
  63. package/dist/{data → src/data}/solver/eventIteratingSolver.js +9 -12
  64. package/dist/{data → src/data}/solver/solver.js +1 -8
  65. package/dist/src/data/solver/universal/universalSolver.js +20 -0
  66. package/dist/src/data/solver/universal/universalWorker.d.ts +1 -0
  67. package/dist/{data → src/data}/solver/z3/modules/areaNumberModule.js +1 -9
  68. package/dist/{data → src/data}/solver/z3/modules/cellCountModule.js +1 -9
  69. package/dist/{data → src/data}/solver/z3/modules/connectAllModule.js +1 -9
  70. package/dist/{data → src/data}/solver/z3/modules/dartModule.js +1 -9
  71. package/dist/{data → src/data}/solver/z3/modules/letterModule.js +1 -9
  72. package/dist/{data → src/data}/solver/z3/modules/myopiaModule.js +1 -9
  73. package/dist/{data → src/data}/solver/z3/modules/regionAreaModule.js +1 -9
  74. package/dist/{data → src/data}/solver/z3/modules/viewpointModule.js +1 -9
  75. package/dist/{data → src/data}/solver/z3/z3Solver.js +4 -27
  76. package/dist/{data → src/data}/solver/z3/z3SolverContext.js +3 -12
  77. package/dist/{data → src/data}/symbols/areaNumberSymbol.js +28 -44
  78. package/dist/{data → src/data}/symbols/customIconSymbol.js +40 -64
  79. package/dist/{data → src/data}/symbols/customSymbol.js +4 -12
  80. package/dist/{data → src/data}/symbols/customTextSymbol.js +40 -64
  81. package/dist/{data → src/data}/symbols/dartSymbol.js +39 -59
  82. package/dist/{data → src/data}/symbols/directionLinkerSymbol.js +34 -63
  83. package/dist/{data → src/data}/symbols/everyLetterSymbol.js +37 -65
  84. package/dist/{data → src/data}/symbols/focusSymbol.js +49 -69
  85. package/dist/{data → src/data}/symbols/galaxySymbol.js +12 -31
  86. package/dist/{data → src/data}/symbols/hiddenSymbol.js +34 -62
  87. package/dist/{data → src/data}/symbols/houseSymbol.js +39 -67
  88. package/dist/{data → src/data}/symbols/letterSymbol.js +40 -68
  89. package/dist/{data → src/data}/symbols/lotusSymbol.js +58 -81
  90. package/dist/{data → src/data}/symbols/minesweeperSymbol.js +30 -46
  91. package/dist/{data → src/data}/symbols/myopiaSymbol.js +45 -69
  92. package/dist/{data → src/data}/symbols/numberSymbol.js +6 -18
  93. package/dist/{data → src/data}/symbols/symbol.js +4 -12
  94. package/dist/{data → src/data}/symbols/viewpointSymbol.js +26 -42
  95. package/dist/{data → src/data}/tile.js +6 -18
  96. package/dist/src/data/validateAsync.js +71 -0
  97. package/dist/src/data/validateAsyncWorker.d.ts +1 -0
  98. package/dist/{index.d.ts → src/index.d.ts} +2 -1
  99. package/dist/{index.js → src/index.js} +2 -1
  100. package/package.json +6 -2
  101. package/dist/data/solver/universal/universalSolver.js +0 -38
  102. package/dist/data/validateAsync.js +0 -128
  103. /package/dist/{data/solver/backtrack/backtrackWorker.d.ts → benchmark/prepareBench.d.ts} +0 -0
  104. /package/dist/{data/solver/cspuz/cspuzWorker.d.ts → benchmark/runBench.d.ts} +0 -0
  105. /package/dist/{data → src/data}/config.d.ts +0 -0
  106. /package/dist/{data → src/data}/config.js +0 -0
  107. /package/dist/{data → src/data}/configurable.d.ts +0 -0
  108. /package/dist/{data → src/data}/configurable.js +0 -0
  109. /package/dist/{data → src/data}/dataHelper.d.ts +0 -0
  110. /package/dist/{data → src/data}/events/eventHelper.d.ts +0 -0
  111. /package/dist/{data → src/data}/events/eventHelper.js +0 -0
  112. /package/dist/{data → src/data}/events/onFinalValidation.d.ts +0 -0
  113. /package/dist/{data → src/data}/events/onFinalValidation.js +0 -0
  114. /package/dist/{data → src/data}/events/onGetTile.d.ts +0 -0
  115. /package/dist/{data → src/data}/events/onGetTile.js +0 -0
  116. /package/dist/{data → src/data}/events/onGridChange.d.ts +0 -0
  117. /package/dist/{data → src/data}/events/onGridChange.js +0 -0
  118. /package/dist/{data → src/data}/events/onGridResize.d.ts +0 -0
  119. /package/dist/{data → src/data}/events/onGridResize.js +0 -0
  120. /package/dist/{data → src/data}/events/onSetGrid.d.ts +0 -0
  121. /package/dist/{data → src/data}/events/onSetGrid.js +0 -0
  122. /package/dist/{data → src/data}/events/onSymbolDisplay.d.ts +0 -0
  123. /package/dist/{data → src/data}/events/onSymbolDisplay.js +0 -0
  124. /package/dist/{data → src/data}/events/onSymbolMerge.d.ts +0 -0
  125. /package/dist/{data → src/data}/events/onSymbolMerge.js +0 -0
  126. /package/dist/{data → src/data}/events/onSymbolValidation.d.ts +0 -0
  127. /package/dist/{data → src/data}/events/onSymbolValidation.js +0 -0
  128. /package/dist/{data → src/data}/grid.d.ts +0 -0
  129. /package/dist/{data → src/data}/gridConnections.d.ts +0 -0
  130. /package/dist/{data → src/data}/gridConnections.js +0 -0
  131. /package/dist/{data → src/data}/gridZones.d.ts +0 -0
  132. /package/dist/{data → src/data}/instruction.d.ts +0 -0
  133. /package/dist/{data → src/data}/instruction.js +0 -0
  134. /package/dist/{data → src/data}/primitives.d.ts +0 -0
  135. /package/dist/{data → src/data}/primitives.js +0 -0
  136. /package/dist/{data → src/data}/puzzle.d.ts +0 -0
  137. /package/dist/{data → src/data}/puzzle.js +0 -0
  138. /package/dist/{data → src/data}/rules/banPatternRule.d.ts +0 -0
  139. /package/dist/{data → src/data}/rules/cellCountPerZoneRule.d.ts +0 -0
  140. /package/dist/{data → src/data}/rules/cellCountRule.d.ts +0 -0
  141. /package/dist/{data → src/data}/rules/completePatternRule.d.ts +0 -0
  142. /package/dist/{data → src/data}/rules/connectAllRule.d.ts +0 -0
  143. /package/dist/{data → src/data}/rules/connectZonesRule.d.ts +0 -0
  144. /package/dist/{data → src/data}/rules/containsShapeRule.d.ts +0 -0
  145. /package/dist/{data → src/data}/rules/customRule.d.ts +0 -0
  146. /package/dist/{data → src/data}/rules/differentCountPerZoneRule.d.ts +0 -0
  147. /package/dist/{data → src/data}/rules/exactCountPerZoneRule.d.ts +0 -0
  148. /package/dist/{data → src/data}/rules/foresightRule.d.ts +0 -0
  149. /package/dist/{data → src/data}/rules/index.d.ts +0 -0
  150. /package/dist/{data → src/data}/rules/index.js +0 -0
  151. /package/dist/{data → src/data}/rules/lyingSymbolRule.d.ts +0 -0
  152. /package/dist/{data → src/data}/rules/musicControlLine.d.ts +0 -0
  153. /package/dist/{data → src/data}/rules/musicGridRule.d.ts +0 -0
  154. /package/dist/{data → src/data}/rules/mysteryRule.d.ts +0 -0
  155. /package/dist/{data → src/data}/rules/offByXRule.d.ts +0 -0
  156. /package/dist/{data → src/data}/rules/perfectionRule.d.ts +0 -0
  157. /package/dist/{data → src/data}/rules/regionAreaRule.d.ts +0 -0
  158. /package/dist/{data → src/data}/rules/regionShapeRule.d.ts +0 -0
  159. /package/dist/{data → src/data}/rules/rule.d.ts +0 -0
  160. /package/dist/{data → src/data}/rules/rule.js +0 -0
  161. /package/dist/{data → src/data}/rules/sameCountPerZoneRule.d.ts +0 -0
  162. /package/dist/{data → src/data}/rules/sameShapeRule.d.ts +0 -0
  163. /package/dist/{data → src/data}/rules/symbolsPerRegionRule.d.ts +0 -0
  164. /package/dist/{data → src/data}/rules/undercluedRule.d.ts +0 -0
  165. /package/dist/{data → src/data}/rules/uniqueShapeRule.d.ts +0 -0
  166. /package/dist/{data → src/data}/rules/wrapAroundRule.d.ts +0 -0
  167. /package/dist/{data → src/data}/serializer/allSerializers.d.ts +0 -0
  168. /package/dist/{data → src/data}/serializer/allSerializers.js +0 -0
  169. /package/dist/{data → src/data}/serializer/compressor/allCompressors.d.ts +0 -0
  170. /package/dist/{data → src/data}/serializer/compressor/allCompressors.js +0 -0
  171. /package/dist/{data → src/data}/serializer/compressor/checksumCompressor.d.ts +0 -0
  172. /package/dist/{data → src/data}/serializer/compressor/checksumCompressor.js +0 -0
  173. /package/dist/{data → src/data}/serializer/compressor/compressorBase.d.ts +0 -0
  174. /package/dist/{data → src/data}/serializer/compressor/compressorBase.js +0 -0
  175. /package/dist/{data → src/data}/serializer/compressor/deflateCompressor.d.ts +0 -0
  176. /package/dist/{data → src/data}/serializer/compressor/deflateCompressor.js +0 -0
  177. /package/dist/{data → src/data}/serializer/compressor/gzipCompressor.d.ts +0 -0
  178. /package/dist/{data → src/data}/serializer/compressor/gzipCompressor.js +0 -0
  179. /package/dist/{data → src/data}/serializer/compressor/streamCompressor.d.ts +0 -0
  180. /package/dist/{data → src/data}/serializer/compressor/streamCompressor.js +0 -0
  181. /package/dist/{data → src/data}/serializer/serializerBase.d.ts +0 -0
  182. /package/dist/{data → src/data}/serializer/serializerBase.js +0 -0
  183. /package/dist/{data → src/data}/serializer/serializer_checksum.d.ts +0 -0
  184. /package/dist/{data → src/data}/serializer/serializer_v0.d.ts +0 -0
  185. /package/dist/{data → src/data}/shapes.d.ts +0 -0
  186. /package/dist/{data → src/data}/shapes.js +0 -0
  187. /package/dist/{data → src/data}/solver/allSolvers.d.ts +0 -0
  188. /package/dist/{data → src/data}/solver/allSolvers.js +0 -0
  189. /package/dist/{data → src/data}/solver/auto/autoSolver.d.ts +0 -0
  190. /package/dist/{data → src/data}/solver/backtrack/backtrackSolver.d.ts +0 -0
  191. /package/dist/{data/solver/universal/universalWorker.d.ts → src/data/solver/backtrack/backtrackWorker.d.ts} +0 -0
  192. /package/dist/{data → src/data}/solver/backtrack/data.d.ts +0 -0
  193. /package/dist/{data → src/data}/solver/backtrack/rules/banPattern.d.ts +0 -0
  194. /package/dist/{data → src/data}/solver/backtrack/rules/cellCount.d.ts +0 -0
  195. /package/dist/{data → src/data}/solver/backtrack/rules/connectAll.d.ts +0 -0
  196. /package/dist/{data → src/data}/solver/backtrack/rules/regionArea.d.ts +0 -0
  197. /package/dist/{data → src/data}/solver/backtrack/rules/regionShape.d.ts +0 -0
  198. /package/dist/{data → src/data}/solver/backtrack/rules/sameShape.d.ts +0 -0
  199. /package/dist/{data → src/data}/solver/backtrack/rules/symbolsPerRegion.d.ts +0 -0
  200. /package/dist/{data → src/data}/solver/backtrack/rules/uniqueShape.d.ts +0 -0
  201. /package/dist/{data → src/data}/solver/backtrack/symbols/areaNumber.d.ts +0 -0
  202. /package/dist/{data → src/data}/solver/backtrack/symbols/dart.d.ts +0 -0
  203. /package/dist/{data → src/data}/solver/backtrack/symbols/directionLinker.d.ts +0 -0
  204. /package/dist/{data → src/data}/solver/backtrack/symbols/focus.d.ts +0 -0
  205. /package/dist/{data → src/data}/solver/backtrack/symbols/galaxy.d.ts +0 -0
  206. /package/dist/{data → src/data}/solver/backtrack/symbols/letter.d.ts +0 -0
  207. /package/dist/{data → src/data}/solver/backtrack/symbols/lotus.d.ts +0 -0
  208. /package/dist/{data → src/data}/solver/backtrack/symbols/minesweeper.d.ts +0 -0
  209. /package/dist/{data → src/data}/solver/backtrack/symbols/myopia.d.ts +0 -0
  210. /package/dist/{data → src/data}/solver/backtrack/symbols/viewpoint.d.ts +0 -0
  211. /package/dist/{data → src/data}/solver/cspuz/cspuzSolver.d.ts +0 -0
  212. /package/dist/{data/validateAsyncWorker.d.ts → src/data/solver/cspuz/cspuzWorker.d.ts} +0 -0
  213. /package/dist/{data → src/data}/solver/cspuz/cspuzWorker.js +0 -0
  214. /package/dist/{data → src/data}/solver/cspuz/jsonify.d.ts +0 -0
  215. /package/dist/{data → src/data}/solver/cspuz/jsonify.js +0 -0
  216. /package/dist/{data → src/data}/solver/eventIteratingSolver.d.ts +0 -0
  217. /package/dist/{data → src/data}/solver/solver.d.ts +0 -0
  218. /package/dist/{data → src/data}/solver/universal/universalSolver.d.ts +0 -0
  219. /package/dist/{data → src/data}/solver/universal/universalWorker.js +0 -0
  220. /package/dist/{data → src/data}/solver/z3/modules/areaNumberModule.d.ts +0 -0
  221. /package/dist/{data → src/data}/solver/z3/modules/cellCountModule.d.ts +0 -0
  222. /package/dist/{data → src/data}/solver/z3/modules/connectAllModule.d.ts +0 -0
  223. /package/dist/{data → src/data}/solver/z3/modules/dartModule.d.ts +0 -0
  224. /package/dist/{data → src/data}/solver/z3/modules/index.d.ts +0 -0
  225. /package/dist/{data → src/data}/solver/z3/modules/index.js +0 -0
  226. /package/dist/{data → src/data}/solver/z3/modules/letterModule.d.ts +0 -0
  227. /package/dist/{data → src/data}/solver/z3/modules/modules.gen.d.ts +0 -0
  228. /package/dist/{data → src/data}/solver/z3/modules/modules.gen.js +0 -0
  229. /package/dist/{data → src/data}/solver/z3/modules/myopiaModule.d.ts +0 -0
  230. /package/dist/{data → src/data}/solver/z3/modules/regionAreaModule.d.ts +0 -0
  231. /package/dist/{data → src/data}/solver/z3/modules/viewpointModule.d.ts +0 -0
  232. /package/dist/{data → src/data}/solver/z3/modules/z3Module.d.ts +0 -0
  233. /package/dist/{data → src/data}/solver/z3/modules/z3Module.js +0 -0
  234. /package/dist/{data → src/data}/solver/z3/utils.d.ts +0 -0
  235. /package/dist/{data → src/data}/solver/z3/utils.js +0 -0
  236. /package/dist/{data → src/data}/solver/z3/z3Solver.d.ts +0 -0
  237. /package/dist/{data → src/data}/solver/z3/z3SolverContext.d.ts +0 -0
  238. /package/dist/{data → src/data}/symbols/areaNumberSymbol.d.ts +0 -0
  239. /package/dist/{data → src/data}/symbols/customIconSymbol.d.ts +0 -0
  240. /package/dist/{data → src/data}/symbols/customSymbol.d.ts +0 -0
  241. /package/dist/{data → src/data}/symbols/customTextSymbol.d.ts +0 -0
  242. /package/dist/{data → src/data}/symbols/dartSymbol.d.ts +0 -0
  243. /package/dist/{data → src/data}/symbols/directionLinkerSymbol.d.ts +0 -0
  244. /package/dist/{data → src/data}/symbols/everyLetterSymbol.d.ts +0 -0
  245. /package/dist/{data → src/data}/symbols/focusSymbol.d.ts +0 -0
  246. /package/dist/{data → src/data}/symbols/galaxySymbol.d.ts +0 -0
  247. /package/dist/{data → src/data}/symbols/hiddenSymbol.d.ts +0 -0
  248. /package/dist/{data → src/data}/symbols/houseSymbol.d.ts +0 -0
  249. /package/dist/{data → src/data}/symbols/index.d.ts +0 -0
  250. /package/dist/{data → src/data}/symbols/index.js +0 -0
  251. /package/dist/{data → src/data}/symbols/letterSymbol.d.ts +0 -0
  252. /package/dist/{data → src/data}/symbols/lotusSymbol.d.ts +0 -0
  253. /package/dist/{data → src/data}/symbols/minesweeperSymbol.d.ts +0 -0
  254. /package/dist/{data → src/data}/symbols/myopiaSymbol.d.ts +0 -0
  255. /package/dist/{data → src/data}/symbols/numberSymbol.d.ts +0 -0
  256. /package/dist/{data → src/data}/symbols/symbol.d.ts +0 -0
  257. /package/dist/{data → src/data}/symbols/symbols.gen.d.ts +0 -0
  258. /package/dist/{data → src/data}/symbols/symbols.gen.js +0 -0
  259. /package/dist/{data → src/data}/symbols/viewpointSymbol.d.ts +0 -0
  260. /package/dist/{data → src/data}/tile.d.ts +0 -0
  261. /package/dist/{data → src/data}/tileConnections.d.ts +0 -0
  262. /package/dist/{data → src/data}/tileConnections.js +0 -0
  263. /package/dist/{data → src/data}/validate.d.ts +0 -0
  264. /package/dist/{data → src/data}/validate.js +0 -0
  265. /package/dist/{data → src/data}/validateAsync.d.ts +0 -0
  266. /package/dist/{data → src/data}/validateAsyncWorker.js +0 -0
  267. /package/dist/{polyfill → src/polyfill}/streamPolyfill.d.ts +0 -0
  268. /package/dist/{polyfill → src/polyfill}/streamPolyfill.js +0 -0
@@ -3,7 +3,38 @@ import GridData from '../grid.js';
3
3
  import GridZones from '../gridZones.js';
4
4
  import { Color, State } from '../primitives.js';
5
5
  import CellCountPerZoneRule from './cellCountPerZoneRule.js';
6
- class DifferentCountPerZoneRule extends CellCountPerZoneRule {
6
+ export default class DifferentCountPerZoneRule extends CellCountPerZoneRule {
7
+ color;
8
+ title = 'Different Count Per Zone';
9
+ static CONFIGS = Object.freeze([
10
+ {
11
+ type: ConfigType.Color,
12
+ default: Color.Light,
13
+ allowGray: true,
14
+ field: 'color',
15
+ description: 'Color',
16
+ configurable: true,
17
+ },
18
+ ]);
19
+ static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['wwbbw', 'wbbwb', 'bbbwb', 'bwbwb'])
20
+ .withZones(new GridZones([
21
+ { x1: 0, y1: 1, x2: 0, y2: 2 },
22
+ { x1: 1, y1: 1, x2: 1, y2: 2 },
23
+ { x1: 2, y1: 1, x2: 2, y2: 2 },
24
+ { x1: 3, y1: 1, x2: 3, y2: 2 },
25
+ { x1: 4, y1: 1, x2: 4, y2: 2 },
26
+ { x1: 1, y1: 0, x2: 2, y2: 0 },
27
+ { x1: 1, y1: 1, x2: 2, y2: 1 },
28
+ { x1: 2, y1: 2, x2: 3, y2: 2 },
29
+ { x1: 2, y1: 3, x2: 3, y2: 3 },
30
+ ]))
31
+ .addRule(new DifferentCountPerZoneRule(Color.Light)));
32
+ static EXAMPLE_GRID_DARK = Object.freeze(DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))));
33
+ static EXAMPLE_GRID_GRAY = Object.freeze(DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))));
34
+ static SEARCH_VARIANTS = [
35
+ new DifferentCountPerZoneRule(Color.Light).searchVariant(),
36
+ new DifferentCountPerZoneRule(Color.Dark).searchVariant(),
37
+ ];
7
38
  /**
8
39
  * **Zones of the same size have different numbers of <color> cells.**
9
40
  *
@@ -11,18 +42,7 @@ class DifferentCountPerZoneRule extends CellCountPerZoneRule {
11
42
  */
12
43
  constructor(color) {
13
44
  super(color);
14
- Object.defineProperty(this, "color", {
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: 'Different Count Per Zone'
25
- });
45
+ this.color = color;
26
46
  }
27
47
  get id() {
28
48
  return `zone_diff_count`;
@@ -73,59 +93,4 @@ class DifferentCountPerZoneRule extends CellCountPerZoneRule {
73
93
  return new DifferentCountPerZoneRule(color ?? this.color);
74
94
  }
75
95
  }
76
- Object.defineProperty(DifferentCountPerZoneRule, "CONFIGS", {
77
- enumerable: true,
78
- configurable: true,
79
- writable: true,
80
- value: Object.freeze([
81
- {
82
- type: ConfigType.Color,
83
- default: Color.Light,
84
- allowGray: true,
85
- field: 'color',
86
- description: 'Color',
87
- configurable: true,
88
- },
89
- ])
90
- });
91
- Object.defineProperty(DifferentCountPerZoneRule, "EXAMPLE_GRID_LIGHT", {
92
- enumerable: true,
93
- configurable: true,
94
- writable: true,
95
- value: Object.freeze(GridData.create(['wwbbw', 'wbbwb', 'bbbwb', 'bwbwb'])
96
- .withZones(new GridZones([
97
- { x1: 0, y1: 1, x2: 0, y2: 2 },
98
- { x1: 1, y1: 1, x2: 1, y2: 2 },
99
- { x1: 2, y1: 1, x2: 2, y2: 2 },
100
- { x1: 3, y1: 1, x2: 3, y2: 2 },
101
- { x1: 4, y1: 1, x2: 4, y2: 2 },
102
- { x1: 1, y1: 0, x2: 2, y2: 0 },
103
- { x1: 1, y1: 1, x2: 2, y2: 1 },
104
- { x1: 2, y1: 2, x2: 3, y2: 2 },
105
- { x1: 2, y1: 3, x2: 3, y2: 3 },
106
- ]))
107
- .addRule(new DifferentCountPerZoneRule(Color.Light)))
108
- });
109
- Object.defineProperty(DifferentCountPerZoneRule, "EXAMPLE_GRID_DARK", {
110
- enumerable: true,
111
- configurable: true,
112
- writable: true,
113
- value: Object.freeze(DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))))
114
- });
115
- Object.defineProperty(DifferentCountPerZoneRule, "EXAMPLE_GRID_GRAY", {
116
- enumerable: true,
117
- configurable: true,
118
- writable: true,
119
- value: Object.freeze(DifferentCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))))
120
- });
121
- Object.defineProperty(DifferentCountPerZoneRule, "SEARCH_VARIANTS", {
122
- enumerable: true,
123
- configurable: true,
124
- writable: true,
125
- value: [
126
- new DifferentCountPerZoneRule(Color.Light).searchVariant(),
127
- new DifferentCountPerZoneRule(Color.Dark).searchVariant(),
128
- ]
129
- });
130
- export default DifferentCountPerZoneRule;
131
96
  export const instance = new DifferentCountPerZoneRule(Color.Light);
@@ -3,7 +3,47 @@ import GridData from '../grid.js';
3
3
  import GridZones from '../gridZones.js';
4
4
  import { Color, State } from '../primitives.js';
5
5
  import CellCountPerZoneRule from './cellCountPerZoneRule.js';
6
- class ExactCountPerZoneRule extends CellCountPerZoneRule {
6
+ export default class ExactCountPerZoneRule extends CellCountPerZoneRule {
7
+ color;
8
+ count;
9
+ title = 'Exact Count Per Zone';
10
+ static CONFIGS = Object.freeze([
11
+ {
12
+ type: ConfigType.Color,
13
+ default: Color.Light,
14
+ allowGray: true,
15
+ field: 'color',
16
+ description: 'Color',
17
+ configurable: true,
18
+ },
19
+ {
20
+ type: ConfigType.Number,
21
+ default: 1,
22
+ min: 0,
23
+ field: 'count',
24
+ description: 'Count',
25
+ configurable: true,
26
+ },
27
+ ]);
28
+ static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['wbbbb', 'bbbwb', 'bbbwb', 'bwbbb'])
29
+ .withZones(new GridZones([
30
+ { x1: 0, y1: 1, x2: 0, y2: 2 },
31
+ { x1: 1, y1: 1, x2: 1, y2: 2 },
32
+ { x1: 2, y1: 1, x2: 2, y2: 2 },
33
+ { x1: 3, y1: 1, x2: 3, y2: 2 },
34
+ { x1: 4, y1: 1, x2: 4, y2: 2 },
35
+ { x1: 1, y1: 0, x2: 2, y2: 0 },
36
+ { x1: 1, y1: 1, x2: 2, y2: 1 },
37
+ { x1: 2, y1: 2, x2: 3, y2: 2 },
38
+ { x1: 2, y1: 3, x2: 3, y2: 3 },
39
+ ]))
40
+ .addRule(new ExactCountPerZoneRule(Color.Light, 1)));
41
+ static EXAMPLE_GRID_DARK = Object.freeze(ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))));
42
+ static EXAMPLE_GRID_GRAY = Object.freeze(ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))));
43
+ static SEARCH_VARIANTS = [
44
+ new ExactCountPerZoneRule(Color.Light, 1).searchVariant(),
45
+ new ExactCountPerZoneRule(Color.Dark, 1).searchVariant(),
46
+ ];
7
47
  /**
8
48
  * **Each zone has <count> <color> cells.**
9
49
  *
@@ -12,24 +52,8 @@ class ExactCountPerZoneRule extends CellCountPerZoneRule {
12
52
  */
13
53
  constructor(color, count) {
14
54
  super(color);
15
- Object.defineProperty(this, "color", {
16
- enumerable: true,
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: 'Exact Count Per Zone'
32
- });
55
+ this.color = color;
56
+ this.count = count;
33
57
  this.count = count;
34
58
  }
35
59
  get id() {
@@ -72,67 +96,4 @@ class ExactCountPerZoneRule extends CellCountPerZoneRule {
72
96
  return new ExactCountPerZoneRule(color ?? this.color, count ?? this.count);
73
97
  }
74
98
  }
75
- Object.defineProperty(ExactCountPerZoneRule, "CONFIGS", {
76
- enumerable: true,
77
- configurable: true,
78
- writable: true,
79
- value: Object.freeze([
80
- {
81
- type: ConfigType.Color,
82
- default: Color.Light,
83
- allowGray: true,
84
- field: 'color',
85
- description: 'Color',
86
- configurable: true,
87
- },
88
- {
89
- type: ConfigType.Number,
90
- default: 1,
91
- min: 0,
92
- field: 'count',
93
- description: 'Count',
94
- configurable: true,
95
- },
96
- ])
97
- });
98
- Object.defineProperty(ExactCountPerZoneRule, "EXAMPLE_GRID_LIGHT", {
99
- enumerable: true,
100
- configurable: true,
101
- writable: true,
102
- value: Object.freeze(GridData.create(['wbbbb', 'bbbwb', 'bbbwb', 'bwbbb'])
103
- .withZones(new GridZones([
104
- { x1: 0, y1: 1, x2: 0, y2: 2 },
105
- { x1: 1, y1: 1, x2: 1, y2: 2 },
106
- { x1: 2, y1: 1, x2: 2, y2: 2 },
107
- { x1: 3, y1: 1, x2: 3, y2: 2 },
108
- { x1: 4, y1: 1, x2: 4, y2: 2 },
109
- { x1: 1, y1: 0, x2: 2, y2: 0 },
110
- { x1: 1, y1: 1, x2: 2, y2: 1 },
111
- { x1: 2, y1: 2, x2: 3, y2: 2 },
112
- { x1: 2, y1: 3, x2: 3, y2: 3 },
113
- ]))
114
- .addRule(new ExactCountPerZoneRule(Color.Light, 1)))
115
- });
116
- Object.defineProperty(ExactCountPerZoneRule, "EXAMPLE_GRID_DARK", {
117
- enumerable: true,
118
- configurable: true,
119
- writable: true,
120
- value: Object.freeze(ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))))
121
- });
122
- Object.defineProperty(ExactCountPerZoneRule, "EXAMPLE_GRID_GRAY", {
123
- enumerable: true,
124
- configurable: true,
125
- writable: true,
126
- value: Object.freeze(ExactCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))))
127
- });
128
- Object.defineProperty(ExactCountPerZoneRule, "SEARCH_VARIANTS", {
129
- enumerable: true,
130
- configurable: true,
131
- writable: true,
132
- value: [
133
- new ExactCountPerZoneRule(Color.Light, 1).searchVariant(),
134
- new ExactCountPerZoneRule(Color.Dark, 1).searchVariant(),
135
- ]
136
- });
137
- export default ExactCountPerZoneRule;
138
99
  export const instance = new ExactCountPerZoneRule(Color.Light, 1);
@@ -3,45 +3,64 @@ import GridData from '../grid.js';
3
3
  import { State, Mode } from '../primitives.js';
4
4
  import CustomIconSymbol from '../symbols/customIconSymbol.js';
5
5
  import Rule from './rule.js';
6
- class ForesightRule extends Rule {
6
+ export default class ForesightRule extends Rule {
7
+ count;
8
+ regenInterval;
9
+ startFull;
10
+ solvePath;
11
+ title = 'Foresight';
7
12
  get configExplanation() {
8
13
  return 'Provide automatic hints to the player.';
9
14
  }
15
+ static EXAMPLE_GRID = Object.freeze(GridData.create(['.']).addSymbol(new CustomIconSymbol('', GridData.create([]), 0, 0, 'MdRemoveRedEye')));
16
+ static CONFIGS = Object.freeze([
17
+ {
18
+ type: ConfigType.Number,
19
+ default: 5,
20
+ min: 1,
21
+ field: 'count',
22
+ description: 'Foresight count',
23
+ explanation: 'Maximum number of foresight charges that can be stored.',
24
+ configurable: true,
25
+ },
26
+ {
27
+ type: ConfigType.Number,
28
+ default: 30,
29
+ min: 1,
30
+ field: 'regenInterval',
31
+ description: 'Regen Interval (seconds)',
32
+ explanation: 'Time taken for one foresight charge to regenerate.',
33
+ configurable: true,
34
+ },
35
+ {
36
+ type: ConfigType.Boolean,
37
+ default: false,
38
+ field: 'startFull',
39
+ description: 'Start with full foresight',
40
+ explanation: 'Whether to start with all foresight charges available.',
41
+ configurable: true,
42
+ },
43
+ {
44
+ type: ConfigType.SolvePath,
45
+ default: [],
46
+ field: 'solvePath',
47
+ description: 'Intended solve path',
48
+ explanation: 'A logical solve path of the puzzle. Foresight will hint at the location of the next tile if this is available.',
49
+ configurable: true,
50
+ },
51
+ ]);
52
+ static SEARCH_VARIANTS = [
53
+ new ForesightRule(5, 30, false).searchVariant(),
54
+ ];
10
55
  /**
11
56
  * **Foresight: Show hints**
12
57
  */
13
58
  constructor(count, regenInterval, startFull, solvePath = []) {
14
59
  super();
15
- Object.defineProperty(this, "count", {
16
- enumerable: true,
17
- configurable: true,
18
- writable: true,
19
- value: count
20
- });
21
- Object.defineProperty(this, "regenInterval", {
22
- enumerable: true,
23
- configurable: true,
24
- writable: true,
25
- value: regenInterval
26
- });
27
- Object.defineProperty(this, "startFull", {
28
- enumerable: true,
29
- configurable: true,
30
- writable: true,
31
- value: startFull
32
- });
33
- Object.defineProperty(this, "solvePath", {
34
- enumerable: true,
35
- configurable: true,
36
- writable: true,
37
- value: solvePath
38
- });
39
- Object.defineProperty(this, "title", {
40
- enumerable: true,
41
- configurable: true,
42
- writable: true,
43
- value: 'Foresight'
44
- });
60
+ this.count = count;
61
+ this.regenInterval = regenInterval;
62
+ this.startFull = startFull;
63
+ this.solvePath = solvePath;
45
64
  this.count = count;
46
65
  this.regenInterval = regenInterval;
47
66
  this.startFull = startFull;
@@ -85,60 +104,4 @@ class ForesightRule extends Rule {
85
104
  return new ForesightRule(count ?? this.count, regenInterval ?? this.regenInterval, startFull ?? this.startFull, solvePath ?? this.solvePath);
86
105
  }
87
106
  }
88
- Object.defineProperty(ForesightRule, "EXAMPLE_GRID", {
89
- enumerable: true,
90
- configurable: true,
91
- writable: true,
92
- value: Object.freeze(GridData.create(['.']).addSymbol(new CustomIconSymbol('', GridData.create([]), 0, 0, 'MdRemoveRedEye')))
93
- });
94
- Object.defineProperty(ForesightRule, "CONFIGS", {
95
- enumerable: true,
96
- configurable: true,
97
- writable: true,
98
- value: Object.freeze([
99
- {
100
- type: ConfigType.Number,
101
- default: 5,
102
- min: 1,
103
- field: 'count',
104
- description: 'Foresight count',
105
- explanation: 'Maximum number of foresight charges that can be stored.',
106
- configurable: true,
107
- },
108
- {
109
- type: ConfigType.Number,
110
- default: 30,
111
- min: 1,
112
- field: 'regenInterval',
113
- description: 'Regen Interval (seconds)',
114
- explanation: 'Time taken for one foresight charge to regenerate.',
115
- configurable: true,
116
- },
117
- {
118
- type: ConfigType.Boolean,
119
- default: false,
120
- field: 'startFull',
121
- description: 'Start with full foresight',
122
- explanation: 'Whether to start with all foresight charges available.',
123
- configurable: true,
124
- },
125
- {
126
- type: ConfigType.SolvePath,
127
- default: [],
128
- field: 'solvePath',
129
- description: 'Intended solve path',
130
- explanation: 'A logical solve path of the puzzle. Foresight will hint at the location of the next tile if this is available.',
131
- configurable: true,
132
- },
133
- ])
134
- });
135
- Object.defineProperty(ForesightRule, "SEARCH_VARIANTS", {
136
- enumerable: true,
137
- configurable: true,
138
- writable: true,
139
- value: [
140
- new ForesightRule(5, 30, false).searchVariant(),
141
- ]
142
- });
143
- export default ForesightRule;
144
107
  export const instance = new ForesightRule(5, 30, false);
@@ -9,26 +9,13 @@ import GalaxySymbol from '../symbols/galaxySymbol.js';
9
9
  import LotusSymbol from '../symbols/lotusSymbol.js';
10
10
  import AreaNumberSymbol from '../symbols/areaNumberSymbol.js';
11
11
  class IgnoredSymbol extends Symbol {
12
+ symbol;
13
+ state;
14
+ title = 'Ignored Symbol';
12
15
  constructor(symbol, state) {
13
16
  super(symbol.x, symbol.y);
14
- Object.defineProperty(this, "symbol", {
15
- enumerable: true,
16
- configurable: true,
17
- writable: true,
18
- value: symbol
19
- });
20
- Object.defineProperty(this, "state", {
21
- enumerable: true,
22
- configurable: true,
23
- writable: true,
24
- value: state
25
- });
26
- Object.defineProperty(this, "title", {
27
- enumerable: true,
28
- configurable: true,
29
- writable: true,
30
- value: 'Ignored Symbol'
31
- });
17
+ this.symbol = symbol;
18
+ this.state = state;
32
19
  this.symbol = symbol;
33
20
  this.state = state;
34
21
  }
@@ -67,26 +54,13 @@ class IgnoredSymbol extends Symbol {
67
54
  }
68
55
  }
69
56
  class IgnoredRule extends Rule {
57
+ rule;
58
+ state;
59
+ title = 'Ignored Rule';
70
60
  constructor(rule, state) {
71
61
  super();
72
- Object.defineProperty(this, "rule", {
73
- enumerable: true,
74
- configurable: true,
75
- writable: true,
76
- value: rule
77
- });
78
- Object.defineProperty(this, "state", {
79
- enumerable: true,
80
- configurable: true,
81
- writable: true,
82
- value: state
83
- });
84
- Object.defineProperty(this, "title", {
85
- enumerable: true,
86
- configurable: true,
87
- writable: true,
88
- value: 'Ignored Rule'
89
- });
62
+ this.rule = rule;
63
+ this.state = state;
90
64
  this.rule = rule;
91
65
  this.state = state;
92
66
  }
@@ -127,7 +101,32 @@ class IgnoredRule extends Rule {
127
101
  return other === this;
128
102
  }
129
103
  }
130
- class LyingSymbolRule extends Rule {
104
+ export default class LyingSymbolRule extends Rule {
105
+ count;
106
+ title = 'Lying Symbols';
107
+ static EXAMPLE_GRID = Object.freeze(GridData.create(['bbbbw', 'wwbbb', 'bbbbw', 'wbbww']).withSymbols([
108
+ new LetterSymbol(4, 0, 'A'),
109
+ new GalaxySymbol(1, 1),
110
+ new LotusSymbol(2, 2, Orientation.Up),
111
+ new LetterSymbol(0, 3, 'A'),
112
+ new AreaNumberSymbol(4, 3, 1),
113
+ ]));
114
+ static CONFIGS = Object.freeze([
115
+ {
116
+ type: ConfigType.Number,
117
+ default: 1,
118
+ min: 1,
119
+ max: 100,
120
+ step: 1,
121
+ field: 'count',
122
+ description: 'Number of liars',
123
+ explanation: 'Number of symbols that are not satisfied in the final solution.',
124
+ configurable: true,
125
+ },
126
+ ]);
127
+ static SEARCH_VARIANTS = [
128
+ new LyingSymbolRule(1).searchVariant(),
129
+ ];
131
130
  /**
132
131
  * **<count> symbols are lying and are incorrect**
133
132
  *
@@ -135,18 +134,7 @@ class LyingSymbolRule extends Rule {
135
134
  */
136
135
  constructor(count) {
137
136
  super();
138
- Object.defineProperty(this, "count", {
139
- enumerable: true,
140
- configurable: true,
141
- writable: true,
142
- value: count
143
- });
144
- Object.defineProperty(this, "title", {
145
- enumerable: true,
146
- configurable: true,
147
- writable: true,
148
- value: 'Lying Symbols'
149
- });
137
+ this.count = count;
150
138
  this.count = count;
151
139
  }
152
140
  get id() {
@@ -216,43 +204,4 @@ class LyingSymbolRule extends Rule {
216
204
  return this.copyWith({ count });
217
205
  }
218
206
  }
219
- Object.defineProperty(LyingSymbolRule, "EXAMPLE_GRID", {
220
- enumerable: true,
221
- configurable: true,
222
- writable: true,
223
- value: Object.freeze(GridData.create(['bbbbw', 'wwbbb', 'bbbbw', 'wbbww']).withSymbols([
224
- new LetterSymbol(4, 0, 'A'),
225
- new GalaxySymbol(1, 1),
226
- new LotusSymbol(2, 2, Orientation.Up),
227
- new LetterSymbol(0, 3, 'A'),
228
- new AreaNumberSymbol(4, 3, 1),
229
- ]))
230
- });
231
- Object.defineProperty(LyingSymbolRule, "CONFIGS", {
232
- enumerable: true,
233
- configurable: true,
234
- writable: true,
235
- value: Object.freeze([
236
- {
237
- type: ConfigType.Number,
238
- default: 1,
239
- min: 1,
240
- max: 100,
241
- step: 1,
242
- field: 'count',
243
- description: 'Number of liars',
244
- explanation: 'Number of symbols that are not satisfied in the final solution.',
245
- configurable: true,
246
- },
247
- ])
248
- });
249
- Object.defineProperty(LyingSymbolRule, "SEARCH_VARIANTS", {
250
- enumerable: true,
251
- configurable: true,
252
- writable: true,
253
- value: [
254
- new LyingSymbolRule(1).searchVariant(),
255
- ]
256
- });
257
- export default LyingSymbolRule;
258
207
  export const instance = new LyingSymbolRule(1);