Quando scrivo documentazione, commenti, ecc., Adoro creare tabelle ASCII. Di solito sembrano piuttosto belli, ma ho sempre la sensazione che possano apparire ancora migliori, specialmente dal momento che UTF-8 / Unicode include i personaggi del disegno a scatola . Tuttavia, questi personaggi sono molto onerosi da usare, e richiedono l'inserimento di più tasti. Il tuo compito? Scrivi un programma o una funzione che può convertire automaticamente le tabelle ASCII nell'equivalente UTF-8 / Unicode.
Questa sfida è stata sandbox .
Sfida
Scrivi un programma, che ha dato una tabella ASCII come stringa di input, genera la tabella ridisegnata con i caratteri di disegno della casella Unicode / UTF-8. In particolare, i caratteri che fanno parte della tabella devono essere tradotti come segue:
(Unicode, 3 bytes each in UTF-8)
- to ─ (\u2500)
| to │ (\u2502)
= to ═ (\u2550)
and + to one of:
┌ (\u250C), ┐ (\u2510), └ (\u2514), ┘ (\u2518),
├ (\u251C), ┤ (\u2524), ┬ (\u252C), ┴ (\u2534),
┼ (\u253C)
or, if '=' on either side:
╒ (\u2552), ╕ (\u2555), ╘ (\u2558), ╛ (\u255D),
╞ (\u255E), ╡ (\u2561), ╤ (\u2564), ╧ (\u2567),
╪ (\u256A)
Dettagli
I / O:
- I / O predefinito è consentito
- È possibile accettare input in qualsiasi formato ragionevole, inclusa la tabella come stringa o percorso di un file contenente la tabella.
- È possibile eseguire l'output in un file e prendere il nome del file come argomento aggiuntivo.
- Tuttavia, non è possibile modificare il file di input . (Dovrebbe essere conservato per facilitare le modifiche future)
Ingresso:
- Si può presumere che ogni riga di input sia stata riempita con la stessa lunghezza
. - Non puoi presumere che il primo carattere dopo una nuova riga sia una parte dei bordi della tabella (poiché potrebbe essere uno spazio).
- L'input è considerato una tabella valida se tutti i caratteri (che fanno parte della tabella)
-=|sono collegati esattamente a due caratteri e+sono collegati ad almeno un carattere sia in orizzontale che in verticale. - Il tuo programma potrebbe non produrre errori con input validi.
- Se l'input non è valido, il comportamento non è definito e si può produrre qualsiasi output.
- L'input può contenere qualsiasi carattere UTF-8, inclusi i caratteri del riquadro.
Produzione:
- Qualsiasi personaggio
-=|+che non fa parte della tabella deve essere lasciato così com'è. - Allo stesso modo, qualsiasi altro personaggio deve essere lasciato così com'è.
- È consentita una nuova riga iniziale e / o finale.
Altro:
- Le scappatoie standard sono vietate, come al solito.
- Se la tua lingua preferita ha un built-in che risolve questo problema, non puoi usarlo.
- Ciò significa programmi, funzioni, subroutine o istruzioni che sarebbero invii validi per questa sfida senza aggiunte.
- Ognuno dei personaggi necessari in questa sfida ha una lunghezza di tre byte quando sono codificati in UTF-8.
Personaggi collegati :
Un personaggio è collegato a un altro, se:
- È
|ed è direttamente sopra o sotto+o|; - È
-ed è direttamente prima o dopo+o-; - È
=ed è direttamente prima o dopo+o=; - È
+ed è direttamente sopra o sotto|o+, oppure è direttamente prima o dopo-,=oppure+.
Un personaggio è considerato parte della tabella, se è collegato a qualsiasi personaggio che fa parte della tabella. Per definizione, il primo +nell'input è una parte della tabella.
Esempi
Esempi disponibili qui come versione copia-pastable.
Input: Output:
+------------------+ ┌──────────────────┐
| Hello+World! | │ Hello+World! │
+==================+ ╞══════════════════╡
| This is+my first | -> │ This is+my first │
|+-+ code|golf +-+| │+-+ code|golf +-+│
|+-+chall|enge! +-+| │+-+chall|enge! +-+│
+------------------+ └──────────────────┘
+===+===+===+ ╒═══╤═══╤═══╕
| 1 | 2 | 3 | │ 1 │ 2 │ 3 │
+---+===+===+===+ ┌───╪═══╪═══╪═══╡
| 1 | 1 | 2 | 3 | │ 1 │ 1 │ 2 │ 3 │
+---+---+---+---+ -> ├───┼───┼───┼───┤
| 2 | 2 | 4 | 6 | │ 2 │ 2 │ 4 │ 6 │
+---+---+---+---+ ├───┼───┼───┼───┤
|-3 |-3 |-6 |-9 | │-3 │-3 │-6 │-9 │
+===+---+---+---+ ╘═══╧───┴───┴───┘
+-----+ -> <Undefined>
+-----+ -> ┌─────┐
+-----+ └─────┘
+-----------------+
| Hello, World! |
| This is invalid | -> <Undefined>
| input |
-----------------+
++++ ┌┬┬┐
++++ -> ├┼┼┤
++++ └┴┴┘
+--+
++++ -> <Undefined>
+--+
Infine...
Questo è code-golf , quindi vince il minor numero di byte. Buon golf!
Hello Worldtabella, le tabelle interne non vengono considerate come una tabella perché il testo all'interno della tabella deve rimanere invariato e non vengono considerati parte dei bordi della tabella esterna poiché non sono collegati correttamente ad essi.
+-+estratti consecutivi non sono considerati come una tabella connessa?