Heute ist es Ihr Ziel, die Ganzzahlen a und b zu finden, denen eine nicht negative Ganzzahl n gegeben ist, so dass:
Sie sollten ein Programm oder eine Funktion schreiben, die den Parameter n verwendet und a und b in einem Format Ihrer Wahl ausgibt .
Es gelten Standardlücken. Darüber hinaus ist es beabsichtigt, dass Sie das obige Problem mithilfe grundlegender Arithmetik selbst implementieren. Daher können Sie möglicherweise keine eingebauten Funktionen für die exakte Algebra, keine Rationalen oder Funktionen verwenden, die nicht triviale mathematische Konstrukte implementieren (z. B. die Lucas-Sequenz ).
Kürzester Code in Bytes gewinnt.
Beispiel Ein- / Ausgabe:
0 → 1, 0
1 → 3, 1
2 → 14, 6
3 → 72, 32
4 → 376, 168
5 → 1968, 880
6 → 10304, 4608
7 → 53952, 24128
8 → 282496, 126336
9 → 1479168, 661504
quelle
[3 5;1 3]**input('')*[1;0]
ist 26 Bytes, nicht 41.@(n)[3 5;1 3]^n*[1;0]
(Funktionshandle) würde dir fünf Zeichen sparen, mut nette Idee!Python 2, 50
Multipliziert mit
3+sqrt(5)
immer wieder durch seine Wirkung auf das Paar(a,b)
darstellta+b*sqrt(5)
. Entspricht dem Beginn mit dem Spaltenvektor[1,0]
und den Linksmultiplikationszeitenn
mit der Matrix[[3,5],[1,3]]
.quelle
Julia,
2220 BytesDies erzeugt eine Lambda-Funktion, die eine einzelne Ganzzahl als Eingabe verwendet und einen 2-Element-Vektor von Ganzzahlen entsprechend der Lösung [a, b] zurückgibt. Um es zu nennen, geben Sie ihm einen Namen, z
f=n->...
.Beginnen Sie mit der Multiplikation
Wir können dann die rechte Seite dieser Gleichung in eine zweispaltige Matrix übersetzen, wobei die erste dem Koeffizienten von a und die zweite dem Koeffizienten von b entspricht :
Multiplizieren Sie diese Matrix mit sich selbst n- mal, dann multiplizieren Sie rechts mit dem Spaltenvektor (1, 0) und POOF! Out öffnet den Lösungsvektor.
Beispiele:
quelle
J, 20 Bytes
Multiplizieren Sie den Vektor
[1 0]
mit den Matrixzeiten[[3 5] [1 3]]
n
.2 Bytes gespart dank @algorithmshark.
Verwendung und Test:
quelle
+/ .*(3 5,:1 3&)&1 0
.(+/@:*&(3 5,.1 3)&1 0)
funktioniert und(+/@:*&1 0&(3 5,.1 3))
nicht? Sollte die zweite nicht richtig sein und die erste tauschen?&
macht das Ein- / Ausschalten, so dass Sie den Eingang auf der linken Seite während des Einschaltens modifizieren (im Gegensatz zu der normalen Modifikation auf der rechten Seite).Pyth, 20 Bytes
u
die im allgemeinen reduziert ist, wird hier als Wiederholungsschleife verwendet. Die Aktualisierungsfunktion istG
->,+*3sGyeG+sGyeG
, wobeiG
es sich um ein 2-Tupel handelt. Diese Funktion übersetzt nach3*sum(G) + 2*G[1], sum(G) + 2*G[1]
.s
istsum
,y
ist*2
.quelle
APL (22)
Erläuterung:
{
...}⍣⎕⍨2↑1
: Lesen Sie eine Zahl und führen Sie die folgende Funktion so oft aus,[1,0]
wie Sie sie eingegeben haben.2 2⍴3 5 1
: die Matrix[[3,5],[1,3]]
⍵+.×⍨
: multipliziere die erste Zahl in ⍵ mit 3, die zweite mit 5 und addiere sie, dies ist die neue erste Zahl; dann multipliziere die erste Zahl in ⍵ mit 1, die zweite mit 3 und summiere diese, das ist die neue zweite Zahl.quelle
Jelly , 13 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Mathematica, 31
quelle
CJam, 21 Bytes
Probieren Sie es online aus.
Wie es funktioniert
quelle
Javascript,
6361 BytesIch verwende eine rekursive Auswertung des Binomials: (x + y) ^ n = (x + y) (x + y) ^ {n-1}
Neu (danke an @ edc65)
Alt
quelle
F=n=>{for(i=y=0,x=1;i++<n;)[x,y]=[3*x+5*y,x+3*y];return[x,y]}
n=>[...Array(n)].map(_=>[x,y]=[3*x+5*y,x+3*y],y=0,x=1)[n-1]
gleiche LängeC 114 Bytes
Dies implementiert die Matrixmultiplikation auf langweilige Weise. Für eine unterhaltsamere (Zitat: "awesomely horrific") 238-Byte-Lösung suchen Sie nicht weiter!
Entwirrt:
Dies könnte wahrscheinlich etwas verkürzt werden. Probieren Sie ein Testprogramm online aus !
quelle
k2 - 22 char
Funktion mit einem Argument.
_mul
Ist die Matrixmultiplikation so curry wir sie mit der Matrix(3 5;1 3)
und schlagen sie dann mit dem funktionalen Potenzadverb:f/[n;x]
giltf
fürx
,n
times. Wieder curry wir es, diesmal mit dem Startvektor1 0
.Dies funktioniert in Kona nicht, da es aus irgendeinem Grund
f/[n;x]
nicht korrekt implementiert ist. Da nur dien f/x
Syntax funktioniert, liegt der kürzeste Fix{x _mul[(3 5;1 3)]/1 0}
bei 23 Zeichen.quelle
isiert, 25 Bytes (20 Zeichen)
Ich habe mir etwas Besseres erhofft, aber es werden einfach zu viele Zahnspangen benötigt, um es kompetent zu machen. Die Rangfolge der Bediener ist für das Golfen nicht optimal.
Es wird erwartet, dass sich die Eingabe im $ 1-Speicherplatz befindet. Das funktioniert also:
Bei n = 0 wird die Null übersprungen (Ausgänge 1 anstelle von 1 0). Wenn das ein Problem ist, ersetzen Sie das Finale
1
durch~[2]
.quelle
Im Ernst, 32 Bytes, nicht konkurrierend
Hex Dump:
Probieren Sie es online
Offensichtlich kein Kandidat für kürzeste, aber zumindest die Methode ist originell. (Unter Hinweis darauf, dass ein solches Problem notwendigerweise auf eine Lucas-Sequenz hinweist, wie in der Beschreibung erwähnt, generiert dieses Programm aufeinanderfolgende Terme der Sequenzen unter Verwendung der Wiederholungsrelation
a_n = 6 * a_ {n-1} - 4 * a_ {n-2}.)
quelle
Haskell, 41 Bytes
Anwendungsbeispiel:
(iterate(\(a,b)->(3*a+5*b,a+3*b))(1,0)!!) 8
->(282496,126336)
.quelle
C / C ++ 89 Bytes
Formatiert:
Gleiches Konzept:
Der Prüfstand:
Die Ausgabe:
quelle
K, 37 Bytes
oder
Sie sind beide dasselbe.
quelle
Python 3, 49 Bytes
obwohl auf meinem Computer, gibt dies nur die richtige Antwort für Eingaben im Bereich
0 <= n <= 18
.Dies implementiert die geschlossene Formularformel
und nutzt die Tatsache, dass das
v ** n
Teil klein ist und eher durch Rundung als durch direkte Berechnung berechnet werden kann.quelle
Schema, 97 Bytes
quelle
C 71 Bytes (60 mit vorinitialisierten Variablen)
Noch Spielraum fürs Golfen, aber nur um zu beweisen, dass C nicht "furchtbar schrecklich" sein muss.
Wenn die Werte in a auf {1,0} initialisiert sind, ist das besser.
Dies geschieht iterativ unter Verwendung der Zuordnungen a-> 3a + 5b, b-> a + 3b, wobei jedoch eine temporäre Variable vermieden wird, indem stattdessen a aus dem neuen Wert von b berechnet wird.
quelle
a[*a=1]=0
stattdessen vor*a=1,a[1]=0
(nicht konkurrierend) Jelly, 10 Bytes
Probieren Sie es online!
Verwendet Matrix. Berechnet ([[3,1], [5,3]] ** input ()) [0].
quelle