Você está preso neste labirinto 5x5 - cada sala é rotulada de 1 a 25 e a saída é na sala 1.
Você recebe como entrada a sala em que está atualmente. Sua tarefa é produzir a menor seqüência de movimentos (norte, leste, sul, oeste) necessários para alcançar a sala 1.
Os movimentos podem ser produzidos em qualquer formato que você desejar (lista, string, array ...) desde que você use os caracteres n,w,e,s
.
Aqui estão todos os casos de teste:
1 => empty string/list
2 => w
3 => ww
4 => swwnw
5 => wswwnw
6 => seenwnw
7 => nw
8 => wnw
9 => wwnw
10 => swwnwnw
11 => eenwnw
12 => enwnw
13 => nwnw
14 => wnwnw
15 => wwnwnw
16 => enenwnw
17 => nenwnw
18 => wnenwnw
19 => nwnwnw
20 => wnwnwnw
21 => nenenwnw
22 => enwnenwnw
23 => nwnenwnw
24 => wnwnenwnw
25 => nwnwnwnw
Menor resposta em bytes ganha!
code-golf
kolmogorov-complexity
Arnaud
fonte
fonte
Respostas:
Python 2 , 64 bytes
Experimente online!
Uma função que imprime uma direção por linha, terminando com erro.
A constante
0x1211252b5375
codifica na base 4 a direçãod
que percorremos de cada número de quarto como um número de 0 a 3. O dígito de extração>>2*n-4&3
também é projetado para fornecer um erro de deslocamento negativo aon=1
finalizar o código. Atualizamos o número do quarton
por meio de um deslocamento calculado a partir da direçãod
comod*3+d%2-5
, que mapeia:fonte
try
/except
) para poder continuar a execução depois de chamar essa função.Python 2 ,
9593 bytesExperimente online!
Pode cortar
32 bytes se a marcação de sala indexada em 0 for permitida.fonte
05AB1E ,
3029 bytes-1 byte graças a uma coincidência milagrosa com números primos
Experimente online!
fonte
1
entrada1
, em vez de uma sequência vazia (a solução mais fácil seria adicionar uma guiaõ?
). Além disso, boa resposta!Ruby ,
7262 bytesExperimente online!
Quão?
O truque aqui é usar 2 constantes para criar o próximo passo para cada célula e resolver recursivamente o problema.
As 2 constantes 18139004 e 4267088 são cadeias binárias, dando a direção do próximo movimento, extraindo um único bit de ambos para cada célula, podemos obter:
Mais fácil do que mudar e mascarar um único grande número binário IMHO.
Quando obtemos a direção, extraímos a letra correspondente da string "en sw":
E continue recursivamente na célula [n + x]
fonte
JavaScript (ES7),
6258 bytesPorta da resposta do xnor .
Experimente online!
fonte
Perl 5 (
-n
), 94 bytes-5 bytes graças ao Grimy
TIO
fonte
Perl 5 , 79 bytes
Experimente online!
fonte
JavaScript,
807371 bytesAdaptado da solução Chas 'Python, por favor
+1
, também.Experimente Online!
1 byte economizado graças a Arnauld .
fonte
Carvão ,
4340 bytesExperimente online! Link é a versão detalhada do código. Com base nas respostas de @ ChasBrown e @ xnor. Explicação:
Entre na sala.
Defina a variável do loop
i
como um a menos que o número do quarto e repita enquanto não for zero.Extraia a direção da sequência compactada
0113130113220112010102010
. (O líder0
é apenas um dígito de preenchimento.)Imprima a direção.
Use a fórmula do @ xnor para calcular o novo número da sala.
fonte
Geléia ,
3029 bytesExperimente online!
Um link monádico que pega a célula inicial e retorna uma sequência com as instruções.
Eu amo o fato de o dicionário de Jelly ter uma palavra como 'Kennesaw' (uma cidade a noroeste de Atlanta, Geórgia), usada aqui porque indexá-lo com
[5, 1, -5, -1] + 1
doaçõesnesw
!Explicação
fonte
PHP , 110 bytes
Uma solução que não é um porto de grande resposta de Chas Brown ou grande resposta do xnor . Eu sei que isso é mais longo, mas eu queria ter uma solução diferente!
Experimente online!
Eu criei uma seqüência de mapeamento que possui 2 caracteres para cada célula no quadro. O primeiro caractere para cada célula é um movimento (n / e / s / w) ou
0
o código ASCII mod 30 do segundo caractere retornará outro número de célula que devemos seguir seu movimento no modo recursivo até chegarmos à célula (cell < 2
).Por exemplo, para a entrada 8:
8
são:w%
w
e continuar com os movimentos da célula de%
%
é 37, o mod 30 será 7, então a próxima célula a seguir é7
.7
são:n
(último caractere é espaço, código ASCII = 32)n
e continuar com os movimentos da célula de 32 mod 30, que é2
.2
são:w<
(último código ASCII = 60)w
e continuar com os movimentos da célula de 60 mod 30, que é0
.2
, o loop será interrompido!wnw
PHP , 75 bytes
Esta versão foi escrita por Grimy , é 35 bytes mais curta que a minha resposta original porque é mais inteligente! Comentário de Grimy: "4 * 25 <256, então você só precisa de 1 byte por célula, não 2"
Experimente online!
PHP , 71 bytes
Esta porta da resposta de Arnauld, que é a porta da resposta do xnor , mas como um loop, em vez de função recursiva, uma vez que acaba sendo mais curta no PHP.
Experimente online!
fonte
C (clang) , 81 bytes
Experimente online!
Graças a @ Tommylee2k sugestão -8! + chamada recursiva
C (clang) , 90 bytes
Experimente online!
Semelhante a todas as soluções não compactadas.
fonte
v;f(p){for(;p-1;p+=v%5?6-v%8:v%2?5:-5)putchar(v="00wwswsnwwseenwwenwnwnenwn"[p]);}
05AB1E ,
4543 bytesPorta da resposta Python 2 de @ChasBrown .
Experimente online ou verifique todos os casos de teste .
Explicação:
Veja esta minha 05AB1E (todas as quatro seções) para entender por que
.•DUo¢ê`Ω÷‰₂¡)R€ûK•
é"a wwswsnwwseenwwenwnwnenwn"
;Ž₁9
é22449
;Ž₁9₂в
é[1,7,5,11]
; e'€Ã
é"news"
.fonte
western
seja melhor. ; pBash , 120 bytes
Experimente online!
Eu brinquei por um tempo tentando empacotar a string como mordidelas, mas a decodificação exigiria mais caracteres do que o número salvo.
Como funciona:
A cadeia $ S contém um único caractere (n, w, s, e) para cada sala, mostrando qual direção seguir para mover uma sala em direção à saída, pulando as salas 0 e 1.
A cadeia $ N possui o delta a ser adicionado / subtraído do número atual da sala para cada mudança de direção (n: -5, w: -1, s: +5, e: +1)
Comece com $ i igual ao número da sala indicado na linha de comando ($ 1). Atribua o caractere no índice $ i na cadeia $ S a $ d. Recupere o valor delta de $ N para a direção a seguir para a próxima sala, atribuindo-o a $ j.
Imprima a próxima direção para receber $ d.
Adicione / subtraia o delta em $ j para / de $ i.
Faça um loop até sairmos da sala # 2 (enquanto $ i> 1).
fonte
Stax , 31 bytes
Execute e depure
fonte
Kotlin , 112 bytes
Experimente online!
fonte