Hintergrund
Minifier werden in der Regel verwendet, wenn Sie JavaScript in Ihrem Webbrowser bereitstellen. Es wird häufig verwendet, um die Anzahl der zu sendenden Bytes zu verringern. Das Sparen von Bandbreite ist aus offensichtlichen Gründen nützlich. Einige Leute benutzen Obfuscater (die absichtlich das Lesen von Code erschweren), ich spreche nicht über diese.
Wir werden Python 2 minimieren
Ich habe überlegt, ob JavaScript oder Python für die Minimierungserfahrung verwendet werden soll oder nicht, und ich habe mich aus zwei Gründen für Python entschieden: Auf den Leerraum kommt es an, und ich denke, das wird dem Problem eine interessante Dynamik verleihen. Darüber hinaus bietet die Verwendung von Python 2.7 eine weitere Dynamik, z. B. das Entfernen überflüssiger Elemente ()
während eines Druckvorgangs (z. B. print("Hello world")
vs. print"Hello world"
). Ich persönlich hätte es vorgezogen, es für jede Sprache zu öffnen, aber für einige Sprachen ist dieser Prozess nicht sehr sinnvoll. Und welche Sprache Sie sich für die Minimierung entscheiden, wirkt sich direkt auf Ihre Punktzahl aus (und ob die Sprache überhaupt minimiert werden kann).
Technische Daten
Ihr Ziel ist es, den Code nur so zu ändern, dass seine Funktionalität in keiner Weise verändert wird. Sie können sich natürlich ändern Variablennamen (in Ihrem Verkleinerungsprogramm), solange sie nicht wirksam ausgegeben hat ( im Auge behalten Umfang ). Obwohl ich Ihnen ein spezifisches Programm gebe, optimieren Sie es bitte nicht für den Testfall, da alle Standardlücken verboten sind.
Ergebnis : Länge des Programms, nachdem Sie es minimiert haben.
Eingabe : Beliebiges Python 2.7-Programm (das keine Fehler enthält)
Ausgabe : Eine verkleinerte Version.
Obwohl Ihr Code in der Lage sein sollte, alle gültigen Python 2.7-Eingaben aufzunehmen, ist es erforderlich, Ihr Skript mit etwas zu testen, um seine Wirksamkeit zu beweisen.
Klicken Sie hier , um das Beispielprogramm anzuzeigen.
Das Problem verständlicher machen
Fühlen Sie sich frei, Code zu verwenden oder zu ändern, der sich in meiner Lösung befindet (siehe unten). Ich habe dies getan, um Ihnen den Einstieg in die grundlegende Angebotsabwicklung zu erleichtern. Sie können es jedoch auf Einrückung usw. erweitern.
Beispiel für die Minimierung von Python
Der gesamte Leerraum könnte mit der minimal möglichen Menge ersetzt werden (ich gebe zu, dass Sie in Python einige knifflige Dinge mit Tabulatoren machen können , aber das überlasse ich Ihnen, um zu entscheiden, ob Sie es implementieren oder nicht).
Beispiel
Folgende:
def print_a_range(a):
for i in range(a):
print(i)
Könnte sein:
def print_a_range(a):
for i in range(a):
print(i)
Technisch gesehen können Sie eine Schleife, die nur eine Zeile enthält, noch weiter komprimieren:
def print_a_range(a):
for i in range(a):print(i) #Note, you can also remove the `()` here.
Es gibt jedoch eine andere Möglichkeit, Leerzeichen in Python zu minimieren:
Folgende:
print ([a * 2 for a in range(20) if a % 2 == 0])
Könnte sein:
print([a*2for a in range(20)if a%2==0])
Beachten Sie, dass kein Leerzeichen zwischen 2
und erforderlich ist for
. Variablen, Funktionen und Schlüsselwörter dürfen nicht mit einer Zahl beginnen. Der Python-Interpreter ist also in Ordnung <num><keyword>
, kein Leerzeichen. Beachten Sie auch, dass zwischen )
und kein Leerzeichen stehen muss if
.
Beachten Sie, dass Sie die Ausgabe des Programms nicht ändern dürfen! So:
print"f(x)=x*2 is a great equation!"
Die obige print-Anweisung sollte gleich bleiben, da das Leerzeichen dazwischen entfernt 2
und is
die Ausgabe geändert würde.
quelle
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'
in'1'*100
erlaubt? Müssen Sie tun, wie das Verhalten gleich ist?Antworten:
Python 2.7, 2013 Punktzahl
Dieses Programm kann als Referenz verwendet werden. Sie können den folgenden Code verwenden, ändern und dann in Ihren eigenen Lösungen veröffentlichen.
Im Nachhinein hätte ich vielleicht auch Regex für die Angebotsabwicklung verwenden sollen, aber ich denke, dass es im aktuellen Zustand ausreichen könnte, um die Leute für das Problem zu begeistern.
Warum ich mich für Python 2.7 entschieden habe: Ich dachte, es wäre einfacher zu testen, ob ich das Programm über das
exec
Schlüsselwort zum Absturz gebracht habe .Dieser Code nimmt das Programm als auf
in.txt
.Ich dachte mir, ich sollte zumindest den Ball ins Rollen bringen für alle, die teilnehmen möchten, indem ich einen Zitat-Parser (der auch Kommentare verarbeitet) und ein kurzes Beispiel schreibe, wie Regex in Kombination mit dem Zitat-Parser das Spiel wirklich verändern kann Komplexität dieses Problems.
Hinweis: Bei diesem Minifier gibt es noch viel Raum für Verbesserungen. Als ob Sie mit Einrückungen, Variablennamen und dem Entfernen der Klammern herumspielen könnten, wenn sie mit meinen Schlüsselwörtern wie
print
oder verwendet werdenyield
.Ausgabe des Programms:
quelle