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 L
mindestens 7 Elemente enthält
# 16 chars
while len(L)>=7:
Problem 2 : Überprüfen Sie, ob zwei Schwimmer x
und y
beide positiv sind.
# 11 chars
x>0 and y>0
Problem 3 : Wenn Boolean b
true 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 L
Zahlenliste 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 n
an das Ende einer Liste an L
, wenn L
diese Nummer bereits enthalten ist.
# 16 chars
if n in L:L+=[n]
Aufgabe 6 : Drücken Sie das Vorzeichen eines Floats aus x
: +1
für positiv, 0
für 0, -1
fü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 L
leer ist.
# 17 chars
while L and L[0]:
Aufgabe 8 : Setzen Sie eine Schleife fort, solange sie n
größer als 1 ist. Die Zahl n
ist garantiert eine positive ganze Zahl.
# 10 chars
while n>1:
Problem 9 : Überprüfen Sie, ob eine als Zeichenfolge dargestellte Ganzzahl s
negativ ist (dh mit '-' beginnt).
# 9 chars
s[0]=='-'
Aufgabe 10 : Konvertieren Sie einen Booleschen Wert mit -> und -> b
nach "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