Remarque: Ce n'est pas autant un défi de golf; il s'agit plus de demander des suggestions de golf.
Récemment, j'ai eu une affectation Python pour ma classe de développement Web, afin de vérifier si nous pouvions coder. Comme je me sens déjà à l'aise en Python, j'ai décidé d'essayer de jouer au golf et je me demandais si les gens pouvaient signaler des choses qui m'ont manqué.
Je sais déjà qu'il y a des espaces supplémentaires à certains endroits, mais je suis plus intéressé par les choses conceptuelles, comme utiliser while r:
quand r est une variable, puis attendre qu'elle "s'épuise"!
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
Aussi: Je suis désolé si ce n'est pas une question appropriée pour la page de golf de code, car ce n'est pas un défi et le supprimera sur demande.
print
, mais juste pour vérifier)Réponses:
Voici tout un tas de micro-optimisations que vous pouvez faire:
Utilisez
.split()
pour créer une longue liste (-17 octets):Supprimer les crochets superflus (-2 octets):
Utilisez splat (-2 octets):
Utilisez le déballage itérable étendu pour transformer quelque chose en liste (-4 octets):
Importez toutes les choses (-15 octets):
Utilisez d'autres fonctions qui peuvent faire le même travail ici (-5 * 2 = -10 octets):
print
sépare par espace par défaut (-11 octets):Plus de déballage (-3 octets):
Effets secondaires des abus (-1 octet, plus les retraits):
Tout ce qui est réutilisé et plus de 5 caractères peut valoir la peine d'être enregistré en tant que variable (-1 octet):
Simplifiez les fractions (-5 octets):
Abus unaire (-4 octets):
Ou le plus grand de tous ...
Examinez votre algorithme et voyez s'il doit être complètement changé
(Si vous vous retrouvez à importer
Counter
dans un code-golf, vous faites probablement quelque chose de très mal ...)la source
.title()
tout en précapitalisant. Attribuez égalements.count
à une variable.