🦀

Rust の match 式を使って ARC 012 の A 問題を解く

2024/02/24に公開

ARC 012 の A 問題

こちらの問題を解いてみます。
https://atcoder.jp/contests/arc012/tasks/arc012_1

if 式と match 式について

この問題は if 式による条件分岐で解くことも出来ますが、今回は match 式で解いてみることにします。個人的には match 式の方がスッキリしているので好きです。

同一の処理を if 式と match 式でそれぞれ書いたものを以下に示します。

if 式での表現
fn main() {
    let num = 0;
    let result = if num == 0 {
        "Zero"
    } else if num == 1 {
        "One"
    } else if num == 2 {
        "Two"
    } else if num == 3 {
        "Three"
    } else {
        "Many"
    };
    println!("{}", result); // Zero
}
match 式での表現
fn main() {
    let num = 0;
    let result = match num {
        0 => "Zero",
        1 => "One",
        2 => "Two",
        3 => "Three",
        _ => "Many",
    };
    println!("{}", result); // Zero
}

実際に解いてみる

match 式での解答はこのようになります。

use proconio::input;

fn main() {
    input! {
        day: String,
    }

    let ans = match day.as_str() {
        "Sunday" => 0,
        "Monday" => 5,
        "Tuesday" => 4,
        "Wednesday" => 3,
        "Thursday" => 2,
        "Friday" => 1,
        "Saturday" => 0,
        _ => 0,
    };
    println!("{}", ans);
}

補足説明

  • 標準入力を受け取るために use proconio::input; を用いています。
  • "Sunday" の型は &str ですが、変数 dayString 型なのでそのままではエラーになります。型を String から &str に変換することで使えるようになるので、 as_str() を使って型を変換しています。

Discussion