このpythonコードを短縮するにはどうすればよいですか?


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

これはトピック外です。「勝者」は存在せず、ヒントはより一般的です。
クリストファー

8
@ Christopher2EZ4RTZ私たちは以前にそのような多くの質問がありました。それらはトピックから外れていません。これは長い間議論されていました
Uriel

13
決めたように近い有権者のために、ゴルフのヒントの質問は、ここで完全にオン話題ですメタ
coinheringaahing caird

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バイト
氏Xcoder

5

繰り返しの場合、execステートメントを使用します。

map(int, 文字列入力を数字に変換するために、

計算短縮rしてr=a*100+c*10+d、その後、各変数の計算を置く(acd)の代わりに変数の、

条件については、getクエリで辞書を使用します。

最後に、すべてを1行にマッシュします。

最終結果(更新中):

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


TIOリンクを追加してください。ありがとう!
ミスターXcoder

1
彼はまで、私は例を与えることができないのでMr.Xcoder @ Iは、入力OPの種類を期待しているかわからない
ウリエル

1
ところで、あなたは使用してかなりの数のバイトを保存することができますexec"..."*input()
ミスターXcoder

1
そこにいくつかの冗長な括弧があります(約print、および(x/r%2)*100x/r%2*100など)
Lynn

2
@Lynnええ、あなたはそれをよりよくカバーしました。私はゴルフの技術を適用-と私は、Python 3に慣れている
ウリエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.