Der Doktor, der versucht, den Dalek-Kräften zu entkommen, hat beschlossen, sie in eine Spirale zu schicken, indem er sich in einer Spiralbewegung in verschiedenen Raumtaschen bewegt.
Abhängig von der Art der verfügbaren Raumzeit muss der Arzt in die TARDIS eintreten, um die Höhe und Breite des Raumabschnitts und seinen Einstiegspunkt zu steuern, mit dem die Spirale beginnen soll.
Der Raumabschnitt kann als ein h x w- Gitter betrachtet werden, das mit aufeinanderfolgenden ganzen Zahlen von links nach rechts, von oben nach unten, beginnend mit 1, gefüllt ist.
Die Startposition wird als rc für die Zeile und Spalte angegeben ... Daraus muss die TARDIS-Software die geordnete Liste von Ganzzahlen ausspucken, die durch Aufwärtsspiralen gegen den Uhrzeigersinn von Zeile r Spalte c nach oben erhalten werden ... beginnend nach oben ...
Ihre Aufgabe als Begleiter des Arztes ist es, die TARDIS so zu programmieren, dass sie vier Zahlen im Format annimmt height width row column
und bestimmt, welchen Raumsektor die TARDIS zurücklegen muss, um der unten beschriebenen Spiralbewegung zu entsprechen ...
Eingabe 1
5 5 3 3
(5 x 5 Gitter, beginnend an Position 3,3)
Ausgabe 1
13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5
Ausgabe erklären
Originalraster
Generierte Spirale
Eingabe 2
2 4 1 2
(2 x 4 Gitter ab Position 1,2)
Ausgabe 2
2 1 5 6 7 3 8 4
Ausgabe erklären
Etwas anders, da die Spirale jetzt um das Gitter kreisen muss, um die entsprechende Ausgabe zu generieren ...
Originalraster
Generierte Spirale
Regeln:
Dies ist Code-Golf, daher wird die kürzeste Codelänge genehmigt.
Die obigen Beispiele müssen verwendet werden, um Ihren Code zu testen. Wenn es nicht die entsprechende Ausgabe liefert, stimmt etwas nicht ...
In Ihrer Antwort müssen sowohl Golf- als auch In-Golf-Versionen des Codes angegeben sein ...
Viel Glück!
Antworten:
JavaScript (ES6) 124
163 177Bearbeiten Völlig anders, kein Array zum Speichern der besuchten Zellen erforderlich. Unter Verwendung der Tatsache, dass die Seite der Spirale nach jeweils 2 Umdrehungen um 1 zunimmt.
quelle
Python 3, 191
Wahrscheinlich keine gute Punktzahl, aber hier geht es:
Wir bewegen uns entlang der Spirale, indem wir die Seitenlänge nach jeder zweiten Umdrehung erhöhen. Wenn sich unsere Position innerhalb des angegebenen Rasters befindet, drucken wir die entsprechende Nummer.
Variablen sind:
quelle