昨日書いたFizzBuzz、今日も書いて改善した。
これは昨日のFizzBuzz。
function fizzbuzz(num) { return num%3 === 0 ? num%5 === 0 ? 'fizzbuzz!' : 'fizz~' : num%5 === 0 ? 'buzz~' : num } // range関数 function range(start, end) { return [...Array(1 + end - start)].map((v, i) => start + i); } const oneHundredArray = range(1,100).map((v,i) => { console.log(v + ' => ' + fizzbuzz(v)) })
今回もfor,while,setTimeout,setIntervalは使わない条件縛りでやる。
👇改善したFizzBuzz👇
const fizzbuzzReturner = num => (num%3 ? '' : 'fizz') + (num%5 ? '' : 'buzz') || num const fizzbuzz = [...Array(100).keys()].map(v => console.log(fizzbuzzReturner(++v)))
2行になった。
fizzbuzz判定する関数を最適化したりRange関数を無くしたりした。
0~nの配列を作るのなら
[...Array(n).keys()]
が一番短いはず。
昨日自分でこう書いてて、これを使って短くしてみた。
lengthが100の配列を作って、Array.map
の第一引数の値を++v
でインクリメントしている。
CodeGolf的に1行で書く
ちなみにCodeGolfっぽくもっと短くするなら
- 命名を短くする
- 半角スペースを詰める
- FizzBuzz判定を
Array.map
の中に置く - 変数に入れない
こうしていくと1行になる…
[...Array(100).keys()].map(n=>console.log((++n%3?'':'fizz')+(n%5?'':'buzz')||n))
大喜利というかトンチっぽいのは否めないという感じがするけど1行になった。
今のところ僕の中ではこれが一番短いと思います。