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}