Se le dará un número x
, donde 0 <= x <= 2^32 - 1
.
Debería generar una lista de números en decimal, después de la división recursiva en formato binario.
Ejemplos:
Ejemplo 1:
255 -> 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
La lista actual es justa 255
.
La representación binaria de 255
es 1111 1111
. Partiéndolo, obtenemos 1111
y 1111
, que en decimal son 15
y 15
.
Los agregamos a la lista, así que lo haremos 255 15 15
.
Ahora los números 15
y 15
servirán como entradas y estos números deben dividirse.
Haciendo de nuevo, obtenemos ( 3 3
de ambos 15
s): 255 15 15 3 3 3 3
.
Continuando con la lógica, la lista final será 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
. Y como ya 1
no se puede dividir, la salida se detiene.
Ejemplo 2
225 -> 225 14 1 3 2 1 1 1 0
La lista de inicio es 225
.
La representación binaria de 225
es 1110 0001
. Partiéndolo, obtenemos 1110
y 0001
, que en decimal son 14
y 1
.
Al agregarlos a la lista, obtenemos 225 14 1
.
Ahora los números 14
y 1
servirán como entradas y estos números deben dividirse.
Como 1
no es divisible, la salida será 225 14 1 3 2
.
Ejemplo 3
32 -> 32 4 0 1 0
Condiciones :
- Si el número de dígitos binarios es impar, el primer número tendrá un dígito binario menos que el siguiente. Ejemplo,
20 (10100)
se dividirá como10
y100
, con salida decimal siendo2
y4
. - Se aplican las normas de laguna legal.
0
sys1
no se propagan más.- El bloqueo de programa por intentar mostrar demasiados números es una condición de salida válida.
fuente
0
s cuando la longitud es impar?0
s.Respuestas:
Pyth, 18 bytes
Banco de pruebas
Este código hace algo muy complicado e inteligente con
u
el operador de punto fijo de Pyth.El cuerpo de la función, que es todo lo que no sea el
u
, es bastante sencillo:Este código elimina 0s y 1s, divide cada número y agrega la entrada al frente.
u
ejecutará esta función en el resultado anterior de la función hasta que el resultado deje de cambiar.¿Qué valor inicial
u
usa? Esa es la parte más inteligente: el código no especifica qué valor usar, por lo que el valor predeterminado es la entrada. Pero la entrada no es una lista de números, es un número. Pyth coacciona implícitamente el número en el primer tiempo a través del ciclo hasta el rango del número -[0, 1, ..., Q-1]
. Eso no se parece en nada a la salida que queremos obtener. Afortunadamente,u
encontrará el resultado correcto independientemente de cuál sea la entrada inicial: la salida deseada es el único punto fijo de la función, y la aplicación repetida siempre lo alcanzará.Veamos los valores intermedios del programa con la entrada
7
. He resaltado el prefijo del resultado que se garantiza que es correcto, independientemente de la entrada inicial:7
(Implícitamente[0, 1, 2, 3, 4, 5, 6]
)[7,
1, 0, 1, 1, 1, 0, 1, 1, 1, 2]
[7, 1, 3,
1, 0]
[7, 1, 3, 1, 1]
Cual es la salida.
Pyth empaquetado, 16 bytes
Tenga en cuenta que, dado que Pyth usa solo el rango 0-127 de ASCII, puede comprimirse utilizando una codificación de 7 bits en lugar de una codificación de 8 bits. Por lo tanto, el programa anterior se puede empaquetar en 16 bytes. El programa resultante es:
hexdump:
El intérprete se encuentra aquí . Proporcione la entrada como un argumento de línea de comando.
La página de códigos de este lenguaje (Pyth empaquetado) es el rango 0-127 de ASCII, y cada carácter se representa con 7 bits, rellenados al final. Por lo tanto, el hexdump ilegible anterior representa:
Pero en 16 bytes.
fuente
05AB1E ,
21201817 bytesPruébalo en línea!
Explicación
fuente
ʒ
- Esta nueva página de códigos ... ¿Desde cuándo es 05AB1E Jelly? Me gusta.JavaScript (ES6), 99 bytes
Esto parece demasiado largo. Puede haber una mejor manera de obtener el orden correcto.
Manifestación
Mostrar fragmento de código
fuente
Jalea ,
2120 bytes-1 byte eliminando una cadena monádica y luego lidiando con la consecuencia de que una lista vacía se convierta de binario produciendo 0 más tarde.
Un enlace monádico que toma un número y devuelve la lista especificada.
Pruébalo en línea!
¿Cómo?
fuente
Java 7, 541 bytes
Mantener el orden original me fastidió a lo grande, de lo contrario sería un bucle fácil y un principio de llamada recursiva. Aún así, es un desafío divertido de resolver mientras retiene el pedido.
Explicación:
Código de prueba:
Pruébalo aquí.
Salida:
fuente
Python 2 , 110 bytes
Pruébalo en línea!
fuente
Retina , 142 bytes
Pruébalo en línea!
fuente
PHP, 132 bytes
Pruébalo en línea!
fuente
Array( [0] => 225 [1] => 14 [2] => 1 [3] => 3 [4] => 2 [5] => 1 [6] => 1 [7] => 1 [8] => 0 )
cuando no lo hace = 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1$argn
Esta variable está disponible si ejecuta PHP desde la línea de comandos con la-R
opción. Aquí hay un ejemplo para la entrada 255 ¡ Pruébelo en línea!Ruby , 102 bytes
Pruébalo en línea!
fuente
Ruby , 98 bytes
Pruébalo en línea!
Simplemente una optimización básica de la respuesta de Value Ink : use flat_map en lugar de map ... flatten, y use
a==[]?a
en lugar dea==[]?[]
fuente