# 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.