Hier ist der Code, den ich kürzen möchte.
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
Eingabe: 3
4643 5913 4827 9752
5583 5357 5120 9400
2025 5475 4339 8392
Ausgabe:
black
yellow
black
Antworten:
Stattdessen
((a*10+c)*10)+d
können wir((a*2+c)*2)+d
zur Unterscheidung der Farben verwenden.Ah, aber jetzt unterscheiden wir nur zwischen Werten von
0
bis7
, damit wir stattdessen in ein Array indexieren können!In Kombination mit Uriels Änderungen werden 136 Bytes (164 Bytes gespart) erreicht .
Probieren Sie es online!
quelle
,
(Kommas) zwischen die ganzen Zahlen zu setzen, können Sie 115 Bytes erreichenVerwenden Sie für die Wiederholung eine
exec
Aussage,map(int,
für die Umwandlung von Zeichenketten in Ziffern,verkürzen Berechnung
r
mitr=a*100+c*10+d
, dann stellen die Berechnungen der einzelnen Variablen (a
,c
,d
) anstelle der Variablen,Verwenden Sie für die Bedingungen ein Wörterbuch mit einer
get
Abfrage.Zum Schluss wird alles in einer Zeile zusammengefasst.
Endergebnis (Aktualisierung):
Bytes gespeichert: 121 .
quelle
exec"..."*input()
print
und(x/r%2)*100
→x/r%2*100
usw.)