#puzzle #solving #rubik #wca

cubing

Features from cubing.js in Rust

37 releases (12 breaking)

0.13.0 Jan 15, 2024
0.12.4 Dec 26, 2023
0.11.1 Nov 25, 2023
0.5.2 Jul 18, 2023
0.1.2 May 3, 2021

#1 in #rubik

27 downloads per month
Used in 2 crates

MPL-2.0 license

115KB
2.5K SLoC

cubing.rs

Features from cubing.js in Rust.

Structure

See https://docs.rs/cubing/latest/cubing/ for Rust docs.

A subset of the cubing.js API is implemented under:

  • cubing::alg
  • cubing::kpuzzle
  • cubing::puzzles

Most applications will use str.parse::<Alg>() and KPuzzle as entry points into the API:

use cubing::{alg::parse_alg, puzzles::cube3x3x3_kpuzzle};

pub fn main() {
    let kpuzzle = cube3x3x3_kpuzzle();
    let default_pattern = kpuzzle.default_pattern();

    let input_alg = parse_alg!("R U R' F' U2 L' U' L F U2");

    let input_pattern = default_pattern
        .apply_alg(&input_alg)
        .expect("Input alg is not valid for puzzle.");
    println!(
        "The following alg {} the puzzle to its original pattern (including center orientation): {}",
        if default_pattern == input_pattern { "returns" } else { "does NOT return" },
        input_alg,
    )
}

Development

This repository contains a port of f2lfast that is useful for exercising functionality (although it's not yet at full speed):

cargo run --example f2lfast -- --scramble "U2 F2 U' L' U L D2 F D2 B' D2 B D2 L2 B L2 F"

Run tests using:

make test

Dependencies

~1.5–2.5MB
~51K SLoC