이 파이썬 코드를 어떻게 단축 할 수 있습니까?


12

단축하려는 코드는 다음과 같습니다.

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

2
이것이 정확히 무엇이며 무엇을하고 있는지 설명해 주시겠습니까?
Okx

이것은 주제 imo를 벗어났습니다. "우승자"는 없으며 팁이 더 일반적입니다.
Christopher

8
@ Christopher2EZ4RTZ 우리는 전에 그런 질문을 많이했습니다. 그들은 주제가 아닙니다, 이것은 오랫동안 논의되었습니다
Uriel

13
결정으로 가까운 유권자를 들어, 골프 팁 질문은 여기에 완벽에 주제이다 메타
coinheringaahing 케어 드

1
우리에게 문제 진술을 줄 수 있습니까?
xnor

답변:


18

대신 색상을 구별하는 데 ((a*10+c)*10)+d사용할 수 있습니다 ((a*2+c)*2)+d.

 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"

아, 그러나 이제 우리는 값을에서 0로 구별 하기 7때문에 대신 배열로 색인 할 수 있습니다!

 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]

Uriel의 변경 사항을 결합하면 136 바이트 (164 바이트 절약) 로 줄어 듭니다 .

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()

온라인으로 사용해보십시오!


@RanvijaySingh ,정수 사이 에 (쉼표)를 넣지 않아도된다면 115 바이트에
Mr. Xcoder

5

반복하려면 exec문장을 사용하십시오 .

map(int, 문자열 입력을 숫자로 변환하기 위해

계산 단축 rr=a*100+c*10+d, 각 변수의 계산을 넣어 ( a, c, d) 대신에 변수,

조건에 대해서는 get쿼리가 포함 된 사전을 사용하십시오 .

마지막으로 모든 것을 한 줄로 묶습니다.

최종 결과 (업데이트) :

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()

바이트 저장 : 121 .


티오 링크를 추가 할 수 있습니까? 감사!
Mr. Xcoder

1
@ Mr.Xcoder 어떤 유형의 입력 OP가 기대되는지 모르겠습니다. 따라서 그가 할 때까지 예를들 수 없습니다.
Uriel

1
Btw 당신은 사용하여 꽤 많은 바이트를 절약 할 수 있습니다exec"..."*input()
Mr. Xcoder

1
거기에 여분의 괄호가 있습니다 (주변 print(x/r%2)*100x/r%2*100등)
Lynn

2
@Lynn 예, 당신은 그것을 더 잘 덮었습니다. 방금 골프 기술을 적용했습니다. 저는 파이썬 3에 익숙합니다.
Uriel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.