前書き
ほとんどのコード愛好家は、提出物に説明を追加するため、何が起こっているのかを理解しやすくなります。通常、コードラインは左側にあり、対応する説明はある種のセパレーターとともに右側にあります。見た目をよくするために、セパレータはすべて同じ列にあります。また、通常、長い説明テキストは次の行に折り返されるため、読者はすべてを読むために水平にスクロールする必要はありません。
しかし、クレイジーなゴルフをしたためにこの説明を編集したい場合、説明をかなりやり直すために時間を費やすことがよくあります。これは非常に反復的なタスクなので、このためのプログラムを作成する必要があります。
チャレンジ
説明とセパレータを含む数行のコードが与えられたら、説明付きのきれいにフォーマットされたコードを出力します。
例
入力
shM-crz1dc4。 "ANDBYOROF#z =入力 rz1#入力を大文字に変換します cd#スペースで入力を分割 c4。 "ANDBYOROF#無視されるパックされた文字列から単語のリストを作成します -#これらの単語を除外 hM#すべての単語の最初の文字のみを取得 s#それらを1つの文字列に結合する
出力
shM-crz1dc4。 "ANDBYOROF#z =入力 rz1#入力を大文字に変換します cd#スペースで入力を分割 c4。 "ANDBYOROF#パックされた文字列から単語のリストを作成します。 #無視 -#これらの単語を除外 hM#すべての単語の最初の文字のみを取得 s#それらを1つの文字列に結合する
このコードが何をするかを知ることができる最初の人のための1つのクッキー。
フォーマットアルゴリズム
- 最も長いコード行を見つけます(説明と、コードと区切り文字の間のスペースを除く)。
- このコード行の後に5つのスペースを追加し、対応するセパレーターに説明を追加します。これが基準線になりました。
- セパレーターがすべて同じ列になるように、この基準線に1行おきに調整します。
- 93文字を超えるすべての行を次の方法で新しい行にラップします。
- 末尾が93列以下である最後の単語を見つけます。
- この後のすべての単語を取り、先頭の区切り文字と正しい間隔で新しい行にラップします。これらの2つの単語の間のスペースは削除する必要があるため、最初の行は単語文字で終わり、2番目の行は区切り文字の後の1つで始まります。
- 結果の行がまだ93文字より長い場合は、すべての行が94文字未満になるまで同じ操作を繰り返します。
ノート
- 単語は非空白文字で構成されます。単語は単一のスペースで区切られます。
- ワードラッピングは常に可能です。これは、ラッピングが不可能になるほど長い単語がないことを意味します。
- 入力には印刷可能なASCIIのみが含まれ、末尾の空白は含まれません。
- セパレータは1行に1回だけ表示されます。
- 説明の長さには制限がありませんが、セパレータとコードの最大長の合計は
93 - 5 = 87
charsのみです。5文字は、コードと区切り記号の間のスペースです。コードと区切り記号は常に少なくとも1文字の長さです。 - 入力には空の行が含まれる場合があります。これらには文字は含まれません(入力を複数行の文字列として使用する場合は改行を除きます)。これらの空の行も出力に存在する必要があります。
- すべての行には、いくつかのコード、セパレータ、説明があります。例外は空の行です。
- 前処理されていない限り、妥当な形式で入力を取得できます。どちらを使用するかを回答で明確にしてください。
- 出力は、複数行の文字列または文字列のリストです。
ルール
- 機能または完全なプログラムが許可されます。
- 入出力のデフォルト規則。
- 標準の抜け穴が適用されます。
- これはcode-golfなので、バイト数が最も少なくなります。Tiebreakerは以前の提出です。
テストケース
ここでの入力形式は、行を表す文字列のリストと区切り文字の単一の文字列です。両方ともコンマで区切られます。出力は文字列のリストです。
['shM-crz1dc4。 "ANDBYOROF#z = input'、 ''、 'rz1#入力を大文字に変換する'、 'cd#スペースで入力を分割する'、 'c4。" ANDBYOROF#パックから単語のリストを作成する無視される文字列 '、'-#それらの単語を除外する '、' hM#すべての単語の最初の文字のみを取得する '、' s#それらを1つの文字列に結合する ']、 "#"-> [' shM-crz1dc4 。 "ANDBYOROF#z = input '、' '、' rz1#入力を大文字に変換する '、' cd#スペースで入力を分割する '、' c4。" ANDBYOROF#必要なパックされた文字列から単語のリストを作成する、「#無視」、「-#それらの単語を除外する」、「hM#すべての単語の最初の文字のみを取得する」、「s#それらを1つの文字列に結合する」] ['codecodecode e#Explanation'、 'sdf dsf sdf e#A非常に非常に非常に非常に非常に非常に非常に長い長い長い長い長い長い長い長い長い長い長い説明とそれはますます長くなり続ける」、' '、「いくつかより多くのcodee#といくつかの詳細な説明 ']、 "e#"-> [' codecodecode e#Explanation '、' sdf dsf sdf e#A非常に非常に非常に非常に非常に非常に非常に非常に非常に長いlong long long '、' e#long長い長い長い長い長い説明とそれは長くなり続けます」、「e#and long」、「」、「いくつかのコードe#といくつかの説明」]
ハッピーコーディング!
length of the longest code-line + 5
。これは、折り返されているため、説明のみを含む行にも適用されます。