research-magic.rs
1.7 kB · rust · 56 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;7use mrlymath::two::Cell2d;89const SIDE: usize = 15;1011fn letters(first: (u128, usize), second: (u128, usize)) -> [MagicLayer; 2] {12 [13 MagicLayer::new(Bang::new(first.0, 2, 2), first.1),14 MagicLayer::new(Bang::new(second.0, 2, 2), second.1),15 ]16}1718fn panel(board: &mut Board, frame: Frame, cells: &Cell2d, color: Color) {19 Grid::new(frame, SIDE, SIDE, 0.09).paint(board, cells, |kind| (kind != 0).then_some(color));20}2122fn main() -> Result<()> {23 let mut board = Board::square();24 let area = board.frame(0.08);25 let gutter = area.w * 0.055;26 let side = (area.w - gutter) / 2.0;27 let top = area.y + (area.h - side) / 2.0;2829 let forward = letters((7, 3), (14, 5));30 let reverse = letters((14, 5), (7, 3));31 assert_eq!(word::side(&forward)?, SIDE as u128);32 assert_eq!(word::side(&reverse)?, SIDE as u128);33 assert_eq!(word::fill(&forward)?, word::fill(&reverse)?);3435 let left = Cell2d::new(magic(&forward)?);36 let right = Cell2d::new(magic(&reverse)?);37 assert_eq!((left.width(), left.height()), (SIDE, SIDE));38 assert_eq!((right.width(), right.height()), (SIDE, SIDE));39 assert_eq!(left.types().sum(), right.types().sum());40 assert_ne!(left.types(), right.types());4142 panel(43 &mut board,44 Frame::new(area.x, top, side, side),45 &left,46 ink::blue(),47 );48 panel(49 &mut board,50 Frame::new(area.x + side + gutter, top, side, side),51 &right,52 ink::orange(),53 );54 save("research-magic", &board)?;55 Ok(())56}