wiki-missing-digit-numbers.rs

1.1 kB · rust · 46 lines

1use figures::{ink, save, Board, Grid};2use mrlyrs::core::error::Result;3use mrlyrs::num::prime::flags;45const SIDE: usize = 100;6const DIGIT: usize = 7;7const KEPT: usize = 6561;8const PRIMES: usize = 680;910fn main() -> Result<()> {11    let mut board = Board::square();12    let frame = board.frame(0.08);13    let grid = Grid::new(frame, SIDE, SIDE, 0.0);14    let top = SIDE * SIDE;15    let prime = flags(top);16    let mut kept = 0usize;17    let mut lit = 0usize;18    for (n, &is_prime) in prime.iter().enumerate().take(top) {19        if has(n, DIGIT) {20            continue;21        }22        kept += 1;23        let color = if is_prime {24            lit += 1;25            ink::yellow()26        } else {27            ink::blue()28        };29        grid.fill(&mut board, n % SIDE, n / SIDE, color);30    }31    assert_eq!(kept, 9usize.pow(4));32    assert_eq!(kept, KEPT);33    assert_eq!(lit, PRIMES);34    save("wiki-missing-digit-numbers", &board)?;35    Ok(())36}3738fn has(mut n: usize, digit: usize) -> bool {39    for _ in 0..4 {40        if n % 10 == digit {41            return true;42        }43        n /= 10;44    }45    false46}