Aquí está el código que quiero acortar.
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
Entrada: 3
4643 5913 4827 9752
5583 5357 5120 9400
2025 5475 4339 8392
Salida:
black
yellow
black
Respuestas:
En lugar de
((a*10+c)*10)+d
podemos usar((a*2+c)*2)+d
para distinguir los colores.Ah, pero ahora solo estamos distinguiendo entre valores de
0
a7
, por lo que podemos indexarlos en una matriz.En combinación con los cambios de Uriel, llegamos a 136 bytes (164 bytes guardados) .
Pruébalo en línea!
fuente
,
(comas) entre los enteros, entonces puedes alcanzar 115 bytesPara la repetición use una
exec
declaración,map(int,
para la conversión de la entrada de cadena en números,acortar el cálculo
r
conr=a*100+c*10+d
, a continuación, poner los cálculos de cada variable (a
,c
,d
) en lugar de la variable,y para las condiciones, use un diccionario con una
get
consulta.Finalmente, machaca todo en una línea.
Resultado final (actualización):
Bytes guardados: 121 .
fuente
exec"..."*input()
print
, y(x/r%2)*100
→x/r%2*100
etc.)