scrabble-solver
Version:
Scrabble Solver 2 - Free, open-source, cross-platform, multi-language analysis tool for Scrabble, Scrabble Duel, Super Scrabble, Letter League, Crossplay, Literaki, and Kelimelik. Quickly find the top-scoring words using the given board and tiles.
27 lines (23 loc) • 1.19 kB
text/typescript
import { type Trie } from '@kamilmielnik/trie';
import { type Board, type Config, type ResultJson, type Tile } from '@scrabble-solver/types';
import { areDigraphsValid } from './areDigraphsValid';
import { fillPattern } from './fillPattern';
import { generatePatterns } from './generatePatterns';
import { getPatternScore } from './getPatternScore';
import { getUniquePatterns } from './getUniquePatterns';
export const solve = (trie: Trie, config: Config, board: Board, tiles: Tile[]): ResultJson[] => {
const patterns = generatePatterns(config, board);
const filledPatterns = patterns.flatMap((pattern) => fillPattern(trie, config, pattern, tiles));
const validPatterns =
config.twoCharacterTiles.length > 0
? filledPatterns.filter((pattern) => areDigraphsValid(config, pattern))
: filledPatterns;
const uniquePatterns = getUniquePatterns(validPatterns);
const results = uniquePatterns.map((pattern, index) => ({
cells: pattern.cells.map((cell) => cell.toJson()),
collisions: pattern.getCollisions().map((collision) => collision.cells.map((cell) => cell.toJson())),
id: index,
points: getPatternScore(config, pattern),
}));
return results;
};