How to generate random Powerball lottery numbers (pick 5 numbers from 1-69 + 1 Powerball from 1-26) in Go

1 Answer

0 votes
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

*/

 



answered Jul 30 by avibootz

Related questions

...