結果
| 問題 | No.227 簡単ポーカー | 
| コンテスト | |
| ユーザー |  yukyu | 
| 提出日時 | 2021-03-07 17:10:46 | 
| 言語 | Rust (1.83.0 + proconio) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 1 ms / 5,000 ms | 
| コード長 | 1,785 bytes | 
| コンパイル時間 | 14,970 ms | 
| コンパイル使用メモリ | 378,212 KB | 
| 実行使用メモリ | 5,248 KB | 
| 最終ジャッジ日時 | 2024-10-08 23:26:53 | 
| 合計ジャッジ時間 | 12,602 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 14 | 
ソースコード
use std::io::*;
use std::str::FromStr;
fn main() {
    let a = (0..5).map(|_| read()).collect::<Vec<i64>>();
    exec(a);
}
fn exec(r: Vec<i64>) {
    let acc: Vec<Vec<i64>> = vec![];
    let result = rec_pair(acc, r);
    println!("{}", make_hands(result));
}
fn make_hands(mut r: Vec<Vec<i64>>) -> String {
    r.sort_by(|a, b| b.len().cmp(&a.len()));
    match r.len() {
        4 => String::from("ONE PAIR"),
        3 => three_or_two(r),
        2 => fullhouse_or_no(r),
        _ => String::from("NO HAND"),
    }
}
fn three_or_two(r: Vec<Vec<i64>>) -> String {
    if r[0].len() == 3 {
        return String::from("THREE CARD");
    }
    String::from("TWO PAIR")
}
fn fullhouse_or_no(r: Vec<Vec<i64>>) -> String {
    if r[0].len() == 3 {
        return String::from("FULL HOUSE");
    }
    String::from("NO HAND")
}
fn rec_pair(mut acc: Vec<Vec<i64>>, mut r: Vec<i64>) -> Vec<Vec<i64>> {
    if r.is_empty() {
        return acc;
    } else {
        let head = r.remove(0);
        let mut b: Vec<i64> = vec![];
        let mut remove_index: Vec<usize> = vec![];
        b.push(head);
        for (i, v) in r.iter().enumerate() {
            if &head == v {
                remove_index.push(i);
                b.push(r[i]);
            }
        }
        remove_index.sort_by(|a, b| b.cmp(a));
        for i in remove_index {
            r.remove(i);
        }
        acc.push(b);
    }
    rec_pair(acc, r)
}
fn read<T: FromStr>() -> T {
    let stdin = stdin();
    let stdin = stdin.lock();
    let token: String = stdin
        .bytes()
        .map(|c| c.expect("failed to read char") as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect();
    token.parse().ok().expect("failed to parse token")
}
            
            
            
        