Streszczenie Składnia Drzewo Golf: FizzBuzz, Python


12

streszczenie

Zaimplementuj FizzBuzz w Pythonie, używając jak najmniejszej liczby tokenów.

Wyzwanie

Napisz program, który drukuje liczby dziesiętne od 1 do 100 włącznie. Ale dla wielokrotności trzech wydruków „Fizz” zamiast liczby i dla wielokrotności pięciu wydruków „Buzz”. W przypadku liczb, które są wielokrotnością zarówno trzech, jak i pięciu, należy wydrukować „FizzBuzz”. Programy muszą być napisane w niektórych wersjach Pythona.

Aby uzyskać więcej informacji, zobacz 1, 2, Fizz, 4, Buzz

Punktacja

Twój wynik będzie równy liczbie węzłów w abstrakcyjnym drzewie składni twojego kodu, zgłoszonym przez ten program dla Python 3 lub ten program dla Python 2 . Aby uruchomić programy, podaj nazwę pliku swojego kodu jako argument wiersza poleceń programu. Na przykład:

python simple_counter.py fizzbuzz.py

Programy te oparte są na module ast Pythona . Jeśli masz jakieś trudności, daj mi znać.

Aby zapobiec trywialnym rozwiązaniom, takim jak wykonywanie długiego łańcucha za pomocą rzeczywistego programu lub zakodowanie wyjścia, istnieją pewne dodatkowe ograniczenia:

  • Żeton w twoim kodzie nie może być dłuższy niż 15 znaków. Powyższe programy sprawdzą to wymaganie. Należy pamiętać, że w celu ułatwienia implementacji powyższe programy liczą komentarze jako tokeny.

  • Wykonanie / ocena kodu jest zabroniona.

Jeśli masz pytania, czy coś jest dozwolone, zapytaj mnie.

Heurystyka punktacji

Następujące reguły zazwyczaj wystarczają do obliczenia wyniku twojego programu:

  • Sprawozdanie blokowe są punkty 1: if, for ... in ..., while, else, itd.

  • Jednostkowe sprawozdanie to 1 punkt printw Pythonie 2 break, passitd

  • Zmienne mają 2 punkty

  • Single-symboliczne literały są 1 punkt 2131, "Hello, world!",True

  • Funkcje to 3 punkty (2 za użycie zmiennej, 1 dodatkowy): printw Python 3 rangeitd.

  • Operatorzy są 2 punkty: +, *, %, and, not, itd.

  • = wynosi 1 punkt

  • Zwiększona zadaniem jest: 2 punkty +=, |=itp

  • Nawiasy, wcięcia itp. Mają 0 punktów.

  • Linia zawierająca wyrażenie, w przeciwieństwie do przypisania lub wyrażenia, wynosi + 1 punkt.

  • Posiadanie kodu w ogóle to 1 punkt.

Wyzwanie:

Najniższy wynik wygrywa. Powodzenia!


1
Lubię ten styl. Musisz wybierać proste programy, a nie tylko krótkie.
Esolanging Fruit

1
Czy naprawdę potrzebujemy do tego kodu-wyzwania ast-golfa ? Czy to nie jest tylko specyficzna forma golfa z kodem atomowym ?
Martin Ender

@MartinEnder Powodem, dla którego to zrobiłem, jest to, że tekst tagu dla atomic-code-golf mówi: „Golf z kodem atomowym jest oceniany przez liczbę tokenów twojego programu”, i to nie jest to samo, chociaż może tylko ładny mała ilość.
isaacg

Odpowiedzi:


6

33

Python 2

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


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

Myślę, że jest to najkrótsze podejście, które nie używa dużych liczb / ciągów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.