Abstrak Sintaksis Pohon Golf: FizzBuzz, Python

12

Ringkasan

Terapkan FizzBuzz di Python, dengan token sekecil mungkin.

Tantangan

Tulis program yang mencetak angka desimal dari 1 hingga 100 inklusif. Tetapi untuk kelipatan tiga cetak "Fizz" bukan nomor dan untuk kelipatan lima cetak "Buzz". Untuk angka yang merupakan kelipatan dari tiga dan lima cetak "FizzBuzz". Program harus ditulis dalam beberapa versi Python.

Untuk detail lebih lanjut, lihat 1, 2, Fizz, 4, Buzz

Mencetak gol

Skor Anda akan sama dengan jumlah node di pohon sintaksis abstrak kode Anda, seperti yang dilaporkan oleh program ini untuk Python 3 , atau program ini untuk Python 2 . Untuk menjalankan program, berikan nama file kode Anda sebagai argumen baris perintah ke program. Misalnya:

python simple_counter.py fizzbuzz.py

Program-program ini didasarkan pada modul ast Python . Jika Anda mengalami kesulitan, beri tahu saya.

Untuk mencegah solusi sepele, seperti mengeksekusi string panjang dengan program aktual, atau meng-hardcoding output, ada beberapa batasan tambahan:

  • Tidak ada token dalam kode Anda yang boleh lebih dari 15 karakter. Program-program di atas akan memeriksa persyaratan ini untuk Anda. Perhatikan bahwa untuk kemudahan implementasi, program di atas menghitung komentar sebagai token.

  • Eksekusi / evaluasi kode dilarang.

Jika Anda memiliki pertanyaan, apakah sesuatu diperbolehkan, tanyakan kepada saya.

Skor Heuristik

Aturan berikut biasanya cukup untuk menghitung skor program Anda:

  • Blok pernyataan adalah 1 poin: if, for ... in ..., while, else, dll

  • Pernyataan mandiri adalah 1 poin: printPython 2, break, pass, dll

  • Variabel adalah 2 poin

  • Literal tunggal-tanda adalah 1 point: 2131, "Hello, world!",True

  • Fungsinya adalah 3 poin (2 untuk menggunakan variabel, 1 ekstra): printdalam Python 3 range,, dll.

  • Operator adalah 2 poin: +, *, %, and, not, dll

  • = adalah 1 poin

  • Tugas Augmented adalah 2 poin: +=, |=, dll

  • Tanda kurung, indentasi, dll. Adalah 0 poin.

  • Baris yang berisi ekspresi, berlawanan dengan penugasan atau ekspresi, adalah +1 poin.

  • Memiliki kode sama sekali adalah 1 poin.

Tantangan:

Skor terendah menang. Semoga berhasil!

isaacg
sumber
1
Saya suka gaya ini. Anda harus mengikuti program sederhana dan bukan yang pendek.
Buah Esolanging
1
Apakah kita benar-benar membutuhkan kode-tantangan ast-golf untuk ini? Bukankah ini hanya bentuk khusus dari kode-atom-golf ?
Martin Ender
@ MartinEnder Alasan saya melakukannya dengan cara ini adalah karena tag teks untuk atom-code-golf mengatakan "Golf kode atom dinilai oleh jumlah token program Anda," dan itu tidak sama dengan ini, meskipun mungkin hanya cukup jumlah kecil.
isaacg

Jawaban:

6

33

Python 2

for i in range(1,101):print[i,'Fizz','Buzz','FizzBuzz'][int(`300102100120100`[i%15])]
Jonathan Allan
sumber
2

46

for x in range(100):print('Fizz'*(x%3>1)+'Buzz'*(x%5>3)or str(x+1))
Oliver Ni
sumber
Tidak dapat x + 1 tidak dapat dirender dengan python 3?
Lemon Destructible
1
@DestructibleWatermelon Python 3 tidak memiliki backticks reprsejauh yang saya ingat.
Kade
3
Print dapat mengambil integer sebagai argumennya, menurut saya
Destructible Lemon
2

39 34

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

Python 2, 36

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

Saya pikir ini adalah pendekatan yang terpendek yang tidak menggunakan sejumlah besar / string.

isaacg
sumber