Considérez le processus suivant:
Prenez un entier non négatif N.
par exemple N =
571
Exprimez-le en binaire sans zéros au début. (Zéro est la seule exception, devenir
0
.)par exemple
571
=1000111011
en 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
,11
Trier les pistes du plus long au plus court.
par exemple
1
,000
,111
,0
,11
→000
,111
,11
,1
,0
Ecraser 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
,1
Concaténez le résultat pour obtenir un nouveau nombre binaire.
par exemple
111
,000
,11
,0
,1
→1110001101
=909
en 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 571
la 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
.BQ
place dejQ2
, ce qui signifie que vous pouvez perdre l’espace entre le8
et le précédent2
.