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.
- package/.eslintrc.prettier-only.js +1 -1
- package/.prettierignore +3 -0
- package/.prettierrc +3 -3
- package/babel.config.js +1 -1
- package/lerna.json +1 -1
- package/package.json +6 -6
- package/packages/configs/package.json +3 -3
- package/packages/constants/package.json +1 -1
- package/packages/dictionaries/package-lock.json +2 -2
- package/packages/dictionaries/package.json +4 -4
- package/packages/logger/package-lock.json +2 -2
- package/packages/logger/package.json +1 -1
- package/packages/scrabble-solver/.next/BUILD_ID +1 -1
- package/packages/scrabble-solver/.next/build-manifest.json +10 -10
- package/packages/scrabble-solver/.next/cache/.tsbuildinfo +1 -1
- package/packages/scrabble-solver/.next/cache/eslint/.cache_8dgz12 +1 -1
- package/packages/scrabble-solver/.next/cache/next-server.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/cache/webpack/client-production/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/client-production/index.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-production/0.pack +0 -0
- package/packages/scrabble-solver/.next/cache/webpack/server-production/index.pack +0 -0
- package/packages/scrabble-solver/.next/next-server.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/prerender-manifest.json +1 -1
- package/packages/scrabble-solver/.next/routes-manifest.json +1 -1
- package/packages/scrabble-solver/.next/server/chunks/413.js +179 -44
- package/packages/scrabble-solver/.next/server/chunks/44.js +802 -0
- package/packages/scrabble-solver/.next/server/chunks/515.js +359 -95
- package/packages/scrabble-solver/.next/server/chunks/911.js +53 -23
- package/packages/scrabble-solver/.next/server/middleware-build-manifest.js +1 -1
- package/packages/scrabble-solver/.next/server/pages/404.html +2 -2
- package/packages/scrabble-solver/.next/server/pages/404.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/500.html +2 -2
- package/packages/scrabble-solver/.next/server/pages/_app.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/_error.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/solve.js +193 -927
- package/packages/scrabble-solver/.next/server/pages/api/solve.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/api/verify.js +217 -0
- package/packages/scrabble-solver/.next/server/pages/api/verify.js.nft.json +1 -0
- package/packages/scrabble-solver/.next/server/pages/index.html +3 -3
- package/packages/scrabble-solver/.next/server/pages/index.js +7 -1
- package/packages/scrabble-solver/.next/server/pages/index.js.nft.json +1 -1
- package/packages/scrabble-solver/.next/server/pages/index.json +1 -1
- package/packages/scrabble-solver/.next/server/pages-manifest.json +1 -0
- package/packages/scrabble-solver/.next/static/chunks/317-a33dd38e9b9a17ed.js +1 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/{404-8eb3ba4f0ba17e08.js → 404-90c624da3c83fd17.js} +1 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/_app-f8f360878e1c2aff.js +1 -0
- package/packages/scrabble-solver/.next/static/chunks/pages/index-ecea697d3e5d8a6f.js +1 -0
- package/packages/scrabble-solver/.next/static/css/64dc2ce1811912f1.css +1 -0
- package/packages/scrabble-solver/.next/static/css/{cdbc9e0afcff5473.css → ad2a08918868cad8.css} +1 -1
- package/packages/scrabble-solver/.next/static/yCxjzzYpw5JjJE53PO_s6/_buildManifest.js +1 -0
- package/packages/scrabble-solver/.next/static/{z3J3qmq1nazbDv_ENIkCo → yCxjzzYpw5JjJE53PO_s6}/_ssgManifest.js +0 -0
- package/packages/scrabble-solver/.next/trace +42 -41
- package/packages/scrabble-solver/package-lock.json +2 -2
- package/packages/scrabble-solver/package.json +8 -8
- package/packages/scrabble-solver/src/components/Badge/Badge.module.scss +13 -0
- package/packages/scrabble-solver/src/components/Badge/Badge.tsx +15 -0
- package/packages/scrabble-solver/src/components/Badge/index.ts +1 -0
- package/packages/scrabble-solver/src/components/NavButtons/NavButtons.tsx +33 -14
- package/packages/scrabble-solver/src/components/RemainingTiles/RemainingTiles.module.scss +8 -7
- package/packages/scrabble-solver/src/components/RemainingTiles/RemainingTiles.tsx +13 -4
- package/packages/scrabble-solver/src/components/Sidebar/Sidebar.tsx +2 -2
- package/packages/scrabble-solver/src/components/Sidebar/components/Section/Section.module.scss +0 -1
- package/packages/scrabble-solver/src/components/Sidebar/components/Section/Section.tsx +1 -1
- package/packages/scrabble-solver/src/components/SquareButton/SquareButton.module.scss +5 -0
- package/packages/scrabble-solver/src/components/Words/Words.module.scss +35 -0
- package/packages/scrabble-solver/src/components/Words/Words.tsx +57 -0
- package/packages/scrabble-solver/src/components/Words/index.ts +1 -0
- package/packages/scrabble-solver/src/components/index.ts +2 -0
- package/packages/scrabble-solver/src/i18n/de.json +4 -1
- package/packages/scrabble-solver/src/i18n/en.json +4 -1
- package/packages/scrabble-solver/src/i18n/es.json +4 -1
- package/packages/scrabble-solver/src/i18n/fr.json +4 -1
- package/packages/scrabble-solver/src/i18n/pl.json +4 -1
- package/packages/scrabble-solver/src/icons/BookHalf.svg +4 -0
- package/packages/scrabble-solver/src/icons/Check.svg +4 -0
- package/packages/scrabble-solver/src/icons/Cross.svg +2 -2
- package/packages/scrabble-solver/src/icons/CrossFill.svg +4 -0
- package/packages/scrabble-solver/src/icons/index.ts +3 -0
- package/packages/scrabble-solver/src/pages/api/solve.ts +2 -3
- package/packages/scrabble-solver/src/pages/api/verify.ts +71 -0
- package/packages/scrabble-solver/src/pages/index.tsx +5 -0
- package/packages/scrabble-solver/src/sdk/index.ts +1 -0
- package/packages/scrabble-solver/src/sdk/verify.ts +24 -0
- package/packages/scrabble-solver/src/state/rootReducer.ts +2 -0
- package/packages/scrabble-solver/src/state/sagas.ts +33 -6
- package/packages/scrabble-solver/src/state/selectors.ts +8 -0
- package/packages/scrabble-solver/src/state/slices/index.ts +2 -0
- package/packages/scrabble-solver/src/state/slices/verifyInitialState.ts +12 -0
- package/packages/scrabble-solver/src/state/slices/verifySlice.ts +31 -0
- package/packages/scrabble-solver/src/styles/variables.scss +2 -1
- package/packages/scrabble-solver/src/types/index.ts +4 -1
- package/packages/solver/build/fillPattern.d.ts +5 -0
- package/packages/solver/build/fillPattern.js +52 -0
- package/packages/solver/build/generateEndIndices.d.ts +3 -0
- package/packages/solver/build/generateEndIndices.js +9 -0
- package/packages/solver/build/generateHorizontalPatterns.d.ts +3 -0
- package/packages/solver/build/generateHorizontalPatterns.js +18 -0
- package/packages/solver/build/generatePattern.d.ts +8 -0
- package/packages/solver/build/generatePattern.js +22 -0
- package/packages/solver/build/generatePatterns.d.ts +3 -0
- package/packages/solver/build/generatePatterns.js +13 -0
- package/packages/solver/build/generateStartIndices.d.ts +3 -0
- package/packages/solver/build/generateStartIndices.js +9 -0
- package/packages/solver/build/generateVectors.d.ts +6 -0
- package/packages/solver/build/generateVectors.js +8 -0
- package/packages/solver/build/generateVerticalPatterns.d.ts +3 -0
- package/packages/solver/build/generateVerticalPatterns.js +18 -0
- package/packages/solver/build/getCellsScore.d.ts +3 -0
- package/packages/solver/build/getCellsScore.js +16 -0
- package/packages/solver/build/getPatternHash.d.ts +3 -0
- package/packages/solver/build/getPatternHash.js +13 -0
- package/packages/solver/build/getPatternScore.d.ts +3 -0
- package/packages/solver/build/getPatternScore.js +15 -0
- package/packages/solver/build/getUniquePatterns.js +5 -11
- package/packages/solver/build/index.d.ts +1 -1
- package/packages/solver/build/index.js +3 -3
- package/packages/solver/build/solve.d.ts +4 -0
- package/packages/solver/build/solve.js +23 -0
- package/packages/solver/package-lock.json +2 -2
- package/packages/solver/package.json +5 -5
- package/packages/solver/src/fillPattern.test.ts +107 -0
- package/packages/solver/src/fillPattern.ts +70 -0
- package/packages/solver/src/generateEndIndices.test.ts +18 -0
- package/packages/solver/src/generateEndIndices.ts +10 -0
- package/packages/solver/src/generateHorizontalPatterns.test.ts +31 -0
- package/packages/solver/src/generateHorizontalPatterns.ts +17 -0
- package/packages/solver/src/generatePattern.ts +35 -0
- package/packages/solver/src/generatePatterns.ts +13 -0
- package/packages/solver/src/generateStartIndices.test.ts +14 -0
- package/packages/solver/src/generateStartIndices.ts +10 -0
- package/packages/solver/src/generateVectors.test.ts +12 -0
- package/packages/solver/src/generateVectors.ts +15 -0
- package/packages/solver/src/generateVerticalPatterns.test.ts +32 -0
- package/packages/solver/src/generateVerticalPatterns.ts +17 -0
- package/packages/solver/src/getCellsScore.ts +22 -0
- package/packages/solver/src/getPatternHash.test.ts +17 -0
- package/packages/solver/src/getPatternHash.ts +14 -0
- package/packages/solver/src/getPatternScore.test.ts +60 -0
- package/packages/solver/src/getPatternScore.ts +15 -0
- package/packages/solver/src/getUniquePatterns.ts +1 -10
- package/packages/solver/src/index.ts +1 -1
- package/packages/solver/src/{Solver.test.ts → solve.test.ts} +14 -13
- package/packages/solver/src/solve.ts +25 -0
- package/packages/types/build/Board.d.ts +1 -0
- package/packages/types/build/Board.js +17 -1
- package/packages/types/build/Config.js +1 -1
- package/packages/types/build/FinalPattern.d.ts +7 -0
- package/packages/types/build/FinalPattern.js +16 -0
- package/packages/types/build/HorizontalPattern.js +2 -5
- package/packages/types/build/Pattern.d.ts +1 -4
- package/packages/types/build/Pattern.js +2 -5
- package/packages/types/build/Result.js +3 -5
- package/packages/types/build/Tile.d.ts +2 -2
- package/packages/types/build/VerticalPattern.js +2 -5
- package/packages/types/build/index.d.ts +1 -0
- package/packages/types/build/index.js +3 -1
- package/packages/types/package.json +2 -2
- package/packages/types/src/Board.ts +23 -1
- package/packages/types/src/Config.ts +1 -1
- package/packages/types/src/FinalPattern.ts +16 -0
- package/packages/types/src/HorizontalPattern.ts +5 -5
- package/packages/types/src/Pattern.ts +5 -5
- package/packages/types/src/Result.ts +3 -5
- package/packages/types/src/Tile.ts +2 -2
- package/packages/types/src/VerticalPattern.ts +5 -5
- package/packages/types/src/index.ts +1 -0
- package/packages/word-definitions/package-lock.json +2 -2
- package/packages/word-definitions/package.json +2 -2
- package/packages/word-lists/package-lock.json +2 -2
- package/packages/word-lists/package.json +2 -2
- package/packages/scrabble-solver/.next/static/chunks/615-d258f6c528c18622.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/_app-4a663fd3d5ca4524.js +0 -1
- package/packages/scrabble-solver/.next/static/chunks/pages/index-1a9826d740cc8830.js +0 -1
- package/packages/scrabble-solver/.next/static/css/180c6c26317ac90f.css +0 -1
- package/packages/scrabble-solver/.next/static/z3J3qmq1nazbDv_ENIkCo/_buildManifest.js +0 -1
- package/packages/solver/build/PatternsFiller.d.ts +0 -12
- package/packages/solver/build/PatternsFiller.js +0 -70
- package/packages/solver/build/PatternsGenerator.d.ts +0 -32
- package/packages/solver/build/PatternsGenerator.js +0 -66
- package/packages/solver/build/ScoresCalculator.d.ts +0 -17
- package/packages/solver/build/ScoresCalculator.js +0 -37
- package/packages/solver/build/Solver.d.ts +0 -10
- package/packages/solver/build/Solver.js +0 -30
- package/packages/solver/src/PatternsFiller.test.ts +0 -92
- package/packages/solver/src/PatternsFiller.ts +0 -91
- package/packages/solver/src/PatternsGenerator.test.ts +0 -89
- package/packages/solver/src/PatternsGenerator.ts +0 -103
- package/packages/solver/src/ScoresCalculator.test.ts +0 -70
- package/packages/solver/src/ScoresCalculator.ts +0 -52
- 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;
|