Hintergrund
Die 1-2-3-Tribonacci-Sequenz
Stellen Sie sich für eine Sekunde vor, Sie könnten eine Fibonacci-Sequenz erstellen, indem Sie die Standard-Iterationsformel durch Folgendes ersetzen:
Anstatt die letzten beiden zu addieren, um die nächsten zu erhalten, summieren Sie die letzten drei. Dies ist die Basis für die 1-2-3-Tribonacci-Sequenz.
Browns Kriterium
Browns Kriterium besagt, dass Sie einen beliebigen ganzzahligen Wert als Summe der Mitglieder einer Sequenz darstellen können, vorausgesetzt, dass:
Für alle
n
größer als 1,
Was dies für die Herausforderung bedeutet
Sie können jede positive ganze Zahl als eine Summe von Mitgliedern der 1-2-3-Tribonacci-Sequenz beschreiben, die sich aus den folgenden Anfangsbedingungen zusammensetzt:
Dies ist bekannt, da für jeden Wert in dieser Sequenz das Verhältnis zwischen Termen niemals größer als 2 ist (das Verhältnis ergibt einen Durchschnitt von etwa 1,839).
Wie schreibe ich in diesem numerischen Darstellungssystem?
Angenommen, Sie verwenden eine Little-Endian-Darstellung. Richten Sie die Mitglieder der Sequenz wie folgt aus:
1 2 3 6 11 20 37 68
Dann nehmen Sie Ihre Zahl, um dargestellt zu werden (für unsere Tests sagen wir es ist 63
) und finden die Werte der gegebenen 1-2-3-Tribonacci, die sich zu 63 summieren (unter Verwendung der größten Werte zuerst!) . Wenn die Zahl Teil der Summe ist, setzen Sie eine 1 darunter, andernfalls eine 0.
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
Sie können dies für eine beliebige Ganzzahl tun - stellen Sie einfach sicher, dass Sie zuerst die größten Werte unter Ihrer angegebenen Eingabe verwenden!
Definition (endlich)
Schreiben Sie ein Programm oder eine Funktion, die bei einer positiven Ganzzahleingabe n
(in einer beliebigen Standardbasis) zwischen 1 und dem Maximalwert Ihrer Sprache Folgendes bewirkt:
- Konvertieren Sie den Wert in die definierte numerische Darstellung von 1-2-3-Tribonacci.
- Verwenden Sie diese binäre Darstellung und lesen Sie sie als wäre sie binär. Dies bedeutet, dass die Ziffern gleich bleiben, aber was sie bedeuten, ändert sich.
- Nehmen Sie diese Binärzahl und rechnen Sie sie in die Basis der ursprünglichen Zahl um.
- Diese neue Nummer ausgeben oder zurückgeben.
Solange die Ausgabe gültig ist, müssen Sie diese Schritte jedoch nicht ausführen. Wenn Sie auf magische Weise eine Formel finden, die kürzer (und mathematisch äquivalent) ist, können Sie sie gerne verwenden.
Beispiele
Sei die Funktion f
die durch die Definition beschriebene Funktion und []
repräsentiere die durchgeführten Schritte (als Little-Endian, obwohl es keine Rolle spielen sollte) (Sie müssen diesen Prozess nicht befolgen, dies ist nur der beschriebene Prozess):
>>> f(1)
[1]
[1]
[1]
1
>>> f(5)
[5]
[0, 1, 1]
[6]
6
>>> f(63)
[63]
[0, 0, 0, 1, 0, 1, 1]
[104]
104