Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
How good can you be at Codenames without knowing any words? (danluu.com)
101 points by feltsense on Aug 12, 2024 | hide | past | favorite | 53 comments


I'd like to note that giving clues that are not about the words themselves is against the rules (and clues about position are explicitly called out in the rules as illegal).

The methods in the post are interesting, but technically against the rules of the game.

EDIT: Though I didn't figure out whether he means "clues about the position" or "clues about the words, until you can open enough cards to narrow down to one memorized position".


If you've memorized all the layouts, you don't need any kind of clue, so you don't need a kind of clue that's banned. You could for example clue "Sausage" every time and your team would play as well as the bot in the article. To play better than the bot, you might want to clue about words for 1 turn or so.


I would say that’s still against the rules since “sausage” has no relevance to the meaning of the target words. Obviously you could just bullshit some extremely tentative relationship if pressed but it goes against the spirit of the rules.


I feel like saying "<death card hint> 0" every time is 100% in the spirit of the clue-ing rules, and there's no rules related to guessing, so this guessing strategy also doesn't seem to violate things that overtly.

I do agree that there's an implicit intention in the rules that the operative's guesses are related to the spymaster's hints, but I don't think that relation is ever said explicitly.


But saying zero disallows your team from guessing at all, right? Maybe "<death card hint> 666" would work.

A common pattern in our play groups is when the other team is just 1 away from winning and you cannot find a clue that covers all your remaining words, you come up with the best clue you can and say "99" so that it's clear "The number is irrelevant to the clue here, just keep guessing until you win or you miss."

Edit: I'm wrong. From the rules: "If 0 is the number, the usual limit on guesses does not apply. Field operatives can guess as many words as they want. They still must guess at least one word."

Edit2: And instead of 99, my play groups should have been using "unlimited." Again from the rules: "Sometimes you may have multiple unguessed words related to clues from the previous rounds. If you want your team to guess more than one of them, you may say unlimited instead of a number. For example feathers: unlimited."


The rules specifically say that a number of zero means any number of guesses is permitted. They also say 'unlimited' is permitted instead of a number


Clues must be related to the semantic meaning of the cards, so irrelevant clues are technically banned. So, a "sausage" strategy would be illegal on many boards.


I guess you'd have to call an unrelated word and zero, which is explicitly allowed.


Note that in the described game the spymaster didn't give out a clue like this; the article states "From the given clue, we were unable to [guess all of our remaining words]". I guess it was a teammate that suggested the other strategy.


You clearly don't understand the article since it's not about clues at all, but entirely about guessing.

Basically, the claim is that based entirely on the pattern of the board (revealed red, blue, and white cards), there are so few legal board configurations (the cards that the spymasters are using), that the field operatives can ignore the hint the spymaster gave, and guess correct cards anyway based on the board's revealed information.

Effectively, a game where the red team uses this strategy might go like this:

Red Team Spymaster: Word unlimited

Red Team Field Operatives: <pick card at random, get white at the lower right>

Blue Team Spymaster: <Real Hint> 2

Blue Team Field Operatives: <pick 2 correct cards at the upper left>

Red Team Spymaster: Word unlimited

Red Team Field Operatives: "Well, there's only one spymaster card with a white card in the lower right and two blue cards in the upper left, so now we know where every card is and can pick all the red cards" <wins>

In a real practical implementation here, the spymaster would probably actually clue "<death card hint> 0" each turn in order to ensure their team can safely pick at random until there's enough information to know which board they're on.

Please point me to the rule that bans this: https://czechgames.com/files/rules/codenames-rules-en.pdf


> "<death card hint> 0"

We had a game once where one team was starting to look at that card because of previous hints and the spymaster did exactly that to say "don't do it", but because the hint was for that card they ignored the number and picked it that round.


If I was the spymaster in that story I’d just chuckle about how these games go, excuse myself to the bathroom, and scream into a towel.


The fun of this game is in the absolute clowning that happens. This is fantastic haha.


The rule for "unlimited" actually does cover it:

"Sometimes you may have multiple unguessed words related to clues from the previous rounds. If you want your team to guess more than one of them, you may say unlimited instead of a number."

You can't use "unlimited" as you're proposing - it's allowed only if there are multiple unguessed words from previous clues.

That said, the "0" approach isn't banned by the rules and would work the same way.


> You clearly don't understand the article since it's not about clues at all, but entirely about guessing.

Not entirely about guessing. In fact, guessing isn’t involved at all, at least not after the first turn.

You left out that to do this, you need to have memorized basically all of the spymaster cards, or enough of them to increase the odds of you figuring out the configuration.

This is basically the same as the cheat in the memory match game in Super Mario Bros. 3 where you uncover matching power ups [1], and receive the power ups that you successfully uncover — but there are only 8 possible boards, so it’s way easier vs. this Codenames cheat.

Even if this is not technically considered cheating, it definitely would feel like cheating, since again you need to have knowledge of most of the spymaster cards. (And it goes without saying, this is definitely against the spirit of the game, even if it’s a neat party trick.)

[1] https://mario.fandom.com/wiki/Matching_Game


By "guessing" I meant "the guessing phase" as opposed to "the clueing phase", i.e. it's about the phase where you pick cards.

I should have said "picking phase", but from my example, you should have been able to see that I knew it was about memorizing the boards.

I feel like you've taken an intentionally negative reading of my comment, which I suppose fair's fair because I wasn't exactly being charitable to my parent comment either.


I've also thought about creating a Codenames bot: what if we could use semantic similarity to batch words together? Surely, this can be done using a prebuilt embedding model and clustering!

After some failed experiments - it performed worse than I thought it will - I've googled the subject, and... it turns out there's a whole paper about ML and codenames :)

https://arxiv.org/abs/2105.05885 (Playing Codenames with Language Graphs and Word Embeddings) - fun to read


Very cool! A couple of months ago, after playing Codenames for the first time, I devised a strategy that any team of humans can learn, in order to win in 3 moves, guaranteed, every game. It only takes a few minutes to learn.

Imagine you have a Codenames board and you're on the blue team. The key is that you can represent the board as a text of 1s and 0s, where 1 is blue and 0 is not blue:

0 1 0 0 1

0 0 0 0 1

1 1 0 0 0

1 0 0 0 1

0 0 1 0 0

The next key is to realize that each sequence of 4 cards can be thought of as a 4-digit binary number, for example the first binary sequence above is "0100", or 4. The second binary sequence is "1000", or 8.

The strategy is to simply communicate the numbers 4 and 8 to your team—so we can simply choose a word that starts with the 4th letter of the alphabet (d) and ends in the 8th letter of the alphabet (h). If we tell our team "ditch", they'll know exactly what the first 8 cards are.

Repeat this for 3 turns, and your team has figured out 8 cards each turn, for a total of 24 cards out of 25 total. The final card can be inferred simply—on the third turn, if any card is unaccounted for, your team knows it must be in the 25th position.

I just hope your teammates know how to count in binary.

(N.B. the strategy can be optimized by eliminating less-common letters of the English alphabet, like J, where it may be difficult to think of words that end in that letter)


This strategy is specifically banned by the rules: https://czechgames.com/files/rules/codenames-rules-en.pdf

I quote:

> Your clue must be about the meaning of the words. You can't use your clue to talk about the letters in a word or its position on the table.

You're talking about cluing about the position, so it's against the rules.

I guess the rules do also say:

> But if no one notices that a clue is invalid, it counts as valid.

which kinda maybe makes it legal, but it seems like it's quite against the spirit of the rules, and the "invalid" clue thing there is just stuff like "accidentally used a word that's a part of a compound word on the board", not maliciously trying to cheat the rules.


I'd also attempted something like this years ago [1] based on word2vec, and it played decently! Occasionally it would throw out nonsensical clues or guesses, but was usable.

I'm sure with more modern embeddings/tools one could make a really excellent not.

[1] https://github.com/bcspragu/Codenames


For anyone else like me who's only played the online versions and was really confused by the article: the physical game does not completely randomize the positions of red and blue cards but has a fixed set of possible configurations - the "configuration cards" that the article is talking about.


Codenames is a word guessing game - in part. It's also a game of ingenuity, of knowing your players / spymasters, of players trying to be better as a group than as individuals, of paying attention (and using the other team's clues) - and at some point it's a game and can be played seriously and competitively.

From that point of view I don't see a serious problem with embracing the game pieces provided and taking them into consideration. It is a dimension in the game. It does not kill the game. Solid thinking from that team.

I have more of a problem with people learning word lists for Scrabble. It's not against the rules - but it makes it hard to play with these people. It's a significant class difference.


I gotta disagree, I'm way more accepting of Scrabble list memorizers (even though I'll never be one) because word knowledge was intended by the game designers to be a part of the game.

Memorizing the spymaster layouts was almost certainly not intended by the designers of Codenames. Probably someone realized it was possible, but as other commenters mention the increased friction of fully randomized layouts isn't worth it when almost no one will want to do this.


> word knowledge was intended by the game designers to be a part of the game

This is the most frustrating part of Scrabble to me. I consider my vocabulary to be pretty good. But frequently when I try to use an even slightly-esoteric word in scrabble, it turns out to not be in the official dictionary. And conversely, the official dictionary is full of words I've never heard or seen used by real people and often has some definition like "18th century slang for <word>". I then lose to people who know all these weird words (especially the very short ones, which they've memorized) and who admit they have never heard these words outside a scrabble context either.

In short, the English the players speak and the English defined by the official dictionary are different enough languages that it seems only useful as a way to learn "Scrabble English" and not modern English.


Yes, I agree the official Scrabble word lists are arbitrary and sometimes downright inexplicable. But assuming you're not trying to win official competitions, you can play with any dictionary you like.


Memorizing the layouts altogether would be a step too far. And probably some people could do it...

I was thinking more of remembering that the layouts have basic characteristics: a team's words are not bunched on one side, or all lined up, or in a circle, etc. Not your team's, not the other team's.

But now that you mention it, fully randomized would be easy to do as a phone app. And a phone could be propped up in front of the spymasters. (The setup with the layout propped in front of the spymasters works really well in a party setting, where it's normal that some people will get up and walk around without wanting to cheat.)


Or a boggle-esque set of dice rather than a phone app.


Or not even any programming and showing one of the online Codenames on the phone - just for the map.


It's unacceptable since it circumvents the core aspect of the game.


On the topic of word game recommendations, I’ve been playing So Clover recently and highly recommend it. It’s a cooperative game and has almost no downtime (all players write clues at the same time, then all players guess together, so the possible downtime is the difference between the fastest clue writer and the slowest clue writer).

https://www.rprod.com/en/games/so-clover


+1, but one thing about So Clover is that not really any game in it. It's more of an activity. A very engaging activity, and one that has worked with every group I've tried it on, gamers and non-gamers alike, and my current #1 choice if I was asked to bring some games to some non-gaming social event.

What I mean by there not being a game to it is that there's no winning or losing, or even evaluating success. Everyone gives their best clues (by some metric; sometimes people optimize for fun rather than clarity), you solve the boards and get a score, but the score is totally meaningless. It can't even be compared across sessions.

It turns out to be quite hard to add a game into it. I thought about the problem for a year before deciding that there was no viable way to do it within the constraints of the physical game, and it'd need to be online. For the last few weeks I've been working on an async online word-game inspired by So Clover, where one of the tihngs I wanted to do was to add an actual game (as a competitive mode), and so far the feedback from my playtesters has been that they're not interested in any of those plans, and just want to use it as a chill word game sandbox and share puzzle links over WhatsApp. (The site isn't ready for public consumption, but if anyone here wants to try the game out with some friends, hit me up with an email and I'll send you a link. Contact details in HN profile.)


I've emailed you, thanks!


DROdio here, CEO of Storytell.ai

Thanks for trying Storytell for coding work, Dan!

When you say it "I don't think it took too much longer to get working code than it would've taken if I just coded up the entire thing by hand with no assistance. I'm going to guess that it took about twice as long, but for all I know it was a comparable amount of time." → I'm actually amazed that it performed as well as it did for native code generation.

We put code generation in the "Use with Caution" bucket as I describe in https://web.storytell.ai/blog/the-intersection-of-ai-curious...


Excellent article, with multiple directions of rabbit holes to descend. I liked the linked essay on "The Bitter Lesson": http://www.incompleteideas.net/IncIdeas/BitterLesson.html

I liked the Mastodon thread linked from the appendix, re Dave Sirlin's theory of "scrubs" (who'd eschew the post's geometric tactic) versus "good players": https://mastodon.social/@danluu/110544419353766175

Which in turn links to the original imgur post describing the Warhammer 40K match between Wheels and Shooter: https://imgur.com/a/V0gND

+1 to nemetroid's recommendation of "So Clover," which is indeed more of a pastime than a game, but it's still great and belongs on any list of great word games.

I also like "Contact," which is playable without any props: https://quuxplusone.github.io/blog/2021/11/12/contact/


Adding to the list of related games at the end of the article, I recently played "Poetry for Neanderthals" and thought it was quite fun, although really once you've figured out how to trick your brain into thinking with grunts, it becomes easy quite quickly because then you tap into the primal part of your brain that prefers single syllables. But bashing people with the rubber hammer kept it amusing for longer than it probably should.


I played "Poetry for Neaderthals" once a few months ago, and concluded that its enjoyability must really depend on the group. My wife and I were playing at a meetup with a couple of party-game guys who maybe weren't the brightest bulbs in the box (they were the ones who brought the game, but they'd never played it before either). This made it no trouble at all when either of us was the "master," but excruciatingly painful when either of them was.

Like, suppose the word is WINDOW. They'd be like, "Um... house. [long pause] Grass, sky. Glass! Um... [long pause] see? Eye look at?" And I'd be like, "This is a thing in the wall of a house. You can see through it. It's made out of glass. Um... it has panes, and a sill. It might have drapes next to it. You go to it when you want to see out of the house, but it's not the door. A thief might come in through it," etc. etc.

Once you realize you can just say whatever you like (as long as it's in words of one syllable), it seems like the whole game is "cooked." Even with a group of uniformly competent players, I feel like it would just devolve into listening very carefully to a rapid-fire stream of words to try to detect any slips — i.e. real-time proofreading — which to me doesn't count as an enjoyable way to spend a game night.


I think the total number of code-names grids possible is something like 210 344 706 000, so the 40 cards (plus 4 rotations, so 160 possible grids) are only a tiny, tiny fragment of those possible.

But it does mean that defeating the bot would only mean creating a custom grid, which sounds very practical virtually, and possible (but harder) in person.


I did a quick search, and there are generators that I guess you bring up on your phone, like so:

https://code-names.netlify.app


There's also an official app that has some nice features:

- You can generate grids on multiple devices with a seed

- If the phone displaying the grid falls over, it automatically hides the grid.

I don't know if the grids in the app are truly random or if they follow some constraints though.


I don't know the game that much, but ways to create random 5x5 grid seems pretty simple when I quickly try to think about one.

What about having 25 scrabble-like squares in a bag, and the spymasters pick randomly in the bag. Each square has a number from 1 to 25 that correspond to one position on the 5x5 grid, and one extra square is chosen to be the black square and shown to the spymasters. The spymasters have a pen and a piece of paper with a 5x5 grid where they can mark the information they receive.

(that is if the spymasters are not informed of the position for the other team, I'm not sure if it's the case or not in the real game. If not, it's even simpler: both spymasters look at the result of every pick, the squares are colored and the order in which they are picked is the order they are on the grid)


That adds pretty noticeable friction over the pre-printed cards, so I think the pre-printed cards make a lot of sense to have.

Note that the game already comes with 25 colored tiles (red / blue / white) which are used to cover the game board, so what you describe could be easily done with the existing game by putting those 25 tiles in a bag, shaking it, and having the spymasters secretly draw all 25 and fill in a grid in the order they draw them, and then proceed with the game as normal from there. I doubt many people would want to bother though.

> that is if the spymasters are not informed of the position for the other team

The spymasters both know all information, so it is indeed even simpler.


The way I would do it: Get a board with a grid of 5x5 insets (like a Big Boggle board), a screen to hide it, 25 colored marbles (9 blue, 8 red, 1 black, 7 white), and a bag. Shake the marbles in the bag and empty it onto the board, shuffling it around until each marble is in a hole.

(Add another red marble if you want to alternate the starting team without switching their color and remove a red or blue marble each time.)


You are right, it is more cumbersome, but it is worth doing it if people have played a lot and they start to unconsciously remember the "weird pattern", which is basically ruining the game. I would say the printed card can be used when that risk is low.


This is an interesting view of how random number based security is compromised for economic practicalities (though the meanings of "security" and "compromised" might be overstretched here).

For completeness, I wondered how many cards would be required to give the complete set of patterns.

If we number the positions in the 5x5 grid such that the top row has positions 1-5, the second row has 6-10 and so on, the grid positions can be converted to a sequence and we can use the permutation formula to find the number of arrangements. To account for rotations, we can divide the final value by 4 since every arrangement can be rotated and is therefore valid.

Of the 25 cards, there are 7 white, 8 red, 8 blue, 1 black and 1 double agent that can be red or blue, also deciding which team goes first. We can treat this final card as one of a kind, then double the formula output to account for cases where it is swapped to the other team.

Permutations of a multiset has a standard formula [0] that calculates a result from these values (rolling in the double agent factor of 2 and rotation division factor of 4):

25! / (7!8!8!1!1! * 2) = 946,551,177,000

(edit: as pointed out, this is 9 times too large as the double agent can indistinguishably replace each of the other 8 cards - a corrected value is 105,172,353,000)

This is (edit: still) more layout cards than have ever been printed across all production runs of Codenames, and would probably not fit into the current box size.

[0] https://en.wikipedia.org/wiki/Multinomial_theorem#Number_of_...


> To account for rotations, we can divide the final value by 4 since every arrangement can be rotated and is therefore valid.

Note that this is only approximately correct, since some layouts will have nontrivial symmetries. (Edit: Actually no they won't due to parity reasons! Oops. So that step is exact after all.)

Edit: Actually, this isn't correct either, and in a more serious way:

> Of the 25 cards, there are 7 white, 8 red, 8 blue, 1 black and 1 double agent that can be red or blue, also deciding which team goes first. We can treat this final card as one of a kind, then double the formula output to account for cases where it is swapped to the other team.

On the layout cards, nothing distinguishes the double agent -- the double agent is purely a matter of representation, it's not part of the actual layout. So doing things this way will give you a number that's too large by a factor of about 8 or 9.

What you want to do here (ignoring rotations) is take 25!/(9!8!7!) to get the count with 9 red and 8 blue, then double it to include the count with 8 red and 9 blue, then divide by 4 to account for rotation (contrary to what I said earlier no need to account for symmetries because the numbers mean that none of the layouts can be rotationally symmetric), so you get a total of

25!/(9!8!7!2) = 105,172,353,000

So yeah about 9 times smaller than what you wrote. For what it's worth, anyway. :P


> Actually no they won't due to parity reasons!

Can you elaborate? I think I can construct some boards that effectively have complete rotational symmetry.

For the purposes of the game, black can be thought of as another white card (since you will never reveal it in the middle of a round), and the double agent can be placed in the center. Then, you just need to place the remaining categories with rotational symmetry (e.g. red on the two main diagonals, and blue on the squares directly clockwise from those). So, for instance:

  RBwwR
  wRBRB
  wBdBw
  BRBRw
  RwwBR
(w)hite and (d)ouble-agent are in lowercase; feel free to replace any single white square with blAck (Assassin).


Double agent isn't a color that appears on the card. A card has 7 white spaces, 1 black space, 9 spaces of one color, and 8 spaces of the other color. If you think that white and black are separate colors, you can't make a rotationally symmetric 5x5 board.

From the perspective of a player who is memorizing boards, it's beneficial to know which square is black, so as the memorizer's adversary it's probably best to put the black square in all 8 non-blue non-red squares for a given layout of blue and red squares.


The reason why I claim that black is uninteresting for the purposes of board memorization is that if you are explicitly stalling until there is enough information to uniquely identify the game board, then either the black square is never uncovered, or the opposing team uncovers the black square, in which case you win automatically.

It's not difficult to be adversarial against the proposed naive strategy (just generate boards with enough overlap such that you can't uniquely identify them from such a small number of revealed squares), but it's easiest to generate fully random boards (without any concerns for "weird" boards) and be done with it.


You could eliminate a board from consideration because a square was revealed to be white rather than black.


Yes, I agree completely - I realised something was off in an espirit de l'escalier way not long after I posted.

This is great news for my proposed box redesign!


This is exactly why i like this game. Upon first playing it, the attacks were obvious to beat anyone who was playing legitimately. Assuming both teams know this fact, means the choice is, play the game to win and it is boring or play the game to have fun and challenge yourself and partner. During every occasion, the latter has prevailed.


This could actually make a good interview problem for the ability to focus on the stated goal and to play well with others. Use Codenames or create a game with many exploits that will jump out to smart people. Be explicit the point of the exercise is for everyone to have fun and play in the spirit of the game. Do they do that, or does their desire to be right and “figure it out” trample the real goal?

Good test for an IC that wants to jump to a manager, cross-team or especially sales role. Believe me, you don’t close deals by dunking on your prospects.


This is really neat (and now I want to memorize a few combinations)

But it's very similar to chess, where positional sense is crucial




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: