rusty-rubik 0.1.2

A crate providing interaction and solvers for the Rubik's Cube.
Documentation
use clap::{App, Arg};
use std::thread;

use rusty_rubik::cube;
use rusty_rubik::parser;
use rusty_rubik::pruning::*;
use rusty_rubik::solver::IDASolver;
use rusty_rubik::solver::Solver;

fn main() {
    let matches = App::new("Rsubik")
        .version("0.0.1")
        .author("Brandon Lin <blin1283@gmail.com>")
        .arg(
            Arg::with_name("pruning")
                .short('p')
                .long("pruning")
                .takes_value(false)
                .about("Flag to say whether to generate pruning tables."),
        )
        .arg(
            Arg::with_name("scramble")
                .short('s')
                .long("scramble")
                .takes_value(true)
                .about("Scramble sequence to solve."),
        )
        .get_matches();

    if matches.is_present("pruning") {
        let corners_prune = thread::spawn(|| {
            generate_pruning_table_corners(String::from("corners.pt"));
            println!("Corners pruning table finished!");
        });
        let eo_prune = thread::spawn(|| {
            generate_pruning_table_eo(String::from("edges_o.pt"));
            println!("EO pruning table finished!");
        });
        let ep_prune = thread::spawn(|| {
            generate_pruning_table_ep(String::from("edges_p.pt"));
            println!("EP pruning table finished!");
        });
        corners_prune.join().unwrap();
        eo_prune.join().unwrap();
        ep_prune.join().unwrap();
        println!("Done generating pruning tables!");
    } else {
        if let Some(scramble) = matches.value_of("scramble") {
            let parsed_seq = parser::parse_scramble(&scramble).unwrap();
            let seq = cube::MoveSequence(parsed_seq);
            let solved = cube::CubeState::default();
            let new_state = solved.apply_move_instances(&seq);
            let new_state2 = new_state.clone();

            // load the pruning tables
            let pruning_tables = PruningTables::default_tables();

            let solver = IDASolver::new(new_state, &pruning_tables);
            let solution = solver.solve();
            println!("{}", solution);
            println!("Verifying the above solution...");
            let maybe_solved = new_state2.apply_move_instances(&solution);
            if maybe_solved == cube::CubeState::default() {
                println!("Successfully verified!");
            } else {
                println!("Uh oh...it's wrong...rip you.");
            }
        } else {
            println!("Missing scramble sequence; use `--help` for more info.");
        }
    }
}