tło
W typografii rzeki są wizualnymi lukami w bloku tekstu, które występują z powodu przypadkowego wyrównania przestrzeni. Są to szczególnie denerwujące, ponieważ mózg zdaje się łatwiej je wychwytywać w widzeniu peryferyjnym, które nieustannie rozprasza wzrok.
Jako przykład weźmy następujący blok tekstu, linie podzielone tak, aby szerokość linii nie przekraczała 82 znaków :
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.
W prawym dolnym rogu jest rzeka rozciągająca się na sześciu liniach, które podkreśliłem w następującym bloku:
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.
Możemy to złagodzić, wybierając nieco inną szerokość kolumny. Np. Jeśli układamy ten sam tekst za pomocą linii nie dłuższych niż 78 znaków , nie ma rzeki dłuższej niż dwie linie:
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.
Zauważ, że dla celów tego pytania rozważamy tylko czcionki o stałej szerokości, tak że rzeki są po prostu pionowymi kolumnami spacji. Długość rzeki to liczba linii, które obejmuje.
Poza tym: Jeśli interesuje Cię wykrywanie rzek w czcionkach proporcjonalnych, w sieci jest kilka interesujących postów .
Wyzwanie
Otrzymałeś ciąg znaków ASCII do wydrukowania (punkt kodowy od 0x20 do 0x7E) - tj. Pojedynczy wiersz. Wydrukuj ten tekst, o szerokości linii od 70 do 90 znaków (włącznie), tak aby zminimalizować maksymalną długość dowolnej rzeki w tekście. Jeśli istnieje wiele szerokości tekstu o tej samej (minimalnej) maksymalnej długości rzeki, wybierz węższą szerokość. Powyższy przykład z 78 znakami jest poprawnym wyjściem dla tego tekstu.
Aby łamać linie, należy zastąpić znaki spacji (0x20) podziałami linii, tak aby linie wynikowe miały jak najwięcej znaków, ale nie więcej niż wybraną szerokość tekstu. Zauważ, że wynikowy podział linii sam w sobie nie jest częścią tej liczby. Na przykład w ostatnim bloku powyżej Lorem[...]tempor
zawiera 78 znaków, co jest również szerokością tekstu.
Możesz założyć, że dane wejściowe nie będą zawierać kolejnych spacji i nie będą mieć spacji wiodących ani końcowych. Możesz także założyć, że żadne słowo (kolejne podciągi spacji) nie będzie zawierało więcej niż 70 znaków.
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN, argument wiersza poleceń lub argument funkcji i wypisując wynik do STDOUT.
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).