Ouvi em algum lugar que uma coisa que a tecnologia ainda não pode fazer é dobrar as toalhas 1 . Portanto, agora é seu trabalho provar essa afirmação falsa!
Dada uma string como entrada, composta de retângulos (toalhas), como a seguir, dobre cada toalha ao meio duas vezes. Por exemplo:
+------+ +------+ +--+
| | | | | |
| | | | | |
| | -> +------+ -> +--+
| |
| |
| |
+------+
Observe que quando uma toalha é dobrada, ela é primeiro dobrada e depois da esquerda para a direita. Você programa deve imitar esse comportamento também. Observe também que, nos casos de teste, as toalhas permanecem no mesmo local, mas dobradas.
Regras:
- Métodos padrão de entrada / saída.
- Aplicam-se brechas padrão.
- Entrada e saída devem ser como uma string.
- No entanto, o resultado final é bom na saída, desde que as toalhas estejam no lugar certo, uma em relação à outra.
- Você pode assumir que o comprimento de cada lado da toalha será sempre divisível por 2.
- As toalhas passadas como entrada sempre serão retangulares.
As toalhas sempre serão separadas - no entanto, elas podem ser separadas por quantidades variáveis.
code-golf , o código mais curto ganha!
Casos de teste:
Input:
+------+
| |
| |
| |
| |
| |
| |
+------+
Output:
+--+
| |
| |
+--+
Input:
+--+ +--+ +--+
| | | | | |
| | | | | |
+--+ +--+ +--+
Output:
++ ++ ++
++ ++ ++
Input:
+----+
| |
| |
| |
| | ++
+----+ ++
Output:
+-+
| |
+-+
+
Input:
+--+
+--+ ++
||
||
++
Output:
++
+
+
1: Isso foi refutado por Geobits e Laikoni. No entanto, eu ouvi em algum lugar.
Respostas:
Retina , 245 bytes
Experimente online!
Nota: algumas linhas terminam em espaços. Explicação:
Exclua todas as outras linhas de todas as toalhas (isso funciona porque todas as toalhas têm altura uniforme),
desloque todos os pedaços de toalha destacados para cima,
e fixe o fundo das toalhas, dobrando-as efetivamente.
Dobre as toalhas de largura 2 para a direita.
Dobre as toalhas restantes para a direita.
fonte
<-2>
é um grupo de balanceamento do .NET?(?<-2>.)*
a captura de cada vez, por isso não pode repetir mais vezes do(.)*
que o fez, enquanto(?(2)(?!))
verifica se não há capturas restantes, repetindo o mesmo número de vezes.Oitava com Pacote de Imagens ,
277272 bytesEntrada e saída são matrizes de caracteres 2D.
Experimente online! Ou verifique todos os casos de teste: 1 , 2 , 3 , 4 . (Observe que
endfunction
nos casos de teste só é necessário separar a função do código subsequente. Não é necessário se a função for salva em seu próprio arquivo.)Versão legível e explicação
fonte