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" // それ以外 } }