Cuốn sách "xkcd, tập 0" của Randall Munroe sử dụng hệ thống số khá kỳ lạ cho số trang. Một vài số trang đầu tiên là
1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...
Điều này có vẻ hơi giống ternary, nhưng nhận thấy rằng ông bỏ qua từ 20
thẳng đến 100
, từ 120
đến 200
và đi từ 200
đến 1000
. Một cách để xác định chuỗi này là nói rằng nó liệt kê tất cả các số thứ ba có chứa nhiều nhất một 2
và không 1
sau đó 2
. Bạn có thể tìm thấy điều này trên OEIS trong mục A169683 . Hệ thống số này được gọi là nhị phân xiên .
Nhiệm vụ của bạn là tìm đại diện của một số nguyên dương cho trước N
trong hệ thống số này.
Bạn có thể viết chương trình hoặc hàm, lấy đầu vào qua STDIN (hoặc thay thế gần nhất), đối số dòng lệnh hoặc đối số hàm và xuất kết quả qua tham số STDOUT (hoặc thay thế gần nhất), tham số trả về hàm hoặc tham số hàm (out).
Đầu ra có thể là một chuỗi, một số có biểu diễn thập phân bằng với biểu diễn nhị phân nghiêng hoặc danh sách các chữ số (dưới dạng số nguyên hoặc ký tự / chuỗi). Bạn không được trả về số không hàng đầu.
Đây là mã golf, vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.
Thực tế thú vị: Thực sự có một số công đức cho hệ thống số này. Khi tăng một số, bạn sẽ luôn thay đổi tối đa hai chữ số liền kề - bạn sẽ không bao giờ phải thực hiện thay đổi trong toàn bộ số. Với biểu diễn đúng cho phép tăng dần trong O (1).
Các trường hợp thử nghiệm
1 => 1
2 => 2
3 => 10
6 => 20
7 => 100
50 => 11011
100 => 110020
200 => 1100110
1000 => 111110120
10000 => 1001110001012
100000 => 1100001101010020
1000000 => 1111010000100100100
1048576 => 10000000000000000001
1000000000000000000 => 11011110000010110110101100111010011101100100000000000001102
Tôi sẽ đưa ra một tiền thưởng cho câu trả lời ngắn nhất có thể giải quyết trường hợp thử nghiệm cuối cùng (và bất kỳ đầu vào nào khác có cường độ tương tự, vì vậy đừng nghĩ về việc mã hóa nó) trong chưa đầy một giây.
Bảng xếp hạng
Dưới đây là Stack Snippet để tạo cả bảng xếp hạng thông thường và tổng quan về người chiến thắng theo ngôn ngữ.
Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:
# Language Name, N bytes
nơi N
là kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:
# Ruby, <s>104</s> <s>101</s> 96 bytes
<script>site = 'meta.codegolf'; postID = 5314; isAnswer = true; QUESTION_ID = 51517</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>
59->60
và 109->110
, với thêm 0.