Entonces se le da un número POSITIVO de base 10 (decimal). Su trabajo es revertir los dígitos binarios y devolver ese número de base 10.
Ejemplos:
1 => 1 (1 => 1)
2 => 1 (10 => 01)
3 => 3 (11 => 11)
4 => 1 (100 => 001)
5 => 5 (101 => 101)
6 => 3 (110 => 011)
7 => 7 (111 => 111)
8 => 1 (1000 => 0001)
9 => 9 (1001 => 1001)
10 => 5 (1010 => 0101)
Este es un desafío de código de golf , por lo que gana la solución que utiliza menos bytes.
Este es A030101 en el OEIS.
code-golf
number
base-conversion
binary
juniorrubista
fuente
fuente

Respuestas:
Python , 29 bytes
Pruébalo en línea!
Esta es una función anónima, sin nombre, que devuelve el resultado.
Primero,
bin(n)convierte el argumento en una cadena binaria. Normalmente lo revertiríamos con la notación de corte[::-1]. Esto lee la cadena con un paso de -1 , es decir, hacia atrás. Sin embargo, las cadenas binarias en Python tienen el prefijo an0by, por lo tanto, damos el segundo argumento de la división como 1 , diciéndole a Python que lea hacia atrás y termine en el índice 1 , por lo tanto, no lee los índices 1 y 0 .Ahora que tenemos la cadena binaria hacia atrás, la pasamos
int(...)con el segundo argumento como 2 . Esto lee la cadena como un entero de base 2, que luego es implícitamente devuelto por la expresión lambda.fuente
Python, 29 bytes
Pruébalo en línea
fuente
JavaScript (ES6),
3028 bytesGuardado 2 bytes gracias a @Arnauld
Básicamente, esto calcula el reverso un bit a la vez: comenzamos con q = 0 ; mientras n es positivo, multiplicamos q por 2, separamos el último bit de n con
n>>1y lo sumamos a q con|n%2. Cuando n llega a 0, el número se ha invertido con éxito y devolvemos q .Gracias a los largos nombres integrados de JS, resolver este desafío de la manera más fácil requiere 44 bytes:
Usando recursividad y una cadena, puede obtener una solución de 32 bytes que hace lo mismo:
fuente
f=(n,q)=>n?f(n>>1,q*2|n%2):qCasi funciona. Pero lamentablemente no es paran=0.Java 8,
53474645 bytesEsta es una expresión lambda que tiene el mismo principio que la respuesta de ETH (aunque la recursión habría sido demasiado detallada en Java, por lo que hacemos un bucle):
Pruébalo en línea!
Esto se puede asignar con
IntFunction<Integer> f = ..., y luego llamar conf.apply(num). Ampliado, sin golf y comentado, se ve así:fuente
t*2lugar de(t<<1), uno más al mover ese cálculo de la cabeza del bucle al cuerpo del bucle. ¿Se puede usar enxlugar dex>0para la condición?x>>=1se puede reemplazar,x/=2ya que automáticamente será una división entera.t=t*2+at+=t+.)J, 6 bytes
|.marcha atrás&.debajo#:base 2fuente
Jalea , 3 bytes
Pruébalo en línea!
fuente
Mathematica, 19 bytes
fuente
Laberinto, 23 bytes
Bueno, esto es incómodo ... esto devuelve el número BINARIO inverso ... Gracias @Martin Ender por señalar mi error y mi error ID 10T. Entonces esto no funciona, tendré que encontrar otra solución.
fuente
# Labyrinth, 89 bytes_están en los cruces.C,
48444342 bytes-1 byte gracias a gurka y -1 byte gracias a anatolyg:
Solución anterior de 44 bytes:
Solución anterior de 48 bytes:
Sin golf y uso:
fuente
restá inicializado a cero aquír;f(n){r=0;, por ejemplo,r=0;es innecesario? También error tipográfico menor: " Solución anterior de 48 bytes"forbucles siempre son al menos tan cortos como loswhilebucles y, a menudo, más cortos.r;f(n){for(r=n&1;n/=2;r=2*r+n%2);return r;}:? 1 byte más corto, pero no estoy seguro si es válido C (C99).=en+=para que sea más corto y más ofuscadoRuby,
2928 bytes"% b"% n formatea la entrada n como una cadena binaria, invierte, luego vuelve a convertir a un número
Uso / casos de prueba:
fuente
2es la base a la que se está convirtiendo, ynes la entrada.->args{return value}es la sintaxis de ruby lambda.to_i(2)?05AB1E , 3 bytes
Pruébalo en línea!
fuente
Java (OpenJDK) , 63 bytes
Pruébalo en línea!
¡Gracias a poke por -12 bytes y a Cyoce por -8 bytes!
fuente
aen este contexto)printprintlnStringBufferahorra más de un byteStringBuilder+""lugar de.toString()?Perl 6 , 19 bytes
fuente
$_. No se menciona por su nombre, perobasese llama al método.{:2(.base(2).flip)}(10)en REPL se imprimirá 5. Por lo tanto, cumple con los criterios estándar de código de golf para una función.Haskell, 36 bytes
Mismo algoritmo (¡y longitud!) Que la respuesta de JavaScript de ETHproductions .
fuente
Utilidades Bash / Unix,
2423 bytesPruébalo en línea!
fuente
PHP, 33 bytes
convertir a base2, invertir cadena, convertir a decimal. Guardar en archivo y ejecutar como tubería con
-F.sin construcciones:
iterativo, 41 bytes
Mientras que la entrada ha establecido bits, saque un bit de la entrada y empújelo a la salida. Ejecutar como tubería con
-nR.recursivo, 52 bytes
fuente
$r+=$r. Pero en realidad no recuerdo por qué puse eso delante.MATL , 4 bytes
Pruébalo en línea!
Explicación
fuente
Pyth, 6 bytes
Conjunto de pruebas disponible aquí.
Explicación
fuente
Japt , 5 bytes
Pruébalo en línea!
fuente
)podría ser un espacio :-)Scala, 40 bytes
Uso:
Explicación:
fuente
Mathematica, 38 bytes
fuente
Groovy, 46 bytes
fuente
itrefiere al argumento dado a un bloque IIRCCJam , 8 bytes
Pruébalo en línea!
Explicación
fuente
Lote, 62 bytes
Explicación: en la primera pasada,
%1contiene el parámetro de entrada mientras%2está vacío. Por lo tanto, evaluamosncomo la mitad de%1yrcomo+%1módulo 2 (el%operador debe duplicarse para citarlo). Sinno es cero, entonces nos llamamos cola recursivamente pasandony una expresión que se evalúa en la próxima pasada efectivamente duplicandorcada vez.fuente
C #, 98 bytes
fuente
R, 55 bytes
Lee la entrada de stdin y, en consecuencia, utiliza la
binfunción delmiscFuncspaquete para convertir de decimal a un vector binario.fuente
Pushy , 19 bytes
¡Sin conversión de base integrada!
Pruébalo en línea!
Pushy tiene dos pilas, y esta respuesta hace uso de esto ampliamente.
Hay dos partes dos en este programa. Primero,
$&2%v2/;Fconvierte el número a su representación binaria inversa:Dado el ejemplo 10, las pilas aparecerían de la siguiente manera en cada iteración:
Podemos ver que después de la iteración final,
0, 1, 0, 1se ha creado en la segunda pila - los dígitos binarios inversas de 10,0b1010.La segunda parte del código,
L:vK2*;OS#se toma de mi respuesta anterior que convierte binario a decimal . Usando el método descifrado y explicado en esa respuesta, convierte los dígitos binarios en la pila en un entero de base 10 e imprime el resultado.fuente
k, 18 bytes
Ejemplo:
fuente
C #, 167 bytes
Explicación:
Aquí iteraré n valores y cada vez que el valor entero iterado se convierta en valor de byte, luego revertiré ese valor de byte y ese valor de byte se convertirá en valor entero.
fuente
STDIN(creo que es así,console.Read()pero probablemente lo sabrías mejor que yo) ySTDOUT. De todos modos, bienvenido al sitio si desea consejos más experimentados en golf C #. Recomendaría codegolf.stackexchange.com/questions/173/….Reverse()returnesIEnumerable<char>. ComoConvert.ToInt32no tiene una sobrecarga para IEnumerable, arroja una excepción. Además, la respuesta no sigue las reglas para el código de golf: 1) Como no se especifica nada, el envío debe ser un programa completo o una función, no solo un fragmento. 2) lasusingdeclaraciones deben incluirse en el recuento de bytesc / c ++ 136 bytes
No va a ganar, pero quería adoptar un enfoque diferente en c / c ++ 120 bytes en la función
Para explicar lo que estoy haciendo, utilicé la función de registro para determinar el número de bits utilizados por la entrada. Que una serie de cambios de tres bits hacia la izquierda / derecha, dentro / fuera, par / impar que voltea todo el entero. Finalmente, un poco de desplazamiento para cambiar el número de nuevo a la derecha. El uso de decimales para cambios de bits en lugar de hexadecimal es una molestia, pero ahorró algunos bytes.
fuente