#rubiks #cube #rubiks-cube

bin+lib cubesim

Rubik’s Cube simulation and solving library

6 releases

0.0.7 Nov 12, 2021
0.0.6 Nov 7, 2021
0.0.4 Oct 13, 2021

#57 in Simulation

31 downloads per month

MIT license

879 lines

CubeSim V2

CubeSim is a Rubik's Cube simulator and solver written entirely in Rust.


Planned Features

  • User interface (web interface using WASM perhaps?).
  • Optimal solutions using the Kociemba algorithm


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, the FaceletCube is most performant while the GeoCube 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. Each Move must be tagged with a MoveVariant to completely define a move.
  • MoveVariant enum: A move variation that must be applied to the Move 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.

Resources Used


~37K SLoC