El libro de Randall Munroe "xkcd, volumen 0" utiliza un sistema de números bastante extraño para los números de página. Los primeros números de página son
1, 2, 10, 11, 12, 20, 100, 101, 102, 110, 111, 112, 120, 200, 1000, 1001, ...
Esto se parece un poco a ternario, pero tenga en cuenta que él salta de 20
directamente a 100
, de 120
a 200
y de 200
a 1000
. Una forma de definir esta secuencia es decir que enumera todos los números ternarios que contienen como máximo uno 2
y no 1
después de eso 2
. Puede encontrar esto en OEIS en la entrada A169683 . Este sistema de números se conoce como sesgo binario .
Su tarea es encontrar la representación de un entero positivo dado N
en este sistema de números.
Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el parámetro de función (out).
La salida puede ser una cadena, un número con una representación decimal igual a la representación binaria sesgada, o una lista de dígitos (como enteros o caracteres / cadenas). No debe devolver ceros a la izquierda.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Dato curioso: en realidad hay algún mérito en este sistema de números. Al incrementar un número, siempre cambiará como máximo dos dígitos adyacentes; nunca tendrá que llevar el cambio a través del número completo. Con la representación correcta que permite incrementar en O (1).
Casos de prueba
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 recompensa por la respuesta más corta que pueda resolver el último caso de prueba (y cualquier otra entrada de magnitud similar, así que no pienses en codificarlo) en menos de un segundo.
Tablas de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# 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
y 109->110
, con el extra 0.