/** * Deno version of Wordle * Loosely inspired by https://gist.github.com/huytd/6a1a6a7b34a0d0abcac00b47e3d01513 * * @example deno run --allow-read wordle.ts */ import { bgGreen, bgWhite, bgYellow, black } from "jsr:@std/fmt/colors"; const maxGuess = 6; const words = (new TextDecoder("utf-8")) .decode(await Deno.readFile("/usr/share/dict/words")) .split("\n") .filter((word) => word.length === 5) .map((word) => word.toUpperCase()); const answer = words[Math.floor(Math.random() * words.length)]; let end = false; let guessCount = 0; while (end !== true) { guessCount++; if (guessCount > maxGuess) { console.log(`You Lose! The word is ${answer}`); end = true; } else { const promptQuestion = `Enter your guess (${guessCount} / 6):`; const userAnswer = (prompt(promptQuestion) || "").toUpperCase(); if (words.find((word) => word === userAnswer) == null) { console.log(`${userAnswer} is not a valid word! Guess again!`); guessCount--; } else { if (userAnswer === answer) { console.log(`You Win!`); end = true; } let output = ""; answer.split("").forEach((answerLetter, index) => { const userAnswerLetter = userAnswer[index]; if (answerLetter === userAnswerLetter) { output += bgGreen(` ${userAnswerLetter} `); } else if (answer.indexOf(userAnswerLetter) !== -1) { output += bgYellow(` ${userAnswerLetter} `); } else { output += bgWhite(` ${userAnswerLetter} `); } }); console.log(black(output)); } } }