Oto kod, który chcę skrócić.
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
Wejście: 3
4643 5913 4827 9752
5583 5357 5120 9400
2025 5475 4339 8392
Wynik:
black
yellow
black
Odpowiedzi:
Zamiast tego
((a*10+c)*10)+d
możemy użyć((a*2+c)*2)+d
do rozróżnienia kolorów.Ach, ale teraz rozróżniamy tylko wartości od
0
do7
, więc zamiast tego możemy indeksować do tablicy!W połączeniu ze zmianami Uriela uzyskujemy 136 bajtów (zapisane 164 bajty) .
Wypróbuj online!
źródło
,
(przecinków) między liczbami całkowitymi, możesz osiągnąć 115 bajtówDo powtórzenia użyj
exec
instrukcji,map(int,
do konwersji ciągów znaków na cyfry,skrócić obliczenia
r
zr=a*100+c*10+d
, a następnie umieścić na obliczenia każdej zmiennej (a
,c
,d
) zamiast zmiennej,a dla warunków użyj słownika z
get
zapytaniem.Na koniec zetrzyj wszystko w jedną linię.
Wynik końcowy (aktualizacja):
Zapisane bajty: 121 .
źródło
exec"..."*input()
print
i(x/r%2)*100
→x/r%2*100
itd.)