# How can I shorten this python code?

Instead of `((a*10+c)*10)+d`

we can use `((a*2+c)*2)+d`

to distinguish the colors.

```
r=((a*2+c)*2)+d
if r==0:e="black"
elif r==4:e="red"
elif r==1:e="blue"
elif r==2:e="green"
elif r==5:e="magenta"
elif r==3:e="cyan"
elif r==6:e="yellow"
else:e="white"
```

Ah, but now we're just distinguishing between values from `0`

to `7`

, so we can index into an array instead!

```
r=a*4+c*2+d
e=["black","blue","green","cyan","red","magenta","yellow","white"][r]
# or even shorter:
e="black blue green cyan red magenta yellow white".split()[r]
```

Combining with Uriel's changes we get down to 136 bytes **(164 bytes saved)**.

```
exec'x,r,g,b=map(int,raw_input().split());print"black blue green cyan red magenta yellow white".split()[x/r%2*4+x/g%2*2+x/b%2];'*input()
```

Try it online!

For the repetition use an `exec`

statement,

`map(int,`

for the conversion of string input into numerals,

shorten calculating `r`

with `r=a*100+c*10+d`

, then put the calculations of each variable (`a`

, `c`

, `d`

) instead of the variable,

and for the conditions use a dictionary with a `get`

query.

Finally, mash everything into one line.

Final result (updating):

```
exec'x,r,g,b=map(int,raw_input().split());print({0:"black",100:"red",1:"blue",10:"green",101:"magenta",11:"cyan",110:"yellow"}.get((x/r%2)*100+(x/g%2)*10+x/b%2,"white"));'*input()
```

Bytes saved: **121**.