package main
import (
"crypto/rand"
"fmt"
"math/big"
"sort"
)
/*
Generate random Powerball lottery numbers:
- 5 distinct numbers from 1–69
- 1 distinct Powerball number from 1–26
This program uses:
- crypto/rand for secure random numbers
- math/big for integer extraction
- map[int]bool for uniqueness
- idiomatic Go functions and structure
*/
/*
randomInt(min, max):
Returns a secure random integer in the inclusive range [min, max].
*/
func randomInt(min, max int) int {
// Range size
n := max - min + 1
// Generate a secure random number in [0, n)
r, _ := rand.Int(rand.Reader, big.NewInt(int64(n)))
// Shift into [min, max]
return int(r.Int64()) + min
}
/*
generateMainNumbers():
Generates 5 UNIQUE numbers in the range [1, 69].
Uses a map[int]bool to enforce uniqueness.
*/
func generateMainNumbers() []int {
chosen := make(map[int]bool)
for len(chosen) < 5 {
n := randomInt(1, 69)
chosen[n] = true
}
// Convert map keys → slice
main := make([]int, 0, 5)
for n := range chosen {
main = append(main, n)
}
sort.Ints(main) // sort for nice output
return main
}
/*
generatePowerball():
Generates a single number in the range [1, 26].
*/
func generatePowerball() int {
return randomInt(1, 26)
}
func main() {
mainNumbers := generateMainNumbers()
powerball := generatePowerball()
fmt.Println("Random Powerball numbers:")
fmt.Printf("Main numbers: ")
for _, n := range mainNumbers {
fmt.Printf("%d ", n)
}
fmt.Println()
fmt.Printf("Powerball: %d\n", powerball)
}
/*
run:
Random Powerball numbers:
Main numbers: 13 21 27 29 58
Powerball: 2
*/