scrabble-solver 2.8.8 → 2.8.9

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 (190) hide show
  1. package/.eslintrc.prettier-only.js +1 -1
  2. package/.prettierignore +3 -0
  3. package/.prettierrc +3 -3
  4. package/babel.config.js +1 -1
  5. package/lerna.json +1 -1
  6. package/package.json +6 -6
  7. package/packages/configs/package.json +3 -3
  8. package/packages/constants/package.json +1 -1
  9. package/packages/dictionaries/package-lock.json +2 -2
  10. package/packages/dictionaries/package.json +4 -4
  11. package/packages/logger/package-lock.json +2 -2
  12. package/packages/logger/package.json +1 -1
  13. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  14. package/packages/scrabble-solver/.next/build-manifest.json +10 -10
  15. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  16. package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
  17. package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +1 -1
  18. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
  19. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  20. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  21. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  22. package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
  23. package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
  24. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  25. package/packages/scrabble-solver/.next/server/chunks/413.js +179 -44
  26. package/packages/scrabble-solver/.next/server/chunks/44.js +802 -0
  27. package/packages/scrabble-solver/.next/server/chunks/515.js +359 -95
  28. package/packages/scrabble-solver/.next/server/chunks/911.js +53 -23
  29. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  30. package/packages/scrabble-solver/.next/server/pages/404.html +2 -2
  31. package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
  32. package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
  33. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  34. package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
  35. package/packages/scrabble-solver/.next/server/pages/api/solve.js +193 -927
  36. package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
  37. package/packages/scrabble-solver/.next/server/pages/api/verify.js +217 -0
  38. package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -0
  39. package/packages/scrabble-solver/.next/server/pages/index.html +3 -3
  40. package/packages/scrabble-solver/.next/server/pages/index.js +7 -1
  41. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  42. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  43. package/packages/scrabble-solver/.next/server/pages-manifest.json +1 -0
  44. package/packages/scrabble-solver/.next/static/chunks/317-a33dd38e9b9a17ed.js +1 -0
  45. package/packages/scrabble-solver/.next/static/chunks/pages/{404-8eb3ba4f0ba17e08.js → 404-90c624da3c83fd17.js} +1 -1
  46. package/packages/scrabble-solver/.next/static/chunks/pages/_app-f8f360878e1c2aff.js +1 -0
  47. package/packages/scrabble-solver/.next/static/chunks/pages/index-ecea697d3e5d8a6f.js +1 -0
  48. package/packages/scrabble-solver/.next/static/css/64dc2ce1811912f1.css +1 -0
  49. package/packages/scrabble-solver/.next/static/css/{cdbc9e0afcff5473.css → ad2a08918868cad8.css} +1 -1
  50. package/packages/scrabble-solver/.next/static/yCxjzzYpw5JjJE53PO_s6/_buildManifest.js +1 -0
  51. package/packages/scrabble-solver/.next/static/{z3J3qmq1nazbDv_ENIkCo → yCxjzzYpw5JjJE53PO_s6}/_ssgManifest.js +0 -0
  52. package/packages/scrabble-solver/.next/trace +42 -41
  53. package/packages/scrabble-solver/package-lock.json +2 -2
  54. package/packages/scrabble-solver/package.json +8 -8
  55. package/packages/scrabble-solver/src/components/Badge/Badge.module.scss +13 -0
  56. package/packages/scrabble-solver/src/components/Badge/Badge.tsx +15 -0
  57. package/packages/scrabble-solver/src/components/Badge/index.ts +1 -0
  58. package/packages/scrabble-solver/src/components/NavButtons/NavButtons.tsx +33 -14
  59. package/packages/scrabble-solver/src/components/RemainingTiles/RemainingTiles.module.scss +8 -7
  60. package/packages/scrabble-solver/src/components/RemainingTiles/RemainingTiles.tsx +13 -4
  61. package/packages/scrabble-solver/src/components/Sidebar/Sidebar.tsx +2 -2
  62. package/packages/scrabble-solver/src/components/Sidebar/components/Section/Section.module.scss +0 -1
  63. package/packages/scrabble-solver/src/components/Sidebar/components/Section/Section.tsx +1 -1
  64. package/packages/scrabble-solver/src/components/SquareButton/SquareButton.module.scss +5 -0
  65. package/packages/scrabble-solver/src/components/Words/Words.module.scss +35 -0
  66. package/packages/scrabble-solver/src/components/Words/Words.tsx +57 -0
  67. package/packages/scrabble-solver/src/components/Words/index.ts +1 -0
  68. package/packages/scrabble-solver/src/components/index.ts +2 -0
  69. package/packages/scrabble-solver/src/i18n/de.json +4 -1
  70. package/packages/scrabble-solver/src/i18n/en.json +4 -1
  71. package/packages/scrabble-solver/src/i18n/es.json +4 -1
  72. package/packages/scrabble-solver/src/i18n/fr.json +4 -1
  73. package/packages/scrabble-solver/src/i18n/pl.json +4 -1
  74. package/packages/scrabble-solver/src/icons/BookHalf.svg +4 -0
  75. package/packages/scrabble-solver/src/icons/Check.svg +4 -0
  76. package/packages/scrabble-solver/src/icons/Cross.svg +2 -2
  77. package/packages/scrabble-solver/src/icons/CrossFill.svg +4 -0
  78. package/packages/scrabble-solver/src/icons/index.ts +3 -0
  79. package/packages/scrabble-solver/src/pages/api/solve.ts +2 -3
  80. package/packages/scrabble-solver/src/pages/api/verify.ts +71 -0
  81. package/packages/scrabble-solver/src/pages/index.tsx +5 -0
  82. package/packages/scrabble-solver/src/sdk/index.ts +1 -0
  83. package/packages/scrabble-solver/src/sdk/verify.ts +24 -0
  84. package/packages/scrabble-solver/src/state/rootReducer.ts +2 -0
  85. package/packages/scrabble-solver/src/state/sagas.ts +33 -6
  86. package/packages/scrabble-solver/src/state/selectors.ts +8 -0
  87. package/packages/scrabble-solver/src/state/slices/index.ts +2 -0
  88. package/packages/scrabble-solver/src/state/slices/verifyInitialState.ts +12 -0
  89. package/packages/scrabble-solver/src/state/slices/verifySlice.ts +31 -0
  90. package/packages/scrabble-solver/src/styles/variables.scss +2 -1
  91. package/packages/scrabble-solver/src/types/index.ts +4 -1
  92. package/packages/solver/build/fillPattern.d.ts +5 -0
  93. package/packages/solver/build/fillPattern.js +52 -0
  94. package/packages/solver/build/generateEndIndices.d.ts +3 -0
  95. package/packages/solver/build/generateEndIndices.js +9 -0
  96. package/packages/solver/build/generateHorizontalPatterns.d.ts +3 -0
  97. package/packages/solver/build/generateHorizontalPatterns.js +18 -0
  98. package/packages/solver/build/generatePattern.d.ts +8 -0
  99. package/packages/solver/build/generatePattern.js +22 -0
  100. package/packages/solver/build/generatePatterns.d.ts +3 -0
  101. package/packages/solver/build/generatePatterns.js +13 -0
  102. package/packages/solver/build/generateStartIndices.d.ts +3 -0
  103. package/packages/solver/build/generateStartIndices.js +9 -0
  104. package/packages/solver/build/generateVectors.d.ts +6 -0
  105. package/packages/solver/build/generateVectors.js +8 -0
  106. package/packages/solver/build/generateVerticalPatterns.d.ts +3 -0
  107. package/packages/solver/build/generateVerticalPatterns.js +18 -0
  108. package/packages/solver/build/getCellsScore.d.ts +3 -0
  109. package/packages/solver/build/getCellsScore.js +16 -0
  110. package/packages/solver/build/getPatternHash.d.ts +3 -0
  111. package/packages/solver/build/getPatternHash.js +13 -0
  112. package/packages/solver/build/getPatternScore.d.ts +3 -0
  113. package/packages/solver/build/getPatternScore.js +15 -0
  114. package/packages/solver/build/getUniquePatterns.js +5 -11
  115. package/packages/solver/build/index.d.ts +1 -1
  116. package/packages/solver/build/index.js +3 -3
  117. package/packages/solver/build/solve.d.ts +4 -0
  118. package/packages/solver/build/solve.js +23 -0
  119. package/packages/solver/package-lock.json +2 -2
  120. package/packages/solver/package.json +5 -5
  121. package/packages/solver/src/fillPattern.test.ts +107 -0
  122. package/packages/solver/src/fillPattern.ts +70 -0
  123. package/packages/solver/src/generateEndIndices.test.ts +18 -0
  124. package/packages/solver/src/generateEndIndices.ts +10 -0
  125. package/packages/solver/src/generateHorizontalPatterns.test.ts +31 -0
  126. package/packages/solver/src/generateHorizontalPatterns.ts +17 -0
  127. package/packages/solver/src/generatePattern.ts +35 -0
  128. package/packages/solver/src/generatePatterns.ts +13 -0
  129. package/packages/solver/src/generateStartIndices.test.ts +14 -0
  130. package/packages/solver/src/generateStartIndices.ts +10 -0
  131. package/packages/solver/src/generateVectors.test.ts +12 -0
  132. package/packages/solver/src/generateVectors.ts +15 -0
  133. package/packages/solver/src/generateVerticalPatterns.test.ts +32 -0
  134. package/packages/solver/src/generateVerticalPatterns.ts +17 -0
  135. package/packages/solver/src/getCellsScore.ts +22 -0
  136. package/packages/solver/src/getPatternHash.test.ts +17 -0
  137. package/packages/solver/src/getPatternHash.ts +14 -0
  138. package/packages/solver/src/getPatternScore.test.ts +60 -0
  139. package/packages/solver/src/getPatternScore.ts +15 -0
  140. package/packages/solver/src/getUniquePatterns.ts +1 -10
  141. package/packages/solver/src/index.ts +1 -1
  142. package/packages/solver/src/{Solver.test.ts → solve.test.ts} +14 -13
  143. package/packages/solver/src/solve.ts +25 -0
  144. package/packages/types/build/Board.d.ts +1 -0
  145. package/packages/types/build/Board.js +17 -1
  146. package/packages/types/build/Config.js +1 -1
  147. package/packages/types/build/FinalPattern.d.ts +7 -0
  148. package/packages/types/build/FinalPattern.js +16 -0
  149. package/packages/types/build/HorizontalPattern.js +2 -5
  150. package/packages/types/build/Pattern.d.ts +1 -4
  151. package/packages/types/build/Pattern.js +2 -5
  152. package/packages/types/build/Result.js +3 -5
  153. package/packages/types/build/Tile.d.ts +2 -2
  154. package/packages/types/build/VerticalPattern.js +2 -5
  155. package/packages/types/build/index.d.ts +1 -0
  156. package/packages/types/build/index.js +3 -1
  157. package/packages/types/package.json +2 -2
  158. package/packages/types/src/Board.ts +23 -1
  159. package/packages/types/src/Config.ts +1 -1
  160. package/packages/types/src/FinalPattern.ts +16 -0
  161. package/packages/types/src/HorizontalPattern.ts +5 -5
  162. package/packages/types/src/Pattern.ts +5 -5
  163. package/packages/types/src/Result.ts +3 -5
  164. package/packages/types/src/Tile.ts +2 -2
  165. package/packages/types/src/VerticalPattern.ts +5 -5
  166. package/packages/types/src/index.ts +1 -0
  167. package/packages/word-definitions/package-lock.json +2 -2
  168. package/packages/word-definitions/package.json +2 -2
  169. package/packages/word-lists/package-lock.json +2 -2
  170. package/packages/word-lists/package.json +2 -2
  171. package/packages/scrabble-solver/.next/static/chunks/615-d258f6c528c18622.js +0 -1
  172. package/packages/scrabble-solver/.next/static/chunks/pages/_app-4a663fd3d5ca4524.js +0 -1
  173. package/packages/scrabble-solver/.next/static/chunks/pages/index-1a9826d740cc8830.js +0 -1
  174. package/packages/scrabble-solver/.next/static/css/180c6c26317ac90f.css +0 -1
  175. package/packages/scrabble-solver/.next/static/z3J3qmq1nazbDv_ENIkCo/_buildManifest.js +0 -1
  176. package/packages/solver/build/PatternsFiller.d.ts +0 -12
  177. package/packages/solver/build/PatternsFiller.js +0 -70
  178. package/packages/solver/build/PatternsGenerator.d.ts +0 -32
  179. package/packages/solver/build/PatternsGenerator.js +0 -66
  180. package/packages/solver/build/ScoresCalculator.d.ts +0 -17
  181. package/packages/solver/build/ScoresCalculator.js +0 -37
  182. package/packages/solver/build/Solver.d.ts +0 -10
  183. package/packages/solver/build/Solver.js +0 -30
  184. package/packages/solver/src/PatternsFiller.test.ts +0 -92
  185. package/packages/solver/src/PatternsFiller.ts +0 -91
  186. package/packages/solver/src/PatternsGenerator.test.ts +0 -89
  187. package/packages/solver/src/PatternsGenerator.ts +0 -103
  188. package/packages/solver/src/ScoresCalculator.test.ts +0 -70
  189. package/packages/solver/src/ScoresCalculator.ts +0 -52
  190. package/packages/solver/src/Solver.ts +0 -39
@@ -1,70 +0,0 @@
1
- import { literaki } from '@scrabble-solver/configs';
2
- import { Board, Cell, HorizontalPattern, Locale, Pattern, Tile, VerticalPattern } from '@scrabble-solver/types';
3
-
4
- import ScoresCalculator from './ScoresCalculator';
5
-
6
- const config = literaki[Locale.PL_PL];
7
- const scoresCalculator = new ScoresCalculator(config);
8
- const board = Board.fromStringArray([
9
- ' kasom ',
10
- ' i ',
11
- ' napiją ',
12
- ' w i ',
13
- ' krabim ',
14
- ' z ',
15
- ' ę eh ',
16
- 'f s srać ',
17
- 'i z t s ',
18
- 'knebel e ',
19
- 'a ew warcz',
20
- 'ł żyło wody ',
21
- 'o pecyj chu',
22
- ' y ',
23
- ' t ',
24
- ]);
25
-
26
- describe('ScoresCalculator', () => {
27
- it('gives proper score without collisions', () => {
28
- const pattern = new Pattern({
29
- board,
30
- cells: [
31
- new Cell({ x: 0, y: 0, tile: new Tile({ character: 'ź' }), isEmpty: true }),
32
- new Cell({ x: 1, y: 0, tile: new Tile({ character: 'a' }), isEmpty: true }),
33
- new Cell({ x: 2, y: 0, tile: new Tile({ character: 'a' }), isEmpty: true }),
34
- new Cell({ x: 3, y: 0, tile: new Tile({ character: 'a' }), isEmpty: true }),
35
- new Cell({ x: 4, y: 0, tile: new Tile({ character: 'a' }), isEmpty: true }),
36
- new Cell({ x: 5, y: 0, tile: new Tile({ character: 'a' }), isEmpty: true }),
37
- new Cell({ x: 6, y: 0, tile: new Tile({ character: 'a' }), isEmpty: true }),
38
- new Cell({ x: 7, y: 0, tile: new Tile({ character: 'ź' }), isEmpty: false }),
39
- ],
40
- });
41
- const score = scoresCalculator.calculate(pattern);
42
- expect(score).toBe(128);
43
- });
44
-
45
- it('gives proper score with collisions', () => {
46
- const pattern = new VerticalPattern({
47
- board,
48
- cells: [
49
- new Cell({ x: 2, y: 11, tile: new Tile({ character: 'l' }), isEmpty: true }),
50
- new Cell({ x: 2, y: 12, tile: new Tile({ character: 'i' }), isEmpty: true }),
51
- new Cell({ x: 2, y: 13, tile: new Tile({ character: 'n' }), isEmpty: true }),
52
- new Cell({ x: 2, y: 14, tile: new Tile({ character: 'o' }), isEmpty: true }),
53
- ],
54
- });
55
- const score = scoresCalculator.calculate(pattern);
56
- expect(score).toBe(44);
57
- });
58
-
59
- it('gives proper score for blank', () => {
60
- const pattern = new HorizontalPattern({
61
- board,
62
- cells: [
63
- new Cell({ x: 13, y: 14, tile: new Tile({ character: 'o', isBlank: true }), isEmpty: true }),
64
- new Cell({ x: 12, y: 14, tile: new Tile({ character: 't' }), isEmpty: false }),
65
- ],
66
- });
67
- const score = scoresCalculator.calculate(pattern);
68
- expect(score).toBe(2);
69
- });
70
- });
@@ -1,52 +0,0 @@
1
- import { NO_BONUS } from '@scrabble-solver/constants';
2
- import { Cell, Config, Pattern } from '@scrabble-solver/types';
3
-
4
- class ScoresCalculator {
5
- private readonly config: Config;
6
-
7
- constructor(config: Config) {
8
- this.config = config;
9
- }
10
-
11
- public calculate(pattern: Pattern): number {
12
- return this.calculatePatternScoreWithCollisions(pattern) + this.calculateBonusScore(pattern);
13
- }
14
-
15
- public calculateBonusScore(pattern: Pattern): number {
16
- const areAllTilesUsed = pattern.getEmptyCellsCount() === this.config.maximumCharactersCount;
17
- return areAllTilesUsed ? this.config.allTilesBonusScore : 0;
18
- }
19
-
20
- public calculatePatternScoreWithCollisions(pattern: Pattern): number {
21
- return pattern
22
- .getCollisions()
23
- .reduce(
24
- (patternsScore, collisionPattern) => patternsScore + this.calculatePatternScore(collisionPattern),
25
- this.calculatePatternScore(pattern),
26
- );
27
- }
28
-
29
- public calculatePatternScore(pattern: Pattern): number {
30
- const { multiplier, score } = pattern.cells.reduce(this.reduceCellScore, {
31
- multiplier: 1,
32
- score: 0,
33
- });
34
- return score * multiplier;
35
- }
36
-
37
- public reduceCellScore = (
38
- { multiplier, score }: { multiplier: number; score: number },
39
- cell: Cell,
40
- ): { multiplier: number; score: number } => {
41
- const bonus = this.config.getCellBonus(cell);
42
- const { characterMultiplier, wordMultiplier } = bonus && bonus.canApply(this.config, cell) ? bonus.value : NO_BONUS;
43
- const characterScore = cell.tile.isBlank ? this.config.blankScore : this.config.pointsMap[cell.tile.character];
44
-
45
- return {
46
- multiplier: multiplier * wordMultiplier,
47
- score: score + characterScore * characterMultiplier,
48
- };
49
- };
50
- }
51
-
52
- export default ScoresCalculator;
@@ -1,39 +0,0 @@
1
- import { Trie } from '@kamilmielnik/trie';
2
- import { Board, Config, Result, Tile } from '@scrabble-solver/types';
3
-
4
- import getUniquePatterns from './getUniquePatterns';
5
- import PatternsFiller from './PatternsFiller';
6
- import PatternsGenerator from './PatternsGenerator';
7
- import ScoresCalculator from './ScoresCalculator';
8
-
9
- class Solver {
10
- private readonly patternsFiller: PatternsFiller;
11
-
12
- private readonly patternsGenerator: PatternsGenerator;
13
-
14
- private readonly scoresCalculator: ScoresCalculator;
15
-
16
- constructor(config: Config, trie: Trie) {
17
- this.patternsFiller = new PatternsFiller(config, trie);
18
- this.patternsGenerator = new PatternsGenerator(config);
19
- this.scoresCalculator = new ScoresCalculator(config);
20
- }
21
-
22
- public solve(board: Board, tiles: Tile[]): Result[] {
23
- const patterns = this.patternsGenerator.generate(board);
24
- const filledPatterns = patterns.flatMap((pattern) => this.patternsFiller.fill(pattern, tiles));
25
- const uniquePatterns = getUniquePatterns(filledPatterns);
26
- const results = uniquePatterns.map(
27
- (pattern, index) =>
28
- new Result({
29
- cells: pattern.cells,
30
- collisions: pattern.getCollisions().map((collision) => collision.cells),
31
- id: index,
32
- points: this.scoresCalculator.calculate(pattern),
33
- }),
34
- );
35
- return results;
36
- }
37
- }
38
-
39
- export default Solver;