これは、Pythonでゴルフの最適化を実践する際の課題です。再利用可能なトリックと、いくつかのキャラクターを削るショートカットです。多くの人がPythonゴルファーに精通しており、Python Tipsからの一般的なアイデアを使用します。これらのいくつかはPython固有の機能を使用しますが、これらは見たことがない限り存在しないと思われるため、立ち往生している場合はヒントをご覧ください。
目標: 10個の問題があり、それぞれが最適化のためのPythonコードの参照スニペットとコードの説明にあります。あなたの目標は、それをより短くなるように書き直すことですが、それでも機能的に同等です。
最小化しようとしているスコアは、すべてのスニペットのコードの合計長です。参照スニペットの長さは150です。Tiebreakerは最初の投稿です。
回答の投稿:各問題について、コードとその文字数を投稿します。短いものが見つからない場合は、参照スニペットを投稿できます。自分の投稿を投稿するときに他人の回答を見ないようにすることを目的としています。個々の文字数を含む個々の問題をネタバレにしてください。合計数を公開したままにすることができます。ソリューションのスポイラーを解除したり、新しいスポイラーのないソリューションを投稿してください。
合法性の詳細:機能的同等性とは、プログラムの動作に影響を与えることなくコードを置換できることを意味します(式の一部としてのメモリ使用量や演算子の優先順位などを無視します)。式は、と同等の値を生成する必要があります==
。ことに注意してください1.0==1==True
。特に明記しない限り、コードに副作用はありません。問題をバージョン固有のものにするつもりはありませんが、念のため、各問題にPythonバージョンを指定できます。
問題1:リストL
に少なくとも7つの要素がある限り、繰り返しを続ける
# 16 chars
while len(L)>=7:
問題2:2つのフロートx
とy
両方が正であるかどうかを確認します。
# 11 chars
x>0 and y>0
問題3:ブール値b
がtrueの場合、の最初の要素を削除しL
ます。それ以外の場合は、そのままにしておきます。
# 12 chars
if b:L=L[1:]
問題4:L
数字の空でないリストのすべての要素が等しいかどうかを確認します。この問題については、リストを変更してもかまいません。
# 22 chars
all(x==L[0]for x in L)
問題5:既にその番号が含まれている場合にのみn
、リストの最後に番号を追加します。L
L
# 16 chars
if n in L:L+=[n]
問題6:フロートの符号を表現するx
:+1
正の場合0
、0の場合-1
、負の場合。
# 20 chars
abs(x)/x if x else 0
問題7の最初の要素L
がブール値のリストである限り、ループを継続しますTrue
。L
空の場合も停止します。
# 17 chars
while L and L[0]:
問題8:n
1より大きい限りループを続行します。数値n
は正の整数であることが保証されています。
# 10 chars
while n>1:
問題9:文字列として表される整数s
が負(つまり、「-」で始まる)かどうかを確認します。
# 9 chars
s[0]=='-'
問題10:-> および->を使用してブール値b
を"Win"
/に変換します。"Lose"
True
"Win"
False
"Lose"
# 17 chars
["Lose","Win"][b]
警告:以下のネタバレ、これらを自分で解決したい場合は下にスクロールしないでください。
問題の最適なスコアを知りたいだけの場合:
問題1:
12
問題2:
5
問題3:
7
問題4:
13
問題5:
13
問題6:
8
問題7:
12
問題8:
9
問題9:
5
問題10:
15