|
- package main
-
- import (
- "fmt"
-
- "balhau.net/tinker/hall"
- )
-
- func main() {
-
- iterations := 1000
-
- type SolutionCounter struct {
- Conservative int
- ChangerBefore int
- ChangerAfter int
- }
-
- counter := SolutionCounter{0, 0, 0}
-
- for i := 0; i < iterations; i++ {
- montyOne := hall.MontyHall{}
- montyTwo := hall.MontyHall{}
-
- conservative := hall.ConservativePlayer{}
- changer := hall.ChangerPlayer{}
-
- montyOne.SelectDoor()
- conservative.SelectDoor()
-
- montyTwo.SelectDoor()
- changer.SelectDoor()
-
- changerBefore := changer.GetDoor()
- conservativeBefore := conservative.GetDoor()
-
- openPortConservative := montyOne.OpenDoor(conservativeBefore)
- openPortChanger := montyTwo.OpenDoor(changerBefore)
-
- conservative.ChangeDoor(openPortConservative)
- changer.ChangeDoor(openPortChanger)
-
- if conservative.GetDoor() == montyOne.GetDoor() {
- counter.Conservative += 1
- }
-
- if changer.GetDoor() == montyTwo.GetDoor() {
- counter.ChangerAfter += 1
- }
-
- if changerBefore == montyTwo.GetDoor() {
- counter.ChangerBefore += 1
- }
-
- conservSol := "x"
- changerSol := "x"
-
- if conservative.GetDoor() == montyOne.GetDoor() {
- conservSol = "o"
- }
-
- if changer.GetDoor() == montyTwo.GetDoor() {
- changerSol = "o"
- }
-
- fmt.Println(fmt.Sprintf("[Conservative: s=%d,p=%d,b=%d,a=%d] -- %s", montyOne.GetDoor(), openPortConservative, conservativeBefore, conservative.GetDoor(), conservSol))
- fmt.Println(fmt.Sprintf("[Changer: s=%d,p=%d,b=%d,a=%d] -- %s", montyTwo.GetDoor(), openPortChanger, changerBefore, changer.GetDoor(), changerSol))
- fmt.Println()
- }
-
- conservative_accuracy := (float32(counter.Conservative) / float32(iterations)) * 100
- changer_before_accuracy := (float32(counter.ChangerBefore) / float32(iterations)) * 100
- changer_after_accuracy := (float32(counter.ChangerAfter) / float32(iterations)) * 100
-
- fmt.Printf(fmt.Sprintf("[Conservative: %d/%f, ChangerBefore: %d/%f, ChangerAfter: %d/%f]\n", counter.Conservative, conservative_accuracy, counter.ChangerBefore, changer_before_accuracy, counter.ChangerAfter, changer_after_accuracy))
-
- }
|