Contexte
En typographie, les rivières constituent des lacunes visuelles dans un bloc de texte, dues à un alignement fortuit des espaces. Celles-ci sont particulièrement gênantes puisque votre cerveau semble les capter plus facilement en vision périphérique, ce qui distrait constamment vos yeux.
A titre d'exemple, prenons le bloc de texte suivant, lignes brisées de telle sorte que la largeur de ligne ne dépasse pas 82 caractères :
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.
Il y a une rivière qui s'étend sur six lignes dans la partie inférieure droite, que j'ai soulignée dans le bloc suivant:
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.
Nous pouvons atténuer cela en choisissant une largeur de colonne légèrement différente. Par exemple, si nous mettons en page le même texte en utilisant des lignes ne dépassant pas 78 caractères , il n'y a pas de rivière plus longue que deux lignes:
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.
Notez que pour les besoins de cette question, nous ne considérons que les polices à espacement fixe, telles que les rivières ne sont que des colonnes verticales d'espaces. La longueur d'une rivière est le nombre de lignes qu'elle couvre.
De plus: si vous êtes intéressé par la détection des rivières dans les polices proportionnelles, il existe des publications intéressantes sur le réseau.
Le défi
Vous recevez une chaîne de caractères ASCII imprimables (points de code 0x20 à 0x7E) - c’est-à-dire une seule ligne. Imprimez ce texte avec une largeur de trait comprise entre 70 et 90 caractères (inclus), de manière à minimiser la longueur maximale de tout cours d'eau dans le texte. S'il existe plusieurs largeurs de texte avec la même longueur maximale (minimale) de rivière, choisissez la largeur la plus étroite. L'exemple ci-dessus avec 78 caractères est la sortie correcte pour ce texte.
Pour rompre les lignes, vous devez remplacer les espaces (0x20) par des sauts de ligne, de sorte que les lignes résultantes contiennent autant de caractères que possible, mais pas plus que la largeur de texte choisie. Notez que le saut de ligne résultant ne fait pas partie de ce décompte. Par exemple, dans le dernier bloc ci-dessus, Lorem[...]tempor
contient 78 caractères, ce qui correspond également à la largeur du texte.
Vous pouvez supposer que l'entrée ne contiendra pas d'espaces consécutifs et ne comportera pas d'espaces de début ou de fin. Vous pouvez également supposer qu'aucun mot (sous-chaîne consécutive de non-espaces) ne contiendra plus de 70 caractères.
Vous pouvez écrire un programme ou une fonction en prenant une entrée via STDIN, un argument de ligne de commande ou une fonction et en imprimant le résultat sur STDOUT.
C'est le code de golf, donc la réponse la plus courte (en octets) gagne.