dkirkby / CodeNames

AI for CodeNames
MIT License
18 stars 7 forks source link

Implement optional "unlimited" clue #7

Closed dkirkby closed 7 years ago

dkirkby commented 7 years ago

When some words were not guessed in a previous round, the clue number provided with subsequent clues should generally be increased to allow old clues to be used to guess extra words. The simplest implementation would be to keep a count of un-guessed words N and increase the count for new clues by (N-1). Do we need anything more sophisticated?

dkirkby commented 7 years ago

Here are some test cases for this logic assuming that the AI selects a clue for words A+B+C:

  1. team guesses two of these (e.g., A+B) then passes.
  2. team guesses two of these followed by another correct word, e.g., A+B+D.
  3. team guesses two of these followed by an incorrect word, e.g., A+B+X

I propose that the AI should do the same thing in all three cases: remember the un-guessed word C and add one to future counts until C is guessed. Does this sound reasonable?

manurFR commented 7 years ago

I'm not totally certain I understand well what you're meaning here. What I think I understand is this : as a spymaster, when your team fails to find all the words related to a clue, at the next round you sometimes decide to add the number of remaining (unfound) words for this former clue to the number of words effectively related to your new clue. Have you often played like this ? I don't think this is the way the rules are specified, but more of a house rule. You should always give the exact number of words that, in good faith, relates to your clue. I don't think that, per the normal rules, you're allowed to tweak that number. If there are unfound words for former clues, your teammates must keep a count of them (not very hard), and use their "+1" guesses to catch up on them. (The spymaster may or may not include those remaining words in the following clues she will give, decoding that is part of the challenge.)

On the other hand, if the number of remaining words goes too high, and the opposing team gets dangerously close to winning (ie. a single "+1" guess won't suffice to win before them), there is the possibility of saying "unlimited" as the number, to cover this use case ; it says to your teammates : I haven't found a clue that refers to all the words you have to find, but with this clue and the previous ones, you may be able to find them all. So, maybe, what this program needs is a way to decide when to use "unlimited" instead of a number. It could be :

Also, I think that the "unlimited" rule is better for a gamer, expert crowd. My family games never use it. Maybe the above algorithm should be activated only as an option (triggerred by a command line argument ?).

dkirkby commented 7 years ago

This is simply a case of me not knowing the rule well enough, so thanks for the clarification! I like your logic for the "unlimited" rule and agree that it should be optional.

dkirkby commented 7 years ago

I will renamed this issue to focus on implementing "unlimited" as an optional feature.

manurFR commented 7 years ago

Also related to this enhancement : if there are no words to catch up on (ie. the set S is empty), do not offer the "+1" guess.

dkirkby commented 7 years ago

Don't you always have to offer the +1 guess, according to the rules? In other words, your team always has the option to make a random guess (even though this is probably never a good idea).

manurFR commented 7 years ago

You're right, there is always the option and it is probably never a good idea when you don't have clues. I'm in favor of not offering it (in this case), but if you're not confortable with that, I'll follow your choice.

dkirkby commented 7 years ago

My concern is that this is effectively a way for the spymaster to communicate "backchannel" information (that the set S is empty) to their team, so perhaps violates the spirit of the rules. It might not have been clear when playing, but you can always hit [ENTER] on any guess to declare that you are finished with your guesses.

manurFR commented 7 years ago

You're right, the team may not always be sure whether S is empty or not, and it is their responsibility to pass the +1 guess or use it. Let's forget it.