As caixas ASCII ficam assim:
++ +---+ +------+ +---+ +---+
++ | | | | | | | |
| | | | | | | |
+-+ | | | | | | | |
+-+ | | | | | | +---+
+---+ | | | |
+--+ | | | | ++
| | | | | | ||
| | +------+ | | ||
+--+ | | ||
+---+ ||
||
+-----+ ||
+------------+ | | ++
| | | |
| | | |
+------------+ +-----+
Aqui estão alguns exemplos das mesmas caixas ASCII, implodidas:
++ +- -+ +- -+ +- -+ +- -+
++ | - | | - - | | - | | - |
| | | -- | | | | |
+-+ | | | | " | - |
+-+ | - | || | | +- -+
+- -+ | | | |
+--+ | -- | | | ++
| | | - - | " ||
| | +- -+ | | ||
+--+ | - | | |
+- -+ | |
-- ||
- - +- -+ ||
+- - - -+ | - - | ++
| -- -- | | = |
| -- -- | | - - |
+- - - -+ +- -+
- -
--
Aqui está um link para todas essas caixas de casos de teste em um formato mais fácil de copiar. A ordem é todas as entradas seguidas por todas as saídas na mesma ordem.
Seu objetivo é pegar uma caixa ASCII como entrada e retornar a caixa implodida. As regras de implosão são:
- "+" nunca muda; nem "-" ou "|" diretamente adjacente a "+"
- A partir dos cantos, os "-" e "|" mova-se para dentro em um espaço a mais do que o mesmo caractere mais perto da esquina. Se um "-" e "|" jamais se moveria para o mesmo local, nem se move.
- Se um "-" e "-" forem movidos para o mesmo local, coloque um "=" nesse local. Se um "|" e "|" mova para o mesmo local, coloque um "nesse local. Eles contam como dois de seus respectivos personagens no mesmo local, movendo-se em direções opostas.
- Dois "-" ou dois "|" podem passar um do outro, como pode ser visto no exemplo inferior esquerdo.
- Se a caixa for fina o suficiente, ela começará a se expandir para fora da mesma maneira, sempre se afastando do lado em que começou parte.
- O resultado deve ser simétrico na linha central nas direções x e y (ignorando novas linhas); isso inclui espaços; portanto, o resultado pode precisar ser preenchido com espaços para satisfazer isso.
Detalhes da regra:
- Isso é código-golfe, e o programa mais curto em bytes vence.
- Aplicam-se brechas padrão.
- Você pode assumir que cada linha termina em um caractere de nova linha.
- Os únicos caracteres na sequência de entrada serão "+", "-", "|", "" e "\ n" (nova linha), e a sequência de saída deverá seguir as mesmas regras, com a adição de "=" e "como possíveis caracteres.
- Opcionalmente, você pode ter uma nova linha final à direita no final da última linha.
- A menor caixa ASCII que você precisa manipular é o exemplo superior esquerdo. Cada caixa ASCII terá exatamente 4 "+" s, exatamente nos cantos.
- Você precisará manipular caixas de tamanho
m x n
para números inteiros,m,n
tais como2<=m,n<256
(o maior tamanho possível de string255*(255+1)
) - Você pode assumir que sempre receberá uma única caixa ASCII válida como entrada.
||
em que o exemplo necessidade de ser um "
ou algo assim ...
"
? Eu acho que o "
único aparece em 3 de largura ou superior?
"
? À esquerda ou à direita? Não pode ser os dois, mas também não pode ser porque o resultado é simétrico.