I would love a dictionary lookup. I'd expect a big part of the strategy to be working backwards from the possible 1/2 letter words, but there's no way to tell how reasonable the dictionary is without testing, and getting the game into the proper state to test would be just as hard as solving the puzzle in the first place.
Having two separate goals (eliminate all letters, find all the words) seems confusing. Honestly I find the latter to be a fairly tedious prospect, but the game really seems to push you toward it especially with the colors on the calendar depending on the % of words found. "Damn it, I got a perfect score with no undos, and all I have to show for it is a red square showing how bad a job I did!"
The UI (on a desktop) felt kind of broken at the start because nothing has hover effects. Anything clickable would benefit from some kind of an effect, but especially the letters on the words. If you don't want color changes or animations, at least set the cursor style.
Thank you so much for the feedback! The dictionary look up feature is a great idea-- I had never thought of it before, but it does solve a pain point with the game you've articulated well.
The desktop UI suggestions are also very helpful. I've updated the desktop version with some minor hover effects and cursor styling. I've mostly been focused on mobile, so it was good hear some feedback for desktop.
whittle(S0) --> [S1], % state S1 comes from
{ select(_, S0, S1), % removing a char from S0,
phrase(valid_state(_), S1) }, % S1 must be all words,
whittle(S1). % and recurse.
whittle([]) --> [].
which describes a solution as a list of successful state changes from input to empty string. Each change removes one character from the string and must leave a valid state after doing that. Prolog's implicit backtracking search means that when it tries "cat","at","t" the valid_state check fails because "t" is not in the wordlist, it backtracks to the previous state "cat","at" and retries, getting to "cat,"at","a","" and success.
So it's doing a depth-first search of the tree of all possible game states that come from removing each letter from each substring, only exploring each branch as deep as the first failure. It stops at the first success, but spacebar or 'next' will search for another solution. Find all 136 solutions by querying: findall(Steps, solve("brats herbs", Steps), Solutions).
It won't work in Scryer, it would need select/3 and the DCG helpers ported/included in the code, then changes to run on strings instead of character code lists. It would likely be more memory efficient then.
There should be an “I give up” button to let you finish the game and be locked into that result for the day. I like the idea, there’s just something about the UX that’s weird to me.
Fun! I was a bit confused at the end because there's no "victory" state or indication. I think I was expecting it to give me a new word pair once I got to the end, or tell me "come back tomorrow for another round"
I didn't understand what you were saying at first, but it turns out that you have to click to remove the final, single letter before the "you won" screen shows.
And I agree it would be nice if the game could detect when you've reached a dead end and notify you somehow.
This is cool, it's kind of the inverse of a game I used to play with my mother: One player says a letter and thinks of a word that starts with that letter, the next player adds a letter (while thinking of a valid word that that could be created with the new prefix). Play continues in this fashion until someone is forced to spell an actual word, then they lose and you can start a new round.
Feedback: I wasn’t sure what to do in the initial game state. It wasn’t obvious that the letters could be “clicked” directly. In a similar word game [0] (also posted on HN recently; perhaps your inspiration?), the letters are in boxes that make them seem more like buttons you can press. The unlabeled tabs at the bottom were also mysterious; many other games like Wordle have their inputs (e.g. a keyboard) at the bottom, so that was initially a bit confusing.
It’s also easy to accidentally spoil the game by clicking the unlabeled right tab. EDIT: Oops, didn't realize that was the words discovered list, not the complete wordlist. This should have a label to make it clearer.
Also, in the help screen, the dots in the UI made me expect to swipe (on mobile) to navigate between screens, so that was a bit confusing at first.
I like the idea of it; though I think the latest update (around puzzle solveability?) may have broken the game as I'm unable to begin in any browser I've tried:
Uncaught TypeError: can't access property "puzzleLog", G is null
Hi, this is OP! Thank you to everyone for pointing this out, you are not crazy-- these puzzles were impossible after I removed some invalid words from the dictionary. I had previously replaced the puzzles, but my branch state seems to have gotten out of sync. Please restart Aug 1 and 4 if you'd like, there should be new puzzles to try now!
Yes, 1 August and 4 August have me stumped. Interestingly it says I have discovered 100% of words on 1 August, but I wasn't able to whittle it down to 0. I'm not sure if that just means I missed an opportunity to remove the space somewhere.
I had the same issue. I went back to the calendar and it said I got 100% of the words. So I guess it's not always possible and I spent all that time trying for no reason.
I’m stuck on that one too! Got 100% of all possible words but cannot figure out how to reduce to zero. A “show hint” feature would be nice when you’re stuck.
I didn't realize that I was supposed to get to 0, but just trying to get as many words as possible. I got down to 'a' and reset, it would be nice if just getting to a 1 letter word prompted the win state.
Really fun! Could use a hint function though. I got %100 of all words on Aug 4 but still have not found a way to get it down to zero letters. If anyone has figured it out please let me know!
Hey! I absolutely love it! I wanted to share the results with my partner but it looks like the share button doesn't work on the PC? (Firefox 141.0, Linux)
Nice! You definitely have something there.
I would love a dictionary lookup. I'd expect a big part of the strategy to be working backwards from the possible 1/2 letter words, but there's no way to tell how reasonable the dictionary is without testing, and getting the game into the proper state to test would be just as hard as solving the puzzle in the first place.
Having two separate goals (eliminate all letters, find all the words) seems confusing. Honestly I find the latter to be a fairly tedious prospect, but the game really seems to push you toward it especially with the colors on the calendar depending on the % of words found. "Damn it, I got a perfect score with no undos, and all I have to show for it is a red square showing how bad a job I did!"
The UI (on a desktop) felt kind of broken at the start because nothing has hover effects. Anything clickable would benefit from some kind of an effect, but especially the letters on the words. If you don't want color changes or animations, at least set the cursor style.
Thank you so much for the feedback! The dictionary look up feature is a great idea-- I had never thought of it before, but it does solve a pain point with the game you've articulated well.
The desktop UI suggestions are also very helpful. I've updated the desktop version with some minor hover effects and cursor styling. I've mostly been focused on mobile, so it was good hear some feedback for desktop.
A solver in SWI Prolog: https://swish.swi-prolog.org/p/PlayWhittle_Solver.pl which you can run by querying in the lower right window:
and seeing: The core is this grammar: which describes a solution as a list of successful state changes from input to empty string. Each change removes one character from the string and must leave a valid state after doing that. Prolog's implicit backtracking search means that when it tries "cat","at","t" the valid_state check fails because "t" is not in the wordlist, it backtracks to the previous state "cat","at" and retries, getting to "cat,"at","a","" and success.So it's doing a depth-first search of the tree of all possible game states that come from removing each letter from each substring, only exploring each branch as deep as the first failure. It stops at the first success, but spacebar or 'next' will search for another solution. Find all 136 solutions by querying: findall(Steps, solve("brats herbs", Steps), Solutions).
It won't work in Scryer, it would need select/3 and the DCG helpers ported/included in the code, then changes to run on strings instead of character code lists. It would likely be more memory efficient then.
Nice work! One suggestion would be to allow moving a letter (or space) to a new location, like a life line - one or two moves allowed per game.
There should be an “I give up” button to let you finish the game and be locked into that result for the day. I like the idea, there’s just something about the UX that’s weird to me.
Fun! I was a bit confused at the end because there's no "victory" state or indication. I think I was expecting it to give me a new word pair once I got to the end, or tell me "come back tomorrow for another round"
You can always get it down to zero letters! The game should remind you how many letters you have left before you can win to make it clear .
I didn't understand what you were saying at first, but it turns out that you have to click to remove the final, single letter before the "you won" screen shows.
And I agree it would be nice if the game could detect when you've reached a dead end and notify you somehow.
I think I've tried every combination herbs possible, you have to whittle to her and the to he, and then there's nothing, what do you mean?
They are saying "the win screen shows up after you click to remove the final letter", not "it is always possible"
It’s solvable if you whittle down to “a”
Came here to say it needs a victory state or a score to know if I got to the best possible solution.
For those who are initially as dense as I am: spaces are also 'whittleable' characters!
When I remove "h" from:
rat he
It doesn't accept "rate" as a correct word. What am I doing wrong?
Spaces are also whittleable characters. "rat e" is two words, the latter of which is not valid.
The space counts and has to be removed. Rathe is not a word, nor is e, so youve got to find another way.
WOW, we had a similar idea: https://www.shrinkle.org
https://news.ycombinator.com/item?id=44714167
Great work!
Wow, great minds think alike! Your game is really fun and clever as well, thank you for sharing :)
FWIW I like yours better. I'd just love to play the ones from previous days.
Thank you! You are actually able to play ones from previous days, through the archive (calendar button on the main page).
This is cool, it's kind of the inverse of a game I used to play with my mother: One player says a letter and thinks of a word that starts with that letter, the next player adds a letter (while thinking of a valid word that that could be created with the new prefix). Play continues in this fashion until someone is forced to spell an actual word, then they lose and you can start a new round.
Ghostwriter. https://youtu.be/sGByxW2R3hQ?t=1080
Feedback: I wasn’t sure what to do in the initial game state. It wasn’t obvious that the letters could be “clicked” directly. In a similar word game [0] (also posted on HN recently; perhaps your inspiration?), the letters are in boxes that make them seem more like buttons you can press. The unlabeled tabs at the bottom were also mysterious; many other games like Wordle have their inputs (e.g. a keyboard) at the bottom, so that was initially a bit confusing.
It’s also easy to accidentally spoil the game by clicking the unlabeled right tab. EDIT: Oops, didn't realize that was the words discovered list, not the complete wordlist. This should have a label to make it clearer.
Also, in the help screen, the dots in the UI made me expect to swipe (on mobile) to navigate between screens, so that was a bit confusing at first.
0: https://www.shrinkle.org/
Hi, thanks for the feedback! Swiping on the tutorial is a great polish idea, I just added it to the game.
Yes, a week ago: https://news.ycombinator.com/item?id=44714167
Minor nit - "back to archive" should take you back to the archive page you were on, not "today".
Other than that, nicely done game.
I like the idea of it; though I think the latest update (around puzzle solveability?) may have broken the game as I'm unable to begin in any browser I've tried:
Fixed now! Sorry, bug fixing on the fly is trepidatious :')
Is it always possible to go all the way down to a single letter? I'm working on August 4, and it's proving challenging
Hi, this is OP! Thank you to everyone for pointing this out, you are not crazy-- these puzzles were impossible after I removed some invalid words from the dictionary. I had previously replaced the puzzles, but my branch state seems to have gotten out of sync. Please restart Aug 1 and 4 if you'd like, there should be new puzzles to try now!
Yes, 1 August and 4 August have me stumped. Interestingly it says I have discovered 100% of words on 1 August, but I wasn't able to whittle it down to 0. I'm not sure if that just means I missed an opportunity to remove the space somewhere.
August 1st can be done with
https://gist.github.com/IanCal/f3deffd5961a2cc2860094a4d68ed...
Or maybe it depends on the order in which you remove the letters? Just a guess.
August 4 is not solvable with the given wordlist. There is no way to get to a word below 3 letters ("set")
I had the same issue. I went back to the calendar and it said I got 100% of the words. So I guess it's not always possible and I spent all that time trying for no reason.
I’m stuck on that one too! Got 100% of all possible words but cannot figure out how to reduce to zero. A “show hint” feature would be nice when you’re stuck.
I didn't realize that I was supposed to get to 0, but just trying to get as many words as possible. I got down to 'a' and reset, it would be nice if just getting to a 1 letter word prompted the win state.
Cool, the description reminded me a bit of my word game https://gramjam.app, but after playing they're pretty different. I like your UX!
Congrats on your imminent acquisition by the New York times (a'la Wordle)
Really fun! Could use a hint function though. I got %100 of all words on Aug 4 but still have not found a way to get it down to zero letters. If anyone has figured it out please let me know!
Thanks! I've been thinking about adding a hint function for a while, but not sure what form I want it to take.
Also, Aug 4 was broken-- please try again for a new, solvable puzzle :)
If you found all the words, surely that means there is no 1-letter word to find? Unless I’m completely misunderstanding the rules.
Crashes for me under Firefox and Chromium.
Fixed now! Sorry about the trouble.
Hey! I absolutely love it! I wanted to share the results with my partner but it looks like the share button doesn't work on the PC? (Firefox 141.0, Linux)
Good game! Nice little touches on the website too like the tray at the bottom and the header click easter egg.
This game is awesome. I have no other feedback other than I had a lot of fun.
I had much more fun than anticipated. Nice work! Sharing with some friends
Please respect `:prefers-color-scheme`.
You could add some lexicographic whittling, like:
Q -> O
W -> V
ETIPFHKLNM -> I
E -> F
B-> RP
R -> P
U -> J
GO -> C
M -> V
I ended at:
rat he
I remove "h" but it doesn't accept "rate" as a correct word. Am I missing something?
You need to remove a single letter while keeping the remaining letters in the same order - removing "h" from "rat he" leaves "rat e" not "rate".
In case anyone else finds this question before the other one, it was answered at https://news.ycombinator.com/item?id=44804178.