| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import { readFileSync, writeFileSync } from 'fs';
- import { resolve, dirname } from 'path';
- import { fileURLToPath } from 'url';
- import type { WordBank, SolverReplay } from '@wordle/shared';
- import { solveEntropy } from './entropy.js';
- import { solveFrequency } from './frequency.js';
- import { solveVowelFirst } from './vowel-first.js';
- import { solveGreedy } from './greedy.js';
- const __dirname = dirname(fileURLToPath(import.meta.url));
- const BANK_PATH = resolve(__dirname, '../../data/word-bank.json');
- const MAX_ATTEMPTS = 6;
- console.log('Loading word bank...');
- const bank: WordBank = JSON.parse(readFileSync(BANK_PATH, 'utf-8'));
- const allWords = bank.guessable;
- console.log(`Solving ${bank.targets.length} target words with ${allWords.length} guessable words...`);
- let solved = 0;
- let failed = 0;
- const newTargets: WordBank['targets'] = [];
- for (const target of bank.targets) {
- const results = [
- { name: 'Entropy', ...solveEntropy(target.word, allWords, MAX_ATTEMPTS) },
- { name: 'Frequency', ...solveFrequency(target.word, allWords, MAX_ATTEMPTS) },
- { name: 'Vowel First', ...solveVowelFirst(target.word, allWords, MAX_ATTEMPTS) },
- { name: 'Greedy', ...solveGreedy(target.word, allWords, MAX_ATTEMPTS) },
- ];
- const passResults = results.filter((r) => r.attempts <= MAX_ATTEMPTS);
- if (passResults.length === 0) {
- console.log(` REMOVED: ${target.word} (unsolvable by any strategy)`);
- failed++;
- continue;
- }
- const avgAttempts = passResults.reduce((s, r) => s + r.attempts, 0) / passResults.length;
- const difficulty = Math.round(avgAttempts * 100) / 100;
- const replays: SolverReplay[] = results
- .filter((r) => r.attempts <= MAX_ATTEMPTS)
- .map((r) => ({ solver: r.name, steps: r.steps }));
- newTargets.push({ ...target, difficulty, replays });
- solved++;
- if (solved % 10 === 0) console.log(` ${solved}/${bank.targets.length}...`);
- }
- const newBank: WordBank = { guessable: bank.guessable, targets: newTargets };
- writeFileSync(BANK_PATH, JSON.stringify(newBank, null, 2) + '\n', 'utf-8');
- console.log(`\nDone! ${solved} solved, ${failed} removed. Replays stored.`);
|