成功したコードゴルフの提出は、本質的に、至る所に狂ったシンボルで満たされています。投稿を理解しやすくするために、多くのコード愛好家は自分のコードの説明を含めることを選択します。彼らの説明では、コードの行は垂直分解図に変わります。
たとえば、これが私のコードだった場合:
1_'[3:~2@+]`
作成できる多くの図の1つは次のようになります。
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
目標
この課題では、コードの行を取得し、説明テキストを簡単に追加できるダイアグラムを作成する説明自動フォーマットツールを作成します。
これをより便利な課題にするために、ユーザーはフォーマット文字列を提供することにより、各行の内容を指定できます。書式設定文字列は、文字のみを含む2行目でA-Za-z
、プログラムと同じ長さです。文字は、説明の中でプログラムの文字を印刷する順序を示しています。
以下は、ブラケットのような書式設定のない I / Oの例です。
123423
AabcBC
1
2
3
2
3
4
ブラケット
プログラム内の複数の文字が同じ優先度レベルを持っている場合、その文字セットはコードの単一ブロック(グループを形成する場合)またはブラケットセット(それらが間に他の文字を含む場合)として機能します。一般的なルールは簡単です:
優先順位の高い他のすべての文字が図のその上の行に既に表示されるまで、文字は図の行に表示されません。
同じ優先順位の文字は常に同じ行に印刷されます。特定の文字が行に表示される場合、同じ優先順位の他のすべての文字が行に表示されます。
同じ優先順位の文字のセットは、それに囲まれた他のすべての文字が少なくとも1回現れるまで、各行に現れ続けます。これにより、「ブラケットのような」構造が可能になります。
bceab
優先度がある場合、b
文字は2行目に表示され(2番目に高い優先度です)、すべてのcea
文字が表示されるまで表示され続けます。優先度文字列がabcadeafga
である場合、すべてがその中にbcdefg
含まれていると見なされ、4a
が出現するまで4 がすべて表示され続けg
ます。
その他のフォーマット要件
出力のすべての行は同じ長さ(入力行の長さ)で、必要に応じてスペースが埋め込まれている必要があります。入力プログラム行にはスペースが含まれる場合がありますが、これらのスペースにも優先文字が与えられます。出力/入力の末尾の改行はオプションです。
得点
これはコードゴルフで、最少バイトが勝ちます。
例
ここに、より複雑なフォーマットを使用したコードのコメント例を示します。
1_'[3:~2@+]`
abbcddeffgch
1 #highest priority is denoted by the lowercase letter a
_' #priority b
[ ] #all characters with priority c
[3: ] #priority d, but priority c still printed because it encloses more
[ ~ ] #priority e
[ 2@ ] #priority f
[ +] #priority g, last line of c because all enclosed characters have appeared
` #priority h
Perlの例:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
以下は、MartinBüttnerの好意によるCJamの例です。
l~2*{_2%{3*)}{2/}?_p_(}g;
aabbcdddefffeeggeehhiiccj
l~
2*
{ }g
{_2% }g
{ { }{ }? }g
{ {3*)}{ }? }g
{ { }{2/}? }g
{ _p }g
{ _(}g
;
q{_eu'[,66>"EIOU"-#)g{'o1$}*}/
abcccddddddeeeeeeefgghiijjhhbb
q
{ }/
{_eu }/
{ '[,66> }/
{ "EIOU"- }/
{ # }/
{ )g }/
{ { }*}/
{ {'o }*}/
{ { 1$}*}/
混乱させるためのクレイジーな例を次に示します。
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
以下は、ブラケットがのように重なったときに起こることのより明確な例ですabab
。(通常、これは説明のフォーマットを選択する方法ではありません。)
aabbccddaaeebb
aabbccddaaeebb
aa aa
aabb aa bb
aabbcc aa bb
aabb ddaa bb
bb eebb #"aa" no longer appears because all of "bbccdd" have already appeared.
oNo
置き換えることが可能n
でTIO。