Sie haben alle Codegolf-Herausforderungen satt. Daher beschließen Sie, ein Programm zu schreiben, das automatisch Python-Code für Sie spielt. Es gibt 3 Testfälle:
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)
Regeln:
Ihr Programm darf nicht auf den von mir angegebenen Code abzielen und sollte mit jedem Python 2-Code funktionieren. Ich behalte mir das Recht vor, den Quellcode zu ändern, der codegolfed wird. Sie können davon ausgehen, dass es keine mehrzeiligen Zeichenfolgen gibt (Sie haben also keinen vollständigen Parser erstellt), und dass locals () nicht aufgerufen wird.
Die Ausgabe Ihres Programms sollte auf die gleiche Weise wie der ursprüngliche Quellcode ausgeführt werden. (Es muss nämlich die gleiche Ausgabe erzeugen. Variablennamen und Sprachkonstrukte können geändert werden, solange die Ausgabe dieselbe bleibt.)
Sie können STDIO oder eine Datei verwenden, um den Quellcode einzugeben / auszugeben.
Ihre Punktzahl ist die Summe der Bytes der Programmausgabe.
(Der oben aufgeführte Code wurde von http://rosettacode.org/ unter der GNU Free Documentation License 1.2 entnommen. )
if __name__ == '__main__':
das Verhalten in einigen Kontexten beeinflussen würde, in anderen jedoch nicht. Wenn in einem anderen Beispiel die Eingabe "Ungolfed" davon ausgeht, dass sie ein Int aus "stdin" liest und einen Ausnahmetyp auslöst, wenn etwas anderes angegeben ist, kann die Eingabe "Golfed" dann einen anderen Ausnahmetyp auslösen, wenn eine Nicht-Ganzzahl angegeben ist?random_long_variable=0;print locals()
?Antworten:
Python 2.7, 794
Ich wollte schon seit einiger Zeit einen Minifier für Python erstellen, daher ist dies eine gute Gelegenheit, das Problem zu untersuchen.
Das Programm verwendet eine Mischung aus der Analyse regulärer Ausdrücke und Python-Parser-Operationen. Leerraum wird minimiert. Vom Benutzer definierte Variablen werden durch eine einzelne Buchstabenvariable (die nicht verwendet wird!) Ersetzt. Schließlich wird die
while True
Aussage auf eine Diät gesetzt.Alle drei Testfälle verifizieren, dass sie korrekt ausgeführt werden. Ich könnte mir einige pathologische Beispiele vorstellen, die zu Fehlern im generierten Code führen könnten, aber der Algorithmus sollte unter den meisten Umständen robust sein.
Ergebnisse
Ausgabe
Code
quelle
sed, 1074 (nach 1390)
Sehr milde, niedrig hängende Frucht-Antwort, um den Ball ins Rollen zu bringen:
Ersetzen Sie
<--TAB-->
durch echte TABZeichenOffensichtliches Manko:
Da wir keine mehrzeiligen Zeichenfolgen annehmen können, entfernen wir führende / nachfolgende Leerzeichen von Operatoren nur, wenn keine
'
oder"
in der angegebenen Zeile vorhanden sind. Dies könnte verbessert werden, aber <murmelt etwas darüber, dass sed regex immer gierig ist> .Testen Sie wie folgt:
quelle
Python 3.4, 1134
Dieses Programm sollte für die meisten Programme in Ordnung sein. Seltsamerweise ist der Sp3000-Testfall für mein Programm viel einfacher zu optimieren als für Ihre Programme. Die Eingabe wird über die im ersten Argument angegebene Datei akzeptiert. Die eigentliche Datei wird geändert.
Wie es funktioniert:
Zuerst prüft dieses Programm, ob Ihr Programm überhaupt mit dem Benutzer interagiert oder zufällig verwendet. In diesem Fall bleibt das Programm unverändert. Als nächstes wird das Programm ausgeführt. Das Programm wird dann durch ersetzt
print "output"
. Wenn das Programm kürzer als die Ausgabe ist, bleibt es unverändert.Das Programm von Sp3000, optimiert:
Das Super-Bonusprogramm von Sp3000, optimiert:
Die optimierte Version ist nur in 0,001% der Fälle deaktiviert.
quelle
argv
,input
undrandom
, die Ihr Code brechen würde. ;)print id(0)
ist ein guter.