🔢

fizzbuzzはどこまで短く書けるか【python】

2024/06/25に公開

はじめに

こんにちは。

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