Eliminar la separación silábica


15

¡Es hora de un nuevo desafío ! Es un problema común al copiar y pegar entre varios formatos de documentos: guiones. Si bien reduce la irregularidad de un diseño alineado a la izquierda o iguala el espacio en un diseño justificado, es un completo dolor cuando su PDF no se construye correctamente y conserva los guiones en el diseño, lo que dificulta la edición o reflujo del texto copiado.

Afortunadamente, si creemos en los innumerables libros de autoayuda que existen, nada es un problema si lo ves como un desafío. Creo que estos libros de autoayuda se refieren sin excepción a PPCG, donde cualquier problema se resolverá si se presenta como un desafío. Su tarea es eliminar los guiones ofensivos y los saltos de línea de un texto, para que esté listo para pegar en cualquier editor de texto.

Descripción del problema

Escribirás un programa o función que elimine los guiones y los saltos de línea cuando corresponda. La entrada será una cadena activada stdin(o la alternativa más cercana) o como una entrada de función. La salida (en la salidastdout más cercana o alternativa o función) será el texto 'corregido'. Este texto debe ser directamente copiable y pastable. Esto significa que la salida inicial o final está bien, pero la salida adicional a la mitad del texto corregido (por ejemplo, espacios iniciales en cada línea) no lo está .

El caso más básico es el siguiente (nota: sin espacios finales)

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

El guión ofensivo y los saltos de línea deben eliminarse para obtener

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

Sin embargo, se deben observar algunas excepciones.

  • Las nuevas líneas dobles indican un salto de párrafo, y deben conservarse.
  • Los nombres y nombres propios nunca se dividen en dos líneas, a menos que ya contengan un guión (por ejemplo, ecuaciones de Navier-Stokes). El salto de línea debe eliminarse, pero el guión debe conservarse. Estos casos pueden identificarse teniendo solo la primera letra en mayúscula.
  • A veces, un guión indica un grupo de palabras (por ejemplo, los siglos XIX y XX). Cuando esto sucede a través de dos líneas, esto se indica con un espacio inicial en la siguiente línea.

Un ejemplo: (las opiniones expresadas en este ejemplo son ficticias y no representan necesariamente la opinión del autor; los opositores al método Runge-Kutta-Fehlberg son igualmente bienvenidos a participar en este desafío)

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

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

se convertirá

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

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

Los saltos de línea pueden ser el punto de código ASCII \no \r\nsegún su preferencia, y el guión es un ASCII simple -(signo menos). No se requiere soporte UTF-8. Este desafío es el , por lo que gana el código más corto.

Respuestas:


9

Retina , 58 bytes

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

<space>representa un solo espacio en su propia línea y <empty>representa una línea final vacía. Para fines de conteo, cada línea entra en un archivo separado y \nse reemplazan con caracteres de salto de línea reales. Sin embargo, para su comodidad, puede poner todo lo anterior en un solo archivo y ejecutarlo con el-s bandera.

Estoy bastante seguro de que hay una forma más corta de hacer esto, así que esperaré con una explicación hasta que termine de jugar al golf.


En realidad quería abordar esto en Retina, pero no quería
meterme

2

GNU Sed, 68

La puntuación incluye +2 para las -zropciones pasadas a sed.

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

Asume que la secuencia de entrada no contiene ningún :carácter. Si esto no es aceptable, entonces los :'s en el código pueden ser reemplazados por algún otro carácter ASCII no imprimible, por ejemplo, 0x7 BEL.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.