Este é um "labirinto de flechas":
v <
> v
> ^
> v
^ < *
As *
marcas no local onde você terminará. Seu objetivo é descobrir onde o labirinto começa (daí o labirinto reverso). Nesse caso, é o primeiro >
na segunda linha.
v------<
S-+---v |
| >--^
>-+-------v
^ < *
Observe que todas as setas devem ser usadas. Observe também que você pode assumir que as linhas serão preenchidas com espaços com o mesmo comprimento.
Seu programa deve inserir o labirinto de qualquer maneira razoável (stdin, de um arquivo, caixa de mensagem etc.), no entanto, o labirinto deve estar completamente intacto. Por exemplo, você não pode inserir as linhas separadas por vírgulas; a entrada deve ser exatamente o labirinto.
Você deve produzir o início do labirinto de qualquer maneira razoável. Por exemplo, você poderia
- produzir as coordenadas do início
- produzir o labirinto inteiro com a seta inicial substituída por um
S
- imprima o labirinto inteiro com todas as setas, exceto a seta inicial removida (espaço em branco intacto!)
- etc.
Desde que você possa dizer pela saída qual seta é a seta inicial, tudo bem. Por exemplo, uma saída de
"0"
"2"
está bem, independentemente das novas linhas e citações, porque você ainda pode saber onde foi o início.
Isso é código-golfe , então o código mais curto em bytes vencerá.
>v^
na>
está apontando para ov
, não o^
. Vou editar mais coisas quando voltar para casa em um computador hoje.Respostas:
GolfScript, 55 bytes
Demonstração online
Assume que todas as linhas de entrada são preenchidas com espaços do mesmo comprimento e separadas por novas linhas. Emite o deslocamento de bytes da seta inicial desde o início da sequência de entrada (por exemplo,
12
para o exemplo do labirinto no desafio).Especificamente, este programa localiza os desvios de bytes de todas as setas que não possuem nenhuma outra seta apontando para elas (supondo que todas as setas apontem para uma seta ou uma meta; um comportamento estranho pode ocorrer se isso não for verdade). Por padrão, se houver várias dessas setas (que, por especificação, não devem ser possíveis em entradas válidas), suas compensações serão simplesmente concatenadas na saída. Se desejar, você pode anexar
n*
ao programa para separá-los por novas linhas.Versão descolada com comentários:
fonte
w
.z
para&
evitar a necessidade de um espaço extra, no entanto. OTOH,?~.~)
faz um belo sorriso. :-)GolfScript (
101100 bytes)A saída está no formato em
[[x y]]
que as coordenadas são baseadas em 0.Demonstração online
O processamento ocorre em duas fases: a primeira fase transforma o labirinto em uma série de
[x y dx dy]
tuplas; a segunda fase mapeia cada seta / asterisco para a seta / asterisco para a qual aponta. (Asteriscos são apontados para si mesmos). Pela definição do problema, há exatamente uma seta que não está no resultado deste mapa e essa é a solução.fonte
;'STUFF'
simula o fornecimentoSTUFF
via stdin.Mathematica
491323Ungolfed com comentários
O procedimento começa no final ("*"), encontra a seta que aponta para ele e assim por diante até chegar ao início.
A função, f [labirinto].
precursor [{Achatar [{aboveMe [loc, a], belowMe [loc, a], rightOfMe [loc, a], leftOfMe [loc, a]}, 2], a, Preceder [lista, loc]}]]
Golfe
Exemplo
O labirinto. Cada par ordenado contém a linha e a coluna de uma célula. Por exemplo, {2, 3} denota a célula na linha 2, coluna 3.
Entrada
Saída : o caminho do início ao fim.
fonte
Acho que encontrei uma boa maneira de resolver isso, mas por acaso sou péssima em jogar golfe. Eu acho que isso pode ser MUITO mais curto, então vou explicar minha ideia para que outros possam usá-la se acharem boa.
Se todas as flechas tiverem que ser usadas, todas as flechas serão apontadas por outra flecha, exceto uma, que é a nossa solução.
Isso significa que na verdade não precisamos jogar o labirinto para trás, mas, começando pelo canto superior esquerdo, basta verificar a seta apontável mais próxima de cada um. Este é um verdadeiro analgésico para labirintos maiores (já que você não precisa verificar todas as quatro direções, mas apenas uma).
Aqui está a minha solução:
PHP, 622 bytes
Ungolfed:
fonte
PHP - 492 bytes
Esta solução supõe que o mapa possa ser encontrado na variável local
$m
. O método mais curto que tenho para passar é via$_GET
:$m=$_GET['m'];
at 14 bytes. Uma versão não-gasta com o mapa na variável é fornecida abaixo para maior clareza da leitura.fonte
K,
281277258Aqui está uma versão anterior, não destruída
Retorna o ponto de partida como
x y
nos índices baseados em 0.fonte
Python 422
A entrada está em um arquivo chamado
m.txt
. A saída é,(x, y)
mas se você alterar a última declaração de impressão paraprint g
, a saída será uma lista,[(x, y), (x, y), ...]
com todas as etapas para ir do fim ao início.fonte