@scrabble-solver/solver 2.15.9 → 2.15.10
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/build/areDigraphsValid.d.ts +1 -2
- package/build/areDigraphsValid.js +2 -1
- package/build/fillPattern.d.ts +1 -2
- package/build/fillPattern.js +2 -2
- package/build/generateEndIndices.d.ts +1 -2
- package/build/generateEndIndices.js +2 -1
- package/build/generateHorizontalPatterns.d.ts +1 -2
- package/build/generateHorizontalPatterns.js +7 -8
- package/build/generatePattern.d.ts +1 -2
- package/build/generatePattern.js +6 -8
- package/build/generatePatterns.d.ts +1 -2
- package/build/generatePatterns.js +6 -8
- package/build/generateStartIndices.d.ts +1 -2
- package/build/generateStartIndices.js +2 -1
- package/build/generateVectors.d.ts +2 -2
- package/build/generateVectors.js +2 -1
- package/build/generateVerticalPatterns.d.ts +1 -2
- package/build/generateVerticalPatterns.js +7 -8
- package/build/getCellsScore.d.ts +1 -2
- package/build/getCellsScore.js +2 -1
- package/build/getPatternHash.d.ts +1 -2
- package/build/getPatternHash.js +2 -1
- package/build/getPatternScore.d.ts +1 -2
- package/build/getPatternScore.js +4 -6
- package/build/getUniquePatterns.d.ts +1 -2
- package/build/getUniquePatterns.js +4 -6
- package/build/index.d.ts +14 -14
- package/build/index.js +14 -17
- package/build/solve.d.ts +1 -2
- package/build/solve.js +12 -14
- package/package.json +6 -6
- package/src/areDigraphsValid.ts +1 -3
- package/src/fillPattern.test.ts +1 -1
- package/src/fillPattern.ts +1 -3
- package/src/generateEndIndices.test.ts +1 -1
- package/src/generateEndIndices.ts +1 -3
- package/src/generateHorizontalPatterns.test.ts +3 -2
- package/src/generateHorizontalPatterns.ts +5 -6
- package/src/generatePattern.ts +3 -5
- package/src/generatePatterns.test.ts +2 -2
- package/src/generatePatterns.ts +3 -5
- package/src/generateStartIndices.test.ts +1 -1
- package/src/generateStartIndices.ts +1 -3
- package/src/generateVectors.test.ts +1 -1
- package/src/generateVectors.ts +1 -3
- package/src/generateVerticalPatterns.test.ts +3 -2
- package/src/generateVerticalPatterns.ts +5 -6
- package/src/getCellsScore.ts +1 -3
- package/src/getPatternHash.test.ts +1 -1
- package/src/getPatternHash.ts +1 -3
- package/src/getPatternScore.test.ts +1 -1
- package/src/getPatternScore.ts +2 -4
- package/src/getUniquePatterns.ts +2 -4
- package/src/index.ts +14 -14
- package/src/solve.test.ts +1 -1
- package/src/solve.ts +6 -8
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.areDigraphsValid = void 0;
|
|
3
4
|
const areDigraphsValid = (config, pattern) => {
|
|
4
5
|
const { twoCharacterTiles } = config;
|
|
5
6
|
const { cells } = pattern;
|
|
@@ -13,4 +14,4 @@ const areDigraphsValid = (config, pattern) => {
|
|
|
13
14
|
}
|
|
14
15
|
return true;
|
|
15
16
|
};
|
|
16
|
-
exports.
|
|
17
|
+
exports.areDigraphsValid = areDigraphsValid;
|
package/build/fillPattern.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Trie } from '@kamilmielnik/trie';
|
|
2
2
|
import { Config, Pattern, Tile } from '@scrabble-solver/types';
|
|
3
|
-
declare const fillPattern: (trie: Trie, config: Config, pattern: Pattern, tiles: Tile[]) => Pattern[];
|
|
3
|
+
export declare const fillPattern: (trie: Trie, config: Config, pattern: Pattern, tiles: Tile[]) => Pattern[];
|
|
4
4
|
export declare const fillPatternRecursive: (
|
|
5
5
|
/** gets mutated when this function is called */
|
|
6
6
|
results: Pattern[], trie: Trie, config: Config, pattern: Pattern, word: string, tiles: Tile[]) => void;
|
|
7
|
-
export default fillPattern;
|
package/build/fillPattern.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fillPatternRecursive = void 0;
|
|
3
|
+
exports.fillPatternRecursive = exports.fillPattern = void 0;
|
|
4
4
|
const constants_1 = require("@scrabble-solver/constants");
|
|
5
5
|
const types_1 = require("@scrabble-solver/types");
|
|
6
6
|
const fillPattern = (trie, config, pattern, tiles) => {
|
|
@@ -11,6 +11,7 @@ const fillPattern = (trie, config, pattern, tiles) => {
|
|
|
11
11
|
(0, exports.fillPatternRecursive)(results, trie, config, pattern, pattern.toString(), tiles);
|
|
12
12
|
return results;
|
|
13
13
|
};
|
|
14
|
+
exports.fillPattern = fillPattern;
|
|
14
15
|
const fillPatternRecursive = (
|
|
15
16
|
/** gets mutated when this function is called */
|
|
16
17
|
results, trie, config, pattern, word, tiles) => {
|
|
@@ -49,4 +50,3 @@ results, trie, config, pattern, word, tiles) => {
|
|
|
49
50
|
}
|
|
50
51
|
};
|
|
51
52
|
exports.fillPatternRecursive = fillPatternRecursive;
|
|
52
|
-
exports.default = fillPattern;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateEndIndices = void 0;
|
|
3
4
|
const generateEndIndices = (cells, startIndex) => {
|
|
4
5
|
if (cells.length === 0) {
|
|
5
6
|
return [];
|
|
@@ -13,4 +14,4 @@ const generateEndIndices = (cells, startIndex) => {
|
|
|
13
14
|
endIndices.push(cells.length - 1);
|
|
14
15
|
return endIndices;
|
|
15
16
|
};
|
|
16
|
-
exports.
|
|
17
|
+
exports.generateEndIndices = generateEndIndices;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import { Board, Config, Pattern } from '@scrabble-solver/types';
|
|
2
|
-
declare const generateHorizontalPatterns: (config: Config, board: Board) => Pattern[];
|
|
3
|
-
export default generateHorizontalPatterns;
|
|
2
|
+
export declare const generateHorizontalPatterns: (config: Config, board: Board) => Pattern[];
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateHorizontalPatterns = void 0;
|
|
6
4
|
const types_1 = require("@scrabble-solver/types");
|
|
7
|
-
const generatePattern_1 =
|
|
8
|
-
const generateVectors_1 =
|
|
5
|
+
const generatePattern_1 = require("./generatePattern");
|
|
6
|
+
const generateVectors_1 = require("./generateVectors");
|
|
9
7
|
const generateHorizontalPatterns = (config, board) => {
|
|
10
8
|
const getNthVector = (index) => board.getRow(index);
|
|
11
|
-
const
|
|
9
|
+
const vectorsCount = config.boardHeight;
|
|
10
|
+
const horizontalVectors = (0, generateVectors_1.generateVectors)({ getNthVector, vectorsCount });
|
|
12
11
|
const horizontalPatterns = horizontalVectors.flatMap((cells) => {
|
|
13
|
-
return (0, generatePattern_1.
|
|
12
|
+
return (0, generatePattern_1.generatePattern)({ board, config, PatternModel: types_1.HorizontalPattern, cells });
|
|
14
13
|
});
|
|
15
14
|
return horizontalPatterns;
|
|
16
15
|
};
|
|
17
|
-
exports.
|
|
16
|
+
exports.generateHorizontalPatterns = generateHorizontalPatterns;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Board, Cell, Config, Pattern } from '@scrabble-solver/types';
|
|
2
|
-
declare const generatePattern: <P extends Pattern>({ board, cells, config, PatternModel, }: {
|
|
2
|
+
export declare const generatePattern: <P extends Pattern>({ board, cells, config, PatternModel, }: {
|
|
3
3
|
board: Board;
|
|
4
4
|
cells: Cell[];
|
|
5
5
|
config: Config;
|
|
6
6
|
PatternModel: new (board: Board, cells: Cell[]) => P;
|
|
7
7
|
}) => P[];
|
|
8
|
-
export default generatePattern;
|
package/build/generatePattern.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
7
|
-
const
|
|
3
|
+
exports.generatePattern = void 0;
|
|
4
|
+
const generateEndIndices_1 = require("./generateEndIndices");
|
|
5
|
+
const generateStartIndices_1 = require("./generateStartIndices");
|
|
8
6
|
const generatePattern = ({ board, cells, config, PatternModel, }) => {
|
|
9
|
-
const startIndices = (0, generateStartIndices_1.
|
|
7
|
+
const startIndices = (0, generateStartIndices_1.generateStartIndices)(cells);
|
|
10
8
|
return startIndices.flatMap((startIndex) => {
|
|
11
|
-
const endIndices = (0, generateEndIndices_1.
|
|
9
|
+
const endIndices = (0, generateEndIndices_1.generateEndIndices)(cells, startIndex);
|
|
12
10
|
const patterns = [];
|
|
13
11
|
for (const endIndex of endIndices) {
|
|
14
12
|
const pattern = new PatternModel(board, cells.slice(startIndex, endIndex + 1));
|
|
@@ -19,4 +17,4 @@ const generatePattern = ({ board, cells, config, PatternModel, }) => {
|
|
|
19
17
|
return patterns;
|
|
20
18
|
});
|
|
21
19
|
};
|
|
22
|
-
exports.
|
|
20
|
+
exports.generatePattern = generatePattern;
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
7
|
-
const
|
|
3
|
+
exports.generatePatterns = void 0;
|
|
4
|
+
const generateHorizontalPatterns_1 = require("./generateHorizontalPatterns");
|
|
5
|
+
const generateVerticalPatterns_1 = require("./generateVerticalPatterns");
|
|
8
6
|
const generatePatterns = (config, board) => {
|
|
9
|
-
const horizontalPatterns = (0, generateHorizontalPatterns_1.
|
|
10
|
-
const verticalPatterns = (0, generateVerticalPatterns_1.
|
|
7
|
+
const horizontalPatterns = (0, generateHorizontalPatterns_1.generateHorizontalPatterns)(config, board);
|
|
8
|
+
const verticalPatterns = (0, generateVerticalPatterns_1.generateVerticalPatterns)(config, board);
|
|
11
9
|
return horizontalPatterns.concat(verticalPatterns);
|
|
12
10
|
};
|
|
13
|
-
exports.
|
|
11
|
+
exports.generatePatterns = generatePatterns;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateStartIndices = void 0;
|
|
3
4
|
const generateStartIndices = (cells) => {
|
|
4
5
|
if (cells.length === 0) {
|
|
5
6
|
return [];
|
|
@@ -12,4 +13,4 @@ const generateStartIndices = (cells) => {
|
|
|
12
13
|
}
|
|
13
14
|
return startIndices;
|
|
14
15
|
};
|
|
15
|
-
exports.
|
|
16
|
+
exports.generateStartIndices = generateStartIndices;
|
|
@@ -3,5 +3,5 @@ interface Parameters {
|
|
|
3
3
|
getNthVector: (index: number) => Cell[];
|
|
4
4
|
vectorsCount: number;
|
|
5
5
|
}
|
|
6
|
-
declare const generateVectors: ({ getNthVector, vectorsCount }: Parameters) => Cell[][];
|
|
7
|
-
export
|
|
6
|
+
export declare const generateVectors: ({ getNthVector, vectorsCount }: Parameters) => Cell[][];
|
|
7
|
+
export {};
|
package/build/generateVectors.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateVectors = void 0;
|
|
3
4
|
const generateVectors = ({ getNthVector, vectorsCount }) => {
|
|
4
5
|
return Array.from({ length: vectorsCount }, (_, index) => getNthVector(index));
|
|
5
6
|
};
|
|
6
|
-
exports.
|
|
7
|
+
exports.generateVectors = generateVectors;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import { Board, Config, Pattern } from '@scrabble-solver/types';
|
|
2
|
-
declare const generateVerticalPatterns: (config: Config, board: Board) => Pattern[];
|
|
3
|
-
export default generateVerticalPatterns;
|
|
2
|
+
export declare const generateVerticalPatterns: (config: Config, board: Board) => Pattern[];
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateVerticalPatterns = void 0;
|
|
6
4
|
const types_1 = require("@scrabble-solver/types");
|
|
7
|
-
const generatePattern_1 =
|
|
8
|
-
const generateVectors_1 =
|
|
5
|
+
const generatePattern_1 = require("./generatePattern");
|
|
6
|
+
const generateVectors_1 = require("./generateVectors");
|
|
9
7
|
const generateVerticalPatterns = (config, board) => {
|
|
10
8
|
const getNthVector = (index) => board.getColumn(index);
|
|
11
|
-
const
|
|
9
|
+
const vectorsCount = config.boardWidth;
|
|
10
|
+
const verticalVectors = (0, generateVectors_1.generateVectors)({ getNthVector, vectorsCount });
|
|
12
11
|
const verticalPatterns = verticalVectors.flatMap((cells) => {
|
|
13
|
-
return (0, generatePattern_1.
|
|
12
|
+
return (0, generatePattern_1.generatePattern)({ board, config, PatternModel: types_1.VerticalPattern, cells });
|
|
14
13
|
});
|
|
15
14
|
return verticalPatterns;
|
|
16
15
|
};
|
|
17
|
-
exports.
|
|
16
|
+
exports.generateVerticalPatterns = generateVerticalPatterns;
|
package/build/getCellsScore.d.ts
CHANGED
package/build/getCellsScore.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCellsScore = void 0;
|
|
3
4
|
const constants_1 = require("@scrabble-solver/constants");
|
|
4
5
|
const getCellsScore = (config, cells) => {
|
|
5
6
|
const total = cells.reduce(({ multiplier, score }, cell) => {
|
|
@@ -14,4 +15,4 @@ const getCellsScore = (config, cells) => {
|
|
|
14
15
|
}, { multiplier: 1, score: 0 });
|
|
15
16
|
return total.score * total.multiplier;
|
|
16
17
|
};
|
|
17
|
-
exports.
|
|
18
|
+
exports.getCellsScore = getCellsScore;
|
package/build/getPatternHash.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPatternHash = void 0;
|
|
3
4
|
const getPatternHash = (pattern) => {
|
|
4
5
|
return pattern.cells
|
|
5
6
|
.filter((cell) => cell.isEmpty)
|
|
@@ -10,4 +11,4 @@ const getPatternHash = (pattern) => {
|
|
|
10
11
|
})
|
|
11
12
|
.join('-');
|
|
12
13
|
};
|
|
13
|
-
exports.
|
|
14
|
+
exports.getPatternHash = getPatternHash;
|
package/build/getPatternScore.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
3
|
+
exports.getPatternScore = void 0;
|
|
4
|
+
const getCellsScore_1 = require("./getCellsScore");
|
|
7
5
|
const getPatternScore = (config, pattern) => {
|
|
8
6
|
const areAllTilesUsed = pattern.getEmptyCellsCount() === config.rackSize;
|
|
9
7
|
const bonusScore = areAllTilesUsed ? config.bingoScore : 0;
|
|
10
8
|
const score = pattern
|
|
11
9
|
.getCollisions()
|
|
12
|
-
.reduce((sum, collision) => sum + (0, getCellsScore_1.
|
|
10
|
+
.reduce((sum, collision) => sum + (0, getCellsScore_1.getCellsScore)(config, collision.cells), (0, getCellsScore_1.getCellsScore)(config, pattern.cells));
|
|
13
11
|
return score + bonusScore;
|
|
14
12
|
};
|
|
15
|
-
exports.
|
|
13
|
+
exports.getPatternScore = getPatternScore;
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
3
|
+
exports.getUniquePatterns = void 0;
|
|
4
|
+
const getPatternHash_1 = require("./getPatternHash");
|
|
7
5
|
const getUniquePatterns = (patterns) => {
|
|
8
6
|
const hashes = new Set();
|
|
9
7
|
const uniquePatterns = [];
|
|
10
8
|
for (const pattern of patterns) {
|
|
11
|
-
const hash = (0, getPatternHash_1.
|
|
9
|
+
const hash = (0, getPatternHash_1.getPatternHash)(pattern);
|
|
12
10
|
if (!hashes.has(hash)) {
|
|
13
11
|
hashes.add(hash);
|
|
14
12
|
uniquePatterns.push(pattern);
|
|
@@ -16,4 +14,4 @@ const getUniquePatterns = (patterns) => {
|
|
|
16
14
|
}
|
|
17
15
|
return uniquePatterns;
|
|
18
16
|
};
|
|
19
|
-
exports.
|
|
17
|
+
exports.getUniquePatterns = getUniquePatterns;
|
package/build/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
1
|
+
export { areDigraphsValid } from './areDigraphsValid';
|
|
2
|
+
export { fillPattern } from './fillPattern';
|
|
3
|
+
export { generateEndIndices } from './generateEndIndices';
|
|
4
|
+
export { generateHorizontalPatterns } from './generateHorizontalPatterns';
|
|
5
|
+
export { generatePattern } from './generatePattern';
|
|
6
|
+
export { generatePatterns } from './generatePatterns';
|
|
7
|
+
export { generateStartIndices } from './generateStartIndices';
|
|
8
|
+
export { generateVectors } from './generateVectors';
|
|
9
|
+
export { generateVerticalPatterns } from './generateVerticalPatterns';
|
|
10
|
+
export { getCellsScore } from './getCellsScore';
|
|
11
|
+
export { getPatternHash } from './getPatternHash';
|
|
12
|
+
export { getPatternScore } from './getPatternScore';
|
|
13
|
+
export { getUniquePatterns } from './getUniquePatterns';
|
|
14
|
+
export { solve } from './solve';
|
package/build/index.js
CHANGED
|
@@ -1,34 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.solve = exports.getUniquePatterns = exports.getPatternScore = exports.getPatternHash = exports.getCellsScore = exports.generateVerticalPatterns = exports.generateVectors = exports.generateStartIndices = exports.generatePatterns = exports.generatePattern = exports.generateHorizontalPatterns = exports.generateEndIndices = exports.fillPattern = exports.areDigraphsValid = void 0;
|
|
7
4
|
var areDigraphsValid_1 = require("./areDigraphsValid");
|
|
8
|
-
Object.defineProperty(exports, "areDigraphsValid", { enumerable: true, get: function () { return
|
|
5
|
+
Object.defineProperty(exports, "areDigraphsValid", { enumerable: true, get: function () { return areDigraphsValid_1.areDigraphsValid; } });
|
|
9
6
|
var fillPattern_1 = require("./fillPattern");
|
|
10
|
-
Object.defineProperty(exports, "fillPattern", { enumerable: true, get: function () { return
|
|
7
|
+
Object.defineProperty(exports, "fillPattern", { enumerable: true, get: function () { return fillPattern_1.fillPattern; } });
|
|
11
8
|
var generateEndIndices_1 = require("./generateEndIndices");
|
|
12
|
-
Object.defineProperty(exports, "generateEndIndices", { enumerable: true, get: function () { return
|
|
9
|
+
Object.defineProperty(exports, "generateEndIndices", { enumerable: true, get: function () { return generateEndIndices_1.generateEndIndices; } });
|
|
13
10
|
var generateHorizontalPatterns_1 = require("./generateHorizontalPatterns");
|
|
14
|
-
Object.defineProperty(exports, "generateHorizontalPatterns", { enumerable: true, get: function () { return
|
|
11
|
+
Object.defineProperty(exports, "generateHorizontalPatterns", { enumerable: true, get: function () { return generateHorizontalPatterns_1.generateHorizontalPatterns; } });
|
|
15
12
|
var generatePattern_1 = require("./generatePattern");
|
|
16
|
-
Object.defineProperty(exports, "generatePattern", { enumerable: true, get: function () { return
|
|
13
|
+
Object.defineProperty(exports, "generatePattern", { enumerable: true, get: function () { return generatePattern_1.generatePattern; } });
|
|
17
14
|
var generatePatterns_1 = require("./generatePatterns");
|
|
18
|
-
Object.defineProperty(exports, "generatePatterns", { enumerable: true, get: function () { return
|
|
15
|
+
Object.defineProperty(exports, "generatePatterns", { enumerable: true, get: function () { return generatePatterns_1.generatePatterns; } });
|
|
19
16
|
var generateStartIndices_1 = require("./generateStartIndices");
|
|
20
|
-
Object.defineProperty(exports, "generateStartIndices", { enumerable: true, get: function () { return
|
|
17
|
+
Object.defineProperty(exports, "generateStartIndices", { enumerable: true, get: function () { return generateStartIndices_1.generateStartIndices; } });
|
|
21
18
|
var generateVectors_1 = require("./generateVectors");
|
|
22
|
-
Object.defineProperty(exports, "generateVectors", { enumerable: true, get: function () { return
|
|
19
|
+
Object.defineProperty(exports, "generateVectors", { enumerable: true, get: function () { return generateVectors_1.generateVectors; } });
|
|
23
20
|
var generateVerticalPatterns_1 = require("./generateVerticalPatterns");
|
|
24
|
-
Object.defineProperty(exports, "generateVerticalPatterns", { enumerable: true, get: function () { return
|
|
21
|
+
Object.defineProperty(exports, "generateVerticalPatterns", { enumerable: true, get: function () { return generateVerticalPatterns_1.generateVerticalPatterns; } });
|
|
25
22
|
var getCellsScore_1 = require("./getCellsScore");
|
|
26
|
-
Object.defineProperty(exports, "getCellsScore", { enumerable: true, get: function () { return
|
|
23
|
+
Object.defineProperty(exports, "getCellsScore", { enumerable: true, get: function () { return getCellsScore_1.getCellsScore; } });
|
|
27
24
|
var getPatternHash_1 = require("./getPatternHash");
|
|
28
|
-
Object.defineProperty(exports, "getPatternHash", { enumerable: true, get: function () { return
|
|
25
|
+
Object.defineProperty(exports, "getPatternHash", { enumerable: true, get: function () { return getPatternHash_1.getPatternHash; } });
|
|
29
26
|
var getPatternScore_1 = require("./getPatternScore");
|
|
30
|
-
Object.defineProperty(exports, "getPatternScore", { enumerable: true, get: function () { return
|
|
27
|
+
Object.defineProperty(exports, "getPatternScore", { enumerable: true, get: function () { return getPatternScore_1.getPatternScore; } });
|
|
31
28
|
var getUniquePatterns_1 = require("./getUniquePatterns");
|
|
32
|
-
Object.defineProperty(exports, "getUniquePatterns", { enumerable: true, get: function () { return
|
|
29
|
+
Object.defineProperty(exports, "getUniquePatterns", { enumerable: true, get: function () { return getUniquePatterns_1.getUniquePatterns; } });
|
|
33
30
|
var solve_1 = require("./solve");
|
|
34
|
-
Object.defineProperty(exports, "solve", { enumerable: true, get: function () { return
|
|
31
|
+
Object.defineProperty(exports, "solve", { enumerable: true, get: function () { return solve_1.solve; } });
|
package/build/solve.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { Trie } from '@kamilmielnik/trie';
|
|
2
2
|
import { Board, Config, ResultJson, Tile } from '@scrabble-solver/types';
|
|
3
|
-
declare const solve: (trie: Trie, config: Config, board: Board, tiles: Tile[]) => ResultJson[];
|
|
4
|
-
export default solve;
|
|
3
|
+
export declare const solve: (trie: Trie, config: Config, board: Board, tiles: Tile[]) => ResultJson[];
|
package/build/solve.js
CHANGED
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
3
|
+
exports.solve = void 0;
|
|
4
|
+
const areDigraphsValid_1 = require("./areDigraphsValid");
|
|
5
|
+
const fillPattern_1 = require("./fillPattern");
|
|
6
|
+
const generatePatterns_1 = require("./generatePatterns");
|
|
7
|
+
const getPatternScore_1 = require("./getPatternScore");
|
|
8
|
+
const getUniquePatterns_1 = require("./getUniquePatterns");
|
|
11
9
|
const solve = (trie, config, board, tiles) => {
|
|
12
|
-
const patterns = (0, generatePatterns_1.
|
|
13
|
-
const filledPatterns = patterns.flatMap((pattern) => (0, fillPattern_1.
|
|
10
|
+
const patterns = (0, generatePatterns_1.generatePatterns)(config, board);
|
|
11
|
+
const filledPatterns = patterns.flatMap((pattern) => (0, fillPattern_1.fillPattern)(trie, config, pattern, tiles));
|
|
14
12
|
const validPatterns = config.twoCharacterTiles.length > 0
|
|
15
|
-
? filledPatterns.filter((pattern) => (0, areDigraphsValid_1.
|
|
13
|
+
? filledPatterns.filter((pattern) => (0, areDigraphsValid_1.areDigraphsValid)(config, pattern))
|
|
16
14
|
: filledPatterns;
|
|
17
|
-
const uniquePatterns = (0, getUniquePatterns_1.
|
|
15
|
+
const uniquePatterns = (0, getUniquePatterns_1.getUniquePatterns)(validPatterns);
|
|
18
16
|
const results = uniquePatterns.map((pattern, index) => ({
|
|
19
17
|
cells: pattern.cells.map((cell) => cell.toJson()),
|
|
20
18
|
collisions: pattern.getCollisions().map((collision) => collision.cells.map((cell) => cell.toJson())),
|
|
21
19
|
id: index,
|
|
22
|
-
points: (0, getPatternScore_1.
|
|
20
|
+
points: (0, getPatternScore_1.getPatternScore)(config, pattern),
|
|
23
21
|
}));
|
|
24
22
|
return results;
|
|
25
23
|
};
|
|
26
|
-
exports.
|
|
24
|
+
exports.solve = solve;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scrabble-solver/solver",
|
|
3
|
-
"version": "2.15.
|
|
3
|
+
"version": "2.15.10",
|
|
4
4
|
"description": "Scrabble Solver 2 - Solver",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@kamilmielnik/trie": "^4.0.0",
|
|
27
|
-
"@scrabble-solver/types": "^2.15.
|
|
27
|
+
"@scrabble-solver/types": "^2.15.10"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@scrabble-solver/configs": "^2.15.
|
|
31
|
-
"@scrabble-solver/constants": "^2.15.
|
|
32
|
-
"@scrabble-solver/dictionaries": "^2.15.
|
|
30
|
+
"@scrabble-solver/configs": "^2.15.10",
|
|
31
|
+
"@scrabble-solver/constants": "^2.15.10",
|
|
32
|
+
"@scrabble-solver/dictionaries": "^2.15.10"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "dab5a817c1bde1a3ebf8e8907215adf12af5cb27"
|
|
35
35
|
}
|
package/src/areDigraphsValid.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Config, Pattern } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
const areDigraphsValid = (config: Config, pattern: Pattern): boolean => {
|
|
3
|
+
export const areDigraphsValid = (config: Config, pattern: Pattern): boolean => {
|
|
4
4
|
const { twoCharacterTiles } = config;
|
|
5
5
|
const { cells } = pattern;
|
|
6
6
|
|
|
@@ -16,5 +16,3 @@ const areDigraphsValid = (config: Config, pattern: Pattern): boolean => {
|
|
|
16
16
|
|
|
17
17
|
return true;
|
|
18
18
|
};
|
|
19
|
-
|
|
20
|
-
export default areDigraphsValid;
|
package/src/fillPattern.test.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { getConfig } from '@scrabble-solver/configs';
|
|
|
3
3
|
import { dictionaries } from '@scrabble-solver/dictionaries';
|
|
4
4
|
import { Board, Cell, FinalPattern, Game, Locale, Pattern, Tile, VerticalPattern } from '@scrabble-solver/types';
|
|
5
5
|
|
|
6
|
-
import fillPattern,
|
|
6
|
+
import { fillPattern, fillPatternRecursive } from './fillPattern';
|
|
7
7
|
|
|
8
8
|
const board = Board.fromStringArray([' t ', 'do ', ' ']);
|
|
9
9
|
const locale = Locale.PL_PL;
|
package/src/fillPattern.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Trie } from '@kamilmielnik/trie';
|
|
|
3
3
|
import { EMPTY_CELL } from '@scrabble-solver/constants';
|
|
4
4
|
import { Config, FinalPattern, Pattern, Tile } from '@scrabble-solver/types';
|
|
5
5
|
|
|
6
|
-
const fillPattern = (trie: Trie, config: Config, pattern: Pattern, tiles: Tile[]): Pattern[] => {
|
|
6
|
+
export const fillPattern = (trie: Trie, config: Config, pattern: Pattern, tiles: Tile[]): Pattern[] => {
|
|
7
7
|
if (pattern.getEmptyCellsCount() > tiles.length) {
|
|
8
8
|
return [];
|
|
9
9
|
}
|
|
@@ -66,5 +66,3 @@ export const fillPatternRecursive = (
|
|
|
66
66
|
pattern.cells[indexOfFirstCellWithoutTile].tile = previousTile;
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
|
-
|
|
70
|
-
export default fillPattern;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Cell } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import generateEndIndices from './generateEndIndices';
|
|
3
|
+
import { generateEndIndices } from './generateEndIndices';
|
|
4
4
|
|
|
5
5
|
describe('generateEndIndices', () => {
|
|
6
6
|
const emptyCell: Cell = { hasTile: () => false } as Cell;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Cell } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
const generateEndIndices = (cells: Cell[], startIndex: number): number[] => {
|
|
3
|
+
export const generateEndIndices = (cells: Cell[], startIndex: number): number[] => {
|
|
4
4
|
if (cells.length === 0) {
|
|
5
5
|
return [];
|
|
6
6
|
}
|
|
@@ -17,5 +17,3 @@ const generateEndIndices = (cells: Cell[], startIndex: number): number[] => {
|
|
|
17
17
|
|
|
18
18
|
return endIndices;
|
|
19
19
|
};
|
|
20
|
-
|
|
21
|
-
export default generateEndIndices;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { EMPTY_CELL } from '@scrabble-solver/constants';
|
|
2
2
|
import { Board, Config } from '@scrabble-solver/types';
|
|
3
3
|
|
|
4
|
-
import generateHorizontalPatterns from './generateHorizontalPatterns';
|
|
4
|
+
import { generateHorizontalPatterns } from './generateHorizontalPatterns';
|
|
5
5
|
|
|
6
6
|
const board = Board.fromStringArray([' t ', 'do ', ' ']);
|
|
7
7
|
|
|
8
8
|
const config = {
|
|
9
|
-
|
|
9
|
+
boardHeight: 3,
|
|
10
|
+
boardWidth: 3,
|
|
10
11
|
rackSize: 7,
|
|
11
12
|
} as Config;
|
|
12
13
|
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { Board, Config, HorizontalPattern, Pattern } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import generatePattern from './generatePattern';
|
|
4
|
-
import generateVectors from './generateVectors';
|
|
3
|
+
import { generatePattern } from './generatePattern';
|
|
4
|
+
import { generateVectors } from './generateVectors';
|
|
5
5
|
|
|
6
|
-
const generateHorizontalPatterns = (config: Config, board: Board): Pattern[] => {
|
|
6
|
+
export const generateHorizontalPatterns = (config: Config, board: Board): Pattern[] => {
|
|
7
7
|
const getNthVector = (index: number) => board.getRow(index);
|
|
8
|
-
const
|
|
8
|
+
const vectorsCount = config.boardHeight;
|
|
9
|
+
const horizontalVectors = generateVectors({ getNthVector, vectorsCount });
|
|
9
10
|
const horizontalPatterns = horizontalVectors.flatMap((cells) => {
|
|
10
11
|
return generatePattern({ board, config, PatternModel: HorizontalPattern, cells });
|
|
11
12
|
});
|
|
12
13
|
|
|
13
14
|
return horizontalPatterns;
|
|
14
15
|
};
|
|
15
|
-
|
|
16
|
-
export default generateHorizontalPatterns;
|
package/src/generatePattern.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Board, Cell, Config, Pattern } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import generateEndIndices from './generateEndIndices';
|
|
4
|
-
import generateStartIndices from './generateStartIndices';
|
|
3
|
+
import { generateEndIndices } from './generateEndIndices';
|
|
4
|
+
import { generateStartIndices } from './generateStartIndices';
|
|
5
5
|
|
|
6
|
-
const generatePattern = <P extends Pattern>({
|
|
6
|
+
export const generatePattern = <P extends Pattern>({
|
|
7
7
|
board,
|
|
8
8
|
cells,
|
|
9
9
|
config,
|
|
@@ -31,5 +31,3 @@ const generatePattern = <P extends Pattern>({
|
|
|
31
31
|
return patterns;
|
|
32
32
|
});
|
|
33
33
|
};
|
|
34
|
-
|
|
35
|
-
export default generatePattern;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { getConfig } from '@scrabble-solver/configs';
|
|
2
2
|
import { Board, Game, Locale } from '@scrabble-solver/types';
|
|
3
3
|
|
|
4
|
-
import generatePatterns from './generatePatterns';
|
|
4
|
+
import { generatePatterns } from './generatePatterns';
|
|
5
5
|
|
|
6
6
|
describe('generatePatterns', () => {
|
|
7
7
|
it('Generates all patterns for an empty board', () => {
|
|
8
8
|
const config = getConfig(Game.Scrabble, Locale.EN_US);
|
|
9
|
-
const board = Board.create(config.
|
|
9
|
+
const board = Board.create(config.boardWidth, config.boardHeight);
|
|
10
10
|
|
|
11
11
|
expect(generatePatterns(config, board).length).toEqual(54);
|
|
12
12
|
});
|
package/src/generatePatterns.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Board, Config, Pattern } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import generateHorizontalPatterns from './generateHorizontalPatterns';
|
|
4
|
-
import generateVerticalPatterns from './generateVerticalPatterns';
|
|
3
|
+
import { generateHorizontalPatterns } from './generateHorizontalPatterns';
|
|
4
|
+
import { generateVerticalPatterns } from './generateVerticalPatterns';
|
|
5
5
|
|
|
6
|
-
const generatePatterns = (config: Config, board: Board): Pattern[] => {
|
|
6
|
+
export const generatePatterns = (config: Config, board: Board): Pattern[] => {
|
|
7
7
|
const horizontalPatterns = generateHorizontalPatterns(config, board);
|
|
8
8
|
const verticalPatterns = generateVerticalPatterns(config, board);
|
|
9
9
|
|
|
10
10
|
return horizontalPatterns.concat(verticalPatterns);
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
export default generatePatterns;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Cell } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import generateStartIndices from './generateStartIndices';
|
|
3
|
+
import { generateStartIndices } from './generateStartIndices';
|
|
4
4
|
|
|
5
5
|
describe('generateStartIndices', () => {
|
|
6
6
|
const emptyCell: Cell = { hasTile: () => false } as Cell;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Cell } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
const generateStartIndices = (cells: Cell[]): number[] => {
|
|
3
|
+
export const generateStartIndices = (cells: Cell[]): number[] => {
|
|
4
4
|
if (cells.length === 0) {
|
|
5
5
|
return [];
|
|
6
6
|
}
|
|
@@ -15,5 +15,3 @@ const generateStartIndices = (cells: Cell[]): number[] => {
|
|
|
15
15
|
|
|
16
16
|
return startIndices;
|
|
17
17
|
};
|
|
18
|
-
|
|
19
|
-
export default generateStartIndices;
|
package/src/generateVectors.ts
CHANGED
|
@@ -5,8 +5,6 @@ interface Parameters {
|
|
|
5
5
|
vectorsCount: number;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
const generateVectors = ({ getNthVector, vectorsCount }: Parameters): Cell[][] => {
|
|
8
|
+
export const generateVectors = ({ getNthVector, vectorsCount }: Parameters): Cell[][] => {
|
|
9
9
|
return Array.from({ length: vectorsCount }, (_, index) => getNthVector(index));
|
|
10
10
|
};
|
|
11
|
-
|
|
12
|
-
export default generateVectors;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { EMPTY_CELL } from '@scrabble-solver/constants';
|
|
2
2
|
import { Board, Config } from '@scrabble-solver/types';
|
|
3
3
|
|
|
4
|
-
import generateVerticalPatterns from './generateVerticalPatterns';
|
|
4
|
+
import { generateVerticalPatterns } from './generateVerticalPatterns';
|
|
5
5
|
|
|
6
6
|
const board = Board.fromStringArray([' t ', 'do ', ' ']);
|
|
7
7
|
|
|
8
8
|
const config = {
|
|
9
|
-
|
|
9
|
+
boardHeight: 3,
|
|
10
|
+
boardWidth: 3,
|
|
10
11
|
rackSize: 7,
|
|
11
12
|
} as Config;
|
|
12
13
|
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { Board, Config, Pattern, VerticalPattern } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import generatePattern from './generatePattern';
|
|
4
|
-
import generateVectors from './generateVectors';
|
|
3
|
+
import { generatePattern } from './generatePattern';
|
|
4
|
+
import { generateVectors } from './generateVectors';
|
|
5
5
|
|
|
6
|
-
const generateVerticalPatterns = (config: Config, board: Board): Pattern[] => {
|
|
6
|
+
export const generateVerticalPatterns = (config: Config, board: Board): Pattern[] => {
|
|
7
7
|
const getNthVector = (index: number) => board.getColumn(index);
|
|
8
|
-
const
|
|
8
|
+
const vectorsCount = config.boardWidth;
|
|
9
|
+
const verticalVectors = generateVectors({ getNthVector, vectorsCount });
|
|
9
10
|
const verticalPatterns = verticalVectors.flatMap((cells) => {
|
|
10
11
|
return generatePattern({ board, config, PatternModel: VerticalPattern, cells });
|
|
11
12
|
});
|
|
12
13
|
|
|
13
14
|
return verticalPatterns;
|
|
14
15
|
};
|
|
15
|
-
|
|
16
|
-
export default generateVerticalPatterns;
|
package/src/getCellsScore.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NO_BONUS } from '@scrabble-solver/constants';
|
|
2
2
|
import { Cell, Config } from '@scrabble-solver/types';
|
|
3
3
|
|
|
4
|
-
const getCellsScore = (config: Config, cells: Cell[]): number => {
|
|
4
|
+
export const getCellsScore = (config: Config, cells: Cell[]): number => {
|
|
5
5
|
const total = cells.reduce(
|
|
6
6
|
({ multiplier, score }, cell: Cell): { multiplier: number; score: number } => {
|
|
7
7
|
const bonus = config.getCellBonus(cell);
|
|
@@ -19,5 +19,3 @@ const getCellsScore = (config: Config, cells: Cell[]): number => {
|
|
|
19
19
|
|
|
20
20
|
return total.score * total.multiplier;
|
|
21
21
|
};
|
|
22
|
-
|
|
23
|
-
export default getCellsScore;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Board, Cell, Pattern, Tile } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import getPatternHash from './getPatternHash';
|
|
3
|
+
import { getPatternHash } from './getPatternHash';
|
|
4
4
|
|
|
5
5
|
describe('getPatternHash', () => {
|
|
6
6
|
const board = Board.fromStringArray([' t ', 'do ', ' ']);
|
package/src/getPatternHash.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Pattern } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
const getPatternHash = (pattern: Pattern): string => {
|
|
3
|
+
export const getPatternHash = (pattern: Pattern): string => {
|
|
4
4
|
return pattern.cells
|
|
5
5
|
.filter((cell) => cell.isEmpty)
|
|
6
6
|
.map((cell) => {
|
|
@@ -10,5 +10,3 @@ const getPatternHash = (pattern: Pattern): string => {
|
|
|
10
10
|
})
|
|
11
11
|
.join('-');
|
|
12
12
|
};
|
|
13
|
-
|
|
14
|
-
export default getPatternHash;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getConfig } from '@scrabble-solver/configs';
|
|
2
2
|
import { Board, Cell, Game, HorizontalPattern, Locale, Pattern, Tile, VerticalPattern } from '@scrabble-solver/types';
|
|
3
3
|
|
|
4
|
-
import getPatternScore from './getPatternScore';
|
|
4
|
+
import { getPatternScore } from './getPatternScore';
|
|
5
5
|
|
|
6
6
|
const locale = Locale.PL_PL;
|
|
7
7
|
const config = getConfig(Game.Literaki, locale);
|
package/src/getPatternScore.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Config, Pattern } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import getCellsScore from './getCellsScore';
|
|
3
|
+
import { getCellsScore } from './getCellsScore';
|
|
4
4
|
|
|
5
|
-
const getPatternScore = (config: Config, pattern: Pattern) => {
|
|
5
|
+
export const getPatternScore = (config: Config, pattern: Pattern) => {
|
|
6
6
|
const areAllTilesUsed = pattern.getEmptyCellsCount() === config.rackSize;
|
|
7
7
|
const bonusScore = areAllTilesUsed ? config.bingoScore : 0;
|
|
8
8
|
const score = pattern
|
|
@@ -11,5 +11,3 @@ const getPatternScore = (config: Config, pattern: Pattern) => {
|
|
|
11
11
|
|
|
12
12
|
return score + bonusScore;
|
|
13
13
|
};
|
|
14
|
-
|
|
15
|
-
export default getPatternScore;
|
package/src/getUniquePatterns.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Pattern } from '@scrabble-solver/types';
|
|
2
2
|
|
|
3
|
-
import getPatternHash from './getPatternHash';
|
|
3
|
+
import { getPatternHash } from './getPatternHash';
|
|
4
4
|
|
|
5
|
-
const getUniquePatterns = (patterns: Pattern[]): Pattern[] => {
|
|
5
|
+
export const getUniquePatterns = (patterns: Pattern[]): Pattern[] => {
|
|
6
6
|
const hashes = new Set<string>();
|
|
7
7
|
const uniquePatterns: Pattern[] = [];
|
|
8
8
|
|
|
@@ -17,5 +17,3 @@ const getUniquePatterns = (patterns: Pattern[]): Pattern[] => {
|
|
|
17
17
|
|
|
18
18
|
return uniquePatterns;
|
|
19
19
|
};
|
|
20
|
-
|
|
21
|
-
export default getUniquePatterns;
|
package/src/index.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
1
|
+
export { areDigraphsValid } from './areDigraphsValid';
|
|
2
|
+
export { fillPattern } from './fillPattern';
|
|
3
|
+
export { generateEndIndices } from './generateEndIndices';
|
|
4
|
+
export { generateHorizontalPatterns } from './generateHorizontalPatterns';
|
|
5
|
+
export { generatePattern } from './generatePattern';
|
|
6
|
+
export { generatePatterns } from './generatePatterns';
|
|
7
|
+
export { generateStartIndices } from './generateStartIndices';
|
|
8
|
+
export { generateVectors } from './generateVectors';
|
|
9
|
+
export { generateVerticalPatterns } from './generateVerticalPatterns';
|
|
10
|
+
export { getCellsScore } from './getCellsScore';
|
|
11
|
+
export { getPatternHash } from './getPatternHash';
|
|
12
|
+
export { getPatternScore } from './getPatternScore';
|
|
13
|
+
export { getUniquePatterns } from './getUniquePatterns';
|
|
14
|
+
export { solve } from './solve';
|
package/src/solve.test.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { getConfig } from '@scrabble-solver/configs';
|
|
|
5
5
|
import { dictionaries } from '@scrabble-solver/dictionaries';
|
|
6
6
|
import { Board, Game, Locale, Result, Tile } from '@scrabble-solver/types';
|
|
7
7
|
|
|
8
|
-
import solve from './solve';
|
|
8
|
+
import { solve } from './solve';
|
|
9
9
|
|
|
10
10
|
const generateTiles = (characters: string[]): Tile[] => {
|
|
11
11
|
return characters.map((character) => new Tile({ character, isBlank: false }));
|
package/src/solve.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Trie } from '@kamilmielnik/trie';
|
|
2
2
|
import { Board, Config, ResultJson, Tile } from '@scrabble-solver/types';
|
|
3
3
|
|
|
4
|
-
import areDigraphsValid from './areDigraphsValid';
|
|
5
|
-
import fillPattern from './fillPattern';
|
|
6
|
-
import generatePatterns from './generatePatterns';
|
|
7
|
-
import getPatternScore from './getPatternScore';
|
|
8
|
-
import getUniquePatterns from './getUniquePatterns';
|
|
4
|
+
import { areDigraphsValid } from './areDigraphsValid';
|
|
5
|
+
import { fillPattern } from './fillPattern';
|
|
6
|
+
import { generatePatterns } from './generatePatterns';
|
|
7
|
+
import { getPatternScore } from './getPatternScore';
|
|
8
|
+
import { getUniquePatterns } from './getUniquePatterns';
|
|
9
9
|
|
|
10
|
-
const solve = (trie: Trie, config: Config, board: Board, tiles: Tile[]): ResultJson[] => {
|
|
10
|
+
export const solve = (trie: Trie, config: Config, board: Board, tiles: Tile[]): ResultJson[] => {
|
|
11
11
|
const patterns = generatePatterns(config, board);
|
|
12
12
|
const filledPatterns = patterns.flatMap((pattern) => fillPattern(trie, config, pattern, tiles));
|
|
13
13
|
const validPatterns =
|
|
@@ -24,5 +24,3 @@ const solve = (trie: Trie, config: Config, board: Board, tiles: Tile[]): ResultJ
|
|
|
24
24
|
|
|
25
25
|
return results;
|
|
26
26
|
};
|
|
27
|
-
|
|
28
|
-
export default solve;
|