Introdução
Inspirado no vídeo muito recente The Trapped Knight - Numberphile , me deparei com um desafio.
A sequência do cavaleiro interceptado é uma sequência inteira finita de comprimento 2016, iniciando em 1 e possui as seguintes regras de construção:
- Escreva uma espiral numérica da seguinte maneira:
17 16 15 14 13 ...
18 5 4 3 12 ...
19 6 1 2 11 ...
20 7 8 9 10 ...
21 22 23 24 25 ...
- Coloque um cavaleiro em 1.
- Mova o cavaleiro para a grade com o menor número possível de visitantes que não tenham sido visitados anteriormente, de acordo com as regras do xadrez (ou seja, 2 unidades na vertical e 1 na horizontal ou vice-versa).
- Repita até que o cavaleiro fique preso.
Aqui estão os três primeiros passos:
Passo 1
17 [16] 15 [14] 13
[18] 5 4 3 [12]
19 6 < 1> 2 11
[20] 7 8 9 [10]
21 [22] 23 [24] 25
Os movimentos possíveis são 10, 12, 14, 16, 18, 20, 22, 24, entre os quais o menor é 10; portanto, o segundo termo é 10.
Passo 2
4 [ 3] 12 [29] 54
( 1) 2 11 28 [53]
8 9 <10> 27 52
[23] 24 25 26 [51]
46 [47] 48 [49] 50
Os movimentos possíveis são 1 , 3, 23, 29, 47, 49, 51, 53, entre os quais o menor é 3; portanto, o terceiro termo é 3.
etapa 3
35 [34] 33 [32] 31
[16] 15 14 13 [30]
5 4 < 3> 12 29
[ 6] ( 1) 2 11 [28]
7 [ 8] 9 (10) 27
Os movimentos possíveis são 6, 8, 10 , 16, 28, 30, 32, 34, entre os quais o menor é 6; portanto, o quarto termo é 6.
A sequência começa com:
1 10 3 6 9 4 7 2 5 8 11 14 ...
e termina com
... 2099 2284 2477 2096 2281 2474 2675 2884 3101 2880 2467 2084
Desafio
Escreva um programa ou função mais curto, recebendo um número inteiro no intervalo [1, 2016]
(ou [0, 2015]
se o índice 0 for usado) como entrada, imprima o número nesse índice na sequência do cavaleiro preso. Você pode optar por indexar a sequência com 0 ou 1, mas você deve especificar qual esquema de indexação você usa.
Casos de teste (indexados 1)
n | s(n)
-----+-----
1 | 1
2 | 10
3 | 3
6 | 4
11 | 11
21 | 23
51 | 95
101 | 65
201 | 235
501 | 761
1001 | 1069
2001 | 1925
2016 | 2084
Para todas as saídas possíveis, consulte esta página .
Critérios Vencedores
O código mais curto de cada idioma vence. Aplicam-se restrições nas brechas padrão.
12851850258
Respostas:
JavaScript (ES7),
182181 bytesExperimente online!
Como?
Uma versão ligeiramente modificada da minha resposta ao The Path Of The Wildebeest é definitivamente mais curta (e mais rápida) do que isso. Mas eu queria tentar uma abordagem diferente. Aliás, acho que pode ser mais fácil implementar esse método em alguns esolangs.
Algoritmo:
Nós reiniciaremos na etapa 2 ou retornaremos o último índice encontrado se estiver pronto.
Node.js , 155 bytes
Experimente online!
fonte
05AB1E , 53 bytes
3
2
θ
Experimente online ou verifique mais alguns casos de teste (o tempo limite para os maiores casos de teste).
Explicação:
Veja a explicação na minha resposta O caminho do gnu . As únicas partes modificadas são:
e um rastro:
EDIT: Uma porta da abordagem de @Arnauld em sua resposta JavaScript (ES7) é (atualmente):
05AB1E ,
5756 bytesExperimente online ou verifique mais alguns casos de teste (o tempo limite para os maiores casos de teste).
Explicação:
Σ·nàDtyÆ+yO·<.±*->}
fonte
MATL ,
4137 bytesA entrada é baseada em 0.
Experimente online!
fonte