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}