9

Is Dreidel Fair?

9.1 THE PROBLEM

The ancient Jewish game of dreidel, dating back to at least the early Middle Ages (and perhaps to the time of Christ), is a game of chance played during Hanukkah by two or more players (usually children) with a four-sided top. Each side of the top is marked with one of the four Hebrew letters Nun, Gimel, Hay, and Shin, which we’ll call N, G, H, and S, respectively. At the start of a game each of p ≥ 2 players contributes one unit of money (let’s say a dollar) to form an initial pot. (A more traditional pot might consist of pieces of candy, but here I’ll make the reward money.) Then, in some sequence agreed upon, the players successively spin the top, which, when it eventually falls over, shows one of its four sides.

The player who has just spun the top receives the following, depending on the letter that shows:

N: nothing,

H: half of the pot,

G: all of the pot,

S: −1, that is, the player must add a dollar to the existing pot.

We assume that the top is fair, and so each of these four possible outcomes occurs with probability 1/4 with each spin. The game continues until one of the players spins the first G.

Our question is obvious: the top is fair, yes, but is this a fair game? That is, do all of the players have the same average winnings after they have played a large number of games?

9.2 COMPUTER SIMULATION

Our question can be studied theoretically, but it’s not a trivial analysis; it is far more easily and quickly attacked by computer simulation. So let’s write a Monte Carlo MATLAB® code that plays ten million games of dreidel for each of the cases of p = 2, 3, 4, and 5 players, all the while keeping track of who wins how much. One assumption I’ll make in the code top.m is that money is infinitely divisible, and so the pot can be halved without limit each time an H shows on the top. Here’s how top.m works.

The code begins by asking for the value of p (the number of players). Then the p-element vector winnings is initialized to zero; winnings(i) will always be equal to the present total amount (as the code plays game after game) that player i has won. Then the first of ten million games is started, beginning with the size of pot set equal to p (each player contributes a dollar to the pot) and the initial value of player set to 1. The variable keepplaying is set equal to 1; it is this value that keeps the code in a while loop that continues the spinning of the top until the current game ends.

The spinning of our fair top is done by giving the variable spin a random value, uniform from 0 to 1. With probability 1/4 we imagine the letter N shows (so “nothing” happens), and we simply pass the top on to the next player (either to player + 1 if player < p or to player 1 if player = p). With probability 1/4 we imagine the letter H shows (and so the pot is halved and the winnings of player is incremented by the value of pot, which, after having just been halved, is itself half of its value when H showed). Then, as before, we pass the top on to the next player. With probability 1/4 we imagine the letter G shows (and so the current player gets the entire pot), and the game ends, that is, keepplaying is set to 0, which will terminate the while loop. And finally, with probability 1/4 we imagine the letter S shows (the current player has his winnings decreased by one dollar and the pot increased by one dollar), and the top is then passed to the next player.

When the while loop is exited because keepplaying was set to 0, the next game is started, with pot, player, and keepplaying all set back to their starting values. When all ten million games have been played, the results are displayed by the last line of the code, as shown in the following table of average winnings. Clearly, dreidel is not a fair game, which is a curious feature for a game played on a religious holiday! The more players there are, the more unfair it is for the players who wait the longest for their first turn with the top.

Images

top.m

p=input(‘How many players?’)

winnings=zeros(1,p);

for game=1:10000000

pot=p;

keepplaying=1;player=1;

while keepplaying==1;

spin=rand;

if spin<0.25

elseif spin<0.5

pot=pot/2;

winnings(player)=winnings(player)+pot;

elseif spin<0.75

winnings(player)=winnings(player)+pot;

keepplaying=0;

else

pot=pot+1;

winnings(player)=winnings(player)-1;

end

if player==p

player=1;

else

player=player+1;

end

end

end

winnings/10000000

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset