Voici le code que je souhaite raccourcir.
n=input()
while n:
s=raw_input()
x,r,g,b=(int(x) for x in s.split())
a=x/r%2
c=x/g%2
d=x/b%2
r=((a*10+c)*10)+d
if r==0:e="black"
elif r==100:e="red"
elif r==1:e="blue"
elif r==10:e="green"
elif r==101:e="magenta"
elif r==11:e="cyan"
elif r==110:e="yellow"
else:e="white"
print(e)
n-=1
Entrée: 3
4643 5913 4827 9752
5583 5357 5120 9400
2025 5475 4339 8392
Production:
black
yellow
black
Réponses:
Au lieu de cela,
((a*10+c)*10)+d
nous pouvons utiliser((a*2+c)*2)+d
pour distinguer les couleurs.Ah, mais maintenant nous faisons juste une distinction entre les valeurs de
0
à7
, nous pouvons donc indexer dans un tableau à la place!En combinant avec les changements d'Uriel, nous descendons à 136 octets (164 octets enregistrés) .
Essayez-le en ligne!
la source
,
(virgules) entre les entiers, alors vous pouvez atteindre 115 octetsPour la répétition, utilisez une
exec
instruction,map(int,
pour la conversion de l'entrée de chaîne en chiffres,raccourcir le calcul
r
avecr=a*100+c*10+d
, puis mettre les calculs de chaque variable (a
,c
,d
) au lieu de la variable,et pour les conditions, utilisez un dictionnaire avec un
get
requête.Enfin, écrasez tout sur une seule ligne.
Résultat final (mise à jour):
Octets enregistrés: 121 .
la source
exec"..."*input()
print
, et(x/r%2)*100
→x/r%2*100
etc.)