[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)