Rimuovi la sillabazione


15

Tempo per una nuova sfida ! È un problema comune durante il copia-incolla tra vari formati di documento: sillabazione. Mentre riduce la sfilacciatura di un layout allineato a sinistra o uniforma la spaziatura in un layout giustificato, è un dolore completo quando il PDF non è costruito correttamente e mantiene i trattini nel layout, rendendo difficile la modifica o il reflow del testo copiato.

Fortunatamente, se dobbiamo credere agli innumerevoli libri di auto-aiuto là fuori, nulla è un problema se lo vedi come una sfida. Credo che questi libri di auto-aiuto si riferiscano senza eccezioni a PPCG, in cui qualsiasi problema verrà risolto se presentato come una sfida. Il tuo compito è rimuovere la sillabazione offensiva e le interruzioni di riga da un testo, in modo che sia pronto per incollare in qualsiasi editor di testo.

Descrizione del problema

Scriverai un programma o una funzione che rimuove la sillabazione e le interruzioni di riga dove applicabile. L' input sarà una stringa su stdin(o alternativa più vicina) o come input di funzione. L' output (su stdouto alternativa più vicina o output di funzione) sarà il testo "corretto". Questo testo dovrebbe essere direttamente copiabile. Ciò significa che l'output iniziale o finale è OK, ma l'output aggiuntivo a metà del testo corretto (ad es. Spazi iniziali su ogni riga) non lo è .

Il caso più semplice è il seguente (nota: nessuno spazio finale)

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

Il trattino offensivo e le interruzioni di riga devono essere rimossi, per ottenere

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

Tuttavia, dovrebbero essere osservate alcune eccezioni.

  • Newline doppie indicano un'interruzione di paragrafo e devono essere mantenute.
  • Nomi e nomi propri non vengono mai suddivisi su due righe, a meno che non contengano già un trattino (ad esempio equazioni di Navier-Stokes). L'interruzione di riga deve essere rimossa, ma il trattino deve essere mantenuto. Questi casi possono essere identificati avendo solo la prima lettera maiuscola.
  • A volte, un trattino indica un gruppo di parole (ad esempio diciannovesimo e ventesimo secolo). Quando ciò accade su due righe, questo viene indicato con uno spazio iniziale sulla riga successiva.

Un esempio: (le opinioni espresse in questo esempio sono fittizie e non rappresentano necessariamente l'opinione dell'autore; gli avversari del metodo Runge-Kutta-Fehlberg sono ugualmente benvenuti a partecipare a questa sfida)

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

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

diventerà

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

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

Le interruzioni di riga possono essere il punto di codice ASCII \no in \r\nbase alle proprie preferenze e il trattino è un semplice ASCII -(segno meno). Il supporto UTF-8 non è richiesto. Questa sfida è il , quindi vince il codice più corto.

Risposte:


9

Retina , 58 byte

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

<space>rappresenta un singolo spazio sulla propria riga e <empty>rappresenta una riga finale vuota. Ai fini del conteggio, ogni riga va in un file separato e \nvengono sostituiti con caratteri di avanzamento riga effettivi. Per comodità, puoi mettere tutto quanto sopra in un singolo file ed eseguirlo con il -sflag.

Sono abbastanza sicuro che ci sia un modo più breve per farlo, quindi aspetterò con una spiegazione fino a quando avrò finito di giocare a golf.


In realtà volevo affrontare questo a Retina, ma non volevo
scherzare

2

GNU Sed, 68

Il punteggio include +2 per le -zropzioni passate a sed.

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

Presuppone che il flusso di input non contenga alcun :carattere. Se ciò non è accettabile, :è possibile che tutti quelli nel codice vengano sostituiti con altri caratteri ASCII non stampabili, ad es. 0x7 BEL.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.