Hãy xem xét quá trình sau đây:
Lấy một số nguyên không âm N.
ví dụ: N =
571
Thể hiện nó trong nhị phân không có số 0 đứng đầu. (Bản thân Zero là ngoại lệ duy nhất, trở thành
0
.)vd
571
=1000111011
trong nhị phânPhá vỡ các lần chạy liên tiếp của những người và số không trong biểu diễn nhị phân này.
ví dụ
1000111011
→1
,000
,111
,0
,11
Sắp xếp các bước chạy từ dài nhất đến ngắn nhất.
ví dụ như
1
,000
,111
,0
,11
→000
,111
,11
,1
,0
Ghi đè tất cả các chữ số trong mỗi lần chạy với xen kẽ
1
và0
', luôn bắt đầu bằng1
'.ví dụ như
000
,111
,11
,1
,0
→111
,000
,11
,0
,1
Kết hợp kết quả để có được một số nhị phân mới.
ví dụ như
111
,000
,11
,0
,1
→1110001101
=909
trong hệ thập phân
Khi bạn vẽ các giá trị được tạo ra bởi quá trình này, bạn sẽ nhận được một biểu đồ khá gọn gàng:
Và hy vọng rõ ràng lý do tại sao tôi gọi chuỗi kết quả là chuỗi Temple Skyline :
Thử thách
Viết chương trình hoặc hàm nhận số nguyên N không âm và in hoặc trả về số thứ tự Temple Skyline tương ứng. Đầu vào và đầu ra của bạn nên ở dạng thập phân.
ví dụ: Nếu đầu vào là 571
đầu ra nên 909
.
Mã ngắn nhất tính bằng byte thắng.
Để tham khảo, đây là các thuật ngữ trong chuỗi từ N = 0 đến 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
thay vìjQ2
, điều đó có nghĩa là bạn có thể mất khoảng trắng giữa8
và trước đó2
.