Alcune persone insistono sull'uso degli spazi per la tabulazione e il rientro.
Per la tabulazione, questo è indiscutibilmente sbagliato. Per definizione, i tabulatori devono essere usati per la tabulazione.
Anche per il rientro, i tabulatori sono oggettivamente superiori:
C'è un chiaro consenso nella comunità di Stack Exchange.
L'uso di un singolo spazio per il rientro è visivamente spiacevole; l'utilizzo di più di uno è dispendioso.
Come tutti i programmatori di
golfsanno, i programmi dovrebbero essere i più brevi possibili. Non solo consente di risparmiare spazio sul disco rigido, ma anche di ridurre i tempi di compilazione se è necessario elaborare meno byte.Regolando la larghezza della scheda 1 , lo stesso file appare diverso su ciascun computer, quindi tutti possono utilizzare la larghezza del rientro preferita senza modificare il file effettivo.
Tutti i buoni editor di testo usano i tabulatori per impostazione predefinita (e definizione).
Lo dico e ho sempre ragione!
Purtroppo, non tutti ascoltano la ragione. Qualcuno ti ha inviato un file che sta sbagliando TM e devi correggerlo. Potresti farlo manualmente, ma ce ne saranno altri.
È abbastanza brutto che i distanziatori stiano sprecando il tuo tempo prezioso, quindi decidi di scrivere il programma più breve possibile per occuparti del problema.
Compito
Scrivi un programma o una funzione che procede come segue:
Leggi una singola stringa da STDIN o come argomento da riga di comando o funzione.
Identificare tutte le posizioni in cui sono stati utilizzati spazi per tabulazione o rientro.
Una serie di spazi è rientro se si verifica all'inizio di una riga.
Una serie di due o più spazi è tabulazione se non rientro.
Un singolo spazio che non è rientro può o non può essere stato utilizzato per la tabulazione. Come previsto quando usi lo stesso personaggio per scopi diversi, non esiste un modo semplice per dirlo. Pertanto, diremo che lo spazio è stato utilizzato per la confusione .
Determinare la larghezza della scheda 1 più lunga possibile per la quale tutti gli spazi utilizzati per la tabulazione o il rientro possono essere sostituiti con tabulatori, senza alterare l'aspetto del file.
Se l'input non contiene né tabulazione né rientro, è impossibile determinare la larghezza della scheda. In questo caso, saltare il passaggio successivo.
Utilizzando la larghezza della linguetta precedentemente determinata, sostituire tutti gli spazi utilizzati per la tabulazione o il rientro con tabulatori.
Inoltre, quando possibile senza alterare l'aspetto del file, sostituire tutti gli spazi utilizzati per la confusione con i tabulatori. (In caso di dubbio, sbarazzarsi di spazi.)
Restituisce la stringa modificata dalla funzione o stampala su STDOUT.
Esempi
Tutti gli spazi di
a bc def ghij
sono tabulazione.
Ogni serie di spazi riempie la stringa precedente di caratteri non spaziali con una larghezza di 5, quindi la larghezza della scheda corretta è 5 e l'output corretto 2 è
a--->bc-->def->ghij
I primi due spazi di
ab cde f ghi jk lm
sono tabulazione, le altre confusioni.
La larghezza scheda corretta è 4, quindi l'uscita corretta 2 è
ab->cde>f ghi>jk lm
L'ultimo spazio rimane intatto, poiché sarebbe reso come due spazi se sostituito da un tabulatore:
ab->cde>f ghi>jk->lm
Tutti tranne uno spazi di
int main( ) { puts("TABS!"); }
sono rientri, l'altro è confusione.
I livelli di rientro sono 0, 4 e 8 spazi, quindi la larghezza della linguetta corretta è 4 e l'uscita 2 corretta è
int --->main( ) --->{ --->--->puts("TABS!"); --->}
Lo spazio in
( )
sarebbe reso come tre spazi se sostituito da un tabulatore, quindi rimane intatto.I primi due spazi di
x yz w
sono rientranza, la confusione degli altri.
La larghezza della linguetta corretta è 2 e l'uscita 2 corretta è
->x>yz w
L'ultimo spazio verrebbe reso come due spazi se sostituito da un tabulatore, quindi rimarrà intatto.
I primi due spazi di
xy zw
sono rientri, gli altri tre sono tabulazione.
Solo una larghezza di tabulazione di 1 consente di eliminare tutti gli spazi, quindi l'uscita corretta 2 è
>>xy>>>zw
Tutti gli spazi di
a b c d
sono confusione.
Non esiste una larghezza di scheda più lunga possibile, quindi l'output 2 corretto è
a b c d
Regole aggiuntive
L'input consisterà interamente di caratteri ASCII e avanzamenti di riga stampabili.
Si può presumere che ci siano al massimo 100 righe di testo e al massimo 100 caratteri per riga.
Se si sceglie STDOUT per l'output, è possibile stampare un singolo avanzamento riga finale.
Si applicano le regole standard del code-golf .
1 La larghezza della scheda è definita come la distanza in caratteri tra due punti di tabulazione consecutivi , utilizzando un carattere a spaziatura singola.
2 Le frecce artistiche ASCII rappresentano i tabulatori Stack Exchange si rifiuta di eseguire il rendering correttamente, per il quale ho inviato una segnalazione di bug. L'output effettivo deve contenere tabulatori effettivi.
programs should be as short as possible
Credo di aver trovato il fratello perduto di Arthur Whitney !!