# high_card_simulation

high_card_simulation, a MATLAB code which simulates a game in which you have one chance to select the highest card from a deck.

You are given a deck of DECK_SIZE cards.

Your goal is to select the high card. For convenience, we can assume the cards are a permutation of the integers from 1 to DECK_SIZE, but in fact the user mustn't see such values or else it's obvious which is the largest card. (For a truly difficult problem, we'd have to work harder to disguise the range of values and the likely distribution!)

Your choice is made under the following rules: You may turn over one card at a time. When a card is turned over, you may declare that to be your choice, or else turn over another card. If you have not chosen a card by the end, then your choice is the final card.

If you have no idea what to do, and simply decide in advance to pick a card "at random", that is, for example, you decide to pick the 15th card before having seen any cards, then your probability of winning is 1/DECK_SIZE.

The question is, can you do better than that?

A good strategy is as follows: always look at the first SKIP_NUM cards without choosing them. Then choose the very next card you encounter that is larger than the cards you skipped.

Using this code, you can easily see that skipping 5 cards is much better than picking one at random, skipping 10 is even better, and so on...up to some point, when the benefit begins to disappear. Of course, you can't skip too many cards, and in fact, the results seem to be best for somewhere around 30 to 35 cards skipped. For problems like this, the optimal value is somewhere around 1 / e, where E is the base of the natural logarithm system.

### Usage:

high_card_simulation ( deck_size, skip_num, trial_num )
where
• n is the number of times the dice are thrown.

### Languages:

high_card_simulation is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version.

### Related Data and codes:

brownian_motion_simulation, a MATLAB code which simulates Brownian motion in an M-dimensional region.

chuckaluck_simulation, a MATLAB code which simulates the Chuck-a-Luck gambling game.

coin_simulation, a MATLAB code which looks at ways of simulating or visualizing the results of many tosses of a fair or biased coin.

dice_simulation, a MATLAB code which simulates N tosses of M dice, making a histogram of the results.

duel_simulation, a MATLAB code which simulates N repetitions of a duel between two players, each of whom has a known firing accuracy.

fair_dice_simulation, a MATLAB code which simulates N tosses of 2 dice, making a histogram of the results.

fire_simulation, a MATLAB code which simulates a forest fire over a rectangular array of trees, starting at a single random location.

gamblers_ruin_simulation, a MATLAB code which simulates the game of gambler's ruin.

ising_2d_simulation, a MATLAB code which carries out a Monte Carlo simulation of an Ising model, a 2D array of positive and negative charges, each of which is likely to "flip" to be in agreement with neighbors.

jai_alai_simulation, a MATLAB code which simulates matches of jai alai.

poisson_simulation, a MATLAB code which simulates a Poisson process in which events randomly occur with an average waiting time of Lambda.

random_walk_1d_simulation, a MATLAB code which simulates a random walk in a 1-dimensional region.

random_walk_2d_avoid_simulation, a MATLAB code which simulates a self-avoiding random walk in a 2-dimensional region.

random_walk_2d_simulation, a MATLAB code which simulates a random walk in a 2-dimensional region.

random_walk_3d_simulation, a MATLAB code which simulates a random walk in a 3-dimensional region.

reactor_simulation, a MATLAB code which a simple Monte Carlo simulation of the shielding effect of a slab of a certain thickness in front of a neutron source. This code was provided as an example with the book "Numerical Methods and Software."

roulette_simulation, a MATLAB code which simulates the spinning of a roulette wheel and the evaluation of certain common roulette bets.

sir_simulation, a MATLAB code which simulates the spread of a disease through a hospital room of M by N beds, using the SIR (Susceptible/Infected/Recovered) model.

traffic_simulation, a MATLAB code which simulates the cars waiting to get through a traffic light.

truel_simulation, a MATLAB code which simulates N repetitions of a duel between three players, each of whom has a known firing accuracy.

urn_simulation a MATLAB code which simulates an experiment in which k colored marbles are drawn from an urn containing a total of n marbles. The quantity of interest is the number of marbles of each color.

### Reference:

1. Paul Nahin,
Digital Dice: Computational Solutions to Practical Probability Problems,
Princeton University Press, 2008,
ISBN13: 978-0-691-12698-2,
LC: QA273.25.N34.

### Source Code:

• high_card_probability.m, computes the exact probability that a high card strategy that skips the first K-1 cards and then takes the next card that is higher will actually select the highest card in the whole deck of N cards.
• high_card_simulation.m, the code.
• high_card_shuffle.m, a secondary code, which tries to compute, for small N, a sequence of integers that could be used as the values of the cards in the high card guessing game, in a way that guarantees that the values of the cards seen so far give no clues as to what the maximum card actually is.

Last revised on 17 January 2019.