Le guerre sante sono state combattute su spazi contro schede. (E ovviamente gli spazi, essendo oggettivamente superiori, hanno vinto.) - Alex A.
S ome peo p le rifiutano ancora di un ccept che WHI c h è cl e arly s upreme. Hai appena ricevuto un file utilizzando l'INCOR re ct, b annuncio e inf e sotto forma di rior WHI t espace, e ora t E lui cont e nti del file di un R e macchiata e rovinata.
Decidi che potresti anche mostrare alla persona che ti ha inviato il file quanto sbagliano, violentemente.
Descrizione
Come suggerisce il titolo, la tua sfida è quella di prendere un file che contiene una o più schede:
this is an evil tab onoes
e spietatamente frantumali in pezzi:
this is an evil tab
o
n
o
e
s
Si noti che il software Stack Exchange trasforma le schede letterali in quattro spazi (perché è giusto), quindi le schede all'interno di questo post verranno visualizzate come quattro spazi. L'input per il tuo programma, tuttavia, conterrà schede effettive.
Sfida
La soluzione dovrebbe assumere una singola stringa come input, che può contenere ASCII, newline e tab stampabili. Ci sarà sempre almeno una singola scheda nell'input.
L'output dovrebbe essere la stessa stringa, con le seguenti regole applicate:
Inizia il cursore alle coordinate (0,0) e con una direzione di destra. Le coordinate sono (colonna, riga), a zero, e la direzione è il modo in cui dovresti spostare il cursore dopo aver stampato un carattere.
Per ogni carattere nella stringa:
Se si tratta di una nuova riga, passa alle coordinate (0, n), dove n è il numero di nuove righe nella stringa finora (inclusa questa) e reimposta la direzione verso destra.
Se è una scheda, genera due spazi, ruota la direzione del cursore di 90 gradi in senso orario e genera altri due spazi, "rompendo" la scheda in modo efficace a metà. Ecco un esempio visivo, in cui una scheda è rappresentata da
--->
e spazi come·
:foo--->bar--->baz
diventa
foo··· · b a r · · zab··
Altrimenti, basta semplicemente emettere il carattere sul cursore e spostare il cursore di un passo nella direzione corrente.
Dato che stai leggendo la stringa dall'inizio alla fine, è possibile che tu debba scrivere "in cima" ai caratteri esistenti — questo va bene. Ad esempio, l'input
foo--->bar
spaces are superior
dovrebbe risultare in un output di
foo
b
spaces are superior
r
Puoi scegliere se le "schede spezzate" debbano sovrascrivere altri personaggi - l'intenzione originale era che non lo facessero, ma le specifiche erano ambigue, quindi questa è la tua decisione.
Inoltre, dopo aver applicato queste regole, puoi anche
aggiungi o rimuovi tutti gli spazi finali che desideri.
aggiungere un massimo di una nuova riga finale.
L'input non conterrà mai spazi finali; inoltre non conterrà mai nuove righe iniziali o finali. Puoi anche sempre presumere che non dovrai mai scrivere su una colonna o una riga inferiore a 0 (cioè fuori dallo schermo).
Caso di prova
Le schede in questo caso di test sono rappresentate come --->
perché altrimenti SE le divora.
Ingresso:
Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah
Produzione:
Test case. Here's a tab
blah
blah t
blah blah blah blah blah blah
blaablah
r b
e l b
h 'h a l
a sa a a
l l h h
this is some mobe tbxt
haalhalb
b a
a b
t
bat a erehwyreve
Animazione di fantasia:
Regole
- Questo è code-golf , quindi vincerà il codice più breve in byte!
(0,0)
vuoi dire che dobbiamo prima cancellare la console o intendi semplicemente la posizione predefinita del cursore con quella?