У книзі Рандалла Манро "xkcd, том 0" використовується досить непарна система числення для номерів сторінок. Перші кілька номерів сторінок є
1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...
Це виглядає як троичной, але зауважив , що він скаче від 20
прямо 100
від 120
до 200
і від 200
до 1000
. Один із способів визначення цієї послідовності полягає в тому, щоб сказати, що вона перераховує всі потрійні числа, які містять не більше одного, 2
а 1
після цього немає 2
. Ви можете знайти це на OEIS у записі A169683 . Ця система числення відома як перекос двійкової .
Ваше завдання - знайти представлення даного додатного цілого числа N
в цій системі числення.
Ви можете написати програму або функцію, взявши введення через STDIN (або найближчу альтернативу), аргумент командного рядка або аргумент функції та вивівши результат через STDOUT (або найближчу альтернативу), значення повернення функції або параметр функції (out).
Виведенням може бути рядок, число з десятковим поданням, рівним перекосу двійкового подання, або список цифр (у вигляді цілих чи знаків / рядків). Ви не повинні повертати провідні нулі.
Це кодовий гольф, тому найкоротша відповідь (у байтах) виграє.
Веселий факт: насправді є деяка заслуга цієї системи числення. Збільшуючи число, ви завжди будете змінювати щонайбільше дві суміжні цифри - вам ніколи не доведеться переносити зміну через усе число. З правильним поданням, що дозволяє збільшувати O (1).
Випробування
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
Я дам нагороду за найкоротший відповідь, який може вирішити останній тестовий випадок (та будь-який інший вклад подібної величини, тому не думайте про жорстке кодування) менше ніж за секунду.
Табло лідерів
Ось фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою.
Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:
# Language Name, N bytes
де N
розмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:
# 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
і 109->110
, маючи додаткові 0.