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