Entfernen Sie die Silbentrennung


15

Zeit für eine neue Herausforderung! Dies ist ein häufiges Problem beim Kopieren und Einfügen zwischen verschiedenen Dokumentformaten: Silbentrennung. Während es die Unregelmäßigkeiten eines linksbündigen Layouts verringert oder Abstände in einem rechtsbündigen Layout ausgleicht, ist es äußerst schwierig, wenn Ihre PDF-Datei nicht ordnungsgemäß erstellt wird und die Bindestriche im Layout erhalten bleiben. Dadurch wird es schwierig, den kopierten Text zu bearbeiten oder neu zu fließen.

Glücklicherweise ist nichts ein Problem, wenn wir den unzähligen Selbsthilfebüchern da draußen glauben wollen, wenn Sie es als Herausforderung ansehen. Ich glaube, diese Selbsthilfebücher beziehen sich ausnahmslos auf PPCG, wo jedes Problem gelöst wird, wenn es als Herausforderung dargestellt wird. Ihre Aufgabe ist es, störende Silbentrennung und Zeilenumbrüche aus einem Text zu entfernen, damit er in jedem Texteditor eingefügt werden kann.

Problembeschreibung

Sie werden ein Programm oder eine Funktion schreiben, die gegebenenfalls Silbentrennungen und Zeilenumbrüche entfernt. Die Eingabe ist eine Zeichenfolge stdin(oder die nächstgelegene Alternative) oder eine Funktionseingabe. Die Ausgabe (Ein stdoutoder Nächste Alternative oder Funktionsausgabe) ist der 'korrigierte' Text. Dieser Text sollte direkt kopierfähig sein. Dies bedeutet, dass die führende oder nachfolgende Ausgabe in Ordnung ist, die zusätzliche Ausgabe in der Mitte des korrigierten Texts (z. B. führende Leerzeichen in jeder Zeile) jedoch nicht .

Der grundlegendste Fall ist der folgende (Hinweis: keine nachgestellten Leerzeichen)

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

Der störende Bindestrich und die Zeilenumbrüche sollten entfernt werden, um zu erhalten

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

Es sind jedoch einige Ausnahmen zu beachten.

  • Doppelte Zeilenumbrüche weisen auf einen Absatzumbruch hin und sollten beibehalten werden.
  • Richtige Substantive und Namen werden niemals über zwei Zeilen verteilt, es sei denn, sie enthalten bereits einen Bindestrich (z. B. Navier-Stokes-Gleichungen). Der Zeilenumbruch sollte entfernt werden, der Bindestrich jedoch beibehalten werden. Diese Fälle können identifiziert werden, indem nur der erste Buchstabe groß geschrieben wird.
  • Manchmal kennzeichnet ein Bindestrich eine Wortgruppe (z. B. 19. und 20. Jahrhundert). Wenn dies über zwei Zeilen geschieht, wird dies in der nächsten Zeile durch ein vorangestelltes Leerzeichen angezeigt.

Ein Beispiel: (Die in diesem Beispiel geäußerten Ansichten sind fiktiv und geben nicht unbedingt die Meinung des Autors wieder. Gegner der Runge-Kutta-Fehlberg-Methode sind ebenfalls willkommen, an dieser Herausforderung teilzunehmen.)

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

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

wird werden

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

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

Die Zeilenumbrüche können je nach Wunsch entweder der \noder der \r\nASCII-Code sein, und der Bindestrich ist ein einfaches ASCII- -Zeichen (Minuszeichen). UTF-8-Unterstützung ist nicht erforderlich. Diese Herausforderung ist , also gewinnt der kürzeste Code.

Antworten:


9

Netzhaut , 58 Bytes

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

<space>Stellt ein einzelnes Leerzeichen in einer eigenen Zeile dar und <empty>stellt eine leere nachgestellte Zeile dar. Zu Zählzwecken wird jede Zeile in eine separate Datei \nverschoben und durch die tatsächlichen Zeilenvorschubzeichen ersetzt. Der Einfachheit halber können Sie alle oben genannten Elemente in einer einzigen Datei speichern und mit dem -sFlag ausführen .

Ich bin mir ziemlich sicher, dass es einen kürzeren Weg gibt, also warte ich mit einer Erklärung, bis ich mit dem Golfen fertig bin.


Eigentlich wollte ich dieses
Problem

2

GNU Sed, 68

Die Punktzahl enthält +2 für -zrOptionen, die an übergeben wurden sed.

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

Angenommen, der Eingabestream enthält keine :Zeichen. Wenn dies nicht akzeptabel ist, :werden möglicherweise alle im Code enthaltenen Zeichen durch andere nicht druckbare ASCII-Zeichen ersetzt, z. B. 0x7 BEL.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.