ca-rules

Crates.ioca-rules
lib.rsca-rules
version0.3.5
sourcesrc
created_at2019-08-06 14:47:54.534804
updated_at2023-03-18 04:13:56.193341
descriptionParsing rule strings of life-like cellular automata.
homepagehttps://github.com/AlephAlpha/ca-rules
repositoryhttps://github.com/AlephAlpha/ca-rules
max_upload_size
id154547
size73,439
(AlephAlpha)

documentation

README

CA rules parsers

Travis (.org) Crates.io Docs.rs 中文

Parsing rule strings of life-like and other cellular automata.

Currently the following rules are supported:

For non-Generations rules, four different notations are supported:

For Generations rules, four different notations are supported:

  • B/S notation (B357/S3457/C5)
  • The notation used by Golly (3457/357/5)
  • The notation used by Catagolue (g5b357s3457)
  • MAP strings for non-isotropic rules (MAPARYBFxZpF38WaRd/aZZ//hZpF39pln/+aZZ//pZp/ukWaRd/aZZ//mmWf/6Waf7paZZ//pZp/umWaf7paZbplg/5)

Please refer to Life Wiki for detailed definitions and notations of these rule strings.

Usage

use ca_rules::ParseLife;

// Define a struct for your rule:
#[derive(Debug, Eq, PartialEq)]
struct Rule {
    b: Vec<u8>,
    s: Vec<u8>,
}

// Implement a parser trait for your rule:
// The choice of the trait depends on the type of rules you want to parse.
impl ParseLife for Rule {
    // Implement a function to construct the rule from b and s data:
    fn from_bs(b: Vec<u8>, s: Vec<u8>) -> Self {
        Rule { b, s }
    }
}

// Then you can parse a rule string:
let life = Rule::parse_rule("B3/S23").unwrap();
assert_eq!(
    life,
    Rule {
        b: vec![3],
        s: vec![2, 3],
    }
)

For details, please refer to the doc.

Commit count: 40

cargo fmt