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}