wiki-visible-lattice-points.rs

1.0 kB · rust · 38 lines

1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board, Grid};3use mrlynum::factor::gcd;4use mrlynum::lattice::coprime_pairs;56const N: usize = 100;78fn main() -> Result<()> {9    let mut board = Board::square();10    let grid = Grid::new(board.frame(0.08), N, N, 0.0);11    let mut lit = 0u64;12    let mut deepest = 1usize;13    for row in 0..N {14        for col in 0..N {15            let layer = gcd(col + 1, N - row);16            if layer == 1 {17                lit += 1;18                grid.fill(&mut board, col, row, ink::blue());19                continue;20            }21            deepest = deepest.max(layer);22            let (x, y, w, h) = grid.cell(col, row);23            let side = w / layer as f64;24            board.rect(25                x + (w - side) / 2.0,26                y + (h - side) / 2.0,27                side,28                side,29                ink::dim(),30            );31        }32    }33    assert_eq!(lit, coprime_pairs(N));34    assert_eq!(lit, 6087);35    assert_eq!(deepest, N);36    save("wiki-visible-lattice-points", &board)?;37    Ok(())38}