项目作者: AlephAlpha

项目描述 :
Parsing pattern files for Conway's Game of Life
高级语言: Rust
项目地址: git://github.com/AlephAlpha/ca-formats.git
创建时间: 2020-01-22T13:26:14Z
项目社区:https://github.com/AlephAlpha/ca-formats

开源协议:MIT License

下载


CA formats parsers

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

读取生命游戏的图样文件,返回一个活细胞坐标的 Iterator。

支持的格式

范例

从字符串中读取:

  1. use ca_formats::rle::Rle;
  2. const GLIDER: &str = r"#N Glider
  3. #O Richard K. Guy
  4. #C The smallest, most common, and first discovered spaceship. Diagonal, has period 4 and speed c/4.
  5. #C www.conwaylife.com/wiki/index.php?title=Glider
  6. x = 3, y = 3, rule = B3/S23
  7. bob$2bo$3o!";
  8. let glider = Rle::new(GLIDER).unwrap();
  9. assert_eq!(glider.header_data().unwrap().x, 3);
  10. assert_eq!(glider.header_data().unwrap().y, 3);
  11. assert_eq!(glider.header_data().unwrap().rule, Some(String::from("B3/S23")));
  12. let cells = glider.map(|cell| cell.unwrap().position).collect::<Vec<_>>();
  13. assert_eq!(cells, vec![(1, 0), (2, 1), (0, 2), (1, 2), (2, 2)]);

从文件中读取:

  1. use std::fs::File;
  2. use ca_formats::rle::Rle;
  3. let file = File::open("tests/sirrobin.rle").unwrap();
  4. let sirrobin = Rle::new_from_file(file).unwrap();
  5. assert_eq!(sirrobin.count(), 282);

未知的细胞

当启用 unknown feature 时,Rle 类型会提供一个名为 with_unknown 的方法,用来切换到 RLE 的一个特别的变种:这种 RLE 多了一个符号 ?,用来表示未知的细胞。此时图样的背景是未知的细胞,每行末尾的死细胞不可省略,生成的 Iterator 也会输出每一个死细胞。

只有 RLE 格式支持此功能。

另见