fizzbuzzはどこまで短く書けるか【python】
はじめに
こんにちは。
fizzbuzzには様々な書き方があります。
この記事では、そのfizzbuzzがどこまで短く書けるかということについて解説します。
※この記事ではpythonを使っています。
普通のfizzbuzz
まず、普通のfizzbuzzを見てみましょう。
for i in range(1, 101):
if i % 3 == 0 and i % 5 == 0:
print("fizzbuzz")
elif i % 3 == 0:
print("fizz")
elif i % 5 == 0:
print("buzz")
else:
print(i)
まあ、よく見るやつですね。
一応これを説明しますと、
まず、for文でiが1から100のループをします。
次に、if文でiが3で割り切れ、さらにiが5でも割り切れる場合にfizzbuzz
と表示し、iが3でしか割り切れない場合にfizz
と表示し、iが5でしか割り切れない場合にbuzz
と表示します。このら条件にすべて当てはまらない場合はiを表示します。
少し短くしたfizzbuzz
次に、少し短くしたfizzbuzzを紹介します。
for i in range(1, 101):
if i % 15 == 0:
print("fizzbuzz")
elif i % 3 == 0:
print("fizz")
elif i % 5 == 0:
print("buzz")
else:
print(i)
見ての通り、fizzbuzzと表示させる場合の条件が少し短くなりました。
変更点は、fizzbuzzと表示する条件がiが15で割り切れるかどうかになりました。
なぜなら、3でも5でも割り切れる数字は15でも割り切れるからです。
かなり短くしたfizzbuzz
最後に、かなり短くしたfizzbuzzを見てみましょう。
import math
d = {3: "fizz", 5: "buzz", 15: "fizzbuzz"}
for i in range(1, 101):
print(d.get(math.gcd(i, 15), i))
急激に短くなりましたw
このコードを説明すると、
d = {3: "fizz", 5: "buzz", 15: "fizzbuzz"}
まずこの部分で、キーが3の場合はfizzを返し、キーが5の場合はbuzzを返し、キーが15の場合はfizzbuzzを返す辞書d
を定義します。
for i in range(1, 101):
print(d.get(math.gcd(i, 15), i))
次に、forを使い1から100のループをします。
そのforのループの中で、ここでは、辞書d
の中に、iと15の最大公約数のキーがあったらそのキーの値を取得して、そうでなかったらiを返すd.get
関数の返り値を表示して、fizzbuzzを再現しています。
おわりに
このように、様々な長さのfizzbuzzがあります。
自分で短いfizzbuzzを見つけたり、逆に長いfizzbuzzを見つけてみるのもいいかもしれません。
最後のfizzbuzzより短いfizzbuzzを実装できた場合はこの記事のコメントからなどで教えて下さい。
さようなら。
Discussion