フィズバズ
Hacker Schoolへの参加を申請したときに、次の問題に遭遇しました。
1から100までの数値を表示するプログラムを作成します(包括的)。 数値が3で割り切れる場合、数値の代わりにFizzを印刷します。 5で割り切れる場合は、バズを印刷します。 3または5で割り切れる場合は、FizzBuzzを出力します。 任意のプログラミング言語を使用できます。
(それ以来、ハッカー学校の従業員は、インターネット検索エンジンの助けを借りてそれを解決するのを困難にするために、タスクをわずかに変更しました。
タスクは非常に単純であり、考える必要はありません。したがって、Hello、Worldなどのプログラミング言語やフィボナッチ数を見つけるタスクの例として適しています。
Python以外のPython
今日、私は友人にハッカー学校で私のアプリケーションを見せたときに再びこの問題を見ました、そして、私は突然それを解決する方法がPythonだけにいくつあるかについて考えました。 Python、特にPEP 8では、Python Pythonを記述するための理想的な方法をユーザーに提示します。 しかし、PythonはPythonのニュースを必要としないため、どのスタイルで記述できるのか疑問に思いました。
注意:次は非常に非PythonのPythonです。 ただし、コードは機能するはずです(Pythonバージョン2.7.5で)。
バグ修正や追加を含むコメントやツイートを送ってください。
Python Python
def fizzbuzz(number): if number % 3 == 0 and number % 5 == 0: return 'FizzBuzz' elif number % 3 == 0: return 'Fizz' elif number % 5 == 0: return 'Buzz' else: return number for number in range(1, 101): print fizzbuzz(number)
Lisp Python
fizzbuzz = lambda n: 'FizzBuzz' if n % 3 == 0 and n % 5 == 0 else None fizz = lambda n: 'Fizz' if n % 3 == 0 else None buzz = lambda n: 'Buzz' if n % 5 == 0 else None fizz_andor_maybenot_buzz = lambda n: fizzbuzz(n) or fizz(n) or buzz(n) or str(n) print reduce(lambda m,n: m+'\n'+n, map(fizz_andor_maybenot_buzz, range(1, 101)))
Java Python
import sys class Value(object): def __init__(self,value): self.setValue(value) def setValue(self,value): self.value = value def getValue(self): return self.value def toString(self): return self.getValue().__str__() class FizzBuzz(object): def __init__(self, n): if n % 15 == 0: value = 'FizzBuzz'; elif n % 3 == 0: value = 'Fizz'; elif n % 5 == 0: value = 'Buzz'; else: value = str(n); self.setValue(value); def setValue(self,value): self.value = Value(value); def getValue(self): return self.value; class FizzBuzzRunner(object): def __init__(self, n): self.setN(n) def setN(self, n): self.n = n def run(self): for i in range(1,self.n): sys.stdout.write(FizzBuzz(i).getValue().toString()+'\n'); if __name__ == '__main__': n = 101; FizzBuzzRunner(n).run()
シズニーパイソン
def main(): i = 0; value = ''; while i < 100: i += 1 if i % 15 == 0: value = 'FizzBuzz'; elif i % 3 == 0: value = 'Fizz'; elif i % 5 == 0: value = 'Buzz'; else: value = str(i); print value; return 0; main();
巧みなPython
def fizzbuzz(n): return 'FizzBuzz' if n % 3 == 0 and n % 5 == 0 else None def fizz(n): return 'Fizz' if n % 3 == 0 else None def buzz(n): return 'Buzz' if n % 5 == 0 else None def fizz_andor_maybenot_buzz(n): print fizzbuzz(n) or fizz(n) or buzz(n) or str(n) map(fizz_andor_maybenot_buzz, xrange(1, 101))