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}