fundo
Na tipografia, os rios são lacunas visuais em um bloco de texto, que ocorrem devido ao alinhamento coincidente de espaços. Isso é particularmente irritante, pois seu cérebro parece captá-los mais facilmente na visão periférica, que constantemente distrai os olhos.
Como exemplo, considere o seguinte bloco de texto, linhas quebradas para que a largura da linha não exceda 82 caracteres :
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.
Há um rio que mede seis linhas na parte inferior direita, que destaquei no bloco a seguir:
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.
Podemos atenuar isso escolhendo uma largura de coluna ligeiramente diferente. Por exemplo, se traçarmos o mesmo texto usando linhas com mais de 78 caracteres , não haverá rio com mais de duas linhas:
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.
Observe que, para o propósito desta pergunta, estamos considerando apenas fontes monoespaçadas, de modo que os rios sejam simplesmente colunas verticais de espaços. O comprimento de um rio é o número de linhas que ele abrange.
Além disso: se você é interessante na detecção de rios em fontes proporcionais, existem algumas postagens interessantes na rede.
O desafio
Você recebe uma sequência de caracteres ASCII imprimíveis (pontos de código 0x20 a 0x7E) - ou seja, uma única linha. Imprima este texto, com uma largura de linha entre 70 e 90 caracteres (inclusive), de modo que o comprimento máximo de qualquer rio no texto seja minimizado. Se houver várias larguras de texto com o mesmo comprimento mínimo (mínimo) do rio, escolha a largura mais estreita. O exemplo acima com 78 caracteres é a saída correta para esse texto.
Para quebrar linhas, você deve substituir caracteres de espaço (0x20) por quebras de linha, para que as linhas resultantes tenham o máximo de caracteres possível, mas não mais do que a largura do texto escolhido. Observe que a quebra de linha resultante em si não faz parte dessa contagem. Como exemplo, no último bloco acima, Lorem[...]tempor
contém 78 caracteres, que também é a largura do texto.
Você pode assumir que a entrada não conterá espaços consecutivos e não terá espaços à esquerda ou à direita. Você também pode assumir que nenhuma palavra (substring consecutivo de não-espaços) conterá mais de 70 caracteres.
Você pode escrever um programa ou função, inserindo STDIN, argumento da linha de comando ou argumento da função e imprimindo o resultado em STDOUT.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.