Skip to content

Instantly share code, notes, and snippets.

@kaimingguo
Created March 2, 2025 08:43
Show Gist options
  • Save kaimingguo/0b679d108d6f847f7d489e445fe0cbe4 to your computer and use it in GitHub Desktop.
Save kaimingguo/0b679d108d6f847f7d489e445fe0cbe4 to your computer and use it in GitHub Desktop.
Taiwan Powerball numbers generator
[package]
name = "tw-powerball-rs"
version = "0.1.0"
edition = "2021"
[dependencies]
rand = "0.9"
use rand::seq::SliceRandom;
use rand::Rng;
use std::io::{self, Write};
struct PowerLottery {
main_numbers: Vec<u8>,
special_number: u8,
}
impl PowerLottery {
const MAIN_NUMBERS_COUNT: usize = 6;
const MAIN_NUMBER_MAX: u8 = 38;
const SPECIAL_NUMBER_MAX: u8 = 8;
fn generate() -> Self {
let mut rng = rand::rng();
let mut numbers: Vec<u8> = (1..=Self::MAIN_NUMBER_MAX).collect();
numbers.shuffle(&mut rng);
let mut main_numbers = numbers[0..Self::MAIN_NUMBERS_COUNT].to_vec();
main_numbers.sort();
let special_number = rng.random_range(1..=Self::SPECIAL_NUMBER_MAX);
PowerLottery {
main_numbers,
special_number,
}
}
fn display(&self) {
println!("\n=== Taiwan Power Lottery Numbers ===");
print!("First Section (1-38): ");
for num in &self.main_numbers {
print!("{} ", num);
}
println!("\nSecond Section (1-8): {}", self.special_number);
println!("====================================");
}
}
fn prompt(message: &str) -> io::Result<String> {
print!("{}", message);
io::stdout().flush()?;
let mut input = String::new();
io::stdin().read_line(&mut input)?;
Ok(input.trim().to_string())
}
fn main() -> io::Result<()> {
println!("Taiwan Power Lottery Number Generator");
loop {
let ticket = PowerLottery::generate();
ticket.display();
let answer = prompt("\nGenerate another set of numbers? (y/n): ")?;
if !answer.eq_ignore_ascii_case("y") {
break;
}
}
Ok(())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment