Die Zahlen sollten mit führenden Nullen in einem Feld mit der Länge = (Anzahl der Ziffern von N ^ 2) gedruckt werden.
Eingabe (N):
4
Ausgabe:
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
Ich interessiere mich für den Algorithmus und die Sauberkeit der Implementierung. Der Leerraum zählt also nicht und die Obergrenze für N ist 42.
atomic-code-golf
Hristo Hristov
quelle
quelle
L = floor(log10(N^2)) + 1
Ist das richtig?N
?Antworten:
Python
Andere Tests
quelle
In Ruby:
Prüfung:
Eine andere Lösung mit Berechnungen von hier :
Prüfung:
quelle
In Python3:
Beispielausgabe für 7:
edit: Eine rekursive Lösung - 263 Bytes
quelle
Java-Lösung
Beispielausgang für Eingang 10
quelle
Perl, 178 Zeichen
Verwendet Math :: Complex und behält die aktuelle Richtung in einer komplexen Variablen (1 / i / -1 / .i) bei. Laufen mit:
Setzen Sie
N
in$l
.quelle
C
quelle
Python 2.7:
quelle
PHP, 272 Zeichen inklusive Kommentar
Funktionsbasierte, rekursive Version - interessanter für mich, da sie die Absicht besser ausdrückt. Es funktioniert auch für unterschiedliche Breite und Höhe.
Ausgabe:
quelle
C #, 380-ish Golf
Ich habe mir nicht die Mühe gemacht, die Golfversion einzufügen, da ich ziemlich sicher war, dass dies keine Rekorde brechen würde. Aber ich wollte es versuchen, etwas anders darüber nachzudenken. Ich schreibe nicht jede Zeile oder Position auf, während ich dorthin komme, sondern bewege den Cursor in die Position, schreibe die Nummer der Startmitte auf und wende mich von dort weg (was ein interessantes Muster der zu bewegenden Positionen pro Richtungswechsel veranschaulicht ).
Es wird ziemlich viel Zeichenplatz verschwendet, damit der Konsolenpuffer die größeren Werte akzeptiert und die Position für die obere linke Ecke berechnet wird (was sicher verbessert werden kann).
Auf jeden Fall war es eine interessante Übung.
quelle
Rubin
Dies ist keine besonders gute Golflösung, könnte aber von algorithmischem Interesse sein.
Ich war schon immer von einem ähnlichen Problem fasziniert , nämlich dem Finden des Spiralwegs im Uhrzeigersinn durch eine NxM-Matrix. Eine wirklich intuitive Möglichkeit, dieses Problem zu lösen, besteht darin, die Matrix weiter gegen den Uhrzeigersinn zu drehen und sie wie eine Orange zu schälen. Ich benutze eine ähnliche - wenn auch nicht so elegante - Methode, um das Gegenteil zu tun:
quelle
Schläger
Ich wollte es nur mit einer Lösung versuchen, die nahezu 0 Speicher verwendet. Kein Array, kein nichts. Der Wert kann jederzeit für jede Position generiert werden. Wir könnten eine Spirale jeder Größe fragen (ob das, was den Ausgabestream empfängt, damit umgehen kann). In der Hoffnung, dass jemand jemals gigantische Spiralen braucht.
Hier ist der Code
Testen mit diesem
Ergebnisse in der Ausgabe
Sehr rechenintensiv im Vergleich zu vorberechneten Matrizen, wenn Sie die ganze Spirale benötigen, aber nützlich sein könnten. Wer weiß! Z.B:
Ich habe es nicht golfen ... Es ist trotz des Aussehens ziemlich klein. Ich habe lange Namen und Kommentare verwendet.
quelle
Python 2 , 800 Bytes
Probieren Sie es online!
Vor ein paar Jahren wurde einem Freund diese Frage in einem Interview gestellt. Sie erzählten mir davon beim Thanksgiving-Abendessen unserer Familie, also stelle ich mir das als "Thanksgiving-Problem" vor.
quelle
PHP,
172171 + 1 Bytes, 24 OperationenErstellt ein Array, das die Indizes spiralförmig durchläuft. druckt dann das Ergebnis aus.
Laufen Sie als Pipe mit
-nR
oder versuchen Sie es online .Fügen Sie eine Zuweisung hinzu, um fünf Bytes zu sparen: Ersetzen Sie die letzte Schleife durch
quelle
Beispielcode: Dies funktioniert für 4x5, schlägt jedoch 3x5 fehl
while (k <m && l <n) {/ * Drucke die erste Zeile aus den verbleibenden Zeilen * / für (i = l; i <n; ++ i) {printf ("% d", a [k] [ ich]); } k ++;
quelle