sfondo
La sequenza 1-2-3-Tribonacci
Immagina per un secondo che potresti creare una sequenza di fibonacci sostituendo la formula di iterazione standard con la seguente:
In sostanza, invece di sommare gli ultimi due per ottenere il successivo, si sommano gli ultimi tre. Questa è la base per la sequenza 1-2-3-Tribonacci.
Criterio di Brown
Il criterio di Brown afferma che è possibile rappresentare qualsiasi valore intero come somma dei membri di una sequenza a condizione che:
Per tutti
n
maggiori di 1,
Cosa significa questo per la sfida
Puoi descrivere qualsiasi numero intero positivo come una somma di membri della sequenza 1-2-3-Tribonacci formata dalle seguenti condizioni iniziali:
Questo è noto come, per ogni valore in questa sequenza, il rapporto tra i termini non è mai maggiore di 2 (il rapporto è in media a circa 1.839).
Come scrivere in questo sistema di rappresentazione numerica
Diciamo che usi una rappresentazione little-endian. Allinea i membri della sequenza in questo modo:
1 2 3 6 11 20 37 68
Quindi prendi il tuo numero per essere rappresentato (per i nostri test, diciamo che è 63
) e trovi i valori del dato 1-2-3-Tribonacci che sommano a 63 (usando prima i valori più grandi!) . Se il numero fa parte della somma, inserisci un 1 sotto di esso, 0 in caso contrario.
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
Puoi farlo per ogni dato intero - verifica solo di utilizzare prima i valori più grandi sotto il tuo dato input!
Definizione (finalmente)
Scrivi un programma o una funzione che eseguirà le seguenti operazioni con un input intero positivo n
(scritto in qualsiasi base standard) tra 1 e il valore massimo della tua lingua:
- Converti il valore nella rappresentazione numerica definita 1-2-3-Tribonacci.
- Usando questa rappresentazione di tipo binario, e leggila come se fosse binaria. Ciò significa che le cifre rimangono invariate, ma ciò che significano cambia.
- Prendi questo numero binario e convertilo nella base del numero originale.
- Emette o restituisce questo nuovo numero.
Tuttavia, finché l'output è valido, non è necessario seguire questi passaggi. Se trovi magicamente una formula più corta (e matematicamente equivalente), sentiti libero di usarla.
Esempi
Lascia che la funzione f
sia la funzione descritta dalla definizione e che []
rappresenti i passaggi eseguiti (come little-endian, anche se non dovrebbe importare) (non è necessario seguire questo processo, questo è solo il processo descritto):
>>> 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