# The Three-Goats-Problem: The Solution

There is an easy way to check the forecasts: write a simulation. In APL, it is very easy and should take only minutes to write the code – here it is:

``` r←Make strategy;doors;hit;first;rest;opened;toBeOpened
doors←1 2 3
hit←?3 ⍝ here is the car
first←?3 ⍝ candidates first choice
rest←doors≠hit
toBeOpened←(rest/doors)~hit,first  ⍝ one of them needs to be opened
opened←toBeOpened[?⍴toBeOpened]    ⍝ really opened by the showmaster

:Select strategy
:CaseList 1 'pigheaded'            ⍝---candidate don't change
r←hit=first
:CaseList 2 'at random'            ⍝---candidate choose at random
r←hit=(doors~opened)[?2]
:CaseList 3 'fall down'            ⍝---candidate choose the other one
r←hit=doors~first,opened
:EndSelect```

Via the right argument you can choose one of the three strategies. But to get a useful result, we need to run this program at least 10.000 times. For this we will use a defined operator:

``` x←type(f Loop)noof;i
x←i←0
:Repeat
x←x+f type
:Until noof=i←i+1
x←⌊0.5+100×x÷noof```

Now we can check the result of the first strategy:

```      1 Make Loop 10000
34```

If you did expect 50%: At the moment when you as the candidate choose a door, it was a 1:3 or 33% chance. This is because the car was moved behind one of three doors.

If you later open one door, or two doors or all doors, here, in the TV studio or in China, immediately after you made your choice, one day later or one year later, all this does not change anything: at the time given it was a 1:3 chance = 33%. It is important that you agree with this, because we come back to this result later on. So think twice before contradicting

Let’s check the second strategy now: throwing a dice.

```      2 Make Loop 10000
51```

Of course! At that moment, two doors remain, so it is a 1:2 or 50% chance.

Let’s check the last one:

```      3 Make Loop 10000
67```

That’s where most people run into trouble, and which is predicted (=without writing a simulation) by only a very small number of people.

However, the explanation is quite simple. Remember: persisting on you original choice was a 1:3 or 33% chance. This means that the other doors together had a 2:1 chance, and since one of these doors was opened without having a car behind it, the chance of the last door must be twice of 33%.

Note that the function “Make” is optimized for readability, not for speed. However, on a modern PC even 100.000 iterations should not cause a problem.

Thanks to DanBaronet, KenChakawhata, GraemeRobertson and especially PhilLast, who found the easy-to-understand final explanation after having spent hours discussing this problem.