Last active
August 29, 2015 14:03
-
-
Save dbehnke/eee7f1b9e1add7edca0f to your computer and use it in GitHub Desktop.
A Lottery Simulator (learning exercise) in Go - pick 10 numbers for winning ticket, pick 10000 tickets each round.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"math/rand" | |
"time" | |
) | |
func pickone(ticketsize int) []int { | |
one := make([]int, ticketsize) | |
for i := 0; i < ticketsize; i++ { | |
one[i] = rand.Intn(10) | |
} | |
return one | |
} | |
func createtickets(ticketsize int, n int) [][]int { | |
tickets := make([][]int, n) | |
for i := 0; i < n; i++ { | |
tickets[i] = pickone(ticketsize) | |
} | |
//for ticket := range tickets { | |
// ticket = pickone() | |
//} | |
return tickets | |
} | |
func checkforwinner(winner []int, tickets [][]int) bool { | |
for i := 0; i < len(tickets); i++ { | |
ticket := tickets[i] | |
winningticket := true | |
for j := 0; j < len(ticket); j++ { | |
if ticket[j] != winner[j] { | |
winningticket = false | |
if j > (len(ticket) / 2) { | |
fmt.Printf("matched %d! ticket: %v drawing: %v\n", j, ticket, winner) | |
} | |
break | |
} | |
} | |
if winningticket { | |
if len(tickets) < 50 { | |
fmt.Printf("Ticket #%d is a winner! %v\n", i, tickets) | |
} | |
return true | |
} | |
} | |
return false | |
} | |
func main() { | |
rand.Seed(time.Now().UTC().UnixNano()) | |
ticketsize := 10 //numbers on a ticket | |
n := 10000 //number of tickets to pick each round | |
p := 1 //price of a ticket | |
//w := 5000 //how much a winning ticket is worth | |
jackpot := 0 //jackpot | |
ticketsales := 0 | |
starttime := time.Now().UTC().UnixNano() | |
for { | |
ticketsales = ticketsales + n | |
jackpot = jackpot + (p * n) | |
winner := pickone(ticketsize) | |
tickets := createtickets(ticketsize, n) | |
havewinner := checkforwinner(winner, tickets) | |
if havewinner { | |
fmt.Printf("Winner!!! Winning Numbers were %d\n", winner) | |
break | |
} | |
//uncomment if u want progress | |
//fmt.Printf("tickets=%d, jackpot=%d\n", ticketsales, jackpot) | |
time.Sleep(1) | |
} | |
endtime := time.Now().UTC().UnixNano() | |
totaltime := (endtime - starttime) / 1000000000 | |
fmt.Printf("totaltime = %d, ticketsales = %d, jackpot=$%d\n", | |
totaltime, ticketsales, jackpot) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment