Eu defino quatro estilos de caixa:
+-----+ ooooooo ^^^^^ *******
| 1 | o 2 o < 3 > * 4 *
| | o o < > * *
+-----+ ooooooo vvvvv *******
Escreva um programa ou função que, com um número inteiro e uma string, encontre uma das caixas acima dentro da string e mude seu estilo para o estilo de caixa solicitado pelo usuário. Por exemplo:
1
This is a test document.
It ********* has
no *purpose* other than
dem*onstrat*ion.
*********
Torna-se:
This is a test document.
It +-------+ has
no |purpose| other than
dem|onstrat|ion.
+-------+
Você pode assumir que a entrada contém exatamente uma caixa válida que é pelo menos 3x3. Seu código deve ignorar caixas incompletas / incorretas:
ooooooooooooooooooooooooooooooooo
o This is not a box. o This is. o
ooooooooooo ooooo ooooooooooooooo
^^^^ ######
<NOPE> #NOPE#
vVVv ######
O menor código em bytes vence.
o This is. o
eo This is no
(com linhaso
acima e abaixo, é claro).Respostas:
Julia,
995818713613 bytesUngolfed com explicação:
Ao contrário de como eu o abordei, esse código só funcionará corretamente para números de tipo "válidos" - 1, 2, 3 ou 4. Ele é dividido em duas partes - um localizador de caixas e um substituto de caixa. O código do localizador de caixas, função
f(t)
, usa regex para localizar partes superiores e, para as caixas mais simples (tipos 2 e 4), partes inferiores.O primeiro regex é a maneira mais simples de encontrar os topos das caixas. Aqui está a lógica disso:
O código é usado assim:
A impressão não está incluída na função, pois o formato de saída não está especificado - basta retornar a string, você pode imprimi-la posteriormente, como visto acima.
fonte