|
|
@@ -8,8 +8,33 @@ export function createSolverRouter(wordBank: WordBank): Router {
|
|
|
router.post('/', (req: Request, res: Response) => {
|
|
|
const { rows } = (req.body ?? {}) as { rows?: { guess: string; result: string }[] };
|
|
|
|
|
|
- if (!Array.isArray(rows) || rows.length === 0) {
|
|
|
- res.status(400).json({ error: 'At least one complete guess row required' });
|
|
|
+ if (!Array.isArray(rows)) {
|
|
|
+ res.status(400).json({ error: 'Invalid request: rows must be an array' });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Empty board — return best starting word as a hint
|
|
|
+ if (rows.length === 0) {
|
|
|
+ const posFreq: Map<string, number>[] = Array.from({ length: 5 }, () => new Map());
|
|
|
+ for (const word of guessable) {
|
|
|
+ for (let i = 0; i < 5; i++) {
|
|
|
+ const letter = word[i];
|
|
|
+ posFreq[i].set(letter, (posFreq[i].get(letter) ?? 0) + 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let bestWord = '';
|
|
|
+ let bestScore = -1;
|
|
|
+ for (const word of guessable) {
|
|
|
+ let score = 0;
|
|
|
+ for (let i = 0; i < 5; i++) {
|
|
|
+ score += posFreq[i].get(word[i]) ?? 0;
|
|
|
+ }
|
|
|
+ if (score > bestScore) {
|
|
|
+ bestScore = score;
|
|
|
+ bestWord = word;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ res.json({ words: [], totalCount: 0, suggestedGuess: null, bestLetters: [], hint: bestWord } satisfies SolverResponse);
|
|
|
return;
|
|
|
}
|
|
|
|