Supprimer la césure


15

Il est temps de relever un nouveau défi ! C'est un problème courant lors du copier-coller entre différents formats de document: la césure. Bien qu'il réduise les irrégularités d'une mise en page alignée à gauche ou égalise l'espacement dans une mise en page justifiée, c'est une douleur complète lorsque votre PDF n'est pas correctement construit et conserve les tirets dans la mise en page, ce qui rend votre texte copié difficile à modifier ou à refaire.

Heureusement, si l'on en croit les innombrables livres d'auto-assistance, rien n'est un problème si vous le voyez comme un défi. Je crois que ces livres d'auto-assistance font sans exception référence à PPCG, où tout problème sera résolu s'il est présenté comme un défi. Votre tâche consiste à supprimer la césure et les sauts de ligne incriminés d'un texte, afin qu'il soit prêt à être collé dans n'importe quel éditeur de texte.

Description du problème

Vous écrirez un programme ou une fonction qui supprime la césure et les sauts de ligne, le cas échéant. L' entrée sera une chaîne stdin(ou l'alternative la plus proche) ou une entrée de fonction. La sortie ( sortiestdout alternative ou fonction la plus proche ou la plus proche) sera le texte «corrigé». Ce texte doit être directement copiable-collable. Cela signifie que la sortie de début ou de fin est correcte, mais la sortie supplémentaire à mi-chemin de votre texte corrigé (par exemple, les espaces de début sur chaque ligne) ne l' est pas .

Le cas le plus élémentaire est le suivant (remarque: pas d'espaces de fin)

Lorem ipsum dolor sit amet, con-
sectetur adipiscing elit. Morbi
lacinia nisi sed mauris rhoncus.

Le trait d'union et les sauts de ligne incriminés doivent être supprimés pour

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi lacinia nisi sed mauris rhoncus.

Cependant, quelques exceptions doivent être observées.

  • Les doubles sauts de ligne indiquent un saut de paragraphe et doivent être conservés.
  • Les noms et noms corrects ne sont jamais coupés sur deux lignes, sauf s'ils contiennent déjà un trait d'union (par exemple les équations de Navier-Stokes). Le saut de ligne doit être supprimé, mais le trait d'union conservé. Ces cas peuvent être identifiés en ne mettant en majuscule que la première lettre.
  • Parfois, un tiret indique un groupe de mots (par exemple, XIXe et XXe siècles). Lorsque cela se produit sur deux lignes, cela est indiqué par un espace de tête sur la ligne suivante.

Un exemple: (les opinions exprimées dans cet exemple sont fictives et ne représentent pas nécessairement le point de vue de l'auteur; les opposants à la méthode Runge-Kutta-Fehlberg sont également les bienvenus pour participer à ce défi)

Differential equations can
be solved with the Runge-Kutta-
Fehlberg method.

Developed in the nineteenth-
 or twentieth century, this
method is completely FANTAS-
TIC.

va devenir

Differential equations can be solved with the Runge-Kutta-Fehlberg method. 

Developed in the nineteenth- or twentieth century, this method is completely FANTASTIC. 

Les sauts de ligne peuvent être le point de code ASCII \nou \r\nselon votre préférence, et le tiret est un simple ASCII -(signe moins). La prise en charge UTF-8 n'est pas requise. Ce défi est le , donc le code le plus court gagne.

Réponses:


9

Rétine , 58 octets

(?<!\n)\n(?!\n)
<space>
- (?! |[A-Z][a-z])| (?= )|(?<=-) (?=[A-Z])
<empty>

<space>représente un espace unique sur sa propre ligne et <empty>représente une ligne de fin vide. À des fins de comptage, chaque ligne va dans un fichier séparé et \nest remplacée par des caractères de saut de ligne réels. Pour plus de commodité, vous pouvez mettre tout ce qui précède dans un seul fichier et l'exécuter avec le -sdrapeau.

Je suis sûr qu'il existe un moyen plus court de le faire, alors j'attendrai une explication jusqu'à ce que j'aie fini de jouer au golf.


En fait, je voulais aborder celui-ci à Retina, mais je ne voulais pas
jouer

2

GNU Sed, 68

Le score inclut +2 pour les -zroptions transmises à sed.

s/\n\n/:/g
s/-\n([A-Z][a-z])/-\1/g
s/-\n /- /g
s/-\n//g
y/\n:/ \n/

Suppose que le flux d'entrée ne contient aucun :caractère. Si cela n'est pas acceptable, alors les :'dans le code peuvent être tous remplacés par un autre caractère ASCII non imprimable, par exemple 0x7 BEL.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.