Pythは、おそらく最も成功した汎用ゴルフ言語です。新しい言語の結果としてやや低下していますが、2014年から2016年にかけて、Pythの簡潔な構文、絶え間ない更新、オーバーロード、および(その時代から)多くのビルトインが大部分の質問でお気に入りになりました。
Pythコードは読みにくいことがよくあります。デバッグモード(Pythonのコンパイル済み)の出力でさえ、長い行で構成されていることが多く、場合によっては、括弧が10段ネストされています。ただし、正しくフォーマットされたPythは非常に読みやすくなっています。
Play the Word Chainの @isaacgによって書かれたPythコードの一部を次に示します。
.MlZfqhMtTeMPT+Lzs.pMyQ
このように読みやすくなっています。
.M Filter by gives-maximal-value of
l Z lambda Z:length(Z) over
f filter by (lambda T:
q equal
hM t T head-map tail T
eM P T end-map Pop T)
+L Append z to each element in
z
s .pM y Q flattened permutations of each subset of Q
この課題では、Pythキャラクターを分類するkolmogorov-complexityの側面を排除し、フォーマットに焦点を当てます。Pythコードである代わりに、入力はの文字で構成され0123456789M
ます。数字n
はarityの関数を表し、演算子n
をM
表します。たとえば、上記のコードはとして表され210221M101M102M011M10
ます。縮小する手順は次のとおりです。
文字列をトークンに分離します。
トークンが一致し[0-9]M*
ます。0M
入力では発生しません。
末尾に0を追加します。
十分な引数がない場合、PythはQ
プログラムの引数を埋めるのに必要な数の暗黙変数(ラムダ変数またはs)をコードに追加します。これらは0
s で表される必要があります。
トークンを行にグループ化します。
トークンのアリティは、その数字の値です。
arity-0トークン(つまり0)は行を終了します。
arity-1トークンの場合、次のトークンはスペースで区切って同じ行に移動する必要があります。
arity> = 2トークンの場合、引数はコードに表示される順序で別々の行に移動し、各引数の後にサブ引数などが続きます。トークンへの引数は、そのトークンの末尾にスペースを1つ追加してインデントされます。
入力
から成る空でない文字列(またはchar配列、長さ1の文字列の配列など)で構成さ0123456789M
れ、にはsubstringは含まれません0M
。
出力
上記の規則に従ってフォーマットされた文字列。
テストケース
210221M101M102M011M10
2
1 0
2
2
1M 1 0
1M 1 0
2M
0
1 1M 1 0
123M4M
1 2
3M
4M
0
0
0
0
0
0
0
2MM
2MM
0
0
11011100
1 1 0
1 1 1 0
0
9000000
9
0
0
0
0
0
0
0
0
0
210221M101M102M011M10
は次のようになります[2,1,0,2,2,1,'M',1,0,1,'M',1,0,2,'M',0,1,1,'M',1,0]
M
が整数と異なるデータ型を許可されている場合、チャレンジをわずかに変更します。
M
。数字と?