33 lines
1.1 KiB
Scala
33 lines
1.1 KiB
Scala
import scala.util.Random
|
|
|
|
object MontyHallSimulation {
|
|
def main(args: Array[String]) {
|
|
val samples = if (args.size == 1 && (args(0) matches "\\d+")) args(0).toInt else 1000
|
|
val doors = Set(0, 1, 2)
|
|
var stayStrategyWins = 0
|
|
var switchStrategyWins = 0
|
|
|
|
1 to samples foreach { _ =>
|
|
val prizeDoor = Random shuffle doors head;
|
|
val choosenDoor = Random shuffle doors head;
|
|
val hostDoor = Random shuffle (doors - choosenDoor - prizeDoor) head;
|
|
val switchDoor = doors - choosenDoor - hostDoor head;
|
|
|
|
(choosenDoor, switchDoor) match {
|
|
case (`prizeDoor`, _) => stayStrategyWins += 1
|
|
case (_, `prizeDoor`) => switchStrategyWins += 1
|
|
}
|
|
}
|
|
|
|
def percent(n: Int) = n * 100 / samples
|
|
|
|
val report = """|%d simulations were ran.
|
|
|Staying won %d times (%d %%)
|
|
|Switching won %d times (%d %%)""".stripMargin
|
|
|
|
println(report
|
|
format (samples,
|
|
stayStrategyWins, percent(stayStrategyWins),
|
|
switchStrategyWins, percent(switchStrategyWins)))
|
|
}
|
|
}
|