Last active
May 23, 2019 14:05
-
-
Save katai5plate/4a55a53e2c957f71bcd9bfe0b446d6ab to your computer and use it in GitHub Desktop.
FizzBuzz問題の回答例
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* FizzBuzzプログラム | |
*/ | |
const fizzbuzz = n => { | |
if (!Number.isInteger(n) || n < 0) throw new Error("0以上の数値じゃないすよ"); | |
const print = (value, div, text) => (value % div === 0 ? text : ""); | |
return [...new Array(n).keys()].map( | |
num => `${print(num, 3, "Fizz")}${print(num, 5, "Buzz")}` || num | |
); | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* FizzBuzzプログラムが正しく動作するかをチェックするプログラム | |
*/ | |
(() => { | |
// a(結果) === b(期待値) でない場合エラー | |
const checkEqual = (scenario, a, b) => { | |
if (JSON.stringify(a) !== JSON.stringify(b)) throw new Error(scenario); | |
return true; | |
}; | |
// エラー発生しなければエラー | |
const checkError = (scenario, callback) => { | |
try { | |
callback(); | |
} catch { | |
return true; | |
} | |
throw new Error(scenario); | |
}; | |
// テスト | |
try { | |
checkEqual("引数が 4 の場合、正しい答え", fizzbuzz(4), ["FizzBuzz", 1, 2, "Fizz"]); | |
checkEqual("引数が 0 の場合、空の配列", fizzbuzz(0), []); | |
checkEqual("0 番目は、FizzBuzz", fizzbuzz(20)[0], "FizzBuzz"); | |
checkEqual("3 番目は、Fizz", fizzbuzz(20)[3], "Fizz"); | |
checkEqual("5 番目は、Buzz", fizzbuzz(20)[5], "Buzz"); | |
checkEqual("15 番目は、FizzBuzz", fizzbuzz(20)[15], "FizzBuzz"); | |
checkError("引数がない場合、エラー", () => fizzbuzz()); | |
checkError("引数が undefined の場合、エラー", () => fizzbuzz(undefined)); | |
checkError("引数が null の場合、エラー", () => fizzbuzz(null)); | |
checkError("引数が NaN の場合、エラー", () => fizzbuzz(NaN)); | |
checkError("引数が 実数 の場合、エラー", () => fizzbuzz(3.1415)); | |
checkError("引数が 文字列 の場合、エラー", () => fizzbuzz("松茸のお吸い物")); | |
checkError("引数が 無限大 の場合、エラー", () => fizzbuzz(Infinity)); | |
checkError("引数が 配列 の場合、エラー", () => fizzbuzz([1, 2, 3])); | |
checkError("引数が オブジェクト の場合、エラー", () => fizzbuzz({ abc: "xyz" })); | |
checkError("引数が 関数 の場合、エラー", () => fizzbuzz(() => {})); | |
} catch (error) { | |
throw new Error(`バグってんだろ!(激怒) -> ${error}`); | |
} | |
console.log("バグは見つからんかったで"); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment