wiki-kronecker-product.rs
1.0 kB · rust · 28 lines
1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board, Frame, Grid};3use mrlymath::two::designs;45const CODE: u128 = 7;6const LEVELS: [usize; 3] = [1, 2, 3];7const GUTTER: f64 = 60.0;89fn main() -> Result<()> {10 let mut board = Board::square();11 let area = board.frame(0.08);12 let tile = (area.w - 2.0 * GUTTER) / 3.0;13 let top = area.y + (area.h - tile) / 2.0;14 let mut fills = Vec::new();15 for (index, level) in LEVELS.iter().enumerate() {16 let design = designs::create(CODE, 3, *level, 0, 2)?;17 let side = design.width();18 assert_eq!(side, 3usize.pow(*level as u32));19 let x = area.x + index as f64 * (tile + GUTTER);20 let tone = if index == 0 { ink::yellow() } else { ink::blue() };21 Grid::new(Frame::new(x, top, tile, tile), side, side, 0.0)22 .paint(&mut board, &design, |kind| (kind != 0).then_some(tone));23 fills.push(design.types().sum());24 }25 assert_eq!(fills, [8u64, 64, 512]);26 save("wiki-kronecker-product", &board)?;27 Ok(())28}