Last active
May 10, 2021 15:35
-
-
Save randrews/aa01798ce334889095157f982b4919dc to your computer and use it in GitHub Desktop.
This file contains hidden or 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
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