C'est un défi de pratiquer l'optimisation du golf en Python - des astuces et des raccourcis réutilisables pour raser quelques personnages. Beaucoup sont familiers aux golfeurs Python et utilisent les idées communes des conseils Python . Certains d'entre eux utilisent des fonctionnalités spécifiques à Python dont vous ne connaissez peut-être pas l'existence, sauf si vous les avez vues, alors jetez un œil aux conseils si vous êtes coincé.
Objectif: Il y a dix problèmes, chacun un extrait de référence de code Python à optimiser et une description du code. Votre objectif est de le réécrire pour être plus court mais toujours fonctionnellement équivalent.
Votre score, que vous essayez de minimiser, est la longueur totale de votre code tous les extraits. La longueur des extraits de référence est de 150. Tiebreaker est le premier message.
Publication des réponses: pour chaque problème, publiez votre code et son nombre de caractères. Vous pouvez publier l'extrait de référence si vous n'avez pas trouvé quelque chose de plus court. Il est prévu que vous ne regardiez pas les réponses des autres lorsque vous postez les vôtres. Veuillez spoiler-tag chaque problème individuel, y compris le nombre de caractères individuels. Vous pouvez laisser le nombre total révélé. N'hésitez pas maintenant à dévoiler votre solution ou à publier de nouvelles solutions non corrompues.
Détails sur la légalité: l'équivalence fonctionnelle signifie que le code peut être remplacé dans un programme sans affecter son comportement (en ignorant des choses comme l'utilisation de la mémoire et la priorité de l'opérateur dans le cadre d'une expression). Les expressions doivent produire des valeurs équivalentes à ==
. Notez que 1.0==1==True
. Votre code ne devrait avoir aucun effet secondaire, sauf indication contraire. Je n'ai pas l'intention que les problèmes soient spécifiques à la version, mais juste au cas où, vous pouvez spécifier une version Python pour chaque problème.
Problème 1: continuez à répéter tant que la liste L
contient au moins 7 éléments
# 16 chars
while len(L)>=7:
Problème 2 : Vérifiez si deux flottent x
et y
sont tous deux positifs.
# 11 chars
x>0 and y>0
Problème 3 : si Boolean b
est vrai, supprimez le premier élément de L
. Sinon, laissez-le inchangé.
# 12 chars
if b:L=L[1:]
Problème 4 : Vérifiez si tous les éléments d'une liste L
de nombres non vide sont égaux. Pour ce problème, vous pouvez modifier la liste.
# 22 chars
all(x==L[0]for x in L)
Problème 5 : Ajoutez un numéro n
à la fin d'une liste L
uniquement s'il L
contient déjà ce numéro.
# 16 chars
if n in L:L+=[n]
Problème 6 : Exprimer le signe d'un flottant x
: +1
pour positif, 0
pour 0, -1
pour négatif.
# 20 chars
abs(x)/x if x else 0
Problème 7 Continuez une boucle tant que le premier élément de L
, une liste de booléens, est True
. Arrêtez également si L
est vide.
# 17 chars
while L and L[0]:
Problème 8 : Continuez une boucle tant qu'elle n
est supérieure à 1. Le nombre n
est garanti être un entier positif.
# 10 chars
while n>1:
Problème 9 : Vérifiez si un entier représenté sous forme de chaîne s
est négatif (c'est-à-dire qu'il commence par «-»).
# 9 chars
s[0]=='-'
Problème 10 : convertir un booléen b
en "Win"
/ "Lose"
, avec True
-> "Win"
et False
-> "Lose"
.
# 17 chars
["Lose","Win"][b]
Avertissement: Spoilers ci-dessous, ne faites pas défiler vers le bas si vous souhaitez les résoudre vous-même.
Si vous voulez simplement connaître le score optimal pour un problème:
Problème 1:
12
Problème 2:
5
Problème 3:
7
Problème 4:
13
Problème 5:
13
Problème 6:
8
Problème 7:
12
Problème 8:
9
Problème 9:
5
Problème 10:
15