Berikut adalah kode yang ingin saya perpendek.
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
Input: 3
4643 5913 4827 9752
5583 5357 5120 9400
2025 5475 4339 8392
Keluaran:
black
yellow
black
Jawaban:
Alih-alih
((a*10+c)*10)+d
bisa kita gunakan((a*2+c)*2)+d
untuk membedakan warna.Ah, tapi sekarang kita hanya membedakan antara nilai
0
ke7
, jadi kita bisa mengindeks ke dalam array sebagai gantinya!Menggabungkan dengan perubahan Uriel kita turun ke 136 byte (164 byte disimpan) .
Cobalah online!
sumber
,
(koma) di antara bilangan bulat, maka Anda dapat mencapai 115 byteUntuk pengulangan gunakan
exec
pernyataan,map(int,
untuk konversi input string menjadi angka,mempersingkat menghitung
r
denganr=a*100+c*10+d
, kemudian menempatkan perhitungan masing-masing variabel (a
,c
,d
) bukan variabel,dan untuk kondisi gunakan kamus dengan
get
kueri.Akhirnya, tumbuk semuanya menjadi satu baris.
Hasil akhir (memperbarui):
Bytes disimpan: 121 .
sumber
exec"..."*input()
print
, dan(x/r%2)*100
→x/r%2*100
dll.)