結果
問題 | No.24 数当てゲーム |
ユーザー | yo-kondo |
提出日時 | 2019-01-01 22:49:58 |
言語 | Rust (1.77.0 + proconio) |
結果 |
AC
|
実行時間 | 1 ms / 5,000 ms |
コード長 | 3,032 bytes |
コンパイル時間 | 12,956 ms |
コンパイル使用メモリ | 378,940 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-08 14:38:13 |
合計ジャッジ時間 | 13,780 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,248 KB |
testcase_02 | AC | 1 ms
5,248 KB |
testcase_03 | AC | 1 ms
5,248 KB |
testcase_04 | AC | 1 ms
5,248 KB |
testcase_05 | AC | 1 ms
5,248 KB |
testcase_06 | AC | 1 ms
5,248 KB |
testcase_07 | AC | 1 ms
5,248 KB |
testcase_08 | AC | 1 ms
5,248 KB |
testcase_09 | AC | 1 ms
5,248 KB |
コンパイルメッセージ
warning: field `count` is never read --> src/main.rs:13:5 | 11 | struct InputData { | --------- field in this struct 12 | /// データの個数 13 | count: i32, | ^^^^^ | = note: `InputData` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis = note: `#[warn(dead_code)]` on by default
ソースコード
//! No.24 数当てゲーム //! https://yukicoder.me/problems/no/24 use std::io::stdin; #[cfg(test)] mod test; /// 入力データ #[derive(Debug)] struct InputData { /// データの個数 count: i32, /// 回答 answers: Vec<([i32; 4], bool)>, } /// エントリポイント fn main() { let input = input_data(); println!("{}", correct(input)); } /// 回答の列挙体 #[derive(PartialEq)] enum YesNo { /// 不明 Unknown, /// YES YES, /// NO NO, } /// 回答から正解を導出します。 fn correct(input: InputData) -> i32 { // 正解候補(0:不明、1:YES、2:NO) let mut candidates: [YesNo; 10] = [ YesNo::Unknown, YesNo::Unknown, YesNo::Unknown, YesNo::Unknown, YesNo::Unknown, YesNo::Unknown, YesNo::Unknown, YesNo::Unknown, YesNo::Unknown, YesNo::Unknown, ]; for ans in input.answers { if !ans.1 { // NO for n in ans.0.iter() { candidates[*n as usize] = YesNo::NO; } } else { // YES for i in 0..10 { let find = match ans.0.iter() .find(|&&x| x == i as i32) { Some(_) => true, None => false, }; candidates[i] = match candidates[i] { YesNo::Unknown if find => YesNo::YES, YesNo::Unknown => YesNo::Unknown, // answersに数字があればYES、なければNO // 1度YESになっても、つぎにYESにならなければNO YesNo::YES if find => YesNo::YES, YesNo::YES => YesNo::NO, YesNo::NO => YesNo::NO, } } } } // 結果を探す for (i, v) in candidates.iter().enumerate() { if *v == YesNo::YES { return i as i32; } } for (i, v) in candidates.iter().enumerate() { if *v == YesNo::Unknown { return i as i32; } } // ここには来ないはず 0 } /// 標準入力から文字列を取得します。 fn input_data() -> InputData { // 1行目 let mut s1 = String::new(); stdin().read_line(&mut s1).unwrap(); let count: i32 = s1.trim().parse().unwrap(); // 2行目以降 let mut answers = Vec::new(); for _i in 0..count { let mut s2 = String::new(); stdin().read_line(&mut s2).unwrap(); // 空白で分割してVecに格納 let sp: Vec<&str> = s2.trim().split_whitespace().collect(); let array: [i32; 4] = [ sp[0].parse().unwrap(), sp[1].parse().unwrap(), sp[2].parse().unwrap(), sp[3].parse().unwrap(), ]; let yn = if sp[4] == "YES" { true } else { false }; answers.push((array, yn)); } InputData { count, answers, } }