demo-words.rs

1.9 kB · rust · 64 lines

1use mrlycore::errors::Result;2use mrlyfig::{ink, save, Board};3use mrlymath::bang::{magic, MagicLayer};4use mrlymath::name::Bang;5use mrlymath::two;67const SIDE: usize = 105;8const UNIT: f64 = 8.0;910fn main() -> Result<()> {11    let mut board = Board::square();12    let letters = [13        MagicLayer::new(Bang::new(7, 2, 2), 3),14        MagicLayer::new(Bang::new(14, 2, 2), 7),15        MagicLayer::new(Bang::new(9, 2, 2), 5),16    ];17    let first = two::create(7, 3, 1, 0, 2)?;18    let pair = magic(&letters[..2])?;19    let whole = magic(&letters)?;20    assert_eq!(first.width(), 3);21    assert_eq!(pair.shape, vec![21, 21]);22    assert_eq!(whole.shape, vec![SIDE, SIDE]);23    let single = first.types();24    let mut depth = vec![0usize; SIDE * SIDE];25    let mut census = [0usize; 4];26    for row in 0..SIDE {27        for col in 0..SIDE {28            let mut deep = 0usize;29            if single.get(&[row / 35, col / 35]) != 0 {30                deep += 1;31                if pair.get(&[row / 5, col / 5]) != 0 {32                    deep += 1;33                    if whole.get(&[row, col]) != 0 {34                        deep += 1;35                    }36                }37            }38            depth[row * SIDE + col] = deep;39            census[deep] += 1;40        }41    }42    assert_eq!(census, [1225, 3200, 3168, 3432]);43    assert_eq!(census.iter().sum::<usize>(), SIDE * SIDE);44    let tones = [ink::line(), ink::dim(), ink::blue()];45    let span = SIDE as f64 * UNIT;46    let edge = (board.width as f64 - span) / 2.0;47    for row in 0..SIDE {48        for col in 0..SIDE {49            let deep = depth[row * SIDE + col];50            if deep == 0 {51                continue;52            }53            board.rect(54                edge + col as f64 * UNIT,55                edge + row as f64 * UNIT,56                UNIT,57                UNIT,58                tones[deep - 1],59            );60        }61    }62    save("demo-words", &board)?;63    Ok(())64}