riichi-decomp 0.1.0

Japanese Riichi Mahjong Waiting Hand Decomposition
Documentation
use std::{
    io::stdin,
    time::Instant,
};
use itertools::Itertools;

use riichi_decomp::*;
use riichi_elements::prelude::*;

pub fn print_decomp(decomposer: &mut Decomposer, s: &str) {
    let tiles = tiles_from_str(&s);
    let tile_set = TileSet34::from_iter(tiles);
    let t0 = Instant::now();
    let result = WaitSet::from_tile_set(decomposer, &tile_set);
    let t1 = Instant::now();
    println!("[{}us] {} => {}", (t1 - t0).as_micros(), tile_set, result);
}

pub fn main() {
    let mut decomposer = Decomposer::new();
    let args = std::env::args().collect_vec();

    if args.len() >= 2 {
        for s in &args[1..] {
            print_decomp(&mut decomposer, s);
        }
    } else {
        println!("Input hands, 1 per line. Example: 1112345678999m");
        for x in stdin().lines() {
            if let Ok(s) = x {
                print_decomp(&mut decomposer, &s);
            } else { break; }
        }
    }
}