UNPKG

wordle-shell

Version:

A Wordle for the command line

103 lines (102 loc) 3.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CharState = void 0; var CharState; (function (CharState) { CharState[CharState["Correct"] = 0] = "Correct"; CharState[CharState["Misplaced"] = 1] = "Misplaced"; CharState[CharState["Wrong"] = 2] = "Wrong"; CharState[CharState["Unknow"] = 3] = "Unknow"; })(CharState = exports.CharState || (exports.CharState = {})); class Wordle { constructor(wordPicker) { this.ensureWordLength(wordPicker.getWord()); this.word = wordPicker.getWord(); this.words = wordPicker.getWordList(); } ensureWordLength(word) { return word.length === Wordle.words_size; } static done(states) { return states.every((state) => state === CharState.Correct); } static get_word_size() { return this.words_size; } checkIfMisplaced(guess, states, index) { if (states[index] !== CharState.Unknow) { return false; } const qtd_chars_guess = guess .slice(0, index + 1) .split("") .reduce((sum, char) => { return sum + (char === guess[index] ? 1 : 0); }, 0); const qtd_chars = this.word .split("") .reduce((sum, char, internal_index) => { return sum + (char === guess[index] && states[internal_index] !== CharState.Correct ? 1 : 0); }, 0); return qtd_chars >= qtd_chars_guess; } checkAllCorrets(guess, states) { var _a; for (let index = 0; index < Wordle.words_size; index++) { const word_char = this.word.at(index); const guess_char = (_a = guess.at(index)) !== null && _a !== void 0 ? _a : "?"; if (word_char === guess_char) { states[index] = CharState.Correct; } } return states; } checkAllMismatches(guess, states) { for (let index = 0; index < Wordle.words_size; index++) { if (this.checkIfMisplaced(guess, states, index)) { states[index] = CharState.Misplaced; } } return states; } checkAllWrongs(states) { for (let index = 0; index < Wordle.words_size; index++) { if (states[index] === CharState.Unknow) { states[index] = CharState.Wrong; } } return states; } createStates() { let states = Array(Wordle.words_size); for (let index = 0; index < Wordle.words_size; index++) { states[index] = CharState.Unknow; } return states; } checkWord(guess) { if (!this.ensureWordLength(guess)) { throw new Error("Word is the wrong length"); } if (!this.ensureWordPossible(guess)) { throw new Error(`${guess} is not on the list`); } let states = this.createStates(); this.checkAllCorrets(guess, states); this.checkAllMismatches(guess, states); this.checkAllWrongs(states); return states; } ensureWordPossible(guess) { return this.words.includes(guess); } getWord() { return this.word; } } Wordle.words_size = 5; exports.default = Wordle;