Soyut Sözdizimi Golf Golf: FizzBuzz, Python


12

özet

Mümkün olan en az jetonla FizzBuzz'ı Python'da uygulayın.

Meydan okuma

1'den 100'e kadar ondalık sayıları yazdıran bir program yazın. Ancak sayı yerine üç baskı “Fizz” ve beş baskı “Buzz” katları için. Hem üç hem de beşin katları olan sayılar için “FizzBuzz” yazdırın. Programlar Python'un bazı sürümlerinde yazılmalıdır.

Daha fazla ayrıntı için bkz. 1, 2, Fizz, 4, Buzz

puanlama

Puanınız, Python 3 için bu program veya Python 2 için bu program tarafından bildirildiği gibi, kodunuzun soyut sözdizimi ağacındaki düğüm sayısına eşit olacaktır . Programları çalıştırmak için, programınızın komut satırı bağımsız değişkeni olarak kodunuzun dosya adını girin. Örneğin:

python simple_counter.py fizzbuzz.py

Bu programlar Python'un ast modülüne dayanmaktadır . Herhangi bir zorluğunuz varsa bana bildirin.

Gerçek programla uzun bir dize yürütmek veya çıktıyı kodlamak gibi önemsiz çözümleri önlemek için bazı ek kısıtlamalar vardır:

  • Kodunuzdaki hiçbir simge 15 karakterden uzun olamaz. Yukarıdaki programlar sizin için bu gereksinimi kontrol edecektir. Uygulama kolaylığı için, yukarıdaki programların yorumları jeton olarak saydığını unutmayın.

  • Kod yürütme / değerlendirme yasaklandı.

Bir şeye izin verilip verilmediğine ilişkin sorularınız varsa bana sorun.

Puanlama Buluşsal Yöntemleri

Aşağıdaki kurallar genellikle programınızın puanını hesaplamak için yeterlidir:

  • Blok tablolar 1 noktalar şunlardır: if, for ... in ..., while, else, vb

  • : Bağımsız tablolar 1 puan verilir printPython 2'de, break, passvb

  • Değişkenler 2 puan

  • Tek belirteci değişmezleri 1 noktası: 2131, "Hello, world!",True

  • Fonksiyonlar 3 noktadır (değişken kullanmak için 2, 1 ekstra): printPython 3 range, vb.

  • Operatörler 2 noktalar şunlardır: +, *, %, and, not, vs.

  • = 1 puan

  • Desteklenmiş atama 2 puan +=, |=vs.

  • Parantez, girinti vb. 0 puandır.

  • Bir ödeve ya da bir ifadeye karşılık olarak bir ifade içeren bir çizgi + 1 puandır.

  • Kod sahibi olmak 1 puan.

Meydan okuma:

En düşük puan kazanır. İyi şanslar!


1
Bu tarzı sevdim. Kısa programlardan ziyade basit programlara gitmelisiniz.
Esolanging Fruit

1
Bunun için gerçekten kod meydan okuma ast-golfüne ihtiyacımız var mı? Bu sadece belirli bir atomik kod-golf biçimi değil mi?
Martin Ender

@MartinEnder Bunu bu şekilde yapmamın nedeni, atomik kod golf için etiket metninin "Atomik kod golfü programınızın jeton sayısı ile puanlandığı" diyor ve belki de bununla aynı değil, belki de sadece güzel küçük miktar.
isaacg

Yanıtlar:


6

33

Python 2

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

2

46

for x in range(100):print('Fizz'*(x%3>1)+'Buzz'*(x%5>3)or str(x+1))

Python 3'te x + 1 dizilemez mi?
Yıkılabilir Limon

1
@DestructibleWatermelon Python 3, reprhatırladığım kadarıyla geri dönüşlere sahip değil .
Kade

3
Baskı argümanı olarak bir tamsayı alabilir, benim açımdan
Yıkılabilir Limon

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

Bence bu, çok sayı / dizgeyi kullanmayan yaklaşımların en kısa noktası.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.