# Posted By

ronaldtm on 01/02/09

# Statistics

Viewed 336 times
Favorited by 0 user(s)

# Monte Carlo simulation for the Monty Hall Problem

/ Published in: Groovy
Save to your folder(s)

Copy this code and paste it in your HTML
`/* * 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}%."    }}`