research-core.rs

1.2 kB · rust · 35 lines

1use mrlycore::errors::Result;2use mrlyfig::board::{Board, Frame};3use mrlyfig::{ink, save, Grid};4use mrlymath::bang;5use mrlymath::two::designs;67fn main() -> Result<()> {8    let mut board = Board::square();9    let area = board.frame(0.08);10    let universe = bang::bang(2);11    assert_eq!(universe.total, 16);12    assert_eq!(universe.distinct(), 6);13    let canonical: Vec<u128> = universe.canonical().iter().map(|d| d.i).collect();14    assert_eq!(canonical, vec![0, 1, 3, 6, 7, 15]);15    let gutter = area.w * 0.030;16    let side = (area.w - 3.0 * gutter) / 4.0;17    for code in 0..16u128 {18        let design = universe.design(code);19        let color = if design.canonical {20            ink::yellow()21        } else {22            ink::blue()23        };24        let x = area.x + (code % 4) as f64 * (side + gutter);25        let y = area.y + (code / 4) as f64 * (side + gutter);26        let frame = Frame::new(x, y, side, side);27        board.rect(frame.x, frame.y, frame.w, frame.h, ink::panel());28        let cells = designs::create(code, 2, 4, 0, 2)?;29        assert_eq!(cells.width(), 16);30        Grid::new(frame, 16, 16, 0.0)31            .paint(&mut board, &cells, |kind| (kind != 0).then_some(color));32    }33    save("research-core", &board)?;34    Ok(())35}