Ihr Ziel ist es, eine Fibonacci-Spirale mit Zahlen zu erzeugen .
Beispiel Eingabe / Ausgabe
1 -> 1
2 -> 1 1
3 -> 1 1
2 2
2 2
6 -> 8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 5 5 5 5 5
8 8 8 8 8 8 8 8 1 1 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
8 8 8 8 8 8 8 8 2 2 3 3 3
Eingabe Die Eingabe kann über STDIN oder ein Funktionsargument erfolgen. Es wird eine einzelne Nummer sein
Ausgabe Die Ausgabe kann von STDOUT oder dem Rückgabewert einer Funktion stammen. Es sollte eine einzelne Zeichenfolge sein.
Zusätzliches Leerzeichen am Ende der Zeile ist nicht zulässig. Die Ausgabe kann Ziffern, Zeilenumbrüche (Newlines) und Leerzeichen enthalten.
Orientierung spielt keine Rolle, das bedeutet Rotationen und Reflexionen. Solange es einem gültigen Fibonacci-Spiralmuster folgt.
Zahlen mit unterschiedlich vielen Ziffern (z. B. 1 und 13) sollten rechtsbündig sein. Möglicherweise muss am Anfang einer Zeile ein Leerzeichen eingefügt werden, damit alles in einer Reihe steht.
1 1 1 1
100 100 should actually be 100 100
Sie können hier ein Beispiel sehen
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes!
Numbers with different amounts of digits (e.g. 1 and 13) should be aligned to the left side of the digit a space may need to be added to the very beginning of a line so everything can line up.
Das klingt so, als ob es klarer als zwei Sätze wäre.Antworten:
APL, 23
Erläuterung:
Probieren Sie es auf tryapl.org
quelle
⌸
oder⍤
) in diesem Zeichensatz fehlen und nicht verwendet werden können, wenn Sie diese Regel aufrufen möchten.Matlab, 84 Bytes
Eine Funktion wird verwendet. Die Ausgabe erfolgt in Standardausgabe.
Beispiele:
Matlab, 78 Bytes
Dasselbe wie oben, außer dass die Funktion eines Matlab ausgenutzt wird, nämlich, dass die Funktionsausgabe (als Zeichenfolge) automatisch in stdout angezeigt wird. Dies vermeidet die Umwandlung in einen String bei dem obigen Ansatz.
quelle
Python 2, 121 Bytes
Die lockeren Regeln für Rotationen machen dies viel einfacher.
Ich habe keine Backticks anstelle von
str(a)
hier verwendet, weil ich nicht sicher bin, ob wir mehr führende Leerzeichen als nötig haben, wenn wir jemals Longs erreichen. Obwohl, selbst wenn wir esa
wären, wäre die Nutzung selbst sowieso kürzer.quelle
Ruby,
243242236233222170130 Bytesquelle
t==value
Bedingungen in konvertierent>value
. Zum Beispiel(t=x%4)>2?s.times{r<<[s]*s}:t>1?s.times{r.map!{|w|w.unshift s}}:t>0?s.times{r.unshift [s]*s}:r.map!{|w|w+=[s]*s}}
Python -
189179174quelle
J, 36 Bytes
Verwendung:
Methode:
Die Funktion dreht das aktuelle Quadrat und fügt das neue Quadrat einmal zum aktuellen hinzu
input-1
. Quadratgröße und Elementwerte werden aus der Größe des vorherigen Rechtecks ermittelt.Code Erklärung:
Probieren Sie es hier online aus.
quelle
Haskell,
183176171163 BytesDie Funktion ist
f
, die eine Zahl annimmt und eine einzelne Zeichenkette zurückgibt:quelle
Pyth, 34 Bytes
Überraschenderweise wird mehr als die Hälfte des Codes gedruckt / aufgefüllt, anstatt die Matrix zu generieren.
Die Erzeugung der Matrix ist wirklich einfach, sie besteht jedoch aus einer Transponierung und Umkehrung sowie dem Hinzufügen von N Zeilen, die N Kopien von N enthalten, wobei N die aktuelle Anzahl von Zeilen ist.
Beispielausgabe für 7:
quelle
Perl,
289 277257 Bytesquelle
K, 48 Bytes
Und in Aktion:
Kann noch einige gute Möglichkeiten zum Golfen sein.
Das Programm besteht im Wesentlichen aus zwei Teilen: der Generierung der verketteten Matrix und der Formatierung für die Ausgabe. Ersteres ist ziemlich einfach:
Erstellen Sie ausgehend von einer 1x1-Matrix mit 1 einen T-Längenvektor von T, wobei T die Länge der Startmatrix in der ersten Dimension (
t#t:#x
) ist, und hängen Sie diese an jede Zeile der Originalmatrix (x,\:
) an. Wenn Sie das Ergebnis umkehren und transponieren (+|
), wird es um 90 Grad gedreht. Wir machen das N-1 mal.Die Formatierung ist ziemlich umständlich, da K beim Drucken einer Matrix die Anzahl der Spalten nicht so ausrichtet, wie wir es benötigen:
Die Grundidee ist, das maximale Element der Matrix (
|//x
) zu nehmen, es in einen String (unär$
) umzuwandeln , seine Länge plus eins (1+#
) zu nehmen und dann die Elemente der Matrix zu rechts ausgerichteten Strings dieser Größe zu formatieren. Verbinden Sie dann zum Aufräumen diese Zeichenfolgen (,/'
) und löschen Sie das resultierende führende Leerzeichen (1_'
).quelle
CJam, 48 Bytes
Probieren Sie es online aus
Der Kern der Erstellung des Musters scheint ziemlich einfach zu sein. Drehen Sie das bisher erstellte Rechteck und fügen Sie unten ein Quadrat mit Werten hinzu.
Der Code zum Auffüllen des Ergebnisses sieht jedoch schrecklich aus. Ich habe eine Reihe von Kombinationen von
f
und:
Operatoren ausprobiert , um die Auffüllung auf die verschachtelte Liste anzuwenden, aber nichts hat funktioniert. Wenn jemand bessere Vorschläge hat, sind sie herzlich willkommen.quelle
Wf%
. Würdest du auch etwas tun können{Se[}ff%
anstatt:U;{USe[}f%
für die Polsterung? (Das könnte nicht so funktionieren wie es ist, ich kann esPyth, 29 Bytes
Demonstration.
Wenn das Auffüllen wie in APL frei / implizit war oder die Matrixausgabe zulässig war, wären dies 14 Byte:
quelle
Ruby, 129 Bytes
Ich habe die andere Ruby-Antwort ein paar Mal bearbeitet, aber meine letzte Änderung wird nicht akzeptiert oder so, also hier ist es:
quelle
ES6, 248 Bytes
Wobei
\n
ein buchstäbliches Newline-Zeichen darstellt.Ärgerlicherweise nimmt die Formatierung einen großen Teil des Codes ein.
f
ist eine Hilfsfunktion, die ein gefülltes Array erstellt. Es wird hauptsächlich zum Erstellen der ausgefüllten Quadrate verwendet, verdoppelt sich aber auch leicht, um die Basisfälle für die Rekursion zu erstellen.g
ist das Hauptproblem. Es generiert rekursiv die vorletzte Lösung, dreht sie um 180 Grad und hängt dann die nächsten beiden Quadrate an.quelle