Betrachten Sie eine Sequenz, die auf Wiederholungsrelationen basiert f(n) = f(n-1)+f(n-2)
, beginnend mit f(1) = x1, f(2) = x2
. Denn x1 = 2, x2 = 1
die Sequenz beginnt so:
2 1 3 4 7 11 18 29 47 76 123 199 322 521 843
Wenn Sie dies in eine Zeichenfolge verketten, erhalten Sie Folgendes:
213471118294776123199322521843
Teilen Sie diese Liste nun in die kleinstmöglichen Zahlen auf y(n) > y(n-1)
. Beginnen Sie mit der ersten Nummer, dann mit der zweiten usw. Die erste Ausgangsnummer sollte immer eine einzelne Ziffer sein. Füllen Sie die letzte Zahl mit der erforderlichen Anzahl von Nullen auf.
2 13 47 111 829 4776 12319 93225 218430
Sie erhalten zwei Zahlen (x1, x2)
als Eingabe in einem beliebigen Format, und die Herausforderung besteht darin, die sortierte Liste auszugeben.
Regeln:
- Funktion und Programme sind OK
- Die Anfangssequenz muss genau 15 Ziffern haben (die letzte Ziffer ist
f(15)
). x1
undx2
sind nicht negativ (Null ist möglich).- Die Ausgabe kann in jedem beliebigen Format erfolgen
- Der Ausgabevektor
y
muss so erstellt werdeny2 > y1
.- Zunächst wird die kleinstmögliche
y1
, dann ist die kleinstmöglichey2
, danny3
und so weiter.
- Zunächst wird die kleinstmögliche
- Wenn
x1 = x2 = 0
dann 15 Nullen ausgeben (im selben Format wie andere Ausgaben, dh nicht000000000000000
).
Beispiele :
Input: 1 1
Output: 1 12 35 81 321 345 589 1442 3337 7610
Input: 3 2
Output: 3 25 71 219 315 0811 3121 23435 55898 145300
|
Optional leading zero
Input: 0 0
Output: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Der kürzeste Code in Bytes gewinnt. Bitte fügen Sie nach Möglichkeit einen Link zu einem Online-Dolmetscher bei.
quelle
5467
?54 67
?5 46 70
?Antworten:
Pyth, 56 Bytes
Testsuite
Erläuterung:
Zuerst prüfen wir, ob die Eingabe genau ist
0, 0
. Wenn ja, drucken Sie 15 Nullen.Ansonsten erstellen wir die Sequenz mit
jkhM.u,eNsN14Q
. Dies ähnelt dem Standard-Pyth-Algorithmus für die Fibonacci-Sequenz.Als nächstes reduzieren wir diesen String. Der Akkumulator ist eine Liste von Zeichenfolgen, die jede Zahl in der unterteilten Sequenz darstellen. Bei jedem Verkleinerungsschritt nehmen wir das nächste Zeichen und prüfen mithilfe der
y
mit definiertenLsgM.:sMb2
Hilfsfunktion , ob der Akku in Ordnung ist , was wahr ist, wenn die Eingabe nicht in Ordnung ist. Wenn es in Ordnung ist, hängen wir das nächste Zeichen als eigene Nummer an die Liste an. Wenn nicht, fügen wir das nächste Zeichen am Ende der letzten Zeichenfolge hinzu. Dies geschieht mitu?yGX_1GHaGH ... Y
.Als nächstes führen wir eine funktionale while-Schleife durch. Die Schleife wird fortgesetzt, bis die Laufliste in Ordnung ist, und die Hilfsfunktion erneut verwendet. Bei jedem Schritt wird ein
0
an das Ende der letzten Zeichenfolge in der Liste angefügt. Dies geschieht mit.WyHX_1Z`0
.Schließlich werden die Zeichenfolgen in Ganzzahlen konvertiert, mit
sM
und gedruckt.Pyth, 51 Bytes
Ich glaube, das funktioniert, aber es ist viel zu langsam zum Testen - es ist eine Brute-Force-Lösung zum Teilen der Saite.
Ich werde einige Verbesserungen an der
X
Funktion vornehmen, aber der obige Code funktioniert in der Version von Pyth, die zuletzt verwendet wurde, als die Frage gepostet wurde.quelle
JavaScript ES6, 127
135Prüfung
quelle
JavaScript ES6,
187180187184182179175172165160155154 ByteIch erhalte ähnliche Ergebnisse beim Ausführen
1,1
und3,2
Testen von Fällen.0,0
hat mehr als 26 Bytes benötigt ...De-Golf + konvertiert zu ES5 + Demo:
quelle
n <= 15
.f(n) = f(n-1)+f(n-2)
hat einen Maximalwert von genau 15. Die Anzahl der Ausgabewerte wird basierend auf dem Algorithmus bestimmt, sonst nichts.f(1)=x1
undf(2)=x2
kann als 15. höher sein , um die Anzahl von Ausgangswerten wird auf den Eingangswerten bestimmt. Denn3 2
es wird 10.JavaScript (ES6), 162 Byte
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
Mathematica, 192 Bytes
Testfälle:
Die Länge der Funktionsnamen bringt mich um.
quelle
Haskell,
165159152142141 BytesAnwendungsbeispiel:
3 % 2
->[3,25,71,219,315,811,3121,23435,55898,145300]
.Online-Demo (mit einem
main
Wrapper).Wie es funktioniert:
quelle
PowerShell,
167166 BytesEin Byte wurde gespeichert, indem die
$s
Variable entfernt und nur die Ausgangsschleife direkt gespeist wurde.Ungolfed und kommentiert:
quelle
Perl 6 , 107 Bytes
Verwendung:
Erläuterung
Erstellt eine Fibonacci-ähnliche Sequenz, beginnend mit den Argumenten (
@_
), in die slipped (|
) eingefügt wurdeNimmt die ersten 15 Elemente dieser Sequenz
kombiniert dies zu einer einzelnen Zeichenfolge (
.join
), teilt sie in eine Folge von einzelnen Zeichen (.comb
) auf und speichert sie im "Standard"$_
-Skalar ( ), nachdem die Folge in ein veränderbares Array umgewandelt wurde, indem sie zuerst in einem anonymen Array (@
) gespeichert wird.Er findet die Summe der Werte im Standardskalar. Wenn dies Null ist, wird der Standardskalar zurückgegeben, der ein Array mit 15 Nullen enthält
Wenn die Summe nicht Null ist, wird eine Liste erstellt, indem zuerst das erste Element im Standardskalar entfernt wird
Anschließend werden die restlichen Werte generiert und mit den vorherigen verglichen. (
$^b
)Wenn der Standard-Skalar keine Werte mehr enthält, verwenden Sie stattdessen 0 (
//0
).Anhalten, wenn im Standardskalar keine Elemente mehr vorhanden sind
quelle
until (my$a...
? Ist das(
kein spezielles Trennzeichen?until
, die nicht existiert.