Crate cubesim[−][src]
Expand description
A simple Rubik’s Cube simulator (and eventually solver).
Quick Start Guide
To quickly get a Rubik’s Cube simulation running, we can follow the code sample below:
use cubesim::prelude::{Cube, Move, MoveVariant};
use cubesim::FaceletCube;
let cube = FaceletCube::new(3);
let turned_cube = cube.apply_move(Move::U(MoveVariant::Double));
println!("{:?}", turned_cube.state());
Cube Trait Overview
To support multiple underlying implementations of a Rubik’s Cube, we define a Cube
trait
which define the minimal set of behaviours expected of a Rubik’s Cube. Specific implementations
can then be used for different scenarios that fit its characteristics. For example, the FaceletCube
is the most performant and versatile while the GeoCube
allows for easy 3D modelling.
Structs
A Rubik’s Cube with stickers stored sequentially in a 1-dimensional array.
A Rubik’s Cube with each of its facelets represented as a Sticker.
A Pruning Table giving a lower bound for the number of moves to solve a specific state.
A combination of a Pruning Table and the candidate moves to solve into a specific state.
Enums
A face of a Rubik’s Cube sticker represented in WCA notation.
A move of a NxNxN Rubik’s Cube represented in WCA notation.
A move variation that must be applied to the Move
struct.
Traits
A Rubik’s Cube of arbitrary size.
Functions
Get all possible moves for a cube of a given size.
Converts a WCA Notation scramble into Vec<Move>
.
Merges all related adjacent moves in a sequence of moves.
Solves a 3x3x3 Cube using the Thistlethwaite Algorithm.
Get the solved state for a cube of a given size.
Get the index of a specific piece on a specific face.