paper-order-sensitivity-of-kronecker-words.rs

2.0 kB · rust · 67 lines

1use mrlycore::errors::Result;2use mrlycore::Color;3use mrlyfig::board::Frame;4use mrlyfig::{ink, save, Board, Grid};5use mrlymath::bang::{magic, word, MagicLayer};6use mrlymath::name::Bang;78fn letter(code: u128) -> MagicLayer {9    MagicLayer::new(Bang::new(code, 2, 2), 2)10}1112fn lattice(board: &mut Board, frame: Frame, side: usize, thick: f64) {13    let step = frame.w / side as f64;14    for k in 0..=side {15        let offset = k as f64 * step;16        board.segment(17            (frame.x + offset, frame.y),18            (frame.x + offset, frame.y + frame.h),19            thick,20            ink::line(),21        );22        board.segment(23            (frame.x, frame.y + offset),24            (frame.x + frame.w, frame.y + offset),25            thick,26            ink::line(),27        );28    }29}3031fn panel(board: &mut Board, frame: Frame, order: (u128, u128), tone: Color) -> Result<usize> {32    let picture = magic(&[letter(order.0), letter(order.1)])?;33    lattice(board, frame, 4, 2.5);34    let grid = Grid::new(frame, 4, 4, 0.0);35    let mut filled = 0usize;36    for row in 0..4 {37        for col in 0..4 {38            if picture.get(&[row, col]) == 0 {39                continue;40            }41            filled += 1;42            let (x, y, w, h) = grid.cell(col, row);43            board.rect(x, y, w, h, tone);44        }45    }46    Ok(filled)47}4849fn main() -> Result<()> {50    let mut board = Board::square();51    let frame = board.frame(0.08);52    let half = frame.w / 2.0;53    let top = Frame::new(frame.x, frame.y, half, half);54    let low = Frame::new(frame.x + half, frame.y + half, half, half);55    let first = panel(&mut board, top, (3, 6), ink::blue())?;56    let second = panel(&mut board, low, (6, 3), ink::orange())?;57    assert_eq!((first, second), (4, 4));58    assert_eq!(59        (60            word::components(&[letter(3), letter(6)])?,61            word::components(&[letter(6), letter(3)])?62        ),63        (4, 2)64    );65    save("paper-order-sensitivity-of-kronecker-words", &board)?;66    Ok(())67}