试玩 Rust。尝试写一个生命游戏搜索工具。具体来说就是照抄 David Bell 写的 lifesrc 和 Jason Summers 写的 WinLifeSearch。其具体的算法可见 Dean Hickerson 的说明。
写得非常糟糕,和 WinLifeSearch 相比缺少很多功能,而且速度要慢很多,但支持更多规则。
支持 Life-like 和 non-totalistic 的规则,但后者比前者要略慢一些。也支持六边形以及von Neumann 邻域的规则,但目前是通过转化成 non-totalistic 规则来实现的,速度较慢。还支持 Generations 规则。
这里是 rlifesrc 的库。另有一个文本界面的命令行工具,和一个基于 WebAssembly 的网页版,请分别见 tui/ 和 web/ 两个目录。
已发布的版本的文档可见 docs.rs;GitHub 上未发布的版本的文档可见此处,其中包含了不公开的函数和方法。
试找 25P3H1V0.1 飞船。
use rlifesrc_lib::{Config, Status};
// 设置世界的参数。
let config = Config::new(16, 5, 3).set_translate(0, 1);
// 创建世界。
let mut search = config.world().unwrap();
// 搜索并显示结果的第 0 代。
if let Status::Found = search.search(None) {
println!("{}", search.rle_gen(0))
}搜索结果:
x = 16, y = 5, rule = B3/S23
........o.......$
.oo.ooo.ooo.....$
.oo....o..oo.oo.$
o..o.oo...o..oo.$
............o..o!