Hinweis: Dies ist weniger eine Golfherausforderung. Es ist eher so, nach Golfvorschlägen zu fragen.
Kürzlich hatte ich eine Python-Aufgabe für meine Webentwicklungsklasse, um zu überprüfen, ob wir codieren können. Da ich mich in Python bereits wohl fühle, habe ich mich entschlossen, Golf zu spielen, und ich habe mich gefragt, ob die Leute auf Dinge hinweisen können, die ich verpasst habe.
Ich weiß bereits, dass es an einigen Stellen zusätzliche Leerzeichen gibt, aber ich interessiere mich mehr für konzeptionelle Dinge, wie die Verwendung, while r:
wenn r eine Variable ist, und das Warten darauf, dass sie "ausgeht"!
import random
from collections import Counter
s=l=''
c=['yellow','blue','white','green','Black', 'purple', 'silver', 'cyan', 'magenta', 'red']
n=[10,15,1,10,6,15,10,25,1,12,5,10,4,6,5,12,0,10,1,1]
o=i=0
for y in c:l+=y[0]*(random.randint(n[o],n[o+1]));o+=2
l=list(l)
print("Welcome to the CIMS Gumball Machine Simulator\nYou are starting with the following gumballs:")
for b in c:print(str(l.count(b[0])) + " "+b);random.shuffle(l)
print("Here are your random purchases:")
while 'r' in l:
random.shuffle(l); r=l.pop(); s+=r
for j in c:
if j[0] == r:print(j.capitalize())
print("You purchased %i gumballs, for a total of $%.2f \nMost common gumball(s):" % (len(s),len(s)*25/100))
a=Counter(s).most_common()
m=[x[1] for x in a]
while m[0] == m[i]:
for j in c:
if j[0] == a[i][0]:print(j.capitalize(), end=" ")
if(i<(len(m)-1)):i+=1
else:break
Außerdem: Es tut mir leid, wenn dies keine angemessene Frage für die Code-Golfseite ist, da dies keine Herausforderung darstellt und auf Anfrage entfernt wird.
print
, aber nur um zu überprüfen)Antworten:
Hier ist eine ganze Reihe von Mikrooptimierungen, die Sie durchführen können:
Verwenden Sie
.split()
diese Option , um eine lange Liste (-17 Byte) zu erstellen:Entfernen Sie überflüssige Klammern (-2 Byte):
Verwenden Sie splat (-2 Bytes):
Verwenden Sie das erweiterte iterierbare Entpacken, um etwas in eine Liste (-4 Byte) umzuwandeln:
Importieren Sie alle Dinge (-15 Bytes):
Verwenden Sie andere Funktionen, die hier denselben Job ausführen können (-5 * 2 = -10 Byte):
print
wird standardmäßig durch Leerzeichen getrennt (-11 Byte):Mehr Auspacken (-3 Bytes):
Missbrauchsnebenwirkungen (-1 Byte plus Einrückungen):
Alles, was wiederverwendet wird und mehr als 5 Zeichen enthält, kann als Variable (-1 Byte) gespeichert werden:
Vereinfachen Sie Brüche (-5 Bytes):
Unärer Missbrauch (-4 Bytes):
Oder der größte von allen ...
Sehen Sie sich Ihren Algorithmus an und prüfen Sie, ob er insgesamt geändert werden muss
(Wenn Sie jemals
Counter
in einen Code-Golf importieren , machen Sie wahrscheinlich etwas sehr Falsches ...)quelle
.title()
indem Sie alles vorkapitalisieren. Weisen Sies.count
auch einer Variablen zu.