cell_sim 0.2.1

A 1d cell automata simulator for the command line
Documentation
use crate::cell::Cell;
use crate::rules::Rulebook;

pub fn next_state(rules: &Rulebook, state: Vec<Cell>) -> Vec<Cell> {
    let mut next = vec![];

    let reach = (rules.pattern_size / 2) as isize;
    let state_len = state.len() as isize;

    for (i, _) in state.iter().enumerate() {
        let mut pattern = vec![];
        let ii = i as isize;

        for x in (ii - reach)..(ii + reach + 1) {
            pattern.push(state[((x % state_len + state_len) % state_len) as usize].clone());
        }

        let cell = match rules.rules.get(&pattern) {
            Some(val) => match val {
                &1 => Cell::Alive,
                _ => Cell::Dead,
            },
            None => Cell::Dead,
        };

        next.push(cell);
    }

    next
}

pub fn print_state(period: u16, state: &Vec<Cell>) {
    let mut str_state = String::from("");

    for c in state {
        str_state.push_str(&c.to_string());
    }

    println!("{}: {}", period, str_state);
}