En este desafío, calcularás números a partir de una secuencia curiosa.
Su entrada es un número entero decimal no negativo. Invierta los bits en este entero y luego cuadre el número para obtener la salida requerida.
Al invertir los bits, no debe usar ningún cero a la izquierda en la entrada. Por ejemplo:
26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121
Las primeras 25 entradas / salidas de esta secuencia:
0: 0
1: 1
2: 1
3: 9
4: 1
5: 25
6: 9
7: 49
8: 1
9: 81
10: 25
11: 169
12: 9
13: 121
14: 49
15: 225
16: 1
17: 289
18: 81
19: 625
20: 25
21: 441
22: 169
23: 841
24: 9
Su solución debería funcionar para enteros de tamaño arbitrario. Si su idioma no tiene un método incorporado conveniente para usarlos, implemente su respuesta como si lo tuviera. Luego se le excusa si su respuesta se rompe para grandes números. Sin embargo, no use trucos / límites que solo funcionen para un dominio limitado (como una tabla de búsqueda).
Su puntaje es el número de bytes del código fuente.
-50% de bonificación si nunca convierte el número a / desde binario. Esto no se limita a las funciones integradas, si realiza un bucle sobre el número bit a bit (ya sea cambiando o enmascarando o cualquier otro método), también contará como conversión. No sé si esto es realmente posible, pero da un incentivo para detectar un patrón en la secuencia.
El puntaje más pequeño gana.
Respuestas:
Par 5 bytes
Eso es read-binary-reverse-binary-square.
fuente
Mathematica,
4221 bytesGracias a alephalpha por reducir a la mitad el puntaje.
La razón real por la que hice esto en Mathematica fue porque quería ver una trama ... seguro que se ve divertido:
fuente
Minkolang 0.14 , 43 bytes
Gracias a Mego por inspirar esto.
Pruebe el código aquí y verifique todos los casos de prueba aquí .
Explicación
Esto usa esta relación de recurrencia:
Si
n
es la entrada, entoncesa(n)
es el número resultante después de que se haya invertido su secuencia binaria. 0 y 1 son obvios. Paraa(2n) = a(n)
, considere quex0
(dondex
está cualquier secuencia de dígitos binarios) invertido es0x
, que es lo mismo quex
. Porquea(2n+1)
el razonamiento es un poco más complicado.x1
volteado es1x
, que es igual ax + 2^k
para algunosk
. Estek
es uno más que el número de dígitosx
, que esfloor(log_2(n))+1
. La fórmula completa sigue, excepto que se modificó un poco. Esto es lo que realmente codifico:Como Mego y yo trabajamos en el chat,
floor(n/2) = (n - n%2)/2
. Por lo tanto,log_2(floor(n/2))+1 = log_2(n - n%2)
. Además, multiplicar por(n%2)
colapsa las partes pares e impares en una sola expresión.Finalmente, sin más preámbulos, aquí está el código, explicado.
fuente
2n
y2n+1
en una relación de recurrencia, debe pensar de inmediato como un bucle sobre bits.Japt ,
2928117 bytes(Puede guardar el programa como un archivo con codificación IEC_8859-1 de 7 bytes y luego subirlo al intérprete ).
Japt es JavaScript acortado hecho por ETHproductions .
Pruébalo en línea!
Explicación:
¢
es acceso directo aUs2
, que compila aU.s(2)
.U
es input (implícito),.s(2)
llamado por un número, invoca.toString(2)
(se convierte en binario, analiza como cadena).w
compila a.w()
, que invierte la cadena (.split('').reverse().join('')
).n2
funciona comoparseInt(<number>,2)
, es decir, convierte binario a decimal.²
invocaMath.pow(<number>,2)
, es decir, cuadra el número.fuente
n
, por lo que podría hacerloUs2 a w a n2 p2
. Buen trabajo sin embargo!w
funciona igual en las cadenas que en las matrices, por lo que no necesita las dosa
s :)Us2
=¢
, yp2
=²
, reduciéndolo a 7 bytes:¢w n2 ²
Python, 32 bytes
Pruébalo en línea.
El código es bastante sencillo:
bin(6)
por ejemplo, da0b110
, la representación binaria de 6.[:1:-1]
invierte la cadena y la elimina0b
.int
convierte la cadena a un entero desde binario y la**2
cuadra.fuente
Jolf , 7 bytes
Solo ejecútalo. La entrada en la página no funciona.
Explicación
Agregué el
Q
comando, que hace que estos 6 bytes:QC_Bj2
fuente
TeaScript , 9 bytes
11TeaScript es Javascript para jugar al golf
Jugaré más golf una vez que regrese a mi computadora
Pruébalo en línea!
Prueba todo
fuente
En serio ,
87 bytesDesafíos como estos son perfectos para En serio :)
Pruébalo en línea
Explicación:
fuente
J,
109 bytesEste es un verbo tácito y monádico. Pruébalo en línea!
¡Gracias a @randomra por jugar golf en 1 byte!
Cómo funciona
fuente
CJam, 10 bytes
Pruébalo en línea
fuente
JavaScript,
64635653 bytesMe doy cuenta de que soy extra largo, pero bueno, puedo hacerlo: P
Manifestación
fuente
parseInt(
que puedes hacer+("0b"+
[...n.toString(2)]
y.join``
n=>+("0b"+[...n.toString(2)].reverse().join``)**2
. Todavía no funciona en ningún navegadorPerl 6 , 21 bytes
Ejemplo de uso:
fuente
PHP, 45 bytes
fuente
Shell, 25
Entrada / salida a través de STDIN / STDOUT:
fuente
Pyth - 9 bytes
Conversiones directas. De hecho, asigné 2 a una var, que es bastante raro.
Test Suite .
fuente
Pyth, 9 bytes
Esta es una respuesta muy simple basada en Pyth similar a la de Python
fuente
𝔼𝕊𝕄𝕚𝕟, 12 caracteres / 21 bytes
Try it here (Firefox only).
Respuesta no competitiva, 9 caracteres / 18 bytes
Try it here (Firefox only).
fuente
Ruby, 35 bytes
fuente
TI-Basic (TI-84 Plus CE), 42 bytes
fuente