8 个版本
0.3.5 | 2023年3月18日 |
---|---|
0.3.4 | 2023年1月1日 |
0.3.3 | 2021年7月3日 |
0.3.2 | 2020年5月19日 |
0.1.0 | 2019年8月6日 |
#664 in 解析器实现
在 2 个 crate 中使用 (via rlifesrc-lib)
67KB
1.5K SLoC
CA 规则解析器
解析类似生命和其他细胞自动机的规则字符串。
目前支持以下规则
- 总义生命类,例如,
B3/S23
。 - 各向同性非总义生命类,例如,
B2ci3ai4c8/S02ae3eijkq4iz5ar6i7e
。 - 非各向同性生命类,例如,
MAPARYXfhZofugWaH7oaIDogBZofuhogOiAaIDogIAAgAAWaH7oaIDogGiA6ICAAIAAaIDogIAAgACAAIAAAAAAAA
。 - 总义六边形,例如,
B2/S34H
。 - 各向同性非总义六边形,例如,
B2o3-o4m/S12m3o4m5H
。 - 非各向同性六边形,例如,
MAPFgFoF2gXgH5oF4B+gH4A6AH
。 - 冯·诺伊曼邻域,例如,
B2/S013V
。 - 非各向同性冯·诺伊曼,例如,
MAPHmlphg
。 - 以上规则的相应 代数规则,例如,
3457/357/5
。
对于非代数规则,支持四种不同的表示法
- B/S 表示法 (
B3/S23
) - S/B 表示法 (
23/3
) - 非各向同性生命游戏细胞自动机字符串 用于 非各向同性规则 (
MAPARYXfhZofugWaH7oaIDogBZofuhogOiAaIDogIAAgAAWaH7oaIDogGiA6ICAAIAAaIDogIAAgACAAIAAAAAAAA
)
对于Generations规则,支持四种不同的表示法
- B/S表示法 (
B357/S3457/C5
) - 由Golly使用的表示法 (
3457/357/5
) - 由Catagolue使用的表示法 (
g5b357s3457
) - 非各向同性生命游戏细胞自动机字符串 用于 非各向同性规则 (
MAPARYBFxZpF38WaRd/aZZ//hZpF39pln/+aZZ//pZp/ukWaRd/aZZ//mmWf/6Waf7paZZ//pZp/umWaf7paZbplg/5
)
有关这些规则字符串的详细定义和表示法,请参阅生命游戏维基。
用法
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],
}
)
有关详细信息,请参阅文档。
依赖项
~0.5-1MB
~22K SLoC