Live data from Hacker News

How to Cheat with Math – The Russian Cards Problem

winux-arch.github.io

1–8 of 8 posts

Re: How to Cheat with Math – The Russian Cards Problem

#5
post #3

Does "the sum of my cards modulo 7 is [x]" work? It should let Bob know what the missing card is but I can't tell if it conveys sufficiently little information to Eve for it to count.

Is the modulo required? Is just "The sum of my cards is x" sufficient?

Re: How to Cheat with Math – The Russian Cards Problem

#6
post #3

Does "the sum of my cards modulo 7 is [x]" work? It should let Bob know what the missing card is but I can't tell if it conveys sufficiently little information to Eve for it to count.

Is the modulo required? Is just "The sum of my cards is x" sufficient?

Yes. For instance, if a player says the sum of their cards is 3, Eve immediately knows they have cards 0, 1 and 2.

Re: How to Cheat with Math – The Russian Cards Problem

#8
post #3

Does "the sum of my cards modulo 7 is [x]" work? It should let Bob know what the missing card is but I can't tell if it conveys sufficiently little information to Eve for it to count.

The article's definition of not revealing information is a bit unclear, but if we understand it as Eve not knowing who holds any single card, your solution seems to work. At least assuming the following code is correct :)

import itertools import functools

for eve_card in range(7): cards_left = set(range(7)) cards_left.remove(eve_card)

    mod_to_cards = [[], [], [], [], [], [], []]

    for c in itertools.combinations(cards_left, 3):
        mod = sum(c) % 7
        mod_to_cards[mod].append(set(c))

    for combs in mod_to_cards:
        i = functools.reduce(lambda x, y: x.intersection(y), combs)
        if len(i) != 0:
           print("intersection", eve_card, combs, i)

        u = functools.reduce(lambda x, y: x.union(y), combs)
        if len(u) != 6:
           print("union", eve_card, combs, u)