Skip to content

Instantly share code, notes, and snippets.

@dbehnke
Last active August 29, 2015 14:03
Show Gist options
  • Save dbehnke/eee7f1b9e1add7edca0f to your computer and use it in GitHub Desktop.
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.
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