結果
| 問題 | 
                            No.24 数当てゲーム
                             | 
                    
| コンテスト | |
| ユーザー | 
                             | 
                    
| 提出日時 | 2019-01-01 22:23:56 | 
| 言語 | Rust  (1.83.0 + proconio)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 2,945 bytes | 
| コンパイル時間 | 15,163 ms | 
| コンパイル使用メモリ | 379,812 KB | 
| 実行使用メモリ | 5,248 KB | 
| 最終ジャッジ日時 | 2024-11-08 09:41:15 | 
| 合計ジャッジ時間 | 16,087 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 8 WA * 2 | 
コンパイルメッセージ
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 {
                candidates[i] = match candidates[i] {
                    YesNo::Unknown => YesNo::YES,
                    YesNo::YES => {
                        // answersに数字があればYES、なければNO
                        // 1度YESになっても、つぎにYESにならなければNO
                        match ans.0.iter().find(|&&x| x == i as i32) {
                            Some(_) => YesNo::YES,
                            None => 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,
    }
}