From f69871fe2e457978873231fabb3dbe50b639f71d Mon Sep 17 00:00:00 2001 From: koronya Date: Wed, 14 Jan 2026 03:21:03 +0900 Subject: [PATCH] [JS][6kyu] Hangman game --- codewars/6kyu/hangman-game/koronya.js | 79 +++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 codewars/6kyu/hangman-game/koronya.js diff --git a/codewars/6kyu/hangman-game/koronya.js b/codewars/6kyu/hangman-game/koronya.js new file mode 100644 index 000000000..accb57f9a --- /dev/null +++ b/codewars/6kyu/hangman-game/koronya.js @@ -0,0 +1,79 @@ +// [JS][6kyu] Hangman game +// hangman-game +// https://www.codewars.com/kata/56832fb41676465e82000030/train/javascript + +class Hangman { + constructor(word) { + this.word = word + this.remainCount = 6 + this.guessedLetters = new Set() + this.findCount = 0 + this.validLetters = new Set() + this.invalidLetters = new Set() + this.isGameEnded = false + } + + getStatus() { + if (this.findCount === this.word.length) { + this.isGameEnded = true + return `You found the word! (${this.word})` + } + const answerText = this.word + .split('') + .map((letter) => (this.validLetters.has(letter) ? letter : '_')) + .join(' ') + const wrongText = Array.from(this.invalidLetters).join('') + return `${answerText}${wrongText.length > 0 ? ' # ' + wrongText : ''}` + } + + isCorrectGuess(letter) { + return this.word.includes(letter) + } + + guess(letter) { + if (this.isGameEnded) { + return 'The game has ended.' + } + if (this.guessedLetters.has(letter)) { + return this.getStatus() + } + + this.guessedLetters.add(letter) + if (this.isCorrectGuess(letter)) { + this.validLetters.add(letter) + const countInWord = this.word.split('').filter((l) => l === letter).length + this.findCount += countInWord + return this.getStatus() + } else { + this.invalidLetters.add(letter) + if (this.remainCount === 0) { + this.isGameEnded = true + return `You got hung! The word was ${this.word}.` + } + this.remainCount -= 1 + return this.getStatus() + } + } +} + +const hangman = new Hangman('codet') +hangman.guess('w') +hangman.guess('a') +hangman.guess('r') +hangman.guess('s') +hangman.guess('e') +hangman.guess('d') +hangman.guess('o') +hangman.guess('c') +hangman.guess('x') +hangman.guess('y') +hangman.guess('z') + +// const hangman = new Hangman('wars') +// hangman.guess('w') +// hangman.guess('u') +// hangman.guess('s') +// hangman.guess('a') +// hangman.guess('r') +// hangman.guess('g') +// hangman.guess('a')