Ou talvez não seja realmente um labirinto, mas ainda assim.
Regras:
Entrada é uma seqüência de duas linhas, consistindo de
*
,1
,x
eX
. Essa corda é um labirinto para percorrer. As linhas têm o mesmo comprimento .Você pode considerar a entrada como uma string com
,
(vírgula) ou qualquer separador conveniente entre essas duas linhas. Ou você pode usar as duas linhas como argumentos separados para sua função.Resultado é o número de etapas que você deve executar para sair da sequência (o último passo é a etapa que o move para fora da sequência).
Você começa no canto superior esquerdo (a linha superior), antes do primeiro símbolo.
Para cada etapa, você avança com um símbolo (da enésima a (n + 1) ª posição ). Então, dependendo do personagem em que você pisa, o resultado é diferente. Aqui está o que cada caractere faz:
*
- nada. Você apenas pisa nele normalmente.x
- depois de pisar, alterne a linha, mas permaneça na mesma distância horizontal desde o início. Por exemplo, você pisou na terceira posição da linha superior e encontrou uma letra minúsculax
aqui. Então você se move imediatamente para a linha inferior, mas novamente na terceira posição.X
- mude a linha e vá para a próxima posição. O exemplo é o mesmo lá, mas você também se move da terceira para a quarta posição (portanto, você está na segunda linha na quarta posição).1
- apenas avance em mais uma posição.
Uma vez que cada personagem faz seu trabalho, ele é substituído por um espaço e não funciona mais.
Seguem exemplos.
Entrada :
x *
Como dito anteriormente, você começa antes do primeiro símbolo da primeira linha. O primeiro passo leva você à letra
x
e essa letra muda para a segunda linha. A letrax
não funciona mais comox
, mas substituída por*
. Isso será mais relevante nos últimos exemplos. Agora você está em um asterisco na linha inferior e isso não fez nada para você.O segundo passo é avançar e você sair da corda, para que o labirinto seja concluído e foram necessários 2 passos.
Saída
2
.Entrada :
xX* x1*
1º passo : você
x
segue em frente , o que o move nax
linha inferior. Aí vem a regra que diz que o caractere usado é substituído pelo asterisco. Então você volta para a primeira linha, mas ela não está maisx
lá, pois foi usada e se tornou um asterisco. Então você se move com segurança nesse asterisco e a etapa é concluída (agora você está na primeira posição da primeira linha).2º passo : você segue em frente
X
, empurra você para a linha inferior e empurra você para a frente. Agora você reside na terceira posição da segunda linha (asterisco), nunca tendo visitado a segunda posição (que contém1
).3º passo : você avança, saindo da corda.
Saída :
3
.
Casos de teste:
Entrada:
*1* xxx
Saída:
3
. (porque1
faz você pular na terceira posição). Lá você nunca visita a segunda linha, mas é necessária parte da entrada.Entrada:
*X*1*x x*1xx*
Saída:
4
.Entrada:
1x1x ***X
Saída:
3
.Entrada:
1*x1xxx1*x x*x1*11X1x
Saída:
6
.Entrada:
xXXXxxx111* **xxx11*xxx
Saída:
6
.
fonte
"\n\n"
é uma string de duas linhas ...1
, como você começar antes da 1ª linha, então você avançar um passo, e depois de terminar o labirinto ...Respostas:
Caracóis, 34 bytes
Expandido:
Para um caminho que executa N etapas, o programa encontra uma correspondência bem-sucedida para cada passagem de 0 etapas, 1 etapas, ..., etapas N-1.
fonte
Haskell,
686665 bytesFunção
#
usa as duas linhas como parâmetros separados. Exemplo de uso:"1x1x" # "***X"
->3
.Nós apenas temos que contar as estrelas
*
que pisamos mais 1 para partir.Edit: @feersum salvou um byte. Obrigado!
fonte
a>'a'
vez dea=='x'
?JavaScript (ES6), 119
Menos golfe
Teste
fonte
TSQL (sqlserver 2012+), 276 bytes
Golfe:
Ungolfed:
Violino
fonte
JavaScript, 211 bytes
Estou pensando em criar uma versão que mostre cada etapa executada uma após a outra, exibida em uma página da web.
Usou mais bytes do que eu esperava ao substituir
x
por*
causa de JS imutávelStrings
. Sugestões para melhorar são apreciadas, especialmente com a peça de reposição.fonte