Dado un número entero , debe encontrar el número mínimo de bits que deben invertirse en para convertirlo en un número cuadrado . Solo puede invertir bits por debajo del más significativo .
Ejemplos
- ya es un número cuadrado ( ), por lo que la salida esperada es .
- se puede convertir en un número cuadrado invirtiendo 1 bit: ( ), por lo que la salida esperada es .
- no se puede convertir en un número cuadrado invirtiendo un solo bit (los posibles resultados son , , y ) pero se puede hacer invirtiendo 2 bits: ( ), por lo que la salida esperada es .
Reglas
- Está bien si su código es demasiado lento o arroja un error para los casos de prueba más grandes, pero al menos debería admitir en menos de 1 minuto.
- Este es el código de golf !
Casos de prueba
Input | Output
----------+--------
4 | 0
22 | 2
24 | 1
30 | 3
94 | 4
831 | 5
832 | 1
1055 | 4
6495 | 6
9999 | 4
40063 | 6
247614 | 7 (smallest N for which the answer is 7)
1049310 | 7 (clear them all!)
7361278 | 8 (smallest N for which the answer is 8)
100048606 | 8 (a bigger "8")
O en formato amigable copiar / pegar:
[4,22,24,30,94,831,832,1055,6495,9999,40063,247614,1049310,7361278,100048606]
100048606
en TIO, ¿es eso un problema?Respuestas:
Ruby, 74 bytes
Pruébalo en línea!
Esto simplemente genera la secuencia (que es mucho más que suficiente), lo XOR con n , y luego toma el número de 1s en su representación binaria si el número de bits es menor que o igual a log 2 n , o n de lo contrario. Luego toma la cantidad mínima de bits invertidos. Devolver n en lugar del número de bits volteados cuando el bit más alto volteado es mayor que log 2 n evita que estos casos se elijan como mínimo, ya que n[ 12, 22, ... , n2] norte Iniciar sesión2norte norte norte Iniciar sesión2norte norte siempre será mayor que la cantidad de bits que tiene.
Gracias a Piccolo por guardar un byte.
fuente
(n^x*x).to_s 2;...
lugar de(n^x*x).to_s(2);...
Jalea , 12 bytes
Pruébalo en línea!
¡Mira un paquete de prueba!
Enlace monádico. Debería ser golfable.
Pero soy demasiado tonto para pensar en una forma de deshacerme delEs mi primera respuesta en la que utilizo con éxito el filtrado / mapeo / bucle en general junto con una cadena diádica \ o /³
s.Explicación
fuente
Casco , 20 bytes
Pruébalo en línea!
Explicación
fuente
▼mΣfo¬←ṠMz≠ȯfo£İ□ḋπŀ2Lḋ
ahorra 2 bytes. RIP tu puntaje cuadrado perfecto.Perl 6 , 65 bytes
Pruébalo en línea!
Me siento un poco sucio por probar un cuadrado perfecto al buscar un punto en la representación de cadena de la raíz cuadrada del número, pero ... cualquier cosa para eliminar bytes.
fuente
05AB1E ,
2015 bytes-5 bytes gracias a @ Mr.Xcoder usando un puerto de su respuesta Jelly .
Pruébelo en línea o verifique todos los casos de prueba (los tres casos de prueba más grandes se eliminan porque caducan después de 60 segundos; todavía toma alrededor de 35-45 segundos con los otros casos de prueba).
Explicación:
fuente
Lnʒ‚b€gË}^b€SOß
. Desafortunadamente, rompe su suite de pruebasJava (JDK 10) , 110 bytes
Pruébalo en línea!
fuente
&
lugar de lógico y&&
Gaia , 18 bytes
Cerca del puerto de mi respuesta Jelly .
Pruébalo en línea!
Descompostura
fuente
Brachylog ,
5641 bytesNo va a romper ningún récord de longitud, pero pensé que lo publicaría de todos modos
Pruébalo en línea!
fuente
Ensamblado x86-64, 37 bytes
Bytecode:
Muy bien, esto calcula incluso el ejemplo más alto en menos de un segundo.
El corazón del algoritmo es xor / popcount como de costumbre.
fuente
mov
xchg
mov %ecx,%eax
) y no puedo dejar que% ecx muera allí.Wolfram Language (Mathematica) , 67 bytes
Pruébalo en línea!
BitLength
Pick
BitXor
Min
DigitCount
1
fuente
Carbón , 31 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Jalea , 20 bytes
Pruébalo en línea!
fuente
Python 2 , 82 bytes
Pruébalo en línea!
fuente
Japt
-g
, 20 bytesEsto se puede jugar al golf.
Pruébalo en línea!
fuente
C (gcc) ,
9391 bytesPruébalo en línea!
Editar: creo que mi solución original (¡ Pruébelo en línea! ) No es válida, porque una de las variables
m
, global para guardar algunos bytes al no especificar el tipo, se inicializó fuera def(n)
y, por lo tanto, tuvo que reinicializarse entre llamadasCódigo sin comentarios y comentado:
Ediciones:
fuente