Inspirado por este joguinho .
Desafio
Dada como entrada a posição inicial de uma grade (sempre 5x5), assim:
-ABCD
-A---
---C-
---BD
--E-E
Você precisa conectar as letras (mesmas letras todas juntas), removendo todos os -
espaços vazios . As letras serão sempre A,B,C,D and E
.
Cada par de letras deve ser conectado por uma única linha não ramificada que possa dobrar em ângulos retos (usando a mesma letra para representar a linha).
É garantido que a entrada tenha cada letra inicial exatamente 2 vezes e sempre terá todas as letras iniciais AE.
A entrada pode ser lida no stdin, ou em uma única string como arg para alguma função, ou mesmo em um array / matriz / lista de caracteres, a maneira mais conveniente para a sua linguagem de codificação.
Uma vez que este é o código, o código mais curto em bytes ganha!
Exemplo
Não há apenas uma solução para cada problema, mas as regras se aplicam a todos (sem espaço vazio e sem letras separadas). E a entrada é garantida para ter pelo menos uma saída correta.
Vamos começar a conectar as letras A:
AABCD
AA---
AA-C-
AA-BD
AAE-E
Agora, conectando as letras B:
AABCD
AAB--
AABC-
AABBD
AAE-E
Agora, conectando as letras C:
AABCD
AABC-
AABC-
AABBD
AAE-E
Agora, conectando as letras D:
AABCD
AABCD
AABCD
AABBD
AAE-E
E, finalmente, as letras E:
AABCD
AABCD
AABCD
AABBD
AAEEE
Outras amostras
input:
E--E-
BB-C-
AD---
---C-
AD---
output:
EEEEE
BBECE
ADECE
ADECE
ADEEE
input:
A----
---B-
-C-C-
-D-D-
BE-EA
output:
AAAAA
BBBBA
BCCCA
BDDDA
BEEEA
A-E
?Respostas:
Perl,
130128127 bytesInclui +4 para
-n0
(o programa não funciona na linha de comando, portanto, o-
espaço também é contado)Ligue com a entrada em STDIN:
Teminate com
^D
ou^Z
ou o que fecha STDIN no seu sistemaconnectletters.pl
:fonte