抽象構文木ゴルフ:FizzBu​​zz、Python


12

概要

可能な限り少ないトークンで、FizzBu​​zzをPythonで実装します。

チャレンジ

1から100までの10進数を出力するプログラムを作成します。しかし、3の倍数の場合は数字ではなく「フィズ」、5の倍数の場合は「バズ」が印刷されます。3と5の両方の倍数である数字の場合、「FizzBu​​zz」と印刷します。プログラムは、Pythonの何らかのバージョンで作成する必要があります。

詳細については、1、2、Fizz、4、Buzzを参照してください

得点

スコアは、Python 3のこのプログラムまたはPython 2のこのプログラムによって報告されたコードの抽象構文ツリーのノードの数に等しくなります。プログラムを実行するには、プログラムのコマンドライン引数としてコードのファイル名を指定します。例えば:

python simple_counter.py fizzbuzz.py

これらのプログラムは、Pythonのastモジュールに基づいています。何か問題がある場合はお知らせください。

実際のプログラムで長い文字列を実行したり、出力をハードコーディングしたりといった些細な解決策を防ぐために、いくつかの追加の制限があります。

  • コード内のトークンは15文字を超えることはできません。上記のプログラムは、この要件を確認します。実装を簡単にするために、上記のプログラムはコメントをトークンとしてカウントすることに注意してください。

  • コードの実行/評価は禁止されています。

何かが許可されているかどうかについて質問がある場合は、私に尋ねてください。

スコアリングヒューリスティック

通常、プログラムのスコアを計算するには、次のルールで十分です。

  • ブロック文は1ポイントです:iffor ... in ...whileelse、など

  • スタンドアロン文は1ポイントです:printPythonの2にbreakpassなど、

  • 変数は2ポイントです

  • シングルトークンリテラルは1ポイントです:2131"Hello, world!"True

  • 関数は3つのポイント(変数を使用するための2つ、余分な1つ)です:printPython 3 rangeなど

  • オペレータは2ポイントです:+*%andnot、など

  • = 1ポイントです

  • :拡張割り当ては2点であり+=|=

  • 括弧、インデントなどは0ポイントです。

  • 代入または式ではなく、式を含む行は+ 1ポイントです。

  • コードを持っていることは1ポイントです。

チャレンジ:

最も低いスコアが勝ちます。幸運を!


1
私はこのスタイルが好きです。短いプログラムではなく、単純なプログラムを選択する必要があります。
エソランジングフルーツ

1
これには本当にコードチャレンジ ast-golfが必要ですか?これは、特定の形式のatomic-code-golfではありませんか?
マーティンエンダー

@MartinEnderこのようにした理由は、atomic-code-golfのタグテキストに「Atomic code golfはプログラムのトークンの数で記録されます」と書かれているためです。少量。
isaacg

回答:




2

39 34

for i in range(1,101):print [i,'Fizz','Buzz','FizzBuzz'][19142723>>2*(i%15)&3]

0

Python 2、36

for i in range(1, 101):
    print (not i % 3) * "Fizz" + (not i % 5) * "Buzz" or i

これは、大きな数字/文字列を使用しない最短のアプローチだと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.