RCIE-ジャンクのコード屋

主に自分のためにコーディングのTIPSを蓄積しています。

Rust 練習問題「ループなしのナベアツ」 map, collect

概要

  • 前回、ナベアツ処理を記述する際には「for」文で繰り返し処理を行った。
  • 範囲(1..=99)に対して「map」を使えば for 文が不要になるのでは、という試み。
  • for, loop, while を使わずに、ナベアツを実現してみよう。
仕様
  • 1 からカウントアップしていく。「1」「2」
  • 3 の倍数のときアホになる。「3🤪」...「11」「12🤪」
  • 数字に 3 が含まれるときもアホになる。「13🤪」
  • 100 になったら「オモロー」と言って終わる。「100😲オモロー!」
プログラム例
fn main() {
    print!("{}", (1..=99).map(ナベアツ変換).collect::<String>());
    println!("100😲オモロー!");
}

fn ナベアツ変換(n: i32) -> String {
    n.to_string() +
    match n % 3 == 0 || n % 10 == 3 || n / 10 == 3 {
        true => "🤪\n",
        false => "\n"
    }
}
解説
fn main() {
    print!("{}", (1..=99).map(ナベアツ変換).collect::<String>());
    // └ 1から99までを「ナベアツ変換」して文字列を作り出し、
    // └ それを collect でひとつの文字列に結合し、
    // └ それをprint!で出力する。
    println!("100😲オモロー!");
}

fn ナベアツ変換(n: i32) -> String {
    n.to_string() +    // 数値を文字列に変換
    match n % 3 == 0 || n % 10 == 3 || n / 10 == 3 {
        true => "🤪\n",    // 3で割り切れる・一の位が3・十の位が3
        false => "\n"    // それ以外
    }
}