Książka Randall Munroe „xkcd, tom 0” używa raczej nieparzystego systemu liczbowego dla numerów stron. Pierwsze kilka numerów stron to
1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...
To wygląda trochę jak trójka, ale zauważ, że przeskakuje od 20
prostej do 100
, od 120
do 200
i od 200
do 1000
. Jednym ze sposobów zdefiniowania tej sekwencji jest powiedzenie, że wylicza ona wszystkie liczby trójskładnikowe, które zawierają co najwyżej jeden, 2
a 1
potem nie 2
. Można go znaleźć w OEIS w pozycji A169683 . Ten system liczb jest znany jako skośny binarny .
Twoim zadaniem jest znalezienie reprezentacji danej dodatniej liczby całkowitej N
w tym systemie liczbowym.
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
Dane wyjściowe mogą być ciągiem, liczbą z reprezentacją dziesiętną równą skośnej reprezentacji binarnej lub listą cyfr (jako liczby całkowite lub znaki / ciągi). Nie wolno zwracać wiodących zer.
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
Ciekawostka: ten system liczb ma pewne zalety. Zwiększając liczbę, zawsze zmienisz maksymalnie dwie sąsiednie cyfry - nigdy nie będziesz musiał przenosić zmiany przez cały numer. Z odpowiednią reprezentacją, która pozwala na zwiększenie O (1).
Przypadki testowe
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
Dam nagrodę za najkrótszą odpowiedź, która może rozwiązać ostatni przypadek testowy (i każdy inny wkład o podobnej wielkości, więc nie myśl o jego zakodowaniu na stałe) w mniej niż sekundę.
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawisz swój wynik, możesz zachować stare wyniki w nagłówku, przekreślając je. Na przykład:
# 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
i 109->110
, z dodatkowym 0.