Created
February 14, 2022 16:15
-
-
Save breqdev/6ae5e732da5fb6d21ea3ad1d0a228571 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type LetterGuess = { | |
letter: string; | |
color: "gray" | "yellow" | "green"; | |
}; | |
let guess = "..."; | |
let target = "..."; | |
// Store the color alongside each guess letter | |
let guessLetters: LetterGuess[] = guess.split("").map((letter) => ({ | |
letter, | |
color: "gray", | |
})); | |
// Store the target in an array of nullables | |
let targetLetters: (string | null)[] = [...target]; | |
// First pass: match green letters | |
guessLetters = guessLetters.map(({ letter, color }, index) => { | |
// green letters are matched by the specific index in the target | |
if (letter === targetLetters[index]) { | |
// remove matching green letters from the pool | |
// so that they aren't also matched as yellows | |
targetLetters[index] = null; | |
return { letter, color: "green" }; | |
} else { | |
return { letter, color }; | |
} | |
}); | |
// Second pass: greedily match yellow letters | |
guessLetters = guessLetters.map(({ letter, color }) => { | |
if (color === "green") { | |
// don't modify existing green letters | |
return { letter, color }; | |
} | |
// yellow letters are matched by searching the entire target word | |
else if (color === "gray" && targetLetters.includes(letter)) { | |
// remove yellow letters once matched, | |
// each letter only matches once | |
targetLetters[targetLetters.indexOf(letter)] = null; | |
return { letter, color: "yellow" }; | |
} else { | |
return { letter, color }; | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment