Рассмотрим следующий процесс:
Возьмите некоторое неотрицательное целое число N.
например, N =
571
Выразите это в двоичном виде без начальных нулей. (Сам ноль является единственным исключением, став
0
.)например
571
=1000111011
в двоичномРазбейте последовательные серии единиц и нулей в этом двоичном представлении.
например ,
1000111011
→1
,000
,111
,0
,11
Сортировать пробеги от самого длинного к самому короткому.
например
1
,000
,111
,0
,11
→000
,111
,11
,1
,0
Перезаписывайте все цифры в каждом прогоне чередующимися буквами
1
's0
' и 's', всегда начиная с1
's'.например
000
,111
,11
,1
,0
→111
,000
,11
,0
,1
Объедините результат, чтобы получить новое двоичное число.
например
111
,000
,11
,0
,1
→1110001101
=909
в десятичной системе
Когда вы выводите значения, полученные этим процессом, вы получаете довольно аккуратный график:
И, надеюсь, понятно, почему я называю полученную последовательность последовательностью Temple Skyline :
Вызов
Напишите программу или функцию, которая принимает неотрицательное целое число N и печатает или возвращает соответствующий порядковый номер Temple Skyline. Ваш ввод и вывод должны быть в десятичном виде.
Например, если вход является 571
выходом, должно быть 909
.
Самый короткий код в байтах побеждает.
Для справки приведем термины в последовательности от 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
вместоjQ2
, что означает, что вы можете потерять пространство между8
и предыдущим2
.