Aqui está o código que eu quero encurtar.
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
Resultado:
black
yellow
black
Respostas:
Em vez de
((a*10+c)*10)+d
usarmos((a*2+c)*2)+d
para distinguir as cores.Ah, mas agora estamos apenas distinguindo entre valores de
0
para7
, para que possamos indexar em uma matriz!Combinando com as mudanças de Uriel, chegamos a 136 bytes (164 bytes salvos) .
Experimente online!
fonte
,
(vírgulas) entre os inteiros, então você pode chegar a 115 bytesPara a repetição, use uma
exec
declaração,map(int,
para a conversão da entrada de string em numerais,encurtar o cálculo
r
comr=a*100+c*10+d
, em seguida, colocar os cálculos de cada variável (a
,c
,d
) em vez da variável,e para as condições, use um dicionário com uma
get
consulta.Finalmente, amasse tudo em uma linha.
Resultado final (atualização):
Bytes salvos: 121 .
fonte
exec"..."*input()
print
, e(x/r%2)*100
→x/r%2*100
etc.) #