Considérez le processus suivant:
Prenez un entier non négatif N.
par exemple N =
571Exprimez-le en binaire sans zéros au début. (Zéro est la seule exception, devenir
0.)par exemple
571=1000111011en binaireSéparez les exécutions consécutives de uns et de zéros dans cette représentation binaire.
par exemple ,
1000111011→1,000,111,0,11Trier les pistes du plus long au plus court.
par exemple
1,000,111,0,11→000,111,11,1,0Ecraser tous les chiffres dans chaque course avec alternance
1« s et0» s, en commençant toujours avec1« s.par exemple
000,111,11,1,0→111,000,11,0,1Concaténez le résultat pour obtenir un nouveau nombre binaire.
par exemple
111,000,11,0,1→1110001101=909en décimal
Lorsque vous tracez les valeurs produites par ce processus, vous obtenez un graphique très soigné:
Et j'espère comprendre pourquoi j'appelle la séquence résultante la séquence Temple Skyline :
Défi
Ecrivez un programme ou une fonction qui prend un entier non négatif N et imprime ou renvoie le numéro de séquence Temple Skyline correspondant. Votre entrée et votre sortie doivent être toutes les deux en décimales.
Par exemple, si l'entrée est 571la sortie doit être 909.
Le code le plus court en octets gagne.
Pour référence, voici les termes de la séquence de N = 0 à 20:
0 1
1 1
2 2
3 3
4 6
5 5
6 6
7 7
8 14
9 13
10 10
11 13
12 12
13 13
14 14
15 15
16 30
17 29
18 26
19 25
20 26


.BQplace dejQ2, ce qui signifie que vous pouvez perdre l’espace entre le8et le précédent2.