Skip to content

Parsing rule strings of life-like cellular automata

License

Notifications You must be signed in to change notification settings

AlephAlpha/ca-rules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CA rules parsers

Travis (.org) Crates.io Docs.rs English

rlifesrc 中读取元胞自动机的规则的部分拿出来,作为一个独立的 crate。功能没增加多少,代码却越弄越复杂。

这只是一个 parser,没有别的功能。

目前支持以下规则:

对于非 Generations 的规则,支持以下三种写法:

对于 Generations 规则,支持以下四种写法:

  • B/S/C(B357/S3457/C5
  • Golly 的写法(3457/357/5
  • Catagolue 的写法(g5b357s3457
  • MAP strings (用于 Non-isotropic Life-like 的规则, 如 MAPARYBFxZpF38WaRd/aZZ//hZpF39pln/+aZZ//pZp/ukWaRd/aZZ//mmWf/6Waf7paZZ//pZp/umWaf7paZbplg/5

这些规则的具体定义和记号可见 Life Wiki

用法

use ca_rules::ParseLife;

// 首先为规则定义一个结构体:
// 表示规则的方式并不唯一,可根据需要采用不同的定义。
#[derive(Debug, Eq, PartialEq)]
struct Rule {
    b: Vec<u8>,
    s: Vec<u8>,
}

// 为规则实现 parser trait:
// 根据规则的类型来选择相应的 trait。
impl ParseLife for Rule {
    // 定义一个函数,以从 b 和 s 的数据构造规则:
    fn from_bs(b: Vec<u8>, s: Vec<u8>) -> Self {
        Rule { b, s }
    }
}

// 然后就可以 parse 了:
let life = Rule::parse_rule("B3/S23").unwrap();
assert_eq!(
    life,
    Rule {
        b: vec![3],
        s: vec![2, 3],
    }
)

详见文档

About

Parsing rule strings of life-like cellular automata

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages