@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
@@ -4,7 +4,54 @@ import { Color, State } from '../primitives.js';
4
4
  import AreaNumberSymbol from '../symbols/areaNumberSymbol.js';
5
5
  import NumberSymbol from '../symbols/numberSymbol.js';
6
6
  import Rule from './rule.js';
7
- class OffByXRule extends Rule {
7
+ export default class OffByXRule extends Rule {
8
+ number;
9
+ title = 'Off By X';
10
+ static CONFIGS = Object.freeze([
11
+ {
12
+ type: ConfigType.Number,
13
+ default: 1,
14
+ min: 1,
15
+ field: 'number',
16
+ description: 'Number',
17
+ configurable: true,
18
+ },
19
+ ]);
20
+ static EXAMPLE_GRID = Object.freeze([
21
+ GridData.create(['bbbbb', 'bwbwb', 'bbwwb', 'bbbbb']).withSymbols([
22
+ new AreaNumberSymbol(1, 1, 2),
23
+ new AreaNumberSymbol(3, 2, 2),
24
+ ]),
25
+ GridData.create(['bbbbb', 'bwbwb', 'bbbwb', 'bwwwb']).withSymbols([
26
+ new AreaNumberSymbol(1, 1, 3),
27
+ new AreaNumberSymbol(3, 3, 3),
28
+ ]),
29
+ GridData.create(['bbbbw', 'bwbbw', 'bbbbw', 'bwwww']).withSymbols([
30
+ new AreaNumberSymbol(1, 1, 4),
31
+ new AreaNumberSymbol(4, 3, 4),
32
+ ]),
33
+ GridData.create(['bbbbw', 'bwbbw', 'bbbww', 'wwwww']).withSymbols([
34
+ new AreaNumberSymbol(1, 1, 5),
35
+ new AreaNumberSymbol(4, 3, 5),
36
+ ]),
37
+ GridData.create(['bbbww', 'bwbww', 'bbbww', 'wwwww']).withSymbols([
38
+ new AreaNumberSymbol(1, 1, 6),
39
+ new AreaNumberSymbol(4, 3, 6),
40
+ ]),
41
+ GridData.create(['wbbww', 'bbwww', 'bbwww', 'wwwww']).withSymbols([
42
+ new AreaNumberSymbol(0, 0, 7),
43
+ new AreaNumberSymbol(4, 3, 7),
44
+ ]),
45
+ GridData.create(['wbbww', 'bwwww', 'bwwww', 'wwwww']).withSymbols([
46
+ new AreaNumberSymbol(0, 0, 8),
47
+ new AreaNumberSymbol(4, 3, 8),
48
+ ]),
49
+ GridData.create(['wbwww', 'bwwww', 'wwwww', 'wwwww']).withSymbols([
50
+ new AreaNumberSymbol(0, 0, 9),
51
+ new AreaNumberSymbol(4, 3, 9),
52
+ ]),
53
+ ]);
54
+ static SEARCH_VARIANTS = [new OffByXRule(1).searchVariant()];
8
55
  /**
9
56
  * **All numbers are off by <number>**
10
57
  *
@@ -12,18 +59,7 @@ class OffByXRule extends Rule {
12
59
  */
13
60
  constructor(number) {
14
61
  super();
15
- Object.defineProperty(this, "number", {
16
- enumerable: true,
17
- configurable: true,
18
- writable: true,
19
- value: number
20
- });
21
- Object.defineProperty(this, "title", {
22
- enumerable: true,
23
- configurable: true,
24
- writable: true,
25
- value: 'Off By X'
26
- });
62
+ this.number = number;
27
63
  this.number = number;
28
64
  }
29
65
  get id() {
@@ -83,65 +119,4 @@ class OffByXRule extends Rule {
83
119
  return this.copyWith({ number });
84
120
  }
85
121
  }
86
- Object.defineProperty(OffByXRule, "CONFIGS", {
87
- enumerable: true,
88
- configurable: true,
89
- writable: true,
90
- value: Object.freeze([
91
- {
92
- type: ConfigType.Number,
93
- default: 1,
94
- min: 1,
95
- field: 'number',
96
- description: 'Number',
97
- configurable: true,
98
- },
99
- ])
100
- });
101
- Object.defineProperty(OffByXRule, "EXAMPLE_GRID", {
102
- enumerable: true,
103
- configurable: true,
104
- writable: true,
105
- value: Object.freeze([
106
- GridData.create(['bbbbb', 'bwbwb', 'bbwwb', 'bbbbb']).withSymbols([
107
- new AreaNumberSymbol(1, 1, 2),
108
- new AreaNumberSymbol(3, 2, 2),
109
- ]),
110
- GridData.create(['bbbbb', 'bwbwb', 'bbbwb', 'bwwwb']).withSymbols([
111
- new AreaNumberSymbol(1, 1, 3),
112
- new AreaNumberSymbol(3, 3, 3),
113
- ]),
114
- GridData.create(['bbbbw', 'bwbbw', 'bbbbw', 'bwwww']).withSymbols([
115
- new AreaNumberSymbol(1, 1, 4),
116
- new AreaNumberSymbol(4, 3, 4),
117
- ]),
118
- GridData.create(['bbbbw', 'bwbbw', 'bbbww', 'wwwww']).withSymbols([
119
- new AreaNumberSymbol(1, 1, 5),
120
- new AreaNumberSymbol(4, 3, 5),
121
- ]),
122
- GridData.create(['bbbww', 'bwbww', 'bbbww', 'wwwww']).withSymbols([
123
- new AreaNumberSymbol(1, 1, 6),
124
- new AreaNumberSymbol(4, 3, 6),
125
- ]),
126
- GridData.create(['wbbww', 'bbwww', 'bbwww', 'wwwww']).withSymbols([
127
- new AreaNumberSymbol(0, 0, 7),
128
- new AreaNumberSymbol(4, 3, 7),
129
- ]),
130
- GridData.create(['wbbww', 'bwwww', 'bwwww', 'wwwww']).withSymbols([
131
- new AreaNumberSymbol(0, 0, 8),
132
- new AreaNumberSymbol(4, 3, 8),
133
- ]),
134
- GridData.create(['wbwww', 'bwwww', 'wwwww', 'wwwww']).withSymbols([
135
- new AreaNumberSymbol(0, 0, 9),
136
- new AreaNumberSymbol(4, 3, 9),
137
- ]),
138
- ])
139
- });
140
- Object.defineProperty(OffByXRule, "SEARCH_VARIANTS", {
141
- enumerable: true,
142
- configurable: true,
143
- writable: true,
144
- value: [new OffByXRule(1).searchVariant()]
145
- });
146
- export default OffByXRule;
147
122
  export const instance = new OffByXRule(1);
@@ -3,10 +3,16 @@ import { Color, State, Mode, } from '../primitives.js';
3
3
  import Rule from './rule.js';
4
4
  import CustomIconSymbol from '../symbols/customIconSymbol.js';
5
5
  import validateGrid from '../validate.js';
6
- class PerfectionRule extends Rule {
6
+ export default class PerfectionRule extends Rule {
7
+ editor;
8
+ title = 'Perfection';
7
9
  get configExplanation() {
8
10
  return 'You should allow players to enable perfection mode themselves instead of enforcing this rule.';
9
11
  }
12
+ static EXAMPLE_GRID = Object.freeze(GridData.create(['w']).addSymbol(new CustomIconSymbol('', GridData.create(['w']), 0, 0, 'MdStars')));
13
+ static SEARCH_VARIANTS = [
14
+ new PerfectionRule().searchVariant(),
15
+ ];
10
16
  /**
11
17
  * **Quest for Perfection: cell colors are final**
12
18
  *
@@ -14,18 +20,7 @@ class PerfectionRule extends Rule {
14
20
  */
15
21
  constructor(editor = false) {
16
22
  super();
17
- Object.defineProperty(this, "editor", {
18
- enumerable: true,
19
- configurable: true,
20
- writable: true,
21
- value: editor
22
- });
23
- Object.defineProperty(this, "title", {
24
- enumerable: true,
25
- configurable: true,
26
- writable: true,
27
- value: 'Perfection'
28
- });
23
+ this.editor = editor;
29
24
  this.editor = editor;
30
25
  }
31
26
  get id() {
@@ -160,19 +155,4 @@ class PerfectionRule extends Rule {
160
155
  return new PerfectionRule(editor ?? this.editor);
161
156
  }
162
157
  }
163
- Object.defineProperty(PerfectionRule, "EXAMPLE_GRID", {
164
- enumerable: true,
165
- configurable: true,
166
- writable: true,
167
- value: Object.freeze(GridData.create(['w']).addSymbol(new CustomIconSymbol('', GridData.create(['w']), 0, 0, 'MdStars')))
168
- });
169
- Object.defineProperty(PerfectionRule, "SEARCH_VARIANTS", {
170
- enumerable: true,
171
- configurable: true,
172
- writable: true,
173
- value: [
174
- new PerfectionRule().searchVariant(),
175
- ]
176
- });
177
- export default PerfectionRule;
178
158
  export const instance = new PerfectionRule();
@@ -4,7 +4,51 @@ import { array } from '../dataHelper.js';
4
4
  import { Color, State } from '../primitives.js';
5
5
  import TileData from '../tile.js';
6
6
  import Rule from './rule.js';
7
- class RegionAreaRule extends Rule {
7
+ export default class RegionAreaRule extends Rule {
8
+ color;
9
+ size;
10
+ title = 'Region Area Size';
11
+ static CONFIGS = Object.freeze([
12
+ {
13
+ type: ConfigType.Color,
14
+ default: Color.Dark,
15
+ allowGray: false,
16
+ field: 'color',
17
+ description: 'Color',
18
+ configurable: true,
19
+ },
20
+ {
21
+ type: ConfigType.Number,
22
+ default: 2,
23
+ min: 0,
24
+ field: 'size',
25
+ description: 'Region Size',
26
+ configurable: true,
27
+ },
28
+ ]);
29
+ static EXAMPLE_GRID_DARK = Object.freeze([
30
+ GridData.create(['wwwww', 'wwwww', 'wwwww', 'wwwww']),
31
+ GridData.create(['bwwbw', 'wbwwb', 'bwbww', 'wbwwb']),
32
+ GridData.create(['bbwbb', 'wwbww', 'wwbww', 'wwwbb']),
33
+ GridData.create(['bbwww', 'bwbwb', 'wbbwb', 'wwwwb']),
34
+ GridData.create(['bwbbb', 'bbwwb', 'bwbbw', 'wwbbw']),
35
+ GridData.create(['bbbww', 'bbwbw', 'wwbbb', 'wwwbw']),
36
+ GridData.create(['bbbww', 'bbbwb', 'wwwbb', 'wwbbb']),
37
+ GridData.create(['bbbbb', 'bbwww', 'wwwbb', 'bbbbb']),
38
+ GridData.create(['bbbbw', 'bbbww', 'bwwww', 'wwwww']),
39
+ GridData.create(['wwwww', 'bbbbb', 'bbwbb', 'wwwww']),
40
+ GridData.create(['bbbbb', 'bbbww', 'bbwww', 'wwwww']),
41
+ ]);
42
+ static EXAMPLE_GRID_LIGHT = Object.freeze(RegionAreaRule.EXAMPLE_GRID_DARK.map(grid => GridData.create(grid.width, grid.height, grid.tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark))))));
43
+ static EXAMPLE_GRID_GRAY = Object.freeze(RegionAreaRule.EXAMPLE_GRID_DARK.map(grid => GridData.create(grid.width, grid.height, grid.tiles.map((row, y) => row.map((tile, x) => tile.withColor(tile.color === Color.Dark
44
+ ? Color.Gray
45
+ : x % 2 !== y % 2
46
+ ? Color.Dark
47
+ : Color.Light))))));
48
+ static SEARCH_VARIANTS = [
49
+ new RegionAreaRule(Color.Dark, 2).searchVariant(),
50
+ new RegionAreaRule(Color.Light, 2).searchVariant(),
51
+ ];
8
52
  /**
9
53
  * **All <color> regions have area <size>**
10
54
  *
@@ -13,24 +57,8 @@ class RegionAreaRule extends Rule {
13
57
  */
14
58
  constructor(color, size) {
15
59
  super();
16
- Object.defineProperty(this, "color", {
17
- enumerable: true,
18
- configurable: true,
19
- writable: true,
20
- value: color
21
- });
22
- Object.defineProperty(this, "size", {
23
- enumerable: true,
24
- configurable: true,
25
- writable: true,
26
- value: size
27
- });
28
- Object.defineProperty(this, "title", {
29
- enumerable: true,
30
- configurable: true,
31
- writable: true,
32
- value: 'Region Area Size'
33
- });
60
+ this.color = color;
61
+ this.size = size;
34
62
  this.color = color;
35
63
  this.size = size;
36
64
  }
@@ -118,71 +146,4 @@ class RegionAreaRule extends Rule {
118
146
  return this.copyWith({ size });
119
147
  }
120
148
  }
121
- Object.defineProperty(RegionAreaRule, "CONFIGS", {
122
- enumerable: true,
123
- configurable: true,
124
- writable: true,
125
- value: Object.freeze([
126
- {
127
- type: ConfigType.Color,
128
- default: Color.Dark,
129
- allowGray: false,
130
- field: 'color',
131
- description: 'Color',
132
- configurable: true,
133
- },
134
- {
135
- type: ConfigType.Number,
136
- default: 2,
137
- min: 0,
138
- field: 'size',
139
- description: 'Region Size',
140
- configurable: true,
141
- },
142
- ])
143
- });
144
- Object.defineProperty(RegionAreaRule, "EXAMPLE_GRID_DARK", {
145
- enumerable: true,
146
- configurable: true,
147
- writable: true,
148
- value: Object.freeze([
149
- GridData.create(['wwwww', 'wwwww', 'wwwww', 'wwwww']),
150
- GridData.create(['bwwbw', 'wbwwb', 'bwbww', 'wbwwb']),
151
- GridData.create(['bbwbb', 'wwbww', 'wwbww', 'wwwbb']),
152
- GridData.create(['bbwww', 'bwbwb', 'wbbwb', 'wwwwb']),
153
- GridData.create(['bwbbb', 'bbwwb', 'bwbbw', 'wwbbw']),
154
- GridData.create(['bbbww', 'bbwbw', 'wwbbb', 'wwwbw']),
155
- GridData.create(['bbbww', 'bbbwb', 'wwwbb', 'wwbbb']),
156
- GridData.create(['bbbbb', 'bbwww', 'wwwbb', 'bbbbb']),
157
- GridData.create(['bbbbw', 'bbbww', 'bwwww', 'wwwww']),
158
- GridData.create(['wwwww', 'bbbbb', 'bbwbb', 'wwwww']),
159
- GridData.create(['bbbbb', 'bbbww', 'bbwww', 'wwwww']),
160
- ])
161
- });
162
- Object.defineProperty(RegionAreaRule, "EXAMPLE_GRID_LIGHT", {
163
- enumerable: true,
164
- configurable: true,
165
- writable: true,
166
- value: Object.freeze(RegionAreaRule.EXAMPLE_GRID_DARK.map(grid => GridData.create(grid.width, grid.height, grid.tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark))))))
167
- });
168
- Object.defineProperty(RegionAreaRule, "EXAMPLE_GRID_GRAY", {
169
- enumerable: true,
170
- configurable: true,
171
- writable: true,
172
- value: Object.freeze(RegionAreaRule.EXAMPLE_GRID_DARK.map(grid => GridData.create(grid.width, grid.height, grid.tiles.map((row, y) => row.map((tile, x) => tile.withColor(tile.color === Color.Dark
173
- ? Color.Gray
174
- : x % 2 !== y % 2
175
- ? Color.Dark
176
- : Color.Light))))))
177
- });
178
- Object.defineProperty(RegionAreaRule, "SEARCH_VARIANTS", {
179
- enumerable: true,
180
- configurable: true,
181
- writable: true,
182
- value: [
183
- new RegionAreaRule(Color.Dark, 2).searchVariant(),
184
- new RegionAreaRule(Color.Light, 2).searchVariant(),
185
- ]
186
- });
187
- export default RegionAreaRule;
188
149
  export const instance = new RegionAreaRule(Color.Dark, 2);
@@ -3,17 +3,13 @@ import { Color } from '../primitives.js';
3
3
  import { normalizeShape, positionsToShape, shapeEquals, } from '../shapes.js';
4
4
  import Rule from './rule.js';
5
5
  export default class RegionShapeRule extends Rule {
6
+ color;
6
7
  /**
7
8
  * @param color - The color of the regions to compare.
8
9
  */
9
10
  constructor(color) {
10
11
  super();
11
- Object.defineProperty(this, "color", {
12
- enumerable: true,
13
- configurable: true,
14
- writable: true,
15
- value: color
16
- });
12
+ this.color = color;
17
13
  this.color = color;
18
14
  }
19
15
  getShapeRegions(grid) {
@@ -11,6 +11,7 @@ export { instance as ForesightRule } from './foresightRule.js';
11
11
  export { instance as LyingSymbolRule } from './lyingSymbolRule.js';
12
12
  export { instance as MusicGridRule } from './musicGridRule.js';
13
13
  export { instance as MysteryRule } from './mysteryRule.js';
14
+ export { instance as NoLoopsRule } from './noLoopsRule.js';
14
15
  export { instance as OffByXRule } from './offByXRule.js';
15
16
  export { instance as PerfectionRule } from './perfectionRule.js';
16
17
  export { instance as RegionAreaRule } from './regionAreaRule.js';
@@ -15,6 +15,7 @@ export { instance as ForesightRule } from './foresightRule.js';
15
15
  export { instance as LyingSymbolRule } from './lyingSymbolRule.js';
16
16
  export { instance as MusicGridRule } from './musicGridRule.js';
17
17
  export { instance as MysteryRule } from './mysteryRule.js';
18
+ export { instance as NoLoopsRule } from './noLoopsRule.js';
18
19
  export { instance as OffByXRule } from './offByXRule.js';
19
20
  export { instance as PerfectionRule } from './perfectionRule.js';
20
21
  export { instance as RegionAreaRule } from './regionAreaRule.js';
@@ -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 SameCountPerZoneRule extends CellCountPerZoneRule {
6
+ export default class SameCountPerZoneRule extends CellCountPerZoneRule {
7
+ color;
8
+ title = 'Equal 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(['bwbbb', '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 SameCountPerZoneRule(Color.Light)));
32
+ static EXAMPLE_GRID_DARK = Object.freeze(SameCountPerZoneRule.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(SameCountPerZoneRule.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 SameCountPerZoneRule(Color.Light).searchVariant(),
36
+ new SameCountPerZoneRule(Color.Dark).searchVariant(),
37
+ ];
7
38
  /**
8
39
  * **Zones of the same size have the same number of <color> cells.**
9
40
  *
@@ -11,18 +42,7 @@ class SameCountPerZoneRule 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: 'Equal Count Per Zone'
25
- });
45
+ this.color = color;
26
46
  }
27
47
  get id() {
28
48
  return `zone_cell_count`;
@@ -72,59 +92,4 @@ class SameCountPerZoneRule extends CellCountPerZoneRule {
72
92
  return new SameCountPerZoneRule(color ?? this.color);
73
93
  }
74
94
  }
75
- Object.defineProperty(SameCountPerZoneRule, "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
- });
90
- Object.defineProperty(SameCountPerZoneRule, "EXAMPLE_GRID_LIGHT", {
91
- enumerable: true,
92
- configurable: true,
93
- writable: true,
94
- value: Object.freeze(GridData.create(['bwbbb', 'wbbwb', 'bbbwb', 'bwbwb'])
95
- .withZones(new GridZones([
96
- { x1: 0, y1: 1, x2: 0, y2: 2 },
97
- { x1: 1, y1: 1, x2: 1, y2: 2 },
98
- { x1: 2, y1: 1, x2: 2, y2: 2 },
99
- { x1: 3, y1: 1, x2: 3, y2: 2 },
100
- { x1: 4, y1: 1, x2: 4, y2: 2 },
101
- { x1: 1, y1: 0, x2: 2, y2: 0 },
102
- { x1: 1, y1: 1, x2: 2, y2: 1 },
103
- { x1: 2, y1: 2, x2: 3, y2: 2 },
104
- { x1: 2, y1: 3, x2: 3, y2: 3 },
105
- ]))
106
- .addRule(new SameCountPerZoneRule(Color.Light)))
107
- });
108
- Object.defineProperty(SameCountPerZoneRule, "EXAMPLE_GRID_DARK", {
109
- enumerable: true,
110
- configurable: true,
111
- writable: true,
112
- value: Object.freeze(SameCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Dark ? Color.Light : Color.Dark)))))
113
- });
114
- Object.defineProperty(SameCountPerZoneRule, "EXAMPLE_GRID_GRAY", {
115
- enumerable: true,
116
- configurable: true,
117
- writable: true,
118
- value: Object.freeze(SameCountPerZoneRule.EXAMPLE_GRID_LIGHT.withTiles(tiles => tiles.map(row => row.map(tile => tile.withColor(tile.color === Color.Light ? Color.Gray : tile.color)))))
119
- });
120
- Object.defineProperty(SameCountPerZoneRule, "SEARCH_VARIANTS", {
121
- enumerable: true,
122
- configurable: true,
123
- writable: true,
124
- value: [
125
- new SameCountPerZoneRule(Color.Light).searchVariant(),
126
- new SameCountPerZoneRule(Color.Dark).searchVariant(),
127
- ]
128
- });
129
- export default SameCountPerZoneRule;
130
95
  export const instance = new SameCountPerZoneRule(Color.Light);
@@ -3,7 +3,24 @@ import GridData from '../grid.js';
3
3
  import { minBy } from '../dataHelper.js';
4
4
  import { Color, State } from '../primitives.js';
5
5
  import RegionShapeRule from './regionShapeRule.js';
6
- class SameShapeRule extends RegionShapeRule {
6
+ export default class SameShapeRule extends RegionShapeRule {
7
+ title = 'Same Shape Areas';
8
+ static CONFIGS = Object.freeze([
9
+ {
10
+ type: ConfigType.Color,
11
+ default: Color.Light,
12
+ allowGray: false,
13
+ field: 'color',
14
+ description: 'Color',
15
+ configurable: true,
16
+ },
17
+ ]);
18
+ static EXAMPLE_GRID_LIGHT = Object.freeze(GridData.create(['wwbww', 'wbwbw', 'wbwbw', 'bwwbb']));
19
+ static EXAMPLE_GRID_DARK = Object.freeze(GridData.create(['bbwbb', 'bwbwb', 'bwbwb', 'wbbww']));
20
+ static SEARCH_VARIANTS = [
21
+ new SameShapeRule(Color.Light).searchVariant(),
22
+ new SameShapeRule(Color.Dark).searchVariant(),
23
+ ];
7
24
  /**
8
25
  * **All <color> areas have the same shape and size**
9
26
  *
@@ -11,12 +28,6 @@ class SameShapeRule extends RegionShapeRule {
11
28
  */
12
29
  constructor(color) {
13
30
  super(color);
14
- Object.defineProperty(this, "title", {
15
- enumerable: true,
16
- configurable: true,
17
- writable: true,
18
- value: 'Same Shape Areas'
19
- });
20
31
  }
21
32
  get id() {
22
33
  return `same_shape`;
@@ -54,41 +65,4 @@ class SameShapeRule extends RegionShapeRule {
54
65
  return new SameShapeRule(color ?? this.color);
55
66
  }
56
67
  }
57
- Object.defineProperty(SameShapeRule, "CONFIGS", {
58
- enumerable: true,
59
- configurable: true,
60
- writable: true,
61
- value: Object.freeze([
62
- {
63
- type: ConfigType.Color,
64
- default: Color.Light,
65
- allowGray: false,
66
- field: 'color',
67
- description: 'Color',
68
- configurable: true,
69
- },
70
- ])
71
- });
72
- Object.defineProperty(SameShapeRule, "EXAMPLE_GRID_LIGHT", {
73
- enumerable: true,
74
- configurable: true,
75
- writable: true,
76
- value: Object.freeze(GridData.create(['wwbww', 'wbwbw', 'wbwbw', 'bwwbb']))
77
- });
78
- Object.defineProperty(SameShapeRule, "EXAMPLE_GRID_DARK", {
79
- enumerable: true,
80
- configurable: true,
81
- writable: true,
82
- value: Object.freeze(GridData.create(['bbwbb', 'bwbwb', 'bwbwb', 'wbbww']))
83
- });
84
- Object.defineProperty(SameShapeRule, "SEARCH_VARIANTS", {
85
- enumerable: true,
86
- configurable: true,
87
- writable: true,
88
- value: [
89
- new SameShapeRule(Color.Light).searchVariant(),
90
- new SameShapeRule(Color.Dark).searchVariant(),
91
- ]
92
- });
93
- export default SameShapeRule;
94
68
  export const instance = new SameShapeRule(Color.Dark);