Looking at the source, this doesn't handle ambering of repeated letters correctly:
let mut diff = [Match::Black; 5];
for (i, &b) in input.iter().enumerate() {
if solution[i] == b {
diff[i] = Match::Green;
} else if solution.contains(&b) {
diff[i] = Match::Amber;
}
}
If the solution is "crest", for example, guessing "class" should give green for the first s and black/grey for the second s, but your implementation will give amber for the second s. And if you guess "stars", then only the first s should be amber, and the second should be black.
It's interesting to me how common this bug with the coloring of repeated letters in guesses is in Wordle clones, as well as how often there are disagreements in comments about what the correct behavior should be.
IMO, this is something that ought to be called out in a hypothetical formal specification of Wordle, but I kind of like that it isn't mentioned in the instructions for the game, from a gameplay/learning perspective. It encourages people to reason through what the correct behavior ought to be on their own, and to experiment to see how the implementation marks guesses; the assumption that letters can't be repeated is one that a lot of people don't realize that they're making.
It is unnecessarily harsh, but the behavior is also important if the answer contains a letter once but your guess contains it twice, not only if the answer contains it twice.
The problem also happens if the answer contains the letter once, but the guess contains it twice. Imagine the middle letter in the answer is an E, no other E anywhere. I guess EXXXE (assuming that's a word). Both E are yellow: that's incorrect. There's 1 misplaced E and one superfluous E. Which is which is arbitrary. In the version of the game I made from my discord bot, I go left to right, so the E on the left would be yellow, the one on the right would be grey.
You may not have needed that information, but if the game marks both instances of the same letter as amber (correct letter, wrong place), but there is only one instance then it has misled the player. That's incorrect behavior. The player should be able to discern from their guess which letters and how many of them there are in the solution. They shouldn't be led towards a wrong answer.
It's not a stellar plan, but if someone starts off with a guess like "abyss" and there is only one 's', they shouldn't be tricked by the game.
Not to mention, if you play on hard mode, using that non-existent second 's' is now required. I get that this implementation doesn't have a hard mode, but most of my friends play in hard mode, in practice, even if the box isn't ticked on.
But that's the thing, you can't "play it just fine". You can play a broken version of the game. Nobody is interested in a game that is 90% correct.
And then on top of that you're being defensive when you receive very valid feedback instead of gladly accepting it. What's the point of even posting to HN if you're not welcoming feedback?
You come off as somewhat defensive, dismissive, uncaring. Which are normal and justifiable human emotions when someone is criticizing your creations. But "the crowd" really doesn't like to see them expressed. So it's a good rule of thumb when posting these things in public to err on the side of being gracious and grateful. Like it or not, it's just good PR.
I agree in a sense, but I was initially responding to someone who said the game was "useless" without this, which in my experience is just not true and rude itself (and most people I know don't understand the rules of how it handles doubles)
The "didn't care" part was referring to my initial research, and not the fix. In my top level comment, I mentioned this was a quick couple hour project.
I didn't mind the initial criticism. Like I said before, I found it interesting.
I think that's all true, but also doesn't contradict anything I said in my original comment unfortunately. You have good reasons for saying/doing these things, but the impression you give off is still the impression you give off. If you want it to be a good impression, the trick is to ignore slightly rude comments, avoid mentioning that you "didn't care" initially, avoid talking about how little effort you put into the project, etc. People are going to (correctly?) assume this is defensiveness.
It's like implementing a chess game except your knight moves 1 square forward + 1 square to the side instead of 1+2. Sure, you can play it, but the game is wrong.
Which makes it not chess; i.e. not fit for purpose. And this omission is more on the scale of missing castling than en passant. Some people who futz with two or so moves will think it's "fine" but it's missing something critical.
Funny that you mention castling. Most of chess rules were consolidated back in 1500s with barely nothing needing change since. Still, every now and then some absurdity ensues leading to rules change, like the time when FIDE was forced to review the wordings on castle:
Question: Did people not use to play chess before 1972? If every tiny incompatibility with the specs make the game different, then surely people before 1972 were playing a different game? And that's just chess, pretty much every major games see changes in their ruleset practically every year.
You are obviously going to say chess is whatever the rule is in _current year_, sidestepping that philosophical examination. I don't want to get into that either when the bigger problem is in the claim that any deviation makes it "not fit for purpose". If the purpose of a game is to conform perfectly to a spec defined by someone else, then everyone playing football for fun with makeshift goal posts everyday in the field near my house mustn't have gotten the memo.
Exactly how jaded must programmers be from having to follow client's specification all the time to have this outlook?
I would think the neighborhood kids playing football know they aren't playing on a regulation field. If you change the wordle rules and tell somebody it's wordle, do they know the rules have changed?
The kids go back and tell everyone they had been playing football, indeed knowing they weren't playing on a regulation field. And no one in the world has a problem with them calling it football, again despite knowing they weren't playing on a regulation field.
Fascinating how the perceived tone of the initial response can change the outcome of the deepest thread. Sensitive dependence on initial conditions. Human conversation meets James Gleick’s Chaos conditions!
There's nothing even wrong with the initial response. On the contrary, "Fair enough" and "I might patch it later" led to "the game is basically useless" and "You come off as somewhat defensive, dismissive, uncaring". I think some people just had their cereal pissed-in this morning and/or need to look in the mirror.
This was a quick project I put together this Sunday. I've been needing a project that I can "finish" as I've been a bit ambitious with my other projects recently.
It's probably not flawless and doesn't have any leaderboard/statistics saving yes, but it does the job.
It uses the official word list and order, so every day should match the website. It prints the emoji share upon finish too, so you can share as you would normally
I know you cut out lots of features for simplicity, which makes total sense to me if your goal was to finish & ship it, but if you wanted to add the wordle keyboard &c, you might look into using `tui`.
I was so shocked when my family member told me wordle is a website and not an app. I never thought that the masses would go for something like that in the package of a website. It really gives me hope for the future.
Why? Publishing an app costs money even if the app is free (which is why free apps usually have ads or some kind in-app purchases). Publishing a website with static content can be free depending on where you host it.
Because the model of apps needs to die. If you have something you want to put out into the world you currently need to write an android app, an iOS app and then any other native formats you want to target. But it’s much better to make it browser based because it’s one and done and it also side-steps all the nonsense with app stores which has been well known lately. If it’s easier and better for the developers then we will have more and better software.
Web assembly and WGPU are coming and when they do it will be the next paradigm after mobile apps. But in order to get to this new glorious paradigm it is necessary for people to be capable of recognizing the value of software even if it’s in the browser and of using it on the scale seen with wordle. It’s just as likely that people would turn their nose up to a browser based software and everything would remain stagnate. So I am glad.
Just about anything that can connect to the internet is a potential privacy nightmare. I assume that by specifying "webapps" you're making a comparison to native apps.
Configure your browser to block 3rd party cookies and you'll be fine.
It's nice to have the private window privacy feature. That's a standard feature of web browsers, but I don't know of any consumer operating system that makes this easy for native apps.
While they often are, there’s no rule that web apps have to be a privacy nightmare.
Thanks to Hacker News¹, I recently came across Learn systemd by example². The site itself is hosted by Hetzner, a German hosting provider that take user privacy seriously³ and uses Cloudflare as a privacy-conscious CDN⁴. The only third-party resources it uses are Google fonts. Users of uMatrix⁵ or uBlock Origin⁶ can easily block these resources and the web app works perfectly fine without them.
I’d also use Wordle itself as an example of a reasonably user-privacy friendly web application. The only third-party resources it uses is Google Tag Manager (which is blocked by default by uMatrix).
I use Firefox with a number of web extensions (Firefox Multi-Account Containers⁷, Decentraleyes⁸, uMatrix, uBlock Origin, Privacy Redirect⁹). These all provide me, an end-user, much greater control over my online privacy than I’d have with a mobile app. I’ve also recommended Decentraleyes and uBlock Origin to non-technical friends as extensions they can install and not worry about configuration.
This is missing one thing I find helpful in the web-based game. The on-screen keyboard which colors the letters according to your guesses which makes it a lot easier to plan your next guess.
I do this anyway, because instead of the normal order I put the alphabet in frequency order, so I get the list of letters in the order I should be considering them.
It's possible to "cheat" quite a bit using the shell. Exactly what does and doesn't count as "cheating" is up to your personal comfort level. For example, the frequency analysis of the official wordle word list is rather different than English at large...
I published one too[0] which is much clumsier - it needs to be interacted via wordlers. Of course mine is more for trying out an algorithm or two for solving. But it also allows one to play cows and bulls[1].
There's a couple of other Rust versions of this game: wordle [1] and wordlet [2]. Yours is lacking showing (qwerty) overview of which letters were used. Although now that I think of it, its not optimal to show it as qwerty for non-qwerty users.
Redundant it is, yes, but I use it to determine which common letter I have not yet used. Although dvorak or colemak are more representative for such (because you can relate it to the middle row) I have this legacy and defacto standard issue with qwerty.
One thing I could do, also avoiding any specific keyboard layout, is to render a 5x5 letter grid with these colours, and give a shuffle ability. It being QWERTY or any other keyboard layout does not offer any advantage over a random layout
Does it use two dictionaries (one more complete for guesses and smaller one with more common words for the secret?). That seems to be the the case with the original one.