wordle.ts
1/**
2 * Deno version of Wordle
3 * Loosely inspired by https://gist.github.com/huytd/6a1a6a7b34a0d0abcac00b47e3d01513
4 *
5 * @example deno run --allow-read wordle.ts
6 */
7import { bgGreen, bgWhite, bgYellow, black } from "jsr:@std/fmt/colors";
8
9const maxGuess = 6;
10const words = (new TextDecoder("utf-8"))
11 .decode(await Deno.readFile("/usr/share/dict/words"))
12 .split("\n")
13 .filter((word) => word.length === 5)
14 .map((word) => word.toUpperCase());
15const answer = words[Math.floor(Math.random() * words.length)];
16let end = false;
17let guessCount = 0;
18
19while (end !== true) {
20 guessCount++;
21
22 if (guessCount > maxGuess) {
23 console.log(`You Lose! The word is ${answer}`);
24 end = true;
25 } else {
26 const promptQuestion = `Enter your guess (${guessCount} / 6):`;
27 const userAnswer = (prompt(promptQuestion) || "").toUpperCase();
28
29 if (words.find((word) => word === userAnswer) == null) {
30 console.log(`${userAnswer} is not a valid word! Guess again!`);
31 guessCount--;
32 } else {
33 if (userAnswer === answer) {
34 console.log(`You Win!`);
35 end = true;
36 }
37 let output = "";
38 answer.split("").forEach((answerLetter, index) => {
39 const userAnswerLetter = userAnswer[index];
40 if (answerLetter === userAnswerLetter) {
41 output += bgGreen(` ${userAnswerLetter} `);
42 } else if (answer.indexOf(userAnswerLetter) !== -1) {
43 output += bgYellow(` ${userAnswerLetter} `);
44 } else {
45 output += bgWhite(` ${userAnswerLetter} `);
46 }
47 });
48 console.log(black(output));
49 }
50 }
51}