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 an0b
y, 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>>1
y 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):q
Casi 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*2
lugar de(t<<1)
, uno más al mover ese cálculo de la cabeza del bucle al cuerpo del bucle. ¿Se puede usar enx
lugar dex>0
para la condición?x>>=1
se puede reemplazar,x/=2
ya 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
r
está 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"for
bucles siempre son al menos tan cortos como loswhile
bucles 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
2
es la base a la que se está convirtiendo, yn
es 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
a
en este contexto)print
println
StringBuffer
ahorra más de un byteStringBuilder
+""
lugar de.toString()
?Perl 6 , 19 bytes
fuente
$_
. No se menciona por su nombre, perobase
se 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
it
refiere 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,
%1
contiene el parámetro de entrada mientras%2
está vacío. Por lo tanto, evaluamosn
como la mitad de%1
yr
como+%1
módulo 2 (el%
operador debe duplicarse para citarlo). Sin
no es cero, entonces nos llamamos cola recursivamente pasandon
y una expresión que se evalúa en la próxima pasada efectivamente duplicandor
cada vez.fuente
C #, 98 bytes
fuente
R, 55 bytes
Lee la entrada de stdin y, en consecuencia, utiliza la
bin
función delmiscFuncs
paquete 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/;F
convierte 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, 1
se 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.ToInt32
no 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) lasusing
declaraciones 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