Revision: 10514
at January 2, 2009 22:35 by ronaldtm

Initial Code
```/*
* Monte Carlo simulation for the Monty Hall Problem:
* http://en.wikipedia.org/wiki/Monty_Hall_problem.
*/

import java.util.*

class MontyHall {
static def RANDOM = new Random()

def doors = ['car','goat','goat']

MontyHall() {
Collections.shuffle(doors)
}

def pick_door() {
RANDOM.nextInt(3)
}

def reveal_door(pick) {
def available_doors = [0, 1, 2] - [doors.indexOf('car'), pick]
available_doors[RANDOM.nextInt(available_doors.size())]
}

// Return true if the player won by staying
// with their first choice, false otherwise.
def staying_wins(pick) {
won(pick)
}

// Return true if the player won by switching, false otherwise.
def switching_wins(pick, open_door) {
def switched_pick = ([0, 1, 2] - [open_door, pick])[0]
won(switched_pick)
}

// Return true if the player's final pick hides a car, false otherwise.
def won(pick) {
doors[pick] == 'car'
}

public static void main(String[] args) {
def ITERATIONS = 1000000

def staying = 0
def switching = 0

ITERATIONS.times {
def mh = new MontyHall()
def picked = mh.pick_door()
def revealed = mh.reveal_door(picked)
if (mh.staying_wins(picked)) staying++
if (mh.switching_wins(picked, revealed)) switching++
}

def staying_rate = (staying / ITERATIONS) * 100
def switching_rate = (switching / ITERATIONS) * 100

println "Staying: \${staying_rate}%."
println "Switching: \${switching_rate}%."
}
}```

Initial URL

Initial Description

Initial Title
`Monte Carlo simulation for the Monty Hall Problem`

Initial Tags
`groovy`

Initial Language
`Groovy`