[HN Gopher] Show HN: I built a Wordle decoder that guesses your ...
       ___________________________________________________________________
        
       Show HN: I built a Wordle decoder that guesses your guesses
        
       Author : mattlock
       Score  : 62 points
       Date   : 2022-03-05 18:02 UTC (4 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | yincrash wrote:
       | Even using the example on the github page, it gives me a crash -
       | 
       | /Library/Ruby/Gems/2.6.0/gems/wordle_decoder-0.1.2/lib/wordle_dec
       | oder/wordle_share.rb:8:in `block in final_line?': undefined local
       | variable or method `_1' for WordleDecoder::WordleShare:Class
       | (NameError) from /Library/Ruby/Gems/2.6.0/gems/wordle_decoder-0.1
       | .2/lib/wordle_decoder/wordle_share.rb:8:in `any?' from /Library/R
       | uby/Gems/2.6.0/gems/wordle_decoder-0.1.2/lib/wordle_decoder/wordl
       | e_share.rb:8:in `final_line?' from /Library/Ruby/Gems/2.6.0/gems/
       | wordle_decoder-0.1.2/bin/wordle_decoder:14:in `<top (required)>'
       | from /usr/local/bin/wordle_decoder:23:in `load' from
       | /usr/local/bin/wordle_decoder:23:in `<main>'
        
         | mattlock wrote:
         | Ah, that "_1" numbered parameter syntax was added in Ruby 2.7
         | 
         | I actually hadn't used that syntax before this project, was
         | interested in trying it out. I'll document that it only works
         | with 2.7 or later.
        
       | eat_veggies wrote:
       | the most interesting part of this imo is the heuristic it uses to
       | find the most likely word:                   # Greatly penalize
       | words that have multiple of the same black letters         #
       | Greatly penalize words that have the same black letters as any
       | seen word         # Greatly penalize words that have the same
       | yellow letter/index pair as any seen word         # Reward words
       | that have yellow letters that match yellow letters in seen words,
       | but in different positions         # Reward words that have
       | yellow letters that match green letters in seen words         #
       | Penalize words that have yellow letters that don't appear in seen
       | words         # Penalize words that have green letters that don't
       | appear in seen words         # Rewards words based on commonality
       | # Reward/penalize words based on line indexes and common letters
       | 
       | I built something similar to this that just lists all the
       | _possible_ words, and is nowhere near as smart -- but it lets you
       | draw pretty pictures! https://jse.li/wordle-reverse/
        
         | mattlock wrote:
         | I honestly thought I removed those comments lol. They might be
         | a little outdated, but yeah, I spent a lot of time thinking
         | about what kinds of information I could glean. There's
         | definitely some bias in there towards a certain kind of
         | strategy/play.
         | 
         | I like your project, very creative!
        
           | ghaff wrote:
           | Looking at the parent run, my first thought was that its
           | initial guess is a relatively uncommon word and is (I assume)
           | probably not a very good choice as an initial guess. There
           | are various lists of the best starting words in order going
           | around. I wonder if you could get to the best results by
           | picking the highest ranked word consistent with the other
           | lines?
        
             | mattlock wrote:
             | I thought about using lists like that, but it felt a little
             | too much like cheating. My attempt at something like this
             | is, if the word is one of your first two guesses, I reward
             | it for having more common letters. And actually penalize
             | common letter "misses" in later lines. I'm sure it's not
             | 100% optimal, but I saw some improvement on my admittedly
             | very limited set of test data. Here's the relevant code - h
             | ttps://github.com/mattruzicka/wordle_decoder/blob/0bfd7eaac
             | ...
        
               | ghaff wrote:
               | Of course, doing what I wrote also makes the assumption
               | that the person playing is using one of the top 10 (or
               | whatever) starting words which may or may not be correct.
               | 
               | That aside, I started playing a 6 letter variant and,
               | while I haven't done any sort of analysis with access to
               | the word list, I did do a quick Word Hippo analysis of
               | words with common letters, especially vowels, and while
               | I'm sure my results aren't optimal they're probably
               | pretty good.
               | 
               | ADDED: Which I think is probably not all that different
               | from what your code is doing. I fed Word Hippo 4 or 5
               | letters and told it to come up with some common words.
               | 
               | But that still requires an assumption that a player has
               | given _some_ thought to good starting guesses.
        
       | Eddy_Viscosity2 wrote:
       | Fun, but it left me feeling jealous of someone with this amount
       | of free time.
        
         | mattlock wrote:
         | Ha, it ended up taking a bit more time than I thought it would,
         | but once I started I couldn't stop.
        
       | lastofthemojito wrote:
       | I briefly had the thought of creating a game where you get a
       | bunch of those Wordle color square messages from in-game
       | "friends", and maybe some side info - "Tim always guesses adieu
       | as his first word", "Jane always uses one of her kids' names -
       | Olive or Hazel", etc and then you have to guess the word. Haven't
       | had time to experiment with it though so not sure how fun it'd
       | be. I don't retain any rights to the idea if anyone wants to run
       | with it and try it out.
        
         | lkbm wrote:
         | That could be a lot of fun. Someone did a "guess the word based
         | on people's tweets a while back:
         | https://news.ycombinator.com/item?id=30101456
         | 
         | Throwing in those extra hints about the players make it feel
         | more like a zebra puzzle, but that's not a bad thing,
         | especially if you want mere humans to solve it. I can't easily
         | process a thousand tweets, so giving more compact data is key.
        
         | Symbiote wrote:
         | I tried that in a single game with a friend's Octordle result.
         | You have to solve it yourself first, then work out their
         | initial guesses. Here's my solution to today's Octordle:
         | O = incorrect (white)       ~ = wrong place (yellow)       # =
         | correct (green)            Daily Octordle #40 / octordle.com
         | OOOOO ~~~OO       OO~OO OOOOO       ~O~O~ OOOOO       OOOOO
         | O~#OO       OO~OO OOOOO       #OOOO O##OO       OOOOO #####
         | #OOOO *****       OOOOO *****       OOOOO *****       OOOOO
         | *****       ##### *****            ~~O~O O~~OO       OOOO~
         | OOO~O       OOOOO OOOO~       ###O# OO#OO       #OOOO OOOOO
         | OO#OO #####       OO#O~ *****       O~OOO *****       O~~~#
         | *****       O~O~O *****       O~O~O *****       OOOOO *****
         | ##### *****            O#OOO OOOOO       OOO~O ~OOO~
         | OOOO~ O~#OO       OO~OO #OOOO       OOOOO #####       #O~O#
         | *****       ~O~OO *****       ##### *****            O#~#O
         | ~#O~O       OOOOO OOOO~       OOOOO OOOOO       OO~O~ ~O~##
         | OOOOO ~OOOO       O~~OO OO~~O       #~~OO OO~O~       O#~OO
         | O#OOO       O#OO~ #####       ##O## *****       ##### *****
         | 
         | (This one was difficult and/or arbitrary, I normally try and
         | complete Octordle in 11 guesses, i.e. the 8 correct answers
         | plus three extra.)
         | 
         | My first three guesses, base64 encoded:
         | VEFSRUQKTE9JTlMKQ0hVTVAK
        
       | yaps8 wrote:
       | I love it, thanks for sharing. Is the confidence a percentage?
       | How is it determined?
        
         | mattlock wrote:
         | Yeah, you can think of it as a percentage. The min is 1 and the
         | max is 99. It could be 100, but I don't trust my mostly
         | untested side project that much, so I cut it off at 99 :)
         | 
         | The base confidence score is determined based on how many words
         | a guess technically could be, that's here -
         | https://github.com/mattruzicka/wordle_decoder/blob/0bfd7eaac...
         | 
         | Then, I sort of just willy nilly add/subtract from that based
         | on the "intrinsic" score of the word which is computed here -
         | https://github.com/mattruzicka/wordle_decoder/blob/0bfd7eaac...
         | and then the "contextualized" score AKA how well it works with
         | other words, which is computed here -
         | https://github.com/mattruzicka/wordle_decoder/blob/0bfd7eaac...
        
       | itake wrote:
       | Could you post some examples of the results?
        
         | stavros wrote:
         | https://www.pastery.net/xfmbvv/
         | 
         | Contains SPOILERS for today's word.
        
         | [deleted]
        
       | evanb wrote:
       | If you want to try playing this as a game, you can play the
       | crosswordle https://crosswordle.vercel.app/
        
         | mattlock wrote:
         | Ha, I built a crosswordle solver and didn't even know it!
        
       | [deleted]
        
       ___________________________________________________________________
       (page generated 2022-03-05 23:00 UTC)