Quando escrevo documentação, comentários, etc. Adoro fazer tabelas ASCII. Eles geralmente acabam parecendo muito bons, mas eu sempre sinto que eles podem parecer ainda melhores - especialmente porque o UTF-8 / Unicode inclui os caracteres de desenho da caixa . No entanto, esses caracteres são muito onerosos para usar, exigindo várias pressionamentos de tecla para serem inseridos. Sua tarefa? Escreva um programa ou uma função que possa converter automaticamente tabelas ASCII para o equivalente UTF-8 / Unicode.
Esse desafio foi marcado na caixa de areia .
Desafio
Escreva um programa que, dada uma tabela ASCII como uma sequência de entrada, produza a tabela redesenhada com os caracteres de desenho da caixa Unicode / UTF-8. Especificamente, os caracteres que fazem parte da tabela devem ser traduzidos da seguinte maneira:
(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)
Detalhes
E / S:
- E / S padrão é permitida
- Você pode receber entradas em qualquer formato razoável, incluindo a tabela como uma sequência ou um caminho para um arquivo que contém a tabela.
- Você pode enviar para um arquivo e usar o nome do arquivo como argumento adicional.
- No entanto, você não pode modificar o arquivo de entrada . (Ele deve ser mantido para facilitar a edição futura)
Entrada:
- Você pode assumir que todas as linhas de entrada foram preenchidas com o mesmo comprimento
.
- Você não pode presumir que o primeiro caractere após uma nova linha faça parte das bordas da tabela (pois pode ser um espaço em branco).
- A entrada é considerada uma tabela válida se todos os caracteres (que fazem parte da tabela)
-=|
estiverem conectados a exatamente dois caracteres e+
a pelo menos um caracter horizontal e verticalmente. - Seu programa não pode produzir erros com entradas válidas.
- Se a entrada não for válida, o comportamento será indefinido e você poderá produzir qualquer saída.
- A entrada pode conter caracteres UTF-8, incluindo os caracteres de desenho da caixa.
Resultado:
- Qualquer um dos caracteres
-=|+
que não fazem parte da tabela deve ser deixado como está. - Da mesma forma, quaisquer outros caracteres devem ser deixados como estão.
- É permitida uma única nova linha inicial e / ou posterior.
De outros:
- As brechas padrão são proibidas, como de costume.
- Se o seu idioma preferido tiver um built-in que resolva esse problema, você não poderá usá-lo.
- Isso significa programas, funções, sub-rotinas ou instruções que seriam envios válidos para esse desafio sem acréscimos.
- Cada um dos caracteres necessários neste desafio tem três bytes quando codificados em UTF-8.
Caracteres conectados :
Um personagem está conectado a outro, se:
- É
|
e é diretamente acima ou abaixo+
ou|
; - É
-
e é diretamente antes ou depois+
ou-
; - É
=
e é diretamente antes ou depois+
ou=
; - É
+
e é diretamente acima ou abaixo|
ou+
, ou é diretamente antes ou depois-
,=
ou+
.
Um caractere é considerado parte da tabela, se estiver conectado a qualquer caractere que faça parte da tabela. Por definição, o primeiro +
da entrada faz parte da tabela.
Exemplos
Exemplos disponíveis aqui como uma versão passível de cópia.
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>
+--+
Finalmente...
Isso é código-golfe , então a menor quantidade de bytes vence. Feliz golfe!
Hello World
tabela, as tabelas internas não são consideradas para formar uma tabela porque o texto dentro da tabela deve permanecer inalterado e elas não são consideradas parte das bordas da tabela externa, pois não estão conectadas a elas corretamente.
+-+
trechos consecutivos não são considerados para formar uma tabela conectada?