Einführung
Inspiriert von dem jüngsten Video The Trapped Knight - Numberphile , habe ich mir eine Herausforderung ausgedacht .
Die gefangene Rittersequenz ist eine endliche ganzzahlige Sequenz der Länge 2016, beginnend mit 1, und hat die folgenden Konstruktionsregeln:
- Schreiben Sie eine Zahlenspirale folgendermaßen:
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 ...
- Setze einen Ritter auf 1.
- Bewegen Sie den Ritter gemäß den Schachregeln (dh 2 Einheiten vertikal und 1 Einheit horizontal oder umgekehrt) auf das Gitter mit der kleinsten Anzahl, die er zuvor noch nicht besucht hat.
- Wiederholen, bis der Ritter stecken bleibt.
Hier sind die ersten drei Schritte:
Schritt 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
Mögliche Züge sind 10, 12, 14, 16, 18, 20, 22, 24, wobei der kleinste 10 ist, der zweite Term also 10.
Schritt 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
Mögliche Züge sind 1 , 3, 23, 29, 47, 49, 51, 53, wobei der kleinste 3 ist, der dritte Term also 3.
Schritt 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
Mögliche Züge sind 6, 8, 10 , 16, 28, 30, 32, 34, von denen der kleinste 6 ist, der vierte Term also 6.
Die Sequenz spielt mit:
1 10 3 6 9 4 7 2 5 8 11 14 ...
und endet mit
... 2099 2284 2477 2096 2281 2474 2675 2884 3101 2880 2467 2084
Herausforderung
Schreiben Sie ein kürzestes Programm oder eine kürzeste Funktion, indem Sie eine Ganzzahl im Bereich [1, 2016]
(oder [0, 2015]
wenn 0-indiziert verwendet wird) als Eingabe erhalten und die Nummer an diesem Index in der Sequenz der gefangenen Ritter ausgeben. Sie können wählen, ob die Sequenz mit 0 oder 1 indiziert werden soll. Sie müssen jedoch angeben, welches Indizierungsschema Sie verwenden.
Testfälle (1-indiziert)
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
Alle möglichen Ausgaben finden Sie auf dieser Seite .
Gewinnkriterien
Der kürzeste Code jeder Sprache gewinnt. Es gelten Einschränkungen für Standardlücken.
12851850258
Antworten:
JavaScript (ES7),
182181 ByteProbieren Sie es online aus!
Wie?
Eine leicht modifizierte Version meiner Antwort auf den Pfad des Gnus ist definitiv kürzer (und schneller). Aber ich wollte einen anderen Ansatz ausprobieren. Ich denke übrigens, es könnte einfacher sein, diese Methode in einigen Esolangs zu implementieren .
Algorithmus:
Wir starten entweder in Schritt 2 neu oder geben den zuletzt gefundenen Index zurück, wenn wir fertig sind.
Node.js , 155 Bytes
Probieren Sie es online aus!
quelle
05AB1E , 53 Bytes
3
2
θ
Probieren Sie es online aus oder überprüfen Sie weitere Testfälle (Zeitüberschreitung für die größten Testfälle).
Erläuterung:
Siehe die Erklärung in meiner verlinkten Antwort Der Weg des Gnus . Die einzigen modifizierten Teile sind:
und ein nachlaufender:
EDIT: Ein Port von @Arnauld 's Ansatz in seiner JavaScript (ES7) Antwort ist (derzeit):
05AB1E ,
5756 BytesProbieren Sie es online aus oder überprüfen Sie weitere Testfälle (Zeitüberschreitung für die größten Testfälle).
Erläuterung:
Σ·nàDtyÆ+yO·<.±*->}
quelle
MATL ,
4137 BytesDie Eingabe basiert auf 0.
Probieren Sie es online aus!
quelle