introduzione
La maggior parte dei golfisti del codice qui aggiunge spiegazioni alle loro osservazioni, quindi è più facile capire cosa sta succedendo. Di solito le linee guida vanno a sinistra e la spiegazione corrispondente a destra con una sorta di separatore. Per renderlo carino, i separatori sono tutti sulla stessa colonna. Anche un lungo testo esplicativo viene di solito spostato alla riga successiva, quindi i lettori non devono scorrere in senso orizzontale per leggere tutto.
Tuttavia, quando vuoi modificare questa spiegazione perché hai fatto dei golf pazzi, spesso finisci per passare il tempo a rendere di nuovo la tua spiegazione. Poiché si tratta di un'attività molto ripetitiva, si desidera scrivere un programma per questo.
La sfida
Date diverse righe di codice con spiegazione e un separatore, genera il codice ben formattato con spiegazione.
Esempio
Ingresso
shM-crz1dc4. "ANDBYOROF # z = input
rz1 # converte l'input in maiuscolo
cd # suddivide l'input negli spazi
c4. "ANDBYOROF # crea un elenco di parole da una stringa compressa che deve essere ignorata
- # filtra queste parole
hM # accetta solo la prima lettera di tutte le parole
s # li unisce in una stringa
Produzione
shM-crz1dc4. "ANDBYOROF # z = input
rz1 # converte l'input in maiuscolo
cd # suddivide l'input negli spazi
c4. "ANDBYOROF # crea un elenco di parole da una stringa compressa che deve essere
# ignorato
- # filtra queste parole
hM # accetta solo la prima lettera di tutte le parole
s # li unisce in una stringa
Un cookie per il primo che può scoprire cosa fa questo codice.
L'algoritmo di formattazione
- Trova la linea di codice più lunga (esclusa la spiegazione e gli spazi tra il codice e il separatore).
- Aggiungi 5 spazi dopo questa riga di codice e aggiungi il separatore corrispondente con una spiegazione. Questa è ora la linea di riferimento.
- Regola ogni altra linea su questa linea di riferimento, in modo che i separatori siano tutti nella stessa colonna.
- Avvolgi tutte le righe più lunghe di 93 caratteri in una nuova riga nel modo seguente:
- Trova l'ultima parola che termina alla colonna 93 o inferiore.
- Prendi tutte le parole dopo questa e avvolgile in una nuova riga con il separatore principale e la spaziatura corretta. Lo spazio tra queste due parole deve essere eliminato, quindi la prima riga termina con un carattere di parola e la seconda riga inizia con una dopo il separatore.
- Se la riga risultante è ancora più lunga di 93 caratteri, fai di nuovo lo stesso fino a quando ogni riga è inferiore a 94 caratteri.
Appunti
- Una parola è composta da caratteri non bianchi. Le parole sono separate da un singolo spazio.
- La parola a capo è sempre possibile. Ciò significa che nessuna parola è così lunga da rendere impossibile l'avvolgimento.
- L'input conterrà solo ASCII stampabile e non avrà spazi bianchi finali
- Il separatore apparirà una sola volta per riga.
- Mentre la spiegazione può avere una lunghezza illimitata, il separatore e il codice possono avere solo una lunghezza massima combinata di
93 - 5 = 87caratteri. I 5 caratteri sono gli spazi tra il codice e il separatore. Il codice e il separatore avranno sempre almeno un carattere. - L'input può contenere righe vuote. Questi non conterranno mai alcun carattere (tranne una nuova riga se prendi l'input come stringa multilinea). Anche quelle righe vuote devono essere presenti nell'output.
- Ogni riga avrà del codice, un separatore e una spiegazione. Le eccezioni sono righe vuote.
- È possibile accettare l'input in qualsiasi formato ragionevole, purché non sia pre-elaborato. Spiega nella tua risposta quale usi.
- L'output può essere una stringa su più righe o un elenco di stringhe.
Regole
- Funzione o programma completo consentiti.
- Regole predefinite per input / output.
- Si applicano scappatoie standard .
- Questo è code-golf , quindi vince il conteggio dei byte più basso. Tiebreaker è una presentazione precedente.
Casi test
Il formato di input qui è un elenco di stringhe che rappresentano le righe e una singola stringa per il separatore. Entrambi sono separati da una virgola. L'output è un elenco di stringhe.
['shM-crz1dc4. "ANDBYOROF # z = input', '', 'rz1 # converte l'input in maiuscolo', 'cd # split input negli spazi', 'c4." ANDBYOROF # crea un elenco delle parole da un pacchetto stringa che deve essere ignorata ',' - # filtra quelle parole ',' hM # prende solo la prima lettera di tutte le parole ',' s # le unisce in una stringa '], "#" -> [' shM-crz1dc4 . "ANDBYOROF # z = input ',' ',' rz1 # converte input in maiuscolo ',' cd # split input onpace ',' c4." ANDBYOROF # crea un elenco di parole da una stringa compressa che deve essere ' , "# ignorato", "- # filtra queste parole ',' hM # prende solo la prima lettera di tutte le parole ',' s # le unisce in una stringa '] ['codecodecode e # Explanation', 'sdf dsf sdf e # A Molto molto molto molto molto molto molto molto molto lungo molto lungo lungo lungo lungo lungo lungo lungo lungo lungo lungo e continua ad allungarsi e allungarsi', '', 'alcuni più codice # e qualche altra spiegazione '], "e #" -> [' codecodecode e # Explanation ',' sdf dsf sdf e # A Molto molto molto molto molto molto molto molto molto lungo lungo lungo lungo ',' e # lungo long long long long long spiegazione e continua ad allungarsi ',' e # e long ',' ',' ancora un po 'di codice e # e qualche altra spiegazione']
Buona programmazione!
length of the longest code-line + 5. Questo valeva anche per le linee che contengono solo una spiegazione, perché sono state racchiuse.