バックグラウンド
タイポグラフィでは、川はテキストブロック内の視覚的なギャップであり、スペースの偶然の整列により発生します。これらは特にあなたの脳が周辺視でそれらをより簡単に拾い上げているように見え、常にあなたの目をそらします。
例として、次のテキストブロックを見てください。行の幅が82文字を超えないように改行されています。
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eismod tempor
incididunt ut labore et dolore maga aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet,
consectetur adipisicing elit, sed do eismod tempor incididunt ut labore et dolore
maga aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
est laborum.
右下の部分に6本の線にまたがる川があります。これは次のブロックで強調表示しています。
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eismod tempor
incididunt ut labore et dolore maga aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum. Lorem█ipsum dolor sit amet,
consectetur adipisicing elit, sed do eismod tempor█incididunt ut labore et dolore
maga aliqua. Ut enim ad minim veniam, quis nostrud█exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat. Duis aute█irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat nulla█pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in culpa qui█officia deserunt mollit anim id
est laborum.
これを緩和するには、わずかに異なる列幅を選択します。たとえば、78文字以下の行を使用して同じテキストをレイアウトする場合、2行より長い川はありません。
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eismod tempor
incididunt ut labore et dolore maga aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor
sit amet, consectetur adipisicing elit, sed do eismod tempor incididunt ut
labore et dolore maga aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.
この質問の目的のために、川は単にスペースの垂直列であるように、等幅フォントのみを考慮していることに注意してください。川の長さは、それがまたがるラインの数です。
余談:プロポーショナルフォントでの川の検出に興味があるなら、ネットワークの周りにいくつかの興味深い 投稿があります。
挑戦
印刷可能なASCII文字の文字列(コードポイント0x20〜0x7E)-つまり1行が与えられます。テキスト内の川の最大長が最小になるように、70〜90文字(両端を含む)の行幅でこのテキストを印刷します。同じ(最小の)最大河川長を持つ複数のテキスト幅がある場合は、狭い幅を選択します。上記の78文字の例は、そのテキストの正しい出力です。
改行するには、スペース文字(0x20)を改行で置き換えて、結果の行にできるだけ多くの文字が含まれるようにしますが、選択したテキスト幅以下にします。結果の改行自体は、そのカウントの一部ではないことに注意してください。例として、上の最後のブロックにLorem[...]tempor
は、78文字が含まれていますが、これはテキストの幅でもあります。
入力に連続したスペースが含まれておらず、先頭または末尾のスペースがないと想定できます。また、単語(非スペースの連続部分文字列)に70文字を超える文字は含まれないと想定することもできます。
プログラムまたは関数を作成し、STDIN、コマンドライン引数または関数引数を介して入力を取得し、結果をSTDOUTに出力できます。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。