Beschreibung des Geflechts
Wenn eine Litze in diesem Geflecht die Oberseite einer anderen Litze überquert, addiert sie den Wert der anderen Litze zu sich selbst, und alle anderen Litzenwerte werden durchlaufen. Das Geflecht besteht aus drei Litzen und jede Litze beginnt bei 1. Die erste Überkreuzung ist die am weitesten links liegende Litze, die die mittlere Litze überkreuzt. Die nächste Überkreuzung ist der am weitesten rechts liegende Strang, der den neuen Mittelstrang überkreuzt (zuvor der am weitesten links liegende Strang). Diese beiden Schritte der Überkreuzung wiederholen sich. Mit anderen Worten ist die erste Überkreuzung [a, b, c] -> [b, a+b, c]
und die zweite ist [a, b, c] -> [a, b+c, b]
. Nach diesen Regeln sind hier die ersten sechs Ebenen des Geflechts:
1,1,1
1,2,1
1,3,2
3,4,2
3,6,4
6,9,4
Deine Aufgabe
Schreiben Sie ein Golf-Programm oder eine Golf-Funktion, die eine Ganzzahl als Flechtstufe akzeptiert und die drei Werte für diese Flechtstufe ausgibt. Sie müssen angeben, ob Ihre Level auf Null oder Eins basieren. Die Ein- und Ausgabe kann in jedem vernünftigen Format erfolgen, und nachfolgende Leerzeichen sind zulässig.
Testfälle (1-basiert)
1 -> 1,1,1
2 -> 1,2,1
5 -> 3,6,4
10 -> 28,41,19
Antworten:
MATL ,
181716 BytesDie Eingabe ist 0-basiert.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Wenn ein Zeilenvektor gegeben ist
[a b c]
, wird der nächste Vektor erhalten, indem er mit einer der beiden multipliziert wirdoder
abhängig davon, ob der Iterationsindex ungerade oder gerade ist. Zum Beispiel kann das Matrixprodukt
[1 3 2]*[0 1 0; 1 1 0; 0 0 1]
gibt[3 4 2]
. Dann[3,4,2]*[1 0 0; 0 1 1; 0 1 0]
gibt[3 6 4]
und so weiter.Beachten Sie auch, dass die zweite Matrix der ersten um 180 Grad gedrehten Matrix entspricht, wodurch einige Bytes eingespart werden können.
quelle
[[0, 1, 0], [1, 1, 1], [1, 1, 0]]
und die verschiedenen Startpositionen sind für gerade und ungerade ziemlich ähnlichn
Haskell, 51 Bytes
Dies verwendet eine 0-basierte Indizierung. Anwendungsbeispiel:
(f(1,1,1)!!) 10
->(28,60,41)
.f
erstellt die unendliche Liste der dreifachen Geflechte und(f(1,1,1)!!)
wählt die n-te aus.f
selbst ist eine einfache Rekursion, die eine Liste ihrer Argumente erstellt, gefolgt von der linken Überkreuzung und einem rekursiven Aufruf mit linker und rechter Überkreuzung.quelle
Ruby,
6057 BytesDie Levels sind 1-basiert.
Basierend auf der folgenden Formel:
Vielen Dank an Neil für 3 Bytes mit einigen raffinierten bitweisen Spielereien.
quelle
[f[n-2|1],f[n],f[n-1&-2]]
.Python 2 , 57 Bytes
Probieren Sie es online!
quelle
Jelly , 14 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
TI-Basic, 58 Bytes
One-based.
quelle
Prompt
ist ein 2-Byte-Befehl.Prompt
ist nur ein Byte. Aber danke für die Erklärung desPowerShell 2+, 75 Byte
1-basierter Index
Probieren Sie es online! oder Probieren Sie alle Testfälle aus!
Die Schleife läuft immer einmal ab, für den Fall der Flechtstufe
1
beginne ich also einfach mit einem Array von1,1,0
so dem Ergebnis des Algorithmus mit make it1,1,1
.$a[1]
Ist immer die Mitte, dann bestimme ich einfach, ob der andere Elementindex ($d
) gerade oder ungerade sein soll0
oder2
ob der aktuelle Wert gerade oder ungerade ist. PowerShell unterstützt mehrere Zuweisungen gleichzeitig, so dass das Austauschen so einfach$x,$y=$y,$x
wird, wie ich es im Grunde mit den Array-Elementen tue. Der Zusatz wird einfach in diese Zuweisung eingebettet.quelle
Javascript (ES6), 55 Byte
repl.it
1-basiert
Dies ist nur eine Portierung von @ Doorknobs Ruby-Antwort mit @ Neils fantastischem bitweisen Golf.
quelle
Befunge, 64 Bytes
Probieren Sie es online!
Erläuterung
quelle
05AB1E , 17 Bytes
Probieren Sie es online!
quelle
Java 8, 121
Dies verwendet einseitige Ebenen:
Ungolfed, mit Testprogramm:
Ausgabe:
quelle
GameMaker-Sprache, 113 Byte
Einindexiert, basierend auf der rekursiven Lösung von Doorknob. Bitte frage nicht, warum du ein primitives Array nicht auf einmal in GameMaker initialisieren kannst, ich weiß es wirklich nicht ...
Hauptprogramm (69 Bytes):
Unterprogramm
a
(46 Bytes):quelle
Perl 6 , 60 Bytes
Nullbasiert.
Generierte direkt die Lazy Infinite-Sequenz und indizierte sie anschließend.
Es gibt wahrscheinlich bessere Ansätze.
quelle
Clojure, 98 Bytes
Verfolgt den aktuellen Wert
v
und von welchen Positionen aus die Summierung für die nächste Runde erfolgen soll. Startet einen Zustand vor dem,[1 1 1]
um eine 1-basierte Indizierung zu erhalten.quelle
C #
8886 BytesErläuterung
quelle
Mathematica, 68 Bytes
Einfache rekursive Definition einer unbenannten Funktion, die ein positives Ganzzahlargument verwendet und eine geordnete Liste mit drei Ganzzahlen zurückgibt.
quelle