Contexte
La séquence 1-2-3-Tribonacci
Imaginez une seconde que vous pourriez faire une séquence de fibonacci en remplaçant la formule d'itération standard par ce qui suit:
Fondamentalement, au lieu de additionner les deux derniers pour obtenir le suivant, vous additionnez les trois derniers. C'est la base de la séquence 1-2-3-Tribonacci.
Critère de Brown
Le critère de Brown indique que vous pouvez représenter n'importe quelle valeur entière comme une somme de membres d'une séquence à condition que:
Pour tout
n
supérieur à 1,
Ce que cela signifie pour le défi
Vous pouvez décrire tout entier positif comme une somme de membres de la séquence 1-2-3-Tribonacci formée par les conditions initiales suivantes:
Ceci est connu car, pour chaque valeur de cette séquence, le rapport entre les termes n'est jamais supérieur à 2 (le rapport s'établit en moyenne à environ 1,839).
Comment écrire dans ce système de représentation numérique
Disons que vous utilisez une représentation peu endienne. Alignez les membres de la séquence comme suit:
1 2 3 6 11 20 37 68
Ensuite, vous prenez votre nombre pour être représenté (pour nos tests, disons que c'est 63
) et trouvez les valeurs des 1-2-3-Tribonacci données qui totalisent 63 (en utilisant les plus grandes valeurs en premier!) . Si le nombre fait partie de la somme, mettez un 1 en dessous, 0 sinon.
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
Vous pouvez le faire pour n'importe quel entier donné - vérifiez simplement que vous utilisez d'abord les plus grandes valeurs sous votre entrée donnée!
Définition (enfin)
Écrivez un programme ou une fonction qui fera ce qui suit étant donné une entrée entière positive n
(écrite dans n'importe quelle base standard) entre 1 et la valeur maximale de votre langue:
- Convertissez la valeur dans la représentation numérique définie de 1-2-3-Tribonacci.
- Utilisez cette représentation de type binaire et lisez-la comme si elle était binaire. Cela signifie que les chiffres restent les mêmes, mais ce qu'ils signifient change.
- Prenez ce nombre binaire et convertissez-le en base du nombre d'origine.
- Sortez ou renvoyez ce nouveau numéro.
Cependant, tant que la sortie est valide, vous n'avez pas besoin de suivre ces étapes. Si vous trouvez comme par magie une formule plus courte (et mathématiquement équivalente), n'hésitez pas à l'utiliser.
Exemples
Soit la fonction f
être la fonction décrite par la définition, et []
représentons les étapes prises (en petit-boutien, même si cela ne devrait pas avoir d'importance) (vous n'avez pas besoin de suivre ce processus, c'est juste le processus décrit):
>>> 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