結果

問題 No.24 数当てゲーム
ユーザー komkomhkomkomh
提出日時 2019-05-28 13:24:50
言語 Rust
(1.77.0)
結果
AC  
実行時間 1 ms / 5,000 ms
コード長 2,554 bytes
コンパイル時間 2,316 ms
コンパイル使用メモリ 197,604 KB
実行使用メモリ 4,348 KB
最終ジャッジ日時 2023-10-17 18:22:47
合計ジャッジ時間 3,030 ms
ジャッジサーバーID
(参考情報)
judge11 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,348 KB
testcase_01 AC 1 ms
4,348 KB
testcase_02 AC 1 ms
4,348 KB
testcase_03 AC 1 ms
4,348 KB
testcase_04 AC 0 ms
4,348 KB
testcase_05 AC 1 ms
4,348 KB
testcase_06 AC 1 ms
4,348 KB
testcase_07 AC 1 ms
4,348 KB
testcase_08 AC 1 ms
4,348 KB
testcase_09 AC 1 ms
4,348 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

use std::collections::HashSet;

macro_rules! input {
    (source = $s:expr, $($r:tt)*) => {
        let mut iter = $s.split_whitespace();
        let mut next = || { iter.next().unwrap() };
        input_inner!{next, $($r)*}
    };
    ($($r:tt)*) => {
        let stdin = std::io::stdin();
        let mut bytes = std::io::Read::bytes(std::io::BufReader::new(stdin.lock()));
        let mut next = move || -> String{
            bytes
                .by_ref()
                .map(|r|r.unwrap() as char)
                .skip_while(|c|c.is_whitespace())
                .take_while(|c|!c.is_whitespace())
                .collect()
        };
        input_inner!{next, $($r)*}
    };
}

macro_rules! input_inner {
    ($next:expr) => {};
    ($next:expr, ) => {};

    ($next:expr, $var:ident : $t:tt $($r:tt)*) => {
        let $var = read_value!($next, $t);
        input_inner!{$next $($r)*}
    };
}

macro_rules! read_value {
    ($next:expr, ( $($t:tt),* )) => {
        ( $(read_value!($next, $t)),* )
    };

    ($next:expr, [ $t:tt ; $len:expr ]) => {
        (0..$len).map(|_| read_value!($next, $t)).collect::<Vec<_>>()
    };

    ($next:expr, chars) => {
        read_value!($next, String).chars().collect::<Vec<char>>()
    };

    ($next:expr, usize1) => {
        read_value!($next, usize) - 1
    };

    ($next:expr, $t:ty) => {
        $next().parse::<$t>().expect("Parse error")
    };
}

fn main() {
    input! {
        n: usize,
        answers: [[String; 5]; n],
    }

    // 全カード
    let mut cards: HashSet<usize> = vec!(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).into_iter().collect();

    // YESカードを処理する
    answers
        .iter()
        .filter(|anss| anss[4] == "YES")
        .map(|anss| to_num_slice(anss.to_vec()))
        .for_each(|anss| {
            (0 as usize..10 as usize) // borrow checker...
                .filter(|&card| !anss.contains(&card))
                .for_each(|no_card| {
                    cards.remove(&no_card);
                });
        });

    // NOカードを処理する
    answers
        .iter()
        .filter(|anss| anss[4] == "NO")
        .flat_map(|anss| to_num_slice(anss.to_vec()).to_vec())
        .for_each(|no_card| {
            cards.remove(&no_card);
        });

    // 答え
    cards.iter().for_each(|card| println!("{}", card));
}

fn to_num_slice(answers: Vec<String>) -> [usize; 4] {
    [
        answers[0].parse().unwrap(),
        answers[1].parse().unwrap(),
        answers[2].parse().unwrap(),
        answers[3].parse().unwrap()
    ]
}
0