CubeSimRS
CubeSimRS copied to clipboard
Rust based Rubik's Cube simulation and solving library.
CubeSim V2
CubeSim is a Rubik's Cube simulator and solver written entirely in Rust.
Features
- Simulation of an arbitrarily sized NxNxN Rubik's Cube.
- Generation of solutions using the Thistlethwaite algorithm
Planned Features
- User interface (web interface using WASM perhaps?).
- Optimal solutions using the Kociemba algorithm
Usage
The core types in the library are as follows:
-
Cube trait
: To support multiple implementations of a Rubik’s Cube, we define a trait which includes the minimal set of behaviours expected of a Rubik’s Cube. Specific implementations can then be used for different scenarios. For example, theFaceletCube
is most performant while theGeoCube
allows for easy 3D modelling. -
Face enum
: A face of a Rubik’s Cube sticker represented in WCA notation. -
Move enum
: A move of a 3x3x3 Rubik’s Cube represented in WCA notation. EachMove
must be tagged with aMoveVariant
to completely define a move. -
MoveVariant enum
: A move variation that must be applied to theMove
enum.
After understanding these core types, we can start writing a basic simulation:
use cubesim::prelude::{Cube, Face, Move, MoveVariant};
use cubesim::cube_implementors::FaceletCube;
let cube = FaceletCube::new(3);
let turned_cube = cube.apply_move(Move::U(MoveVariant::Double));
println!("{:?}", turned_cube.get_state());
To build more complex simulations and solvers, please follow our official documentation.