Buku Randall Munroe "xkcd, volume 0" menggunakan sistem angka yang agak aneh untuk nomor halaman. Beberapa nomor halaman pertama adalah
1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...
Ini agak mirip ternary, tetapi perhatikan bahwa ia melompat dari 20
lurus ke 100
, dari 120
ke 200
dan dari 200
ke 1000
. Salah satu cara untuk mendefinisikan urutan ini adalah dengan mengatakan bahwa ia menyebutkan semua nomor terner yang berisi paling banyak satu 2
dan tidak ada 1
setelah itu 2
. Anda dapat menemukan ini di OEIS di entri A169683 . Sistem angka ini dikenal sebagai biner miring .
Tugas Anda adalah menemukan representasi bilangan bulat positif yang diberikan N
dalam sistem angka ini.
Anda dapat menulis sebuah program atau fungsi, mengambil input melalui STDIN (atau alternatif terdekat), argumen baris perintah atau argumen fungsi dan mengeluarkan hasilnya melalui STDOUT (atau alternatif terdekat), nilai pengembalian fungsi atau parameter function (out).
Output dapat berupa string, angka dengan representasi desimal sama dengan representasi biner miring, atau daftar digit (sebagai bilangan bulat atau karakter / string). Anda tidak boleh mengembalikan angka nol di depan.
Ini adalah kode golf, jadi jawaban tersingkat (dalam byte) menang.
Fakta menyenangkan: Sebenarnya ada beberapa manfaat untuk sistem angka ini. Saat menambah angka, Anda akan selalu mengubah paling banyak dua digit yang berdekatan - Anda tidak akan perlu membawa perubahan melalui seluruh angka. Dengan representasi yang tepat yang memungkinkan penambahan di O (1).
Uji Kasus
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
Saya akan memberikan hadiah kepada jawaban terpendek yang dapat memecahkan kasus uji terakhir (dan input lain yang sama besarnya, jadi jangan berpikir tentang hardcoding) dalam waktu kurang dari satu detik.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Misalnya:
# 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
dan 109->110
, dengan tambahan 0.