Problem
Die unendliche Spirale beginnt in der Zelle oben links. Die ersten vier Zeilen und Spalten sind unten dargestellt. Setze das gleiche Muster in wachsenden quadratischen Schichten fort. Die Koordinaten beginnen bei 1.
1 2 9 10
4 3 8 11
5 6 7 12
16 15 14 13Gib den Wert einer einzelnen Zelle zurück, ohne das gesamte Gitter zu konstruieren.
Implementiere number_spiral(row, column).
Eingabe
row: Die von oben gezählte Zeile, beginnend bei 1.
column: Die von links gezählte Spalte, beginnend bei 1.
Ausgabe
Gib die Zahl an dieser Position zurück.
Einschränkungen
1 ≤ row, column ≤ 1.000.000.000. Der Wert passt in einen vorzeichenbehafteten 64-Bit-Integer.
Beispiele
Eingabe:
row = 3
column = 2
Erwartete Ausgabe:
expected = 6
Eingabe:
long long row = 3;
long long column = 2;
Erwartete Ausgabe:
long long expected = 6;
Eingabe:
long row = 3;
long column = 2;
Erwartete Ausgabe:
long expected = 6;
Erläuterung
In der dargestellten dritten Zeile ist der zweite Wert 6.
Eingabe:
row = 1
column = 4
Erwartete Ausgabe:
expected = 10
Eingabe:
long long row = 1;
long long column = 4;
Erwartete Ausgabe:
long long expected = 10;
Eingabe:
long row = 1;
long column = 4;
Erwartete Ausgabe:
long expected = 10;
Erläuterung
Die vierte quadratische Schicht beginnt in der obersten Zeile bei 10.
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Die Spirale besteht aus quadratischen Schichten, also gehört eine Zelle zu einer Schicht, die durch die größere Koordinate bestimmt wird.
Hinweis 2
Nutze die Parität dieser Schicht, um zu entscheiden, ob die Werte entlang einer Zeile oder Spalte steigen.
Hinweis 3
Achte darauf, ob die Schicht zuerst von der linken oberen Ecke oder von der gegenüberliegenden Ecke aus erreicht wird.
Erwartete Komplexität
Zeit O(1), zusätzlicher Speicher O(1)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.