# The Riddler 2: Which Geyser Gushes First?

This is the second of FiveThirtyEight’s weekly logic problems. Hopefully I’ll be able to continue keeping up with them

## The Problem

“You arrive at the beautiful Three Geysers National Park. You read a placard explaining that the three eponymous geysers — creatively named A, B and C — erupt at intervals of precisely two hours, four hours and six hours, respectively. However, you just got there, so you have no idea how the three eruptions are staggered. Assuming they each started erupting at some independently random point in history, what are the probabilities that A, B and C, respectively, will be the first to erupt after your arrival?

## The Process

Fricken conditional probability. This problem was really an exercise in starting small and working my way up. I started with two geysers going off on two hour periods, two going off on 2/4 hour periods, three on a 2/2/2 cycle and finally the 2/4/6 that the problem called for.

## The Solution

Well the resulting equation looks like this: This is the sum of the probability that the geyser goes off before either of the other two have, represented by the (1-t/t_0)’s. Integrate this over one period, 2, because it is the full period of A. Doing this for each gives the following probabilities:

#### p(A): 23/36, p(B): 8/36, p(C): 5/36

This thankfully sums to one and was quickly tested in 10,000 MATLAB simulations. The code for that is below:

```clear all, clc, close all
viewings = zeros(3,1);
for i = 0:10000000
a_start = floor(rand(1,1)*2*60);
b_start = floor(rand(1,1)*4*60);
c_start = floor(rand(1,1)*6*60);
person_arrival = floor(rand(1,1)*10000);
eruption_viewing = 0;
while eruption_viewing == 0
if mod(person_arrival,120) == a_start
eruption_viewing = 1;
viewings(1,1) = viewings(1,1) + 1;
end
if mod(person_arrival,240) == b_start
eruption_viewing = 1;
viewings(2,1) = viewings(2,1) + 1;
end
if mod(person_arrival,360) == c_start
eruption_viewing = 1;
viewings(3,1) = viewings(3,1) + 1;
end
person_arrival = person_arrival+1;
end
end
viewings = viewings./i
expected = [23/36;8/36;5/36]
differences = viewings - expected
```

The differences in the two was less than 1% in total. Cool!