Solution written in Go for challenge 2012-10-12 on ProgrammingPraxis.com
// The MIT License (MIT) | |
// Copyright (c) 2012 Christian Siegert | |
// | |
// Permission is hereby granted, free of charge, to any person obtaining a copy | |
// of this software and associated documentation files (the "Software"), to deal | |
// in the Software without restriction, including without limitation the rights | |
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
// copies of the Software, and to permit persons to whom the Software is | |
// furnished to do so, subject to the following conditions: | |
// | |
// The above copyright notice and this permission notice shall be included in | |
// all copies or substantial portions of the Software. | |
// | |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
// SOFTWARE. | |
// Exercise: | |
// In the study of probability, the Birthday Paradox states that in a group of | |
// 23 people, there is a 50% chance that two will have the same birthday; in a | |
// group of 57 people, the odds rise to 99%. Your task is to simulate the | |
// birthday paradox over many trials and verify the odds. | |
// http://programmingpraxis.com/2012/10/12/birthday-paradox/ | |
package main | |
import ( | |
"fmt" | |
"math/rand" | |
) | |
func main() { | |
fmt.Printf("Chance of same birthday in group with 23 people: %.0f%%\n", getChanceOfSameBirthdayInGroup(23)*100) | |
fmt.Printf("Chance of same birthday in group with 57 people: %.0f%%\n", getChanceOfSameBirthdayInGroup(57)*100) | |
} | |
func getChanceOfSameBirthdayInGroup(groupSize uint) float32 { | |
n := 10000 | |
numberOfSameBirthdays := 0 | |
for i := 0; i < n; i++ { | |
if isSameBirthdayInGroup(groupSize) { | |
numberOfSameBirthdays++ | |
} | |
} | |
return float32(numberOfSameBirthdays) / float32(n) | |
} | |
func isSameBirthdayInGroup(groupSize uint) bool { | |
birthdays := make(map[int]uint8) | |
for i := uint(0); i < groupSize; i++ { | |
birthday := rand.Intn(365) | |
birthdays[birthday]++ | |
if birthdays[birthday] == 2 { | |
return true | |
} | |
} | |
return false | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
Console output: