Вот код, который я хочу сократить.
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
Вход: 3
4643 5913 4827 9752
5583 5357 5120 9400
2025 5475 4339 8392
Выход:
black
yellow
black
Ответы:
Вместо этого
((a*10+c)*10)+d
мы можем использовать,((a*2+c)*2)+d
чтобы различать цвета.Ах, но теперь мы просто различаем значения от
0
до7
, поэтому мы можем вместо этого индексировать в массив!В сочетании с изменениями Уриэля мы получаем 136 байтов (164 байта сохранены) .
Попробуйте онлайн!
источник
,
(запятые) между целыми числами, то вы можете достичь 115 байтовДля повторения используйте
exec
утверждение,map(int,
для преобразования строкового ввода в цифры,сократить вычисления
r
сr=a*100+c*10+d
, а затем положить расчеты каждой переменной (a
,c
,d
) вместо переменной,и для условий используйте словарь с
get
запросом.Наконец, смешайте все в одну строку.
Конечный результат (обновление):
Байт сохранено: 121 .
источник
exec"..."*input()
print
и(x/r%2)*100
→x/r%2*100
и т. Д.)