Eine Zahlenspirale ist ein unendliches Gitter, dessen oberes linkes Quadrat die Nummer 1 hat. Hier sind die ersten fünf Schichten der Spirale:
Ihre Aufgabe ist es, die Nummer in Zeile y und Spalte x herauszufinden.
Beispiel:
Input: 2 3
Out : 8
Input: 1 1
Out : 1
Input: 4 2
Out : 15
Hinweis:
- Jede Programmiersprache ist erlaubt.
- Dies ist eine Code-Golf- Herausforderung, bei der der kürzeste Code gewinnt.
- Viel Glück!
Antworten:
C (gcc),
4443 BytesProbieren Sie es online!
Die Spirale hat mehrere "Arme":
z
Vielen Dank an Herrn Xcoder für das Speichern eines Bytes.
quelle
f(x,y,z){z=x>y?x:y;z=z*z-~(z%2?x-y:y-x)-z;}
Spart 1 Byte.f(1, 1)
den Wert zurück1
. Der Abschnitt Fußzeile durchläuft x = 1 bis 5 und y = 1 bis 5, ruft die Funktion für alle diese Werte auf und druckt die Ausgabe in einem Raster, um zu demonstrieren, dass die Funktion für alle in der Frage gezeigten Eingaben korrekt ist.Python,
545049 Bytes-4 Bytes dank @ChasBrown
-1 Bytes dank @Shaggy
Probieren Sie es online!
Zum ersten Mal Golf spielen! Mir ist mehr als bewusst, dass dies nicht optimal ist, aber was auch immer.
Läuft im Wesentlichen nach demselben Prinzip wie @Doorknob C-Code.
quelle
def f(a,b):
Ansatz 4 Bytes einsparen , siehe hier .M**2
ich ihn ersetzen kannM*M
.MATL , 15 Bytes
Probieren Sie es online!
Sammle und drucke als Matrix
Wie?
Edit: Gleiche Technik wie @ Doorknobs Antwort, nur anders angekommen.
Der Unterschied zwischen den diagonalen Elementen der Spirale ist die arithmetische Folge . Die Summe von n Termen davon ist n ( n - 1 ) (durch die übliche AP-Formel). Diese um 1 erhöhte Summe ergibt das Diagonalelement an der Position ( n , n ) .0 , 2 , 4 , 6 , 8 , … n n ( n - 1 ) ( n , n )
Alternative 21-Byte-Lösung:
Probieren Sie es online!
Sammeln und Drucken als Matrix
Aus dem oben Gesagten wissen wir, dass die gewünschte Funktion ist
Einige grundlegende Berechnungen zeigen, dass ein Ausdruck für maximal zwei Zahlen ist
Dies ist die Funktion, die die Lösung implementiert.
quelle
Japt , 16 Bytes
Adaptiert von Doorknobs Lösung über ein paar Biere.
Versuch es
Erläuterung
quelle
Pyth, 20 Bytes
Testsuite
Eine fast wörtliche Übersetzung von Rushabh Mehtas Antwort .
Erläuterung:quelle
Jelly , 13 Bytes
Probieren Sie es online!
Verwendet die Methode von Doorknob . Viel zu lang.
quelle
»Ḃ-*×_‘+»²_»ʋ
Jelly ,
13-12BytesProbieren Sie es online!
Berechnet den diagonalen Term mit
²_’Ṁ
und addiert / subtrahiert mit zum korrekten IndexwertṀḂḤ’×I
.quelle
Gehirn-Flak , 76 Bytes
Probieren Sie es online!
quelle
05AB1E ,
1211 Bytes-1 Byte dank @Emigna Wechsel
Èi
zuG
.Port of @sundars MATL-Antwort , also stelle sicher, dass du ihn positiv bewertest!
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Èi
könnte seinG
.Pascal (FPC) , 90 Bytes
Probieren Sie es online!
Port of Doorknobs Antwort , aber Sundars Antwort brachte mich auf die Idee, in
z mod 2*2-1
die ich mich verwandelte1and z*2-1
, um den Raum zu entfernen.quelle
Mathematica 34 Bytes
so:
(*
54
*)
quelle
Julia 1.0 , 35 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 46 Byte
quelle
Java (JDK 10) , 39 Byte
Probieren Sie es online!
Credits
quelle