Einleitung (kann ignoriert werden)
Es ist ein bisschen langweilig, alle positiven Zahlen in der regulären Reihenfolge (1, 2, 3, ...) anzuordnen, nicht wahr? Hier ist also eine Reihe von Herausforderungen im Zusammenhang mit Permutationen (Umformungen) aller positiven Zahlen. Dies ist die fünfte Herausforderung in dieser Reihe (Links zur ersten , zweiten , dritten und vierten Herausforderung).
Bei dieser Herausforderung treffen wir auf das Wythoff-Array, eine Lawine aus Fibonacci-Sequenzen und Beatty-Sequenzen!
Die Fibonacci-Zahlen sind für die meisten von Ihnen wahrscheinlich eine bekannte Folge. Bei zwei gegebenen Startnummern und sind die folgenden gegeben durch: für .
Die Beatty-Sequenz bei gegebenem Parameter lautet: für . Eine der Eigenschaften der Beatty-Sequenz ist, dass es für jeden Parameter genau einen Parameter , sodass die Beatty-Sequenzen für diese Parameter disjunkt und miteinander verbunden sind und alle natürlichen Zahlen außer umfassen 0 (zB: ).
Jetzt kommt der überwältigende Teil: Sie können ein Array erstellen, in dem jede Zeile eine Fibonacci-Sequenz und jede Spalte eine Beatty-Sequenz ist. Dieses Array ist das Wythoff-Array . Das Beste daran ist: Jede positive Zahl kommt in diesem Array genau einmal vor! Das Array sieht folgendermaßen aus:
1 2 3 5 8 13 21 34 55 89 144 ...
4 7 11 18 29 47 76 123 199 322 521 ...
6 10 16 26 42 68 110 178 288 466 754 ...
9 15 24 39 63 102 165 267 432 699 1131 ...
12 20 32 52 84 136 220 356 576 932 1508 ...
14 23 37 60 97 157 254 411 665 1076 1741 ...
17 28 45 73 118 191 309 500 809 1309 2118 ...
19 31 50 81 131 212 343 555 898 1453 2351 ...
22 36 58 94 152 246 398 644 1042 1686 2728 ...
25 41 66 107 173 280 453 733 1186 1919 3105 ...
27 44 71 115 186 301 487 788 1275 2063 3338 ...
...
Ein Element in Zeile und Spalte ist wie folgt definiert:
wobei der goldene Schnitt ist: .
Wenn wir den Antidiagonalen dieses Arrays folgen, erhalten wir A035513 , die Zielsequenz für diese Herausforderung (beachten Sie, dass diese Sequenz von Neil Sloane selbst zum OEIS hinzugefügt wurde !). Da dies eine „reine Sequenz“ Herausforderung ist, die Aufgabe zu Ausgang ist für eine gegebene als Eingabe, wobei ist A035513 .
Es gibt verschiedene Strategien, um zu , was diese Herausforderung (meiner Meinung nach) wirklich interessant macht.
Aufgabe
Bei einem gegebenen ganzzahligen Eingangs , Ausgabe im Ganzzahlformat, wobei ist A035513 .
Hinweis: Hier wird eine 1-basierte Indizierung angenommen. Sie können eine 0-basierte Indizierung verwenden, also usw. Bitte erwähnen Sie dies in Ihrer Antwort, wenn Sie dies verwenden möchten.
Testfälle
Input | Output
---------------
1 | 1
5 | 7
20 | 20
50 | 136
78 | 30
123 | 3194
1234 | 8212236486
3000 | 814
9999 | 108240
29890 | 637
Regeln
- Eingabe und Ausgabe sind Ganzzahlen
- in diesem Bereich bis zu 30 Ziffern umfasst ...
- Ungültige Eingaben (0, Gleitkommazahlen, Zeichenfolgen, negative Werte usw.) können zu unvorhergesehenen Ausgaben, Fehlern oder (un) definiertem Verhalten führen.
- Es gelten die Standard- E / A-Regeln .
- Standardlücken sind verboten.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes
999
nicht9999
Antworten:
Jelly ,
2724 BytesProbieren Sie es online!
Monadischer Link mit 1-basierter Indizierung. Vielen Dank an @JonathanAllan für eine bessere Möglichkeit, die Zeilen und Spalten zu erhalten
n
und 3 Bytes zu sparen. In seiner kürzesten Form ist es zu langsam für ein größeres n auf TIO, also versuchen Sie es online! Reduziert die Größe der anfänglichen Liste von Zeilen und Spalten auf Kosten von drei Bytes.Erläuterung
Beachten Sie, dass dies auf der Beschreibung des Python-Codes auf der OEIS-Seite basiert.
quelle
...×⁹r‘ÆḞ¤Sð/
Speichert einen in Ihrer Zusammenschlussversion ( TIO )R ,
143130124123 BytesProbieren Sie es online!
splits
das Array entlang Antidiagonalen.k
existiert lediglich, um zu verhindern, dass eindrop=F
Argumentm[-1:-2,]
für den Fall erzwungen wirdn=1
.Vielen Dank an Neil für den Hinweis auf ein 1-Byte-Golf.
R ,
150138132 BytesProbieren Sie es online!
Implementiert die FormelT( n , k ) = Fi b ( k + 1 ) ⋅ ⌊ n ⋅ & phiv; ⌋ + Fi b ( k ) ⋅ ( n - 1 ) um das Array zu generieren, dann
splits
entlang der Antidiagonalen und extrahiert dasnth
Element.Vielen Dank an Robin Ryder für den
T[2]=1
Trick zur Erzeugung der Fibonacci-Sequenz.Beide Lösungen sind sehr ineffizient und erstellen eine
nxn
Matrix von (höchstwahrscheinlich)double
s, da Rinteger
(32-Bit-Signed)double
bei Überlauf automatisch hochstufen soll, während die zweite Lösung wesentlich schneller sein sollte. Alsn
Bignum nehmen sollte automatisch funktionieren, mit dem Anrufgmp::as.bigz(n)
, sollte der Präzisionsverlust unterdouble
s besorgniserregend sein, und dann wäre die SpracheR + gmp
.quelle
(1+5^.5)/2
anstelle von verwenden(.5+5^.5/2)
?Wolfram-Sprache (Mathematica) , 90 Bytes
Probieren Sie es online!
quelle
Gelee , 30 Bytes
Probieren Sie es online!
Dies ist ein wenig langsam, aber mit dem Präfix
Ḥ½Ċ
(doppelt, Quadratwurzel, Decke) wie in dieser Testsuite wird eine enorme Verbesserung erzielt .quelle
740496902
ist das Ergebnis für999
Kohle , 54 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. 0-indiziert. Verwendet nur Ganzzahlarithmetik und funktioniert daher für beliebig große Werte. Erläuterung:
Eingabe
q
.Berechnen Sie die Antidiagonale, indem Sie immer größere Zahlen von subtrahieren
q
, was zur Zielzeilennummer führtm
.Berechnen Sie die ersten
m+1
Terme von A019446 , obwohl wir nur amm
th interessiert sind .Berechnen Sie die ersten
n+4
Terme der verallgemeinerten Fibonacci-Reihe, die mit beginnen[a(m), m]
. Die Ausdrücke dieser Sequenz sind diem
th-Ausdrücke von A019446 , A001477 , A000201 , A003622 , A035336 ; Die letzten beiden Spalten sind die ersten beiden Spalten des Wythoff-Arrays. Diese Sequenz wird daher mit der restlichenm
Zeile des Arrays fortgesetzt .Geben Sie den gewünschten Begriff aus.
quelle