O desafio
Crie uma função que, quando recebida uma entrada da arte ASCII (direcionando um caminho que possa eventualmente fazer um loop), produza o comprimento do loop (se houver) e o comprimento da "cauda" que leva ao loop em um dos formulários abaixo.
Entrada
Sua entrada deve ser passada para uma função. Abaixo está um exemplo de uma entrada simples.
# --> # --> #
^ |
| |
| v
# <-- #
Você pode visualizar os blocos acima como este
A "cauda" é um item, enquanto o loop tem quatro longos.
Um mais difícil:
# --> # --> #
^ |
| |
| v
# --> # <-- # # --> #
^ ^ |
| | |
| | v
# --> # # <-- # <-- #
Resultado
Você deve enviar pelo STDOUT ou a alternativa mais próxima do seu idioma.
Seus dois números inteiros de saída devem ser o comprimento da cauda e o comprimento do loop. Esta saída pode estar em duas formas.
- uma sequência delimitada por espaço:
"2 10"
- uma matriz de números inteiros:
[2, 10]
Regras
Cada bloco, ou
#
, terá apenas um único caminho de distância .Cada flecha tem dois segmentos de linha e uma cabeça.
O bloco inicial estará sempre na coluna mais à esquerda.
A entrada nunca será apenas um loop.
Exemplo
# --> # --> # --> #
^ ^ |
| | |
| | v
# # <-- # <-- #
Este tem um comprimento de cauda de 2 e um comprimento de loop de 6. Abaixo, o rabo e o loop são separados.
Rabo
# -->
^
|
|
#
Ciclo
# --> # --> #
^ |
| |
| v
# <-- # <-- #
As saídas corretas são [2, 6]
e "2 6"
.
Se a entrada for apenas uma cauda , o comprimento do loop será zero.
# --> # --> # --> #
|
|
v
<-- # <-- #
As saídas corretas para a entrada acima são [6, 0]
e"6 0"
fonte
Respostas:
JavaScript (ES6),
222222Uma função com a entrada como parâmetro, saída como uma string via janela pop-up (alerta).
Digitalize repetidamente a entrada:
a cada etapa
Quando não há mais cauda para remover, o número de etapas até agora é o tamanho da cauda e o número de '# restante é o tamanho do loop.
Todas as novas linhas dentro dos backticks são significativas e contadas
Teste a execução do trecho abaixo com o Firefox (não o Chrome, pois ele não suporta
...
)fonte
Ruby,
287278 bytesTente aqui .
Isso cria um hash (dicionário) de nós. Para cada nó, o número de conexões de entrada e o próximo nó (possivelmente nulo) são armazenados.
Finalmente:
A versão legível do código está disponível aqui .
fonte
Ruby, 276
fonte