Hacker News new | ask | show | jobs
by bscphil 1598 days ago
This is a cool project, but I wanted to tell you that your evaluate_guess function is wrong.

    evaluate_guess(answer="crest", guess="erase")
    "MYNYM"
Many people misunderstand this but it's not how the rules actually work. Correct here would be MYNYN, because there is only one E in the correct answer. There must be a 1-1 correspondence between any 'M' letter in the guess and the letter in the answer. This is similar to the rules for the game "Mastermind".
1 comments

Right, I wonder how many of the “fake/invalid” tweets that OP observed are actually this bug in the analysis code.

EDIT: actually it looks like it’s correct - evaluate_guess_char() only returns “M” if there’s an instance of the guess letter that’s not accounted for.

It's not correct, I pasted the code from the article directly into ipython.

It filters out cases where the corresponding character in the answer is correct (a 'Y'), but not cases where it's used in another maybe (a 'M'). The latter requires keeping track of state in a way that this doesn't.

For example:

    evaluate_guess(answer="crest", guess="erase")
    'MYNYM'
Which is wrong, as stated above.

    evaluate_guess(answer="crest", guess="erese")
    'NYYYN'
Which is right, even though we only changed the middle letter of the guess, not either of the broken letters. In this case the filtering works correctly.