Masz dość wszystkich wyzwań związanych z codegolfem. Dlatego decydujesz się napisać program, który automatycznie zagra dla ciebie kod Pythona. Istnieją 3 przypadki testowe:
print quickSort([0,7,3,-1,8,10,57,2])
def quickSort(arr):
less = []
pivotList = []
more = []
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
for i in arr:
if i < pivot:
less.append(i)
elif i > pivot:
more.append(i)
else:
pivotList.append(i)
less = quickSort(less)
more = quickSort(more)
return less + pivotList + more
for i in xrange(1, 101):
if i % 15 == 0:
print "FizzBuzz"
elif i % 3 == 0:
print "Fizz"
elif i % 5 == 0:
print "Buzz"
else:
print i
from sys import argv
def randomGenerator(seed=1):
max_int32 = (1 << 31) - 1
seed = seed & max_int32
while True:
seed = (seed * 214013 + 2531011) & max_int32
yield seed >> 16
def deal(seed):
nc = 52
cards = range(nc - 1, -1, -1)
rnd = randomGenerator(seed)
for i, r in zip(range(nc), rnd):
j = (nc - 1) - r % (nc - i)
cards[i], cards[j] = cards[j], cards[i]
return cards
def show(cards):
l = ["A23456789TJQK"[c / 4] + "CDHS"[c % 4] for c in cards]
for i in range(0, len(cards), 8):
print " ", " ".join(l[i : i+8])
if __name__ == '__main__':
seed = int(argv[1]) if len(argv) == 2 else 11982
print "Hand", seed
deck = deal(seed)
show(deck)
Zasady:
Twój program nie może celować w kod, który specjalnie opublikowałem i powinien działać z dowolnym kodem Python 2. Zastrzegam sobie prawo do zmiany kodowanego kodu źródłowego. Możesz założyć, że nie ma łańcuchów wielowierszowych (więc nie masz zbudowanego pełnego parsera) i że locals () nie jest wywoływany.
Dane wyjściowe programu powinny działać w identyczny sposób jak oryginalny kod źródłowy. (Mianowicie, musi generować takie same dane wyjściowe. Nazwy zmiennych i konstrukcje językowe można zmieniać, o ile dane wyjściowe pozostają takie same)
Możesz użyć STDIO lub pliku, aby wprowadzić / wyprowadzić kod źródłowy.
Twój wynik będzie sumą bajtów wyniku programu.
(Powyższy kod pochodzi z http://rosettacode.org/ na licencji GNU Free Documentation License 1.2 )
if __name__ == '__main__':
miałoby wpływ na zachowanie w niektórych kontekstach, ale nie w innych. Dla innego przykładu, jeśli wejście bez golfa zakłada, że odczytuje wartość int ze standardowego wejścia i zgłasza jeden typ wyjątku, jeśli otrzyma coś innego, czy wejście do gry w golfa może rzucić inny typ wyjątku, jeśli otrzyma wartość inną niż całkowita?random_long_variable=0;print locals()
?Odpowiedzi:
Python 2.7, 794
Chciałem zbudować minifikator dla Pythona, więc jest to dobra okazja do zbadania problemu.
Program wykorzystuje połączenie analizy wyrażeń regularnych i operacji analizatora składni w języku Python. Biała przestrzeń jest zminimalizowana. Zmienne zdefiniowane przez użytkownika są zastępowane zmienną jednoliterową (która nie jest używana!). Wreszcie
while True
oświadczenie zostało wprowadzone na temat diety.Wszystkie trzy przypadki testowe sprawdzają, czy działają poprawnie. Mogę sobie wyobrazić kilka patologicznych przykładów, które mogą powodować błędy w generowanym kodzie, ale algorytm powinien być solidny w większości przypadków.
Wyniki
Wynik
Kod
źródło
sed, 1074 (wcześniej 1390)
Bardzo łagodny, nisko wiszący owoc, aby rzucić piłkę:
Zamień na
<--TAB-->
prawdziwe TABpostacieOczywista wada:
Ponieważ nie możemy zakładać żadnych ciągów wieloliniowych, usuwamy spacje wiodące / końcowe tylko od operatorów, jeśli nie ma ich
'
lub"
w danym wierszu. Można to poprawić, ale <mruczy coś o tym, że sed regex zawsze jest chciwy> .Testuj w następujący sposób:
źródło
Python 3.4, 1134
Ten program powinien działać poprawnie dla większości programów. O dziwo, przypadek testowy Sp3000 jest znacznie łatwiej zoptymalizować dla mojego programu niż twoje programy. Dane wejściowe są akceptowane przez plik określony w pierwszym argumencie. Rzeczywisty plik został zmodyfikowany.
Jak to działa:
Najpierw ten program sprawdza, czy Twój program w ogóle wchodzi w interakcje z użytkownikiem lub używa losowo. Jeśli tak, program nie jest modyfikowany. Następnie program jest uruchamiany. Program jest następnie zastępowany przez
print "output"
. Wreszcie, jeśli program jest krótszy niż jego wynik, jest niemodyfikowany.Program Sp3000, zoptymalizowany:
Super premiowy program Sp3000, zoptymalizowany:
Zoptymalizowana wersja jest wyłączona tylko 0,001% czasu.
źródło
argv
,input
orazrandom
, co byłoby złamać kod. ;)print id(0)
jest dobry.