paper-menger-pairwise-coprimality.rs
1.6 kB · rust · 53 lines
1use mrlycore::errors::Result;2use mrlyfig::board::Frame;3use mrlyfig::{ink, save, Board, Grid};4use mrlymath::three;56fn outline(board: &mut Board, cell: (f64, f64, f64, f64), thick: f64) {7 let (x, y, w, h) = cell;8 board.polyline(9 &[(x, y), (x + w, y), (x + w, y + h), (x, y + h), (x, y)],10 thick,11 ink::line(),12 );13}1415fn main() -> Result<()> {16 let sponge = three::carpet(3, 1)?;17 let types = sponge.types();18 let mut board = Board::square();19 let frame = board.frame(0.08);20 let step = frame.w / 3.0;21 let side = step - 10.0;22 let mut kept = 0usize;23 let mut near = 0usize;24 for c in 0..3 {25 let panel = Frame::new(26 frame.x + c as f64 * step,27 frame.y + c as f64 * step,28 side,29 side,30 );31 let grid = Grid::new(panel, 3, 3, 0.07);32 for a in 0..3 {33 for b in 0..3 {34 let (x, y, w, h) = grid.cell(b, a);35 if types.get(&[a, b, c]) == 0 {36 outline(&mut board, (x, y, w, h), 4.0);37 continue;38 }39 kept += 1;40 let zeros = [a, b, c].iter().filter(|value| **value == 0).count();41 if zeros <= 1 {42 near += 1;43 board.rect(x, y, w, h, ink::green());44 } else {45 board.rect(x, y, w, h, ink::dim());46 }47 }48 }49 }50 assert_eq!((kept, near), (20, 13));51 save("paper-menger-pairwise-coprimality", &board)?;52 Ok(())53}