scrabble-solver 2.18.8 → 2.18.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 (100) hide show
  1. package/.nx/workspace-data/file-map.json +1567 -1563
  2. package/.nx/workspace-data/lockfile-dependencies.json +143 -143
  3. package/.nx/workspace-data/lockfile-nodes.json +391 -391
  4. package/.nx/workspace-data/nx_files_v2.nxt +0 -0
  5. package/.nx/workspace-data/project-graph.json +563 -562
  6. package/.nx/workspace-data/source-maps.json +4 -0
  7. package/CLAUDE.md +1 -1
  8. package/README.md +1 -1
  9. package/bun.lock +106 -106
  10. package/lerna.json +1 -1
  11. package/package.json +8 -7
  12. package/packages/configs/build/games/index.d.ts +1 -0
  13. package/packages/configs/build/games/index.js +1 -0
  14. package/packages/configs/build/games/wordfeud.d.ts +19 -0
  15. package/packages/configs/build/games/wordfeud.js +81 -0
  16. package/packages/configs/build/languages/english.d.ts +2 -0
  17. package/packages/configs/build/languages/english.js +65 -1
  18. package/packages/configs/package.json +5 -4
  19. package/packages/configs/src/games/index.ts +1 -0
  20. package/packages/configs/src/games/wordfeud.ts +79 -0
  21. package/packages/configs/src/languages/english.ts +67 -1
  22. package/packages/constants/package.json +1 -1
  23. package/packages/dictionaries/package.json +4 -4
  24. package/packages/logger/package.json +1 -1
  25. package/packages/scrabble-solver/.next/BUILD_ID +1 -1
  26. package/packages/scrabble-solver/.next/build-manifest.json +13 -13
  27. package/packages/scrabble-solver/.next/cache/.previewinfo +1 -1
  28. package/packages/scrabble-solver/.next/cache/.rscinfo +1 -1
  29. package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
  30. package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +2 -2
  31. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
  32. package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack.old +0 -0
  33. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack +0 -0
  34. package/packages/scrabble-solver/.next/cache/webpack/edge-server-production/index.pack.old +0 -0
  35. package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
  36. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
  37. package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack.old +0 -0
  38. package/packages/scrabble-solver/.next/diagnostics/framework.json +1 -1
  39. package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
  40. package/packages/scrabble-solver/.next/prerender-manifest.json +4 -4
  41. package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
  42. package/packages/scrabble-solver/.next/server/chunks/30.js +1 -1
  43. package/packages/scrabble-solver/.next/server/chunks/612.js +1 -1
  44. package/packages/scrabble-solver/.next/server/chunks/67.js +1 -1
  45. package/packages/scrabble-solver/.next/server/chunks/671.js +1 -1
  46. package/packages/scrabble-solver/.next/server/chunks/812.js +1 -1
  47. package/packages/scrabble-solver/.next/server/chunks/853.js +1 -1
  48. package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
  49. package/packages/scrabble-solver/.next/server/pages/404.html +2 -2
  50. package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
  51. package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
  52. package/packages/scrabble-solver/.next/server/pages/_document.js.nft.json +1 -1
  53. package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
  54. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js +1 -1
  55. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale]/[word].js.nft.json +1 -1
  56. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js +1 -1
  57. package/packages/scrabble-solver/.next/server/pages/api/dictionary/[locale].js.nft.json +1 -1
  58. package/packages/scrabble-solver/.next/server/pages/api/solve.js +1 -1
  59. package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
  60. package/packages/scrabble-solver/.next/server/pages/api/verify.js +1 -1
  61. package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -1
  62. package/packages/scrabble-solver/.next/server/pages/api/visit.js +1 -1
  63. package/packages/scrabble-solver/.next/server/pages/api/visit.js.nft.json +1 -1
  64. package/packages/scrabble-solver/.next/server/pages/index.html +2 -2
  65. package/packages/scrabble-solver/.next/server/pages/index.js +1 -1
  66. package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
  67. package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
  68. package/packages/scrabble-solver/.next/server/pages/not-found.html +2 -2
  69. package/packages/scrabble-solver/.next/server/pages/not-found.js.nft.json +1 -1
  70. package/packages/scrabble-solver/.next/server/preview-props.json +3 -3
  71. package/packages/scrabble-solver/.next/server/route-cache/PAGES/8a5edab282632443219e051e4ade2d1d5bbc671c781051bf1437897cbdfea0f1/$/index.html +2 -2
  72. package/packages/scrabble-solver/.next/server/route-cache/PAGES/8a5edab282632443219e051e4ade2d1d5bbc671c781051bf1437897cbdfea0f1/$/index.json +1 -1
  73. package/packages/scrabble-solver/.next/server/route-cache/PAGES/8a5edab282632443219e051e4ade2d1d5bbc671c781051bf1437897cbdfea0f1/$/index.meta +1 -1
  74. package/packages/scrabble-solver/.next/static/{A7gnj7HBAkHTAN3QhqBcs → ZAXBgTNB3tlEK8seyFXPO}/_buildManifest.js +1 -1
  75. package/packages/scrabble-solver/.next/static/chunks/256.9fcbd6c03ebdb85b.js +1 -0
  76. package/packages/scrabble-solver/.next/static/chunks/744-5ad846426b8f4514.js +3 -0
  77. package/packages/scrabble-solver/.next/static/chunks/{main-1cbcb557c6b1777d.js → main-738e097cd313908f.js} +1 -1
  78. package/packages/scrabble-solver/.next/static/chunks/pages/_app-649c89598d664fab.js +1 -0
  79. package/packages/scrabble-solver/.next/static/chunks/pages/{index-cb6ead85a37f9022.js → index-ebba11f9b00e2bb5.js} +1 -1
  80. package/packages/scrabble-solver/.next/static/chunks/{webpack-315b7d774c197ad3.js → webpack-e8cd77eb7929e1f0.js} +1 -1
  81. package/packages/scrabble-solver/.next/trace +36 -36
  82. package/packages/scrabble-solver/.next/trace-build +1 -1
  83. package/packages/scrabble-solver/package.json +13 -13
  84. package/packages/scrabble-solver/public/llms.txt +1 -1
  85. package/packages/scrabble-solver/public/service-worker.js +1 -1
  86. package/packages/scrabble-solver/src/pages/index.tsx +1 -1
  87. package/packages/scrabble-solver/tsconfig.tsbuildinfo +1 -1
  88. package/packages/solver/package.json +5 -5
  89. package/packages/types/build/Game.d.ts +1 -0
  90. package/packages/types/build/Game.js +1 -0
  91. package/packages/types/package.json +2 -2
  92. package/packages/types/src/Game.ts +1 -0
  93. package/packages/word-definitions/package.json +3 -3
  94. package/packages/word-lists/package.json +4 -4
  95. package/playwright-report/index.html +1 -1
  96. package/.nx/workspace-data/d/server-process.json +0 -5
  97. package/packages/scrabble-solver/.next/static/chunks/256.ad3906547e15ca9d.js +0 -1
  98. package/packages/scrabble-solver/.next/static/chunks/744-65c858e61915ae87.js +0 -3
  99. package/packages/scrabble-solver/.next/static/chunks/pages/_app-7a211db854399bc6.js +0 -1
  100. /package/packages/scrabble-solver/.next/static/{A7gnj7HBAkHTAN3QhqBcs → ZAXBgTNB3tlEK8seyFXPO}/_ssgManifest.js +0 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "scrabble-solver",
3
- "version": "2.18.8",
4
- "description": "Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Crossplay, Literaki, Kelimelik, and Wyrazy. Quickly find the top-scoring words using the given board and tiles.",
3
+ "version": "2.18.9",
4
+ "description": "Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Crossplay, Literaki, Kelimelik, Wyrazy, and Wordfeud. Quickly find the top-scoring words using the given board and tiles.",
5
5
  "keywords": [
6
6
  "scrabble",
7
7
  "scrabble-solver",
@@ -18,6 +18,7 @@
18
18
  "literaki",
19
19
  "kelimelik",
20
20
  "wyrazy",
21
+ "wordfeud",
21
22
  "board game",
22
23
  "gaddag"
23
24
  ],
@@ -80,13 +81,13 @@
80
81
  "packages/scrabble-solver"
81
82
  ],
82
83
  "dependencies": {
83
- "@scrabble-solver/scrabble-solver": "2.18.8",
84
+ "@scrabble-solver/scrabble-solver": "2.18.9",
84
85
  "open-cli": "9.0.0",
85
86
  "wait-on": "9.5.1"
86
87
  },
87
88
  "devDependencies": {
88
89
  "@playwright/test": "1.64.1",
89
- "@types/bun": "1.4.3",
90
+ "@types/bun": "1.4.4",
90
91
  "@types/node": "26.6.5",
91
92
  "eslint-import-resolver-typescript": "4.4.5",
92
93
  "eslint-plugin-import": "2.32.0",
@@ -94,9 +95,9 @@
94
95
  "eslint-plugin-react": "7.37.5",
95
96
  "lerna": "10.1.1",
96
97
  "np": "12.1.1",
97
- "oxfmt": "0.74.0",
98
- "oxlint": "1.89.0",
99
- "oxlint-tsgolint": "7.0.2004",
98
+ "oxfmt": "0.75.0",
99
+ "oxlint": "1.90.0",
100
+ "oxlint-tsgolint": "7.0.2005",
100
101
  "rimraf": "6.1.3",
101
102
  "start-server-and-test": "3.0.13",
102
103
  "typescript": "7.0.2"
@@ -5,4 +5,5 @@ export * from './literaki';
5
5
  export * from './scrabble';
6
6
  export * from './scrabbleDuel';
7
7
  export * from './superScrabble';
8
+ export * from './wordfeud';
8
9
  export * from './wyrazy';
@@ -21,4 +21,5 @@ __exportStar(require("./literaki"), exports);
21
21
  __exportStar(require("./scrabble"), exports);
22
22
  __exportStar(require("./scrabbleDuel"), exports);
23
23
  __exportStar(require("./superScrabble"), exports);
24
+ __exportStar(require("./wordfeud"), exports);
24
25
  __exportStar(require("./wyrazy"), exports);
@@ -0,0 +1,19 @@
1
+ import { Game } from '@scrabble-solver/types';
2
+ export declare const wordfeud: {
3
+ bingo: {
4
+ score: number;
5
+ };
6
+ blankScore: number;
7
+ blanksCount: number;
8
+ boardHeight: number;
9
+ boardWidth: number;
10
+ game: Game;
11
+ name: string;
12
+ rackSize: number;
13
+ bonuses: {
14
+ multiplier: number;
15
+ type: string;
16
+ x: number;
17
+ y: number;
18
+ }[];
19
+ };
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wordfeud = void 0;
4
+ const constants_1 = require("@scrabble-solver/constants");
5
+ const types_1 = require("@scrabble-solver/types");
6
+ exports.wordfeud = {
7
+ bingo: { score: 40 },
8
+ blankScore: 0,
9
+ blanksCount: 2,
10
+ boardHeight: 15,
11
+ boardWidth: 15,
12
+ game: types_1.Game.Wordfeud,
13
+ name: 'Wordfeud',
14
+ rackSize: 7,
15
+ bonuses: [
16
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 0, y: 0 },
17
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 4, y: 0 },
18
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 7, y: 0 },
19
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 10, y: 0 },
20
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 14, y: 0 },
21
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 1, y: 1 },
22
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 5, y: 1 },
23
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 9, y: 1 },
24
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 13, y: 1 },
25
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 2, y: 2 },
26
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 6, y: 2 },
27
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 8, y: 2 },
28
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 12, y: 2 },
29
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 3, y: 3 },
30
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 7, y: 3 },
31
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 11, y: 3 },
32
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 0, y: 4 },
33
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 4, y: 4 },
34
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 6, y: 4 },
35
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 8, y: 4 },
36
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 10, y: 4 },
37
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 14, y: 4 },
38
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 1, y: 5 },
39
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 5, y: 5 },
40
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 9, y: 5 },
41
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 13, y: 5 },
42
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 2, y: 6 },
43
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 4, y: 6 },
44
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 10, y: 6 },
45
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 12, y: 6 },
46
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 0, y: 7 },
47
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 3, y: 7 },
48
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 11, y: 7 },
49
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 14, y: 7 },
50
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 2, y: 8 },
51
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 4, y: 8 },
52
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 10, y: 8 },
53
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 12, y: 8 },
54
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 1, y: 9 },
55
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 5, y: 9 },
56
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 9, y: 9 },
57
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 13, y: 9 },
58
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 0, y: 10 },
59
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 4, y: 10 },
60
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 6, y: 10 },
61
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 8, y: 10 },
62
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 10, y: 10 },
63
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 14, y: 10 },
64
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 3, y: 11 },
65
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 7, y: 11 },
66
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 11, y: 11 },
67
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 2, y: 12 },
68
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 6, y: 12 },
69
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 8, y: 12 },
70
+ { multiplier: 2, type: constants_1.BONUS_WORD, x: 12, y: 12 },
71
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 1, y: 13 },
72
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 5, y: 13 },
73
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 9, y: 13 },
74
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 13, y: 13 },
75
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 0, y: 14 },
76
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 4, y: 14 },
77
+ { multiplier: 2, type: constants_1.BONUS_CHARACTER, x: 7, y: 14 },
78
+ { multiplier: 3, type: constants_1.BONUS_WORD, x: 10, y: 14 },
79
+ { multiplier: 3, type: constants_1.BONUS_CHARACTER, x: 14, y: 14 },
80
+ ],
81
+ };
@@ -5,9 +5,11 @@ export declare const englishGbLiteraki: Config;
5
5
  export declare const englishGbScrabble: Config;
6
6
  export declare const englishGbScrabbleDuel: Config;
7
7
  export declare const englishGbSuperScrabble: Config;
8
+ export declare const englishGbWordfeud: Config;
8
9
  export declare const englishUsCrossplay: Config;
9
10
  export declare const englishUsLetterLeague: Config;
10
11
  export declare const englishUsLiteraki: Config;
11
12
  export declare const englishUsScrabble: Config;
12
13
  export declare const englishUsScrabbleDuel: Config;
13
14
  export declare const englishUsSuperScrabble: Config;
15
+ export declare const englishUsWordfeud: Config;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /* eslint-disable max-lines */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.englishUsSuperScrabble = exports.englishUsScrabbleDuel = exports.englishUsScrabble = exports.englishUsLiteraki = exports.englishUsLetterLeague = exports.englishUsCrossplay = exports.englishGbSuperScrabble = exports.englishGbScrabbleDuel = exports.englishGbScrabble = exports.englishGbLiteraki = exports.englishGbLetterLeague = exports.englishGbCrossplay = void 0;
4
+ exports.englishUsWordfeud = exports.englishUsSuperScrabble = exports.englishUsScrabbleDuel = exports.englishUsScrabble = exports.englishUsLiteraki = exports.englishUsLetterLeague = exports.englishUsCrossplay = exports.englishGbWordfeud = exports.englishGbSuperScrabble = exports.englishGbScrabbleDuel = exports.englishGbScrabble = exports.englishGbLiteraki = exports.englishGbLetterLeague = exports.englishGbCrossplay = void 0;
5
5
  const types_1 = require("@scrabble-solver/types");
6
6
  const games_1 = require("../games");
7
7
  exports.englishGbCrossplay = new types_1.Config({
@@ -197,6 +197,38 @@ exports.englishGbSuperScrabble = new types_1.Config({
197
197
  { character: 'z', count: 2, score: 10 },
198
198
  ],
199
199
  });
200
+ exports.englishGbWordfeud = new types_1.Config({
201
+ ...games_1.wordfeud,
202
+ locale: types_1.Locale.EN_GB,
203
+ tiles: [
204
+ { character: 'a', count: 10, score: 1 },
205
+ { character: 'b', count: 2, score: 4 },
206
+ { character: 'c', count: 2, score: 4 },
207
+ { character: 'd', count: 5, score: 2 },
208
+ { character: 'e', count: 12, score: 1 },
209
+ { character: 'f', count: 2, score: 4 },
210
+ { character: 'g', count: 3, score: 3 },
211
+ { character: 'h', count: 3, score: 4 },
212
+ { character: 'i', count: 9, score: 1 },
213
+ { character: 'j', count: 1, score: 10 },
214
+ { character: 'k', count: 1, score: 5 },
215
+ { character: 'l', count: 4, score: 1 },
216
+ { character: 'm', count: 2, score: 3 },
217
+ { character: 'n', count: 6, score: 1 },
218
+ { character: 'o', count: 7, score: 1 },
219
+ { character: 'p', count: 2, score: 4 },
220
+ { character: 'q', count: 1, score: 10 },
221
+ { character: 'r', count: 6, score: 1 },
222
+ { character: 's', count: 5, score: 1 },
223
+ { character: 't', count: 7, score: 1 },
224
+ { character: 'u', count: 4, score: 2 },
225
+ { character: 'v', count: 2, score: 4 },
226
+ { character: 'w', count: 2, score: 4 },
227
+ { character: 'x', count: 1, score: 8 },
228
+ { character: 'y', count: 2, score: 4 },
229
+ { character: 'z', count: 1, score: 10 },
230
+ ],
231
+ });
200
232
  exports.englishUsCrossplay = new types_1.Config({
201
233
  ...games_1.crossplay,
202
234
  locale: types_1.Locale.EN_US,
@@ -390,3 +422,35 @@ exports.englishUsSuperScrabble = new types_1.Config({
390
422
  { character: 'z', count: 2, score: 10 },
391
423
  ],
392
424
  });
425
+ exports.englishUsWordfeud = new types_1.Config({
426
+ ...games_1.wordfeud,
427
+ locale: types_1.Locale.EN_US,
428
+ tiles: [
429
+ { character: 'a', count: 10, score: 1 },
430
+ { character: 'b', count: 2, score: 4 },
431
+ { character: 'c', count: 2, score: 4 },
432
+ { character: 'd', count: 5, score: 2 },
433
+ { character: 'e', count: 12, score: 1 },
434
+ { character: 'f', count: 2, score: 4 },
435
+ { character: 'g', count: 3, score: 3 },
436
+ { character: 'h', count: 3, score: 4 },
437
+ { character: 'i', count: 9, score: 1 },
438
+ { character: 'j', count: 1, score: 10 },
439
+ { character: 'k', count: 1, score: 5 },
440
+ { character: 'l', count: 4, score: 1 },
441
+ { character: 'm', count: 2, score: 3 },
442
+ { character: 'n', count: 6, score: 1 },
443
+ { character: 'o', count: 7, score: 1 },
444
+ { character: 'p', count: 2, score: 4 },
445
+ { character: 'q', count: 1, score: 10 },
446
+ { character: 'r', count: 6, score: 1 },
447
+ { character: 's', count: 5, score: 1 },
448
+ { character: 't', count: 7, score: 1 },
449
+ { character: 'u', count: 4, score: 2 },
450
+ { character: 'v', count: 2, score: 4 },
451
+ { character: 'w', count: 2, score: 4 },
452
+ { character: 'x', count: 1, score: 8 },
453
+ { character: 'y', count: 2, score: 4 },
454
+ { character: 'z', count: 1, score: 10 },
455
+ ],
456
+ });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@scrabble-solver/configs",
3
- "version": "2.18.8",
4
- "description": "Game and language configs for Scrabble Solver: board layouts, bonus squares, tile distributions, and points for 8 games and 9 locales.",
3
+ "version": "2.18.9",
4
+ "description": "Game and language configs for Scrabble Solver: board layouts, bonus squares, tile distributions, and points for 9 games and 9 locales.",
5
5
  "keywords": [
6
6
  "scrabble",
7
7
  "board-game",
@@ -10,6 +10,7 @@
10
10
  "literaki",
11
11
  "kelimelik",
12
12
  "wyrazy",
13
+ "wordfeud",
13
14
  "super-scrabble"
14
15
  ],
15
16
  "main": "build/index.js",
@@ -33,8 +34,8 @@
33
34
  "clean": "rimraf build/"
34
35
  },
35
36
  "dependencies": {
36
- "@scrabble-solver/constants": "2.18.8",
37
- "@scrabble-solver/types": "2.18.8"
37
+ "@scrabble-solver/constants": "2.18.9",
38
+ "@scrabble-solver/types": "2.18.9"
38
39
  },
39
40
  "gitHead": "f029a11f306a01937ee99fc6365cb226b972dfed"
40
41
  }
@@ -5,4 +5,5 @@ export * from './literaki';
5
5
  export * from './scrabble';
6
6
  export * from './scrabbleDuel';
7
7
  export * from './superScrabble';
8
+ export * from './wordfeud';
8
9
  export * from './wyrazy';
@@ -0,0 +1,79 @@
1
+ import { BONUS_CHARACTER, BONUS_WORD } from '@scrabble-solver/constants';
2
+ import { Game } from '@scrabble-solver/types';
3
+
4
+ export const wordfeud = {
5
+ bingo: { score: 40 },
6
+ blankScore: 0,
7
+ blanksCount: 2,
8
+ boardHeight: 15,
9
+ boardWidth: 15,
10
+ game: Game.Wordfeud,
11
+ name: 'Wordfeud',
12
+ rackSize: 7,
13
+ bonuses: [
14
+ { multiplier: 3, type: BONUS_CHARACTER, x: 0, y: 0 },
15
+ { multiplier: 3, type: BONUS_WORD, x: 4, y: 0 },
16
+ { multiplier: 2, type: BONUS_CHARACTER, x: 7, y: 0 },
17
+ { multiplier: 3, type: BONUS_WORD, x: 10, y: 0 },
18
+ { multiplier: 3, type: BONUS_CHARACTER, x: 14, y: 0 },
19
+ { multiplier: 2, type: BONUS_CHARACTER, x: 1, y: 1 },
20
+ { multiplier: 3, type: BONUS_CHARACTER, x: 5, y: 1 },
21
+ { multiplier: 3, type: BONUS_CHARACTER, x: 9, y: 1 },
22
+ { multiplier: 2, type: BONUS_CHARACTER, x: 13, y: 1 },
23
+ { multiplier: 2, type: BONUS_WORD, x: 2, y: 2 },
24
+ { multiplier: 2, type: BONUS_CHARACTER, x: 6, y: 2 },
25
+ { multiplier: 2, type: BONUS_CHARACTER, x: 8, y: 2 },
26
+ { multiplier: 2, type: BONUS_WORD, x: 12, y: 2 },
27
+ { multiplier: 3, type: BONUS_CHARACTER, x: 3, y: 3 },
28
+ { multiplier: 2, type: BONUS_WORD, x: 7, y: 3 },
29
+ { multiplier: 3, type: BONUS_CHARACTER, x: 11, y: 3 },
30
+ { multiplier: 3, type: BONUS_WORD, x: 0, y: 4 },
31
+ { multiplier: 2, type: BONUS_WORD, x: 4, y: 4 },
32
+ { multiplier: 2, type: BONUS_CHARACTER, x: 6, y: 4 },
33
+ { multiplier: 2, type: BONUS_CHARACTER, x: 8, y: 4 },
34
+ { multiplier: 2, type: BONUS_WORD, x: 10, y: 4 },
35
+ { multiplier: 3, type: BONUS_WORD, x: 14, y: 4 },
36
+ { multiplier: 3, type: BONUS_CHARACTER, x: 1, y: 5 },
37
+ { multiplier: 3, type: BONUS_CHARACTER, x: 5, y: 5 },
38
+ { multiplier: 3, type: BONUS_CHARACTER, x: 9, y: 5 },
39
+ { multiplier: 3, type: BONUS_CHARACTER, x: 13, y: 5 },
40
+ { multiplier: 2, type: BONUS_CHARACTER, x: 2, y: 6 },
41
+ { multiplier: 2, type: BONUS_CHARACTER, x: 4, y: 6 },
42
+ { multiplier: 2, type: BONUS_CHARACTER, x: 10, y: 6 },
43
+ { multiplier: 2, type: BONUS_CHARACTER, x: 12, y: 6 },
44
+ { multiplier: 2, type: BONUS_CHARACTER, x: 0, y: 7 },
45
+ { multiplier: 2, type: BONUS_WORD, x: 3, y: 7 },
46
+ { multiplier: 2, type: BONUS_WORD, x: 11, y: 7 },
47
+ { multiplier: 2, type: BONUS_CHARACTER, x: 14, y: 7 },
48
+ { multiplier: 2, type: BONUS_CHARACTER, x: 2, y: 8 },
49
+ { multiplier: 2, type: BONUS_CHARACTER, x: 4, y: 8 },
50
+ { multiplier: 2, type: BONUS_CHARACTER, x: 10, y: 8 },
51
+ { multiplier: 2, type: BONUS_CHARACTER, x: 12, y: 8 },
52
+ { multiplier: 3, type: BONUS_CHARACTER, x: 1, y: 9 },
53
+ { multiplier: 3, type: BONUS_CHARACTER, x: 5, y: 9 },
54
+ { multiplier: 3, type: BONUS_CHARACTER, x: 9, y: 9 },
55
+ { multiplier: 3, type: BONUS_CHARACTER, x: 13, y: 9 },
56
+ { multiplier: 3, type: BONUS_WORD, x: 0, y: 10 },
57
+ { multiplier: 2, type: BONUS_WORD, x: 4, y: 10 },
58
+ { multiplier: 2, type: BONUS_CHARACTER, x: 6, y: 10 },
59
+ { multiplier: 2, type: BONUS_CHARACTER, x: 8, y: 10 },
60
+ { multiplier: 2, type: BONUS_WORD, x: 10, y: 10 },
61
+ { multiplier: 3, type: BONUS_WORD, x: 14, y: 10 },
62
+ { multiplier: 3, type: BONUS_CHARACTER, x: 3, y: 11 },
63
+ { multiplier: 2, type: BONUS_WORD, x: 7, y: 11 },
64
+ { multiplier: 3, type: BONUS_CHARACTER, x: 11, y: 11 },
65
+ { multiplier: 2, type: BONUS_WORD, x: 2, y: 12 },
66
+ { multiplier: 2, type: BONUS_CHARACTER, x: 6, y: 12 },
67
+ { multiplier: 2, type: BONUS_CHARACTER, x: 8, y: 12 },
68
+ { multiplier: 2, type: BONUS_WORD, x: 12, y: 12 },
69
+ { multiplier: 2, type: BONUS_CHARACTER, x: 1, y: 13 },
70
+ { multiplier: 3, type: BONUS_CHARACTER, x: 5, y: 13 },
71
+ { multiplier: 3, type: BONUS_CHARACTER, x: 9, y: 13 },
72
+ { multiplier: 2, type: BONUS_CHARACTER, x: 13, y: 13 },
73
+ { multiplier: 3, type: BONUS_CHARACTER, x: 0, y: 14 },
74
+ { multiplier: 3, type: BONUS_WORD, x: 4, y: 14 },
75
+ { multiplier: 2, type: BONUS_CHARACTER, x: 7, y: 14 },
76
+ { multiplier: 3, type: BONUS_WORD, x: 10, y: 14 },
77
+ { multiplier: 3, type: BONUS_CHARACTER, x: 14, y: 14 },
78
+ ],
79
+ };
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Config, Locale } from '@scrabble-solver/types';
4
4
 
5
- import { crossplay, letterLeague, literaki, scrabble, scrabbleDuel, superScrabble } from '../games';
5
+ import { crossplay, letterLeague, literaki, scrabble, scrabbleDuel, superScrabble, wordfeud } from '../games';
6
6
 
7
7
  export const englishGbCrossplay = new Config({
8
8
  ...crossplay,
@@ -203,6 +203,39 @@ export const englishGbSuperScrabble = new Config({
203
203
  ],
204
204
  });
205
205
 
206
+ export const englishGbWordfeud = new Config({
207
+ ...wordfeud,
208
+ locale: Locale.EN_GB,
209
+ tiles: [
210
+ { character: 'a', count: 10, score: 1 },
211
+ { character: 'b', count: 2, score: 4 },
212
+ { character: 'c', count: 2, score: 4 },
213
+ { character: 'd', count: 5, score: 2 },
214
+ { character: 'e', count: 12, score: 1 },
215
+ { character: 'f', count: 2, score: 4 },
216
+ { character: 'g', count: 3, score: 3 },
217
+ { character: 'h', count: 3, score: 4 },
218
+ { character: 'i', count: 9, score: 1 },
219
+ { character: 'j', count: 1, score: 10 },
220
+ { character: 'k', count: 1, score: 5 },
221
+ { character: 'l', count: 4, score: 1 },
222
+ { character: 'm', count: 2, score: 3 },
223
+ { character: 'n', count: 6, score: 1 },
224
+ { character: 'o', count: 7, score: 1 },
225
+ { character: 'p', count: 2, score: 4 },
226
+ { character: 'q', count: 1, score: 10 },
227
+ { character: 'r', count: 6, score: 1 },
228
+ { character: 's', count: 5, score: 1 },
229
+ { character: 't', count: 7, score: 1 },
230
+ { character: 'u', count: 4, score: 2 },
231
+ { character: 'v', count: 2, score: 4 },
232
+ { character: 'w', count: 2, score: 4 },
233
+ { character: 'x', count: 1, score: 8 },
234
+ { character: 'y', count: 2, score: 4 },
235
+ { character: 'z', count: 1, score: 10 },
236
+ ],
237
+ });
238
+
206
239
  export const englishUsCrossplay = new Config({
207
240
  ...crossplay,
208
241
  locale: Locale.EN_US,
@@ -401,3 +434,36 @@ export const englishUsSuperScrabble = new Config({
401
434
  { character: 'z', count: 2, score: 10 },
402
435
  ],
403
436
  });
437
+
438
+ export const englishUsWordfeud = new Config({
439
+ ...wordfeud,
440
+ locale: Locale.EN_US,
441
+ tiles: [
442
+ { character: 'a', count: 10, score: 1 },
443
+ { character: 'b', count: 2, score: 4 },
444
+ { character: 'c', count: 2, score: 4 },
445
+ { character: 'd', count: 5, score: 2 },
446
+ { character: 'e', count: 12, score: 1 },
447
+ { character: 'f', count: 2, score: 4 },
448
+ { character: 'g', count: 3, score: 3 },
449
+ { character: 'h', count: 3, score: 4 },
450
+ { character: 'i', count: 9, score: 1 },
451
+ { character: 'j', count: 1, score: 10 },
452
+ { character: 'k', count: 1, score: 5 },
453
+ { character: 'l', count: 4, score: 1 },
454
+ { character: 'm', count: 2, score: 3 },
455
+ { character: 'n', count: 6, score: 1 },
456
+ { character: 'o', count: 7, score: 1 },
457
+ { character: 'p', count: 2, score: 4 },
458
+ { character: 'q', count: 1, score: 10 },
459
+ { character: 'r', count: 6, score: 1 },
460
+ { character: 's', count: 5, score: 1 },
461
+ { character: 't', count: 7, score: 1 },
462
+ { character: 'u', count: 4, score: 2 },
463
+ { character: 'v', count: 2, score: 4 },
464
+ { character: 'w', count: 2, score: 4 },
465
+ { character: 'x', count: 1, score: 8 },
466
+ { character: 'y', count: 2, score: 4 },
467
+ { character: 'z', count: 1, score: 10 },
468
+ ],
469
+ });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/constants",
3
- "version": "2.18.8",
3
+ "version": "2.18.9",
4
4
  "description": "Shared constants for Scrabble Solver (blank tile, bonus markers).",
5
5
  "keywords": [
6
6
  "scrabble",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/dictionaries",
3
- "version": "2.18.8",
3
+ "version": "2.18.9",
4
4
  "description": "Dictionary manager for Scrabble Solver: downloads per-locale word lists and serves them as GADDAG automata with layered disk/memory caching.",
5
5
  "keywords": [
6
6
  "scrabble",
@@ -38,9 +38,9 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@kamilmielnik/gaddag": "3.0.0",
41
- "@scrabble-solver/logger": "2.18.8",
42
- "@scrabble-solver/types": "2.18.8",
43
- "@scrabble-solver/word-lists": "2.18.8"
41
+ "@scrabble-solver/logger": "2.18.9",
42
+ "@scrabble-solver/types": "2.18.9",
43
+ "@scrabble-solver/word-lists": "2.18.9"
44
44
  },
45
45
  "gitHead": "f029a11f306a01937ee99fc6365cb226b972dfed"
46
46
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scrabble-solver/logger",
3
- "version": "2.18.8",
3
+ "version": "2.18.9",
4
4
  "description": "JSON-lines event log for Scrabble Solver, with CSV export.",
5
5
  "keywords": [
6
6
  "logger",
@@ -1 +1 @@
1
- A7gnj7HBAkHTAN3QhqBcs
1
+ ZAXBgTNB3tlEK8seyFXPO
@@ -4,37 +4,37 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/A7gnj7HBAkHTAN3QhqBcs/_buildManifest.js",
8
- "static/A7gnj7HBAkHTAN3QhqBcs/_ssgManifest.js"
7
+ "static/ZAXBgTNB3tlEK8seyFXPO/_buildManifest.js",
8
+ "static/ZAXBgTNB3tlEK8seyFXPO/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [],
11
11
  "rootMainFilesTree": {},
12
12
  "pages": {
13
13
  "/": [
14
- "static/chunks/webpack-315b7d774c197ad3.js",
14
+ "static/chunks/webpack-e8cd77eb7929e1f0.js",
15
15
  "static/chunks/framework-86d3b250d278cea9.js",
16
- "static/chunks/main-1cbcb557c6b1777d.js",
17
- "static/chunks/744-65c858e61915ae87.js",
16
+ "static/chunks/main-738e097cd313908f.js",
17
+ "static/chunks/744-5ad846426b8f4514.js",
18
18
  "static/css/8b8087461767360a.css",
19
- "static/chunks/pages/index-cb6ead85a37f9022.js"
19
+ "static/chunks/pages/index-ebba11f9b00e2bb5.js"
20
20
  ],
21
21
  "/_app": [
22
- "static/chunks/webpack-315b7d774c197ad3.js",
22
+ "static/chunks/webpack-e8cd77eb7929e1f0.js",
23
23
  "static/chunks/framework-86d3b250d278cea9.js",
24
- "static/chunks/main-1cbcb557c6b1777d.js",
24
+ "static/chunks/main-738e097cd313908f.js",
25
25
  "static/css/4dbcacc1122ac6b9.css",
26
- "static/chunks/pages/_app-7a211db854399bc6.js"
26
+ "static/chunks/pages/_app-649c89598d664fab.js"
27
27
  ],
28
28
  "/_error": [
29
- "static/chunks/webpack-315b7d774c197ad3.js",
29
+ "static/chunks/webpack-e8cd77eb7929e1f0.js",
30
30
  "static/chunks/framework-86d3b250d278cea9.js",
31
- "static/chunks/main-1cbcb557c6b1777d.js",
31
+ "static/chunks/main-738e097cd313908f.js",
32
32
  "static/chunks/pages/_error-f0290a98eb3ed0ec.js"
33
33
  ],
34
34
  "/not-found": [
35
- "static/chunks/webpack-315b7d774c197ad3.js",
35
+ "static/chunks/webpack-e8cd77eb7929e1f0.js",
36
36
  "static/chunks/framework-86d3b250d278cea9.js",
37
- "static/chunks/main-1cbcb557c6b1777d.js",
37
+ "static/chunks/main-738e097cd313908f.js",
38
38
  "static/css/dee878eb64099d92.css",
39
39
  "static/chunks/pages/not-found-a59f9deeeff63d17.js"
40
40
  ]
@@ -1 +1 @@
1
- {"previewModeId":"feb0251002f2dbf359dbc2c6ed273859","previewModeSigningKey":"a3a53402a4c94558024ea409c6354e1d4f7aa4c83ea543357e1853dea5ca0c50","previewModeEncryptionKey":"0b2a177b73de2b496824e880ac1eae8f5cd84df89b5c84d6a42a8aa8e965fa1e","expireAt":1793743327989}
1
+ {"previewModeId":"bb63e296c5b33c4f28499acbbc6c3d4d","previewModeSigningKey":"f1d663a4ee38f9409c49f7503326b0bee068e036237da8e62af08c82005a1f7c","previewModeEncryptionKey":"7264b7e70d1b1221271c4c714dba240d95e0c3f811680e446fae639b42d24cbf","expireAt":1794418943245}
@@ -1 +1 @@
1
- {"encryption.key":"KLkJPjUcNU7HKGa/6hDyexDYZmmQbBrSx/6SE0NjCp0=","encryption.expire_at":1793743327987}
1
+ {"encryption.key":"KqbCh+RNmCaW2iDbEzHi9PlsgS/nsDLJF7cP1sf+zW0=","encryption.expire_at":1794418943243}