CLI Wordle made with Deno
0
wordle.ts
51 lines 1.6 kB view raw
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}