Dies ist eine Herausforderung, um die Golfoptimierung in Python zu üben - wiederverwendbare Tricks und Shortcuts, um einige Charaktere zu rasieren. Viele sind Python-Golfern vertraut und verwenden die gängigen Ideen aus den Python-Tipps . Einige von ihnen verwenden Python-spezifische Funktionen, von denen Sie vielleicht nicht wissen, dass sie existieren, wenn Sie sie nicht gesehen haben. Schauen Sie sich also die Tipps an, wenn Sie nicht weiterkommen.
Ziel: Es gibt zehn Probleme, von denen jedes ein Referenzschnipsel von Python-Code enthält, den Sie optimieren können, und eine Beschreibung des Codes enthält. Ihr Ziel ist es, es so umzuschreiben, dass es kürzer, aber dennoch funktional äquivalent ist.
Ihre Punktzahl, die Sie zu minimieren versuchen, ist die Gesamtlänge Ihres Codes aller Schnipsel. Die Länge der Referenzschnipsel beträgt 150. Tiebreaker ist der früheste Beitrag.
Antworten veröffentlichen: Veröffentlichen Sie für jedes Problem Ihren Code und die Anzahl der Zeichen. Sie können das Referenz-Snippet posten, wenn Sie nichts Kürzeres gefunden haben. Es ist beabsichtigt, dass Sie nicht auf die Antworten anderer schauen, wenn Sie Ihre posten. Bitte markieren Sie jedes einzelne Problem mit einem Spoiler, einschließlich der Anzahl der einzelnen Zeichen. Sie können die Gesamtzahl offen lassen. Zögern Sie nicht, Ihre Lösung zu löschen oder neue unverbaute Lösungen zu veröffentlichen.
Details zur Legalität: Funktionale Äquivalenz bedeutet, dass der Code in einem Programm ersetzt werden kann, ohne dass dies Auswirkungen auf sein Verhalten hat. Ausdrücke sollten Werte erzeugen, die äquivalent zu sind ==. Beachten Sie das 1.0==1==True. Ihr Code sollte keine Nebenwirkungen haben, sofern nicht anders angegeben. Ich beabsichtige nicht, dass die Probleme versionsspezifisch sind, aber für jeden Fall können Sie eine Python-Version für jedes Problem angeben.
Problem 1: Wiederholen Sie den Vorgang, solange die Liste Lmindestens 7 Elemente enthält
# 16 chars
while len(L)>=7:
Problem 2 : Überprüfen Sie, ob zwei Schwimmer xund ybeide positiv sind.
# 11 chars
x>0 and y>0
Problem 3 : Wenn Boolean btrue ist, entfernen Sie das erste Element von L. Ansonsten lassen Sie es unverändert.
# 12 chars
if b:L=L[1:]
Aufgabe 4 : Prüfen Sie, ob alle Elemente einer nicht leeren LZahlenliste gleich sind. Für dieses Problem ist es in Ordnung, die Liste zu ändern.
# 22 chars
all(x==L[0]for x in L)
Problem 5 : Fügen Sie eine Nummer nur dann nan das Ende einer Liste an L, wenn Ldiese Nummer bereits enthalten ist.
# 16 chars
if n in L:L+=[n]
Aufgabe 6 : Drücken Sie das Vorzeichen eines Floats aus x: +1für positiv, 0für 0, -1für negativ.
# 20 chars
abs(x)/x if x else 0
Aufgabe 7L Setzen Sie eine Schleife fort, solange das erste Element von , eine Liste von Booleschen Werten, ist True. Auch aufhören, wenn Lleer ist.
# 17 chars
while L and L[0]:
Aufgabe 8 : Setzen Sie eine Schleife fort, solange sie ngrößer als 1 ist. Die Zahl nist garantiert eine positive ganze Zahl.
# 10 chars
while n>1:
Problem 9 : Überprüfen Sie, ob eine als Zeichenfolge dargestellte Ganzzahl snegativ ist (dh mit '-' beginnt).
# 9 chars
s[0]=='-'
Aufgabe 10 : Konvertieren Sie einen Booleschen Wert mit -> und -> bnach "Win"/ ."Lose"True"Win"False"Lose"
# 17 chars
["Lose","Win"][b]
Achtung: Spoiler unten, scrollen Sie nicht nach unten, wenn Sie diese selbst lösen möchten.
Wenn Sie nur die optimale Punktzahl für ein Problem wissen möchten:
Problem 1:
12
Problem 2:
5
Problem 3:
7
Problem 4:
13
Problem 5:
13
Problem 6:
8
Problem 7:
12
Problem 8:
9
Problem 9:
5
Problem 10:
15