demo-primes.rs

1.1 kB · rust · 35 lines

1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board, Grid, Ramp};3use mrlynum::prime::Sieve;45const LIMIT: usize = 400;6const SIDE: usize = 20;78fn main() -> Result<()> {9    let mut board = Board::square();10    let area = board.frame(0.08);11    let mut sieve = Sieve::new(LIMIT);12    sieve.finish();13    assert_eq!(sieve.count(), 78);14    assert_eq!(sieve.rank(), 8);15    let types = sieve.types();16    let struck = (2..=LIMIT).filter(|&n| types[n] > 1).count();17    assert_eq!(struck, 321);18    let top = *types.iter().max().expect("the sieve is not empty");19    assert_eq!(top, 9);20    let ramp = Ramp::tone(ink::dim(), ink::orange());21    let grid = Grid::new(area, SIDE, SIDE, 0.10);22    for row in 0..SIDE {23        for col in 0..SIDE {24            let number = row * SIDE + col + 1;25            let tone = match types[number] {26                0 => continue,27                1 => ink::yellow(),28                mark => ramp.at((mark - 2) as f64 / (top - 2) as f64),29            };30            grid.fill(&mut board, col, row, tone);31        }32    }33    save("demo-primes", &board)?;34    Ok(())35}