Il libro di Randall Munroe "xkcd, volume 0" utilizza un sistema di numeri piuttosto strano per i numeri di pagina. I primi numeri di pagina sono
1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...
Questo sembra un po 'come ternaria, a meno di notare che salta da 20
dritta a 100
, da 120
a 200
e da 200
a 1000
. Un modo per definire questa sequenza è dire che enumera tutti i numeri ternari che contengono al massimo uno 2
e non 1
dopo 2
. Puoi trovarlo su OEIS nella voce A169683 . Questo sistema numerico è noto come binario obliquo .
Il tuo compito è trovare la rappresentazione di un dato numero intero positivo N
in questo sistema di numeri.
È possibile scrivere un programma o una funzione, prendendo l'input tramite STDIN (o l'alternativa più vicina), l'argomento della riga di comando o l'argomento della funzione e producendo il risultato tramite STDOUT (o l'alternativa più vicina), il valore di ritorno della funzione o il parametro della funzione (out).
L'output può essere una stringa, un numero con una rappresentazione decimale uguale alla rappresentazione binaria inclinata o un elenco di cifre (come numeri interi o caratteri / stringhe). Non è necessario restituire zero iniziali.
Questo è il golf del codice, quindi vince la risposta più breve (in byte).
Curiosità: in realtà questo sistema numerico ha qualche merito. Quando si incrementa un numero, cambierete sempre al massimo due cifre adiacenti - non dovrete mai portare la modifica attraverso l'intero numero. Con la giusta rappresentazione che consente l'incremento in O (1).
Casi test
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
Darò una ricompensa alla risposta più breve in grado di risolvere l'ultimo caso di test (e qualsiasi altro input di grandezza simile, quindi non pensare di codificarlo in modo rigido) in meno di un secondo.
Classifiche
Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua.
Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:
# Language Name, N bytes
dov'è N
la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
# 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
e 109->110
, con lo 0 extra.