Sie erhalten Ganzzahlen N
und M
, 1 <= N,M <= 10^6
und Indizes i
und j
. Ihre Aufgabe ist es, die Ganzzahl an der Position zu finden [i][j]
. Die Sequenz sieht folgendermaßen aus ( N=M=5, i=1, j=3
das Ergebnis ist 23
):
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Der kürzeste Code gewinnt. Viel Glück!
i=j=0
inj=0
Richtung beginnt und weitergeht .Antworten:
Mathematica,
6355 BytesDies definiert eine Funktion,
g
die wie aufgerufen werden kannIch benutze einen rekursiven Ansatz. Es werden bis zu 2 (N + M) Iterationen verwendet, je nachdem, wie weit unten in der Spirale das Ergebnis gefunden wird. Es verarbeitet alle Eingaben (bis zu
g[10^6,10^6,5^5-1,5^5]
, was die meisten Iterationen erfordert) innerhalb weniger Sekunden, aber für größere Eingaben müssen Sie das Standard-Iterationslimit wie erhöhenWenn
k
die Startnummer der Spirale ist, überprüfe ich im Grunde, ob derj
Index ist.0
In diesem Fall kann ich einfach zurückkehrenk + i
. Ansonsten werfe ich die oberste Reihe weg, drehe die Spirale um 90 Grad (gegen den Uhrzeigersinn), erhöhe siek
entsprechend und schaue stattdessen auf die verbleibende Spirale. Wir können mit der folgenden Zuordnung von Parametern zur nächsten Spirale übergehen:Dies setzt voraus, dass M die Breite und N die Höhe ist.
quelle
If[#5<1,#+#4,#0[#+#2,#3-1,#2,#5-1,#2-1-#4]]&[1,##]&
Pyth, 25 Bytes
Dies definiert eine Funktion
(
. Anwendungsbeispiel:druckt
23
.Dies ist algorithmisch identisch mit der Mathematica-Antwort von Martin Büttner, obwohl sie unabhängig entwickelt wurde. Soweit ich das beurteilen kann, ist dies der einzig gute Weg, dies zu tun.
Beachten Sie, dass Pyth auf meinem Computer nicht den gesamten Eingabebereich verarbeiten kann. Es wird den Stapel überlaufen und bei großen Eingaben mit einem Segfault sterben.
quelle
Haskell, 44
Dies verwendet den regulären rekursiven Ansatz
quelle