Everyone tosses three coins, and posts it in the chat
If a player tosses three of the same, they have to toss again.
Everyone chooses the mode coin from their neighbour, and adds it to their stack
Each player, with 3+N coins, picks the mode coin in their own collection.
Ideally: the player’s own bias, is outweighed by the other player’s biases.
The final coin is the mode of all players coins.
spoiler
from numpy import median
from pprint import pprint
players = {"p1" : [1,0,1], ## playing fair"p2" : [0,0,1], ## cheating"p3" : [1,1,0], ## cheating"p4" : [1,1,0], ## cheating"p5" : [0,0,1]} ## playing fairprint("Initial rolls:")
pprint(players)
get_mode_coin = lambda x: int(median(x))
get_all_mode_coins = lambda x: [get_mode_coin(y) for y in x]
for play in players: ## Players add the mode coin from their neigbours
players[play] = players[play] + get_all_mode_coins(players.values())
print("First picks:")
pprint(players)
for play in players: ## Players collapse their collections to mode
players[play] = [get_mode_coin(players[play])]
print("Last modes:", players)
print("Final choice:", get_mode_coin([x for x in players.values()]))
Which as you can see, is no better than simply picking the median coin from the initial rolls. I thank you for wasting your time.
from numpy import median
from random import choice
from pprint import pprint
# Functions
get_mode_coin = lambda x: int(median(x))
defpick(player, wants):
for neighbor in players:
if player != neighbor:
neighbor_purse = players[neighbor]["purse"]
if wants:
if wants in neighbor_purse: # Cheat
players[play]["purse"] = players[play]["purse"] + [wants]
continue
players[play]["purse"] = players[play]["purse"] + [choice(neighbor_purse)]
# Main
players = {"p1" : {"purse": [1,0,1], "wants": False}, ## playing fair"p2" : {"purse": [0,0,1], "wants": 0}, ## cheating"p3" : {"purse": [1,1,0], "wants": 1}, ## cheating"p4" : {"purse": [1,1,0], "wants": 0}, ## cheating"p5" : {"purse": [0,0,1], "wants": False}} ## playing fairfor play in players: ## Players pick a desired coin from each of their neighbours
pick(play, players[play]["wants"])
print("First picks:")
pprint(players)
for play in players: ## Players collapse their collections to mode
players[play] = [get_mode_coin(players[play]["purse"])]
print("Last modes:", players)
print("Final choice:", get_mode_coin([x for x in players.values()]))
spoiler
from numpy import median from pprint import pprint players = {"p1" : [1,0,1], ## playing fair "p2" : [0,0,1], ## cheating "p3" : [1,1,0], ## cheating "p4" : [1,1,0], ## cheating "p5" : [0,0,1]} ## playing fair print("Initial rolls:") pprint(players) get_mode_coin = lambda x: int(median(x)) get_all_mode_coins = lambda x: [get_mode_coin(y) for y in x] for play in players: ## Players add the mode coin from their neigbours players[play] = players[play] + get_all_mode_coins(players.values()) print("First picks:") pprint(players) for play in players: ## Players collapse their collections to mode players[play] = [get_mode_coin(players[play])] print("Last modes:", players) print("Final choice:", get_mode_coin([x for x in players.values()]))
Which as you can see, is no better than simply picking the median coin from the initial rolls. I thank you for wasting your time.
The last player (or server) still can choose a result, because it knows other tosses before making it’s own.
Second attempt that factors in cheating.
spoiler
from numpy import median from random import choice from pprint import pprint # Functions get_mode_coin = lambda x: int(median(x)) def pick(player, wants): for neighbor in players: if player != neighbor: neighbor_purse = players[neighbor]["purse"] if wants: if wants in neighbor_purse: # Cheat players[play]["purse"] = players[play]["purse"] + [wants] continue players[play]["purse"] = players[play]["purse"] + [choice(neighbor_purse)] # Main players = {"p1" : {"purse": [1,0,1], "wants": False}, ## playing fair "p2" : {"purse": [0,0,1], "wants": 0}, ## cheating "p3" : {"purse": [1,1,0], "wants": 1}, ## cheating "p4" : {"purse": [1,1,0], "wants": 0}, ## cheating "p5" : {"purse": [0,0,1], "wants": False}} ## playing fair for play in players: ## Players pick a desired coin from each of their neighbours pick(play, players[play]["wants"]) print("First picks:") pprint(players) for play in players: ## Players collapse their collections to mode players[play] = [get_mode_coin(players[play]["purse"])] print("Last modes:", players) print("Final choice:", get_mode_coin([x for x in players.values()]))
So, my method doesn’t work