ループ・分岐を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からとかいう甘っちょろい条件にしてくれたんだろう。。。