RCIE-ジャンクのコード屋

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

Rust 練習問題「3がつくとアホになる」

概要
  • 2010年ごろに流行した「世界のナベアツ」のネタを Rust で再現する。
  • 分岐の「match」や「if」、繰り返しの「for」を使えばできるはず。
  • 以下の仕様を満たすようなプログラムを Rust で組んでみよう。

仕様

  • 1 からカウントアップしていく。「1」「2」
  • 3 の倍数のときアホになる。「3🤪」...「11」「12🤪」
  • 数字に 3 が含まれるときもアホになる。「13🤪」
  • 100 になったら「オモロー」と言って終わる。「100😲オモロー!」

プログラム例

  • 処理ごとに関数に分割した。
  • 記述は長いが、分かりやすい。
fn main() {
    for i in 1..=99 {
        ナベアツ処理(i);
    }
    オモロー();
}

fn ナベアツ処理(n: i32) {
    match 三の倍数か(n) || 三を含むか(n) {
        true => アホになる(n),
        false => 普通に言う(n)
    };
}

fn 三の倍数か(n: i32) -> bool {
    n % 3 == 0
}

fn 三を含むか(n: i32) -> bool {
    一の位が3か(n) || 十の位が3か(n)
}

fn 一の位が3か(n: i32) -> bool {
    n / 10 % 10 == 3
}

fn 十の位が3か(n: i32) -> bool {
    n % 10 == 3
}

fn アホになる(n: i32) {
    println!("{}🤪", n)
}

fn 普通に言う(n: i32) {
    println!("{}", n)
}

fn オモロー(){
    println!("100😲オモロー!");
}

プログラム例

  • 同じ処理を、より短く表現した。
  • 暗号めいている。
fn main() {
    for i in 1..=99 {
        let s = match i / 10 % 10 == 3 || i % 10 == 3 || i % 3 == 0 {
            true => "🤪", false => ""
        };
        println!("{}{}", i, s);
    }
    println!("100😲オモロー!");
}