7个不稳定版本 (3个重大更改)
0.4.2 | 2024年5月15日 |
---|---|
0.4.1 | 2023年11月11日 |
0.3.0 | 2023年11月2日 |
0.2.1 | 2023年8月30日 |
0.1.0 | 2023年8月5日 |
#261 in 算法
61KB
1.5K SLoC
Kewb
Kewb是一个库,用于使用Kociemba的两阶段算法操作和解决3x3魔方。还有一个命令行界面版本,展示了kewb的大多数功能。
请注意,这仍然是一个正在进行中的项目,实现尚未高效。求解器目前不使用对称简化、预移动或多线程搜索。
用法
库
有关kewb提供的API的完整列表,请参阅https://docs.rs/kewb/latest/kewb/。
求解器需要一些预计算的数据,这些数据由DataTable
结构表示。但是,生成它需要一些时间,因此建议将其写入磁盘或与可执行文件捆绑在一起。您可以使用write_table()
函数或kewb-cli
中的table
命令来生成表。
use kewb::{
error::Error,
generators::generate_state_cross_solved,
scramble::{scramble_from_state, scramble_from_str},
CubieCube, DataTable, FaceCube, Solver,
};
fn main() -> Result<(), Error> {
// Method 1: Bundling the table in the executable
// const TABLE_BYTES = include_bytes!("./path_to_file")
// let table = decode_table(&TABLE_BYTES)?;
// Method 2: Reading the table from a file
// let table = read_table("./path_to_file")?;
// Method 3: Generating the table at runtime (slow)
let table = DataTable::default();
let mut solver = Solver::new(&table, 23, None);
let scramble = scramble_from_str("R U R' U'")?; // vec![R, U, R3, U3]
let state = CubieCube::from(&scramble);
let solution = solver.solve(state).unwrap();
println!("{}", solution);
solver.clear();
let faces = "DRBLUURLDRBLRRBFLFFUBFFDRUDURRBDFBBULDUDLUDLBUFFDBFLRL";
let face_cube = FaceCube::try_from(faces)?;
let state = CubieCube::try_from(&face_cube)?;
let solution = solver.solve(state).unwrap();
println!("{}", solution);
solver.clear();
let cross_solved = generate_state_cross_solved();
let scramble = scramble_from_state(edges_solved, &mut solver)?;
println!("{:?}", scramble);
Ok(())
}
命令行界面
默认情况下,没有超时,这意味着求解器将返回找到的第一个解决方案。但是,通过添加超时,求解器将继续搜索,直到超时时间过去,并返回找到的最短解决方案或无解决方案。指定较低的搜索深度可以提高解决方案质量(大约21到23步),但如果深度小于20步,可能会使搜索变慢。尽管如此,已经证明所有情况都可以在20步或更少内解决。
kewb-cli help
# default values: max = 23, timeout = none, details = false
kewb-cli solve --scramble "R U R' U'" --max 22 --timeout 1 --details
kewb-cli solve -s "R U R' U'" -m 22 -t 1 -d
kewb-cli solve --facelet DRBLUURLDRBLRRBFLFFUBFFDRUDURRBDFBBULDUDLUDLBUFFDBFLRL
# default values: state = random, number = 1, preview = false
kewb-cli scramble -p
kewb-cli scramble -n 5
kewb-cli scramble f2l-solved
# generates the table used by the solver
kewb-cli table ./path_to_file
构建
注意:您必须安装rust工具链
克隆存储库并运行
cargo build --release # build in target/build/
# or
cargo install --path ./kewb-cli # install to ~/.cargo/bin/
测试
您可以通过运行来运行测试
cargo test --lib
待办事项
- 添加文档
- 更多CLI功能
- 算法优化
参考资料
-
两阶段算法概述: http://kociemba.org/cube.htm
-
Python中的两阶段算法实现: https://qiita.com/7y2n/items/55abb991a45ade2afa28
依赖关系
~0.9–1.5MB
~34K SLoC