結果
問題 |
No.227 簡単ポーカー
|
ユーザー |
![]() |
提出日時 | 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") }