2
0

ループ・分岐を1度に学ぶならコレ

とりあえず新しい言語を始める時にHelloWorldの次ぐらいにやるのがFizzBuzz。
コレでループとifの書き方を理解してってやるのが下手な教科書で研修やるより1番いい気がする。

面倒くさいので画面パタメータをListでもらった後のFunctionだけ

ちなみに引数のListを作ってる箇所はこっちの記事に書いてあるYO!!

fizzBuzz.js
// [問題文(原文)]
// 整数 N が入力として与えられます。
// 
// 1からNまでの整数を1から順に表示してください。
// 
// ただし、表示しようとしている数値が、
// 
// ・3の倍数かつ5の倍数のときには、"Fizz Buzz"
// ・3の倍数のときには、"Fizz"
// ・5の倍数のときには、"Buzz"
// 
// を数値の代わりに表示してください。
function fizzBuzz(lines) {
  // 入力は以下のフォーマットで与えられます。
  // 
  // N
  // 
  // N は1以上N以下の整数です。
  if (!Array.isArray(lines) || lines.length !== 1) {
    console.log("1行入れろや!");
    return;
  }
  const repCnt = Number(lines[0]);
  if (!Number.isInteger(repCnt) || repCnt < 0 || repCnt > 100) {
    console.log("1~100の整数入れろや!");
    return;
  }
  Array.from({ length: repCnt }, (v, k) => {
    let num = k + 1;
    console.log((num % 15 === 0) ? 'FizzBuzz' :
      (num % 3 === 0) ? 'Fizz' :
        (num % 5 === 0) ? 'Buzz' : num);
    return num;
  })
}

module.exports = {
  fizzBuzz
};

まぁFor文もif文も使ってなんかやらないけどな!
配列を作る流れの中で出力をするという力技。

もっと見やすく(ちゃんとした処理の流れ通りに)書くとかであれば、
Array.fromで数字だけの配列を作った後にForEachで出力って感じになるんだろうけど。

Array.fromの所だけ直したやつ
  Array.from({ length: repCnt }, (v, k) => k + 1).forEach(num => console.log((num % 15 === 0) ? 'FizzBuzz' :
    (num % 3 === 0) ? 'Fizz' :
      (num % 5 === 0) ? 'Buzz' : num));

問題としては、0始まりとかにすれば0除算問題にも対応できただろうに、なんで1からとかいう甘っちょろい条件にしてくれたんだろう。。。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0