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}