A arte ASCII é divertida. Os editores de texto modernos são muito bons em manipular o texto. As linguagens de programação modernas estão à altura da tarefa?
Uma tarefa comum na manipulação de arte ASCII é cortar o texto em um retângulo entre dois caracteres. Esta é a tarefa que você deve implementar neste desafio.
Detalhes
Seu programa terá três entradas:
- o primeiro é o caractere 'start' do bloco - marcando o canto superior esquerdo
- o segundo é o caractere 'final' do bloco - marcando o canto inferior direito
- a terceira é uma forma de texto com várias linhas, uma string ou lista de strings, ou nome do arquivo ou qualquer outra coisa
O resultado será um texto com múltiplas linhas (novamente, em qualquer um dos formatos acima) recortado no retângulo entre as entradas fornecidas. Observe que as duas primeiras entradas podem não ser exclusivas.
Casos de borda
As caixas devem sempre ter volume pelo menos 2. Assim, estas:
() (
)
são caixas, mas estas:
)( ) (
( )
não são (com início = (
e fim = )
).
A entrada conterá apenas uma caixa. Portanto, os caracteres inicial e final devem ocorrer apenas uma vez, a menos que sejam o mesmo caractere; nesse caso, devem ocorrer exatamente duas vezes.
Além disso, cada linha na entrada deve ter pelo menos a distância entre o início de uma linha e a borda direita da caixa na entrada.
Seu programa não precisa manipular entradas inválidas; eles podem resultar em comportamento indefinido.
Regras
Aplicam-se regras típicas de código-golfe. O menor código vence.
Exemplos
Dia ensolarado: start: ( end: ) input:
This is some text
. (but this text
is in a box ).
So only it is important.
Resultado:
(but this text
is in a box )
Observe a remoção do espaço horizontal também. As culturas artísticas ASCII são 2d.
Dia chuvoso: start: ( end: ) input:
This is some text (
But is that even )
really a box?
Resultado:
(
)
Mesmo começo / fim: start: / end: / input:
Oh, I get how this could be useful
/----------------------------\
| All this text is in a box! |
\----------------------------/
Resultado:
/----------------------------\
| All this text is in a box! |
\----------------------------/
Entrada inválida: start: ( end: ) input:
Boxes are rectangular ( so this has
0 volume ) which is illegal.
Entrada inválida 2: start: ( end: ) input:
(The lines must already be square
so this line that is too short
relative to this end, is illegal)