introduction
Inspiré par la vidéo très récente The Trapped Knight - Numberphile , j'ai trouvé un défi.
La séquence de chevalier piégé est une séquence entière finie de longueur 2016, à partir de 1, et a les règles de construction suivantes:
- Écrivez une spirale numérique de la manière suivante:
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 ...
- Placez un chevalier sur 1.
- Déplacez le chevalier sur la grille avec le plus petit nombre possible qui n'a pas été visité auparavant, selon les règles des échecs (c'est-à-dire 2 unités verticalement et 1 unité horizontalement, ou vice versa).
- Répétez jusqu'à ce que le chevalier se coince.
Voici les trois premières étapes:
Étape 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
Les mouvements possibles sont 10, 12, 14, 16, 18, 20, 22, 24, dont le plus petit est 10, donc le deuxième terme est 10.
Étape 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
Les mouvements possibles sont 1 , 3, 23, 29, 47, 49, 51, 53, dont le plus petit est 3, donc le troisième terme est 3.
Étape 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
Les mouvements possibles sont 6, 8, 10 , 16, 28, 30, 32, 34, parmi lesquels le plus petit est 6, donc le quatrième terme est 6.
La séquence commence par:
1 10 3 6 9 4 7 2 5 8 11 14 ...
et se termine par
... 2099 2284 2477 2096 2281 2474 2675 2884 3101 2880 2467 2084
Défi
Écrivez un programme ou une fonction plus courte, en recevant un entier dans la plage [1, 2016]
(ou [0, 2015]
si l'index 0 est utilisé) en entrée, sortez le nombre à cet index dans la séquence de chevalier piégé. Vous pouvez choisir d'indexer la séquence avec 0 ou 1, mais vous devez spécifier le schéma d'indexation que vous utilisez.
Cas de test (1 indexé)
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
Pour toutes les sorties possibles, veuillez vous référer à cette page .
Critères gagnants
Le code le plus court de chaque langue gagne. Des restrictions sur les échappatoires standard s'appliquent.
12851850258
Réponses:
JavaScript (ES7),
182181 octetsEssayez-le en ligne!
Comment?
Une version légèrement modifiée de ma réponse à The Path Of The Wildebeest est définitivement plus courte (et plus rapide) que cela. Mais je voulais essayer une approche différente. Soit dit en passant, je pense qu'il pourrait être plus facile de mettre en œuvre cette méthode dans certainsSoit dit passant esolangs.
Algorithme:
Nous redémarrons à l'étape 2 ou renvoyons le dernier index trouvé si nous avons terminé.
Node.js , 155 octets
Essayez-le en ligne!
la source
05AB1E , 53 octets
3
2
θ
Essayez-le en ligne ou vérifiez d'autres cas de test (expire pour les plus grands cas de test).
Explication:
Voir l'explication dans ma réponse liée Le chemin des gnous . Les seules pièces modifiées sont:
et un suivi:
EDIT: Un portage de l'approche @Arnauld dans sa réponse JavaScript (ES7) est (actuellement):
05AB1E ,
5756 octetsEssayez-le en ligne ou vérifiez d'autres cas de test (expire pour les plus grands cas de test).
Explication:
Σ·nàDtyÆ+yO·<.±*->}
la source
MATL ,
4137 octetsL'entrée est basée sur 0.
Essayez-le en ligne!
la source