Para onde a flecha está apontando?
Neste desafio, seu objetivo é seguir uma seta e exibir o personagem para o qual está apontando.
Exemplos
Entrada:
d S------+ b
|
|
c +--->a
Saída: a
Entrada:
S-----+---a->c
|
V
b
Saída: b
A seta não está apontando c
porque está dividida por a
, o que significa que esse caminho nunca leva a uma ponta de seta.
Entrada:
a S s
| |
V V
b c
Saída: b
Entrada:
d s<+S+--V
||| Q
-++
Saída: Q
Esse caminho começa no S
, desce, à direita, sobe, à direita e depois aponta para o Q. Observe que o caminho não vai direto de S
para +
.
Entrada:
d s-+ +-S +--+
+-->b | | |
| | +--+ |
+--+ A<----+
Saída: A
Entrada:
S-----+
| +-^
+---+->B
+---^
Saída: B
Porque a linha válida nunca levará a um caractere de espaço em branco. A única linha que não leva a um caractere de espaço em branco leva a umB
Desafio
A entrada será uma sequência de várias linhas na qual você precisará encontrar o caractere para o qual a seta está apontando. Haverá apenas uma seta válida. A seta válida apontará apenas para caracteres alfanuméricos, exceto S
. Uma linha nunca se sobrepõe. por exemplo-|-
S
(capital) representa onde a seta começa.-
representa uma linha horizontal+
representa uma possível mudança no eixo. Uma seta válida nunca começará com a+
.|
representa uma linha vertical> < V ^
qualquer um deles representa a ponta da seta. Estes nunca se conectam a um+
.
Haverá apenas um S
na string. A entrada também será preenchida para ser um retângulo (não necessariamente um quadrado).
S
." Provavelmente deve ser reformulado para "Este nunca será o primeiro caractere da seta". (Como oQ
exemplo tem um+
adjacente a umS
.) "+
Representa uma mudança no eixo". pode ser "+
representa uma possível alteração no eixo". (Como oB
exemplo mostra que você pode avançar+
sem mudar de direção.) Caso contrário, é um bom desafio. :)---^
? Em outras palavras, se no exemplo B, o B poderia permanecer na primeira linha?S>a
válido?Respostas:
JavaScript (ES6), 195
245 231 242 246 250Edit4 Agora, uma única função recursiva. Provavelmente não pode mais jogar golfe
Edit3 Teste para linha reta e teste para ponta de seta mesclada na função T, funções S e H removidas.
Edit2 Revisado e mais :( depois disso, este esclarecimento
Editar Pequenas melhorias, cortando alguns caracteres aqui e ali, esperando o CJammers intervir
Teste a execução do snippet abaixo em um navegador compatível com EcmaScript 6. (funciona no Firefox. Chrome ainda está sem o operador de propagação
...
)fonte
JavaScript 2016,
264263249240235234bytesExecute-o no Firefox:
Espalhados em algumas das minhas anotações:
fonte
o = 'indexOf'
e fazendoq[o](e)
quando quiser usá-lo.for(;;)
loops são geralmente mais eficientes. Pode estar errado neste caso, mas tente.a<-+S->b
eu acho que deveria darb
apenas, como uma seta válido nunca vai começar com um +JavaScript 2016
(stiil uma resposta válida e bom, não problema com ele)VBA Excel 2007, 894 bytes
Bem, isso começou muito melhor do que acabou. Tenho a sensação de que minha lógica é falha e eu poderia ter economizado uma tonelada de bytes se eu reorganizasse parte da minha lógica, mas já se passou muito tempo nisso = P
A entrada para isso é a coluna A de qualquer planilha em que você esteja. Esse método usa o fato de que o Excel possui essa grade agradável e divide tudo para que você possa ver o que está fazendo com mais clareza.
Sub m()
está apenas pegando os dados colados Copiar da coluna A e dividindo-os por char. Se permitirmos uma entrada modificada, se você pré-formatar o labirinto em 1 caractere por célula, poderá salvar alguns bytes removendosub m()
Cole um labirinto no Excel de qualquer tamanho, com até 99 linhas por 27 caracteres. Se você deseja labirintos maiores, seus apenas 2 bytes extras aumentam o escopo para 999 linhas e colunas ZZ
Também pode ser necessário que os juízes liguem se uma planilha do Excel é "Entrada padrão" válida para uma resposta do VBA. Caso contrário, é praticamente impossível fornecer a entrada VBA Multi-line via janela imediata
Para executar esse código, cole-o em um módulo do Excel, cole um labirinto em A1 e execute
sub j()
fonte
Python 3, 349 bytes
Ugh, tantos bytes.
Essencialmente, uma pesquisa pela primeira vez. Bônus: isso realmente sai normalmente, em vez de usar
exit()
, que é mais longo de qualquer maneira.fonte
input()
? É problemático para mim.Perl 5
A solução ficou mais tempo do que outras soluções.
Mesmo depois de jogar golfe. Portanto, esta é a versão não destruída.
Ele imprime o mapa para que você possa seguir o cursor.
Como funciona? A cada passo, coloca possíveis movimentos na pilha. E continua funcionando até não sobrar mais nada na pilha ou encontrar uma solução.
Pode ser facilmente modificado para encontrar todas as soluções e escolher o mais próximo -> while (@_) {...
Teste
fonte
Versão PHP (os comentários são em francês, desculpe)
fonte
Haskell, 268 bytes
Parabéns aos Javascripters! Desisti da recompensa, mas aqui está o que eu tenho. Pode não funcionar em todos os casos, mas na verdade lida com as setas iniciando e as pontas de flechas conectando-se a
+
es, até onde eu sei. Nem sequer incluiu a pesquisa doS
, é apenas(0,0)
por enquanto.fonte
Gostaria de ver uma versão da APL em espírito de https://www.youtube.com/watch?v=a9xAKttWgP4
Para começar, uma solução Julia vetorizada que eu acho que pode ser traduzida 1: 0,3 para APL ou J. É necessária uma string R representando um diagrama de seta L x K. Ele primeiro converte a matriz de símbolos em uma matriz de pequenas matrizes 3x3 cujos padrões são as expansões binárias das letras da string "\ 0 \ x18 \ fH \ t]] \ x1cI". Por exemplo, '+' é codificado como remodelado ([0, dígitos (int (']'), 2,8)], 3,3)
Nesta representação, o caminho consiste em 2 e é inundado por 3 a partir do ponto de partida.
Testar,
A propósito, acho que a cláusula "Outro + pode estar adjacente, mas a flecha deve priorizar a entrada em - ou | primeiro". coloca uma abordagem vetorial em desvantagem. Enfim, eu simplesmente ignorei.
fonte