Skip to content

Instantly share code, notes, and snippets.

@randrews
Last active May 10, 2021 15:35
Show Gist options
  • Save randrews/aa01798ce334889095157f982b4919dc to your computer and use it in GitHub Desktop.
Save randrews/aa01798ce334889095157f982b4919dc to your computer and use it in GitHub Desktop.
function guess_fits(guess, clue) {
const guess_freq = frequency(guess)
const clue_freq = frequency(clue)
for (const ltr in clue_freq) {
if (ltr === '?') { continue }
if (!guess_freq[ltr]) { return false } // Clue has a letter the guess doesn't
if (guess_freq[ltr] < clue_freq[ltr]) { return false } // Clue has more of these than guess
guess_freq[ltr] -= clue_freq[ltr]
}
let unaccounted_letters = 0
for (const ltr in guess_freq) { unaccounted_letters += guess_freq[ltr] }
return clue_freq['?'] === unaccounted_letters
}
function frequency(word) {
const freq = {}
word.split('').forEach(ltr => {
if (freq[ltr]) { freq[ltr]++ }
else freq[ltr] = 1
})
return freq
}
guess_fits('wall', 'awl?') // true
guess_fits('walk', 'awl?') // true, letter only in clue
guess_fits('will', 'awl?') // false, no a
guess_fits('wilt', 'ill?') // false, more l's in clue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment