Wir können die natürlichen Zahlen in einer rechteckigen Spirale aufrollen:
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
Aber jetzt, wo wir sie auf einem rechteckigen Gitter haben, können wir die Spirale in einer anderen Reihenfolge abwickeln, z. B. im Uhrzeigersinn, beginnend in Richtung Norden:
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
Die resultierende Sequenz ist eindeutig eine Permutation der natürlichen Zahlen:
1, 4, 3, 2, 9, 8, 7, 6, 5, 16, 15, 14, 13, 12, 11, 10, 25, 24, 23, 22, 21, 20, 19, 18, 17, ...
Ihre Aufgabe ist es, diese Sequenz zu berechnen. ( OEIS A020703 , aber Spoiler-Warnung: Es enthält eine weitere interessante Definition und mehrere Formeln, die Sie vielleicht selbst herausfinden möchten.)
Tolle Tatsache: Alle 8 möglichen Abwicklungsaufträge haben einen eigenen OEIS-Eintrag.
Die Herausforderung
Bei einer positiven Ganzzahl n
geben Sie das n
th-Element der obigen Sequenz zurück.
Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.
Es gelten die Standardregeln für Code-Golf .
Testfälle
1 1
2 4
3 3
4 2
5 9
6 8
7 7
8 6
9 5
100 82
111 111
633 669
1000 986
5000 4942
9802 10000
10000 9802
Eine vollständige Liste bis einschließlich finden n = 11131
Sie in der B-Datei zu OEIS .
quelle
jelly.py
und herauszufinden, welche Ketten unterstützt werden.Japt,
20 -19 -16 BytesOnline testen!
Basierend auf der Beobachtung, dass
Oder vielmehr das
Ich weiß nicht, ob sich diese Erklärung auf der OEIS-Seite befindet, da ich sie noch nicht angeschaut habe.
quelle
Julia, 28 Bytes
Dies ist eine Lambda-Funktion, die eine Ganzzahl akzeptiert und eine Ganzzahl zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Wir definieren m als die größte ganze Zahl, so dass m 2 ≤ n –1 ist, dh die ganze Quadratwurzel von n –1 (
isqrt
). Wir können dann den OEIS-Ausdruck 2 ( m + 1) m - n + 2 auf einfach 2 ( m 2 + m + 1) - n vereinfachen .Probieren Sie es online aus
quelle
CJam, 14 Bytes
Mit Alex 'Ansatz:
2*(m^2+m+1)-n
wom = isqrt(n-1)
.quelle
ES7,
312826 BytesIch hatte Alex 'Formel unabhängig entdeckt, kann sie aber nicht beweisen, weil ich zu diesem Zeitpunkt nicht in der Nähe eines Computers war.
Bearbeiten: 3 Bytes zum Teil dank @ETHproductions gespeichert. Weitere 2 Bytes gespeichert.
quelle
n=>((m=--n**.5|0)+m*m)*2-n+1
würde funktionieren, denke ich.--n
da rein kriege ...Pyth, 21 Bytes
Probieren Sie es online!
Es ist nichts Besonderes los. Gleiche Methode wie in der JAPT-Antwort.
quelle
MATL ,
1613 BytesBasierend auf Lynns CJam-Antwort .
Probieren Sie es online! (
Y[
wurde ersetzt durchk
nach Änderungen in der Sprache)Dies verwendet einen anderen Ansatz als andere Antworten ( 16 Bytes ):
Die beiden Spiralmatrizen werden explizit generiert (tatsächlich vertikal gespiegelte Versionen davon, dies hat jedoch keine Auswirkungen auf die Ausgabe). Der erste ist
und der zweite verfolgt den modifizierten Pfad:
Um die
n
-te Nummer der Sequenz zu finden, genügt es,n
in der zweiten Matrix zu suchen und die entsprechende Nummer in der ersten auszuwählen. Die Matrizen müssen groß genug sein, damit sien
angezeigt werden, und sollten eine ungerade Größe haben, damit der Ursprung (die Zahl1
) in beiden Fällen an derselben Position liegt.Probieren Sie es auch online aus ! (
6Y3
wurde aufgrund von Sprachänderungen verschoben)quelle
Brachylog , 20 Bytes
Dies verwendet die gleiche Technik wie so ziemlich alle anderen Antworten.
Erläuterung
Eine halbwegs interessante Tatsache zu dieser Antwort ist, dass die Verwendung einfacher und kürzer ist
=
als Klammern.quelle