Ayer, mientras jugaba con mi hijo, noté el número en su tren de juguete:
Entonces tenemos que se pueden dividir en o 2 ^ 2-2 ^ 1-2 ^ 3-2 ^ 0
Desafío tan simple: dado un número no negativo como entrada, devuelve valores de verdad y falsey consistentes que representan si la representación de cadena del número (en base 10 y sin ceros a la izquierda) se puede dividir de alguna manera en números que son potencias de 2 .
Ejemplos:
4281 truthy (4-2-8-1)
164 truthy (16-4 or 1-64)
8192 truthy (the number itself is a power of 2)
81024 truthy (8-1024 or 8-1-02-4)
101 truthy (1-01)
0 falsey (0 cannot be represented as 2^x for any x)
1 truthy
3 falsey
234789 falsey
256323 falsey (we have 256 and 32 but then 3)
8132 truthy (8-1-32)
Tests for very large numbers (not really necessary to be handled by your code):
81024256641116 truthy (8-1024-256-64-1-1-16)
64512819237913 falsey
Este es el código de golf , ¡así que puede ganar el código más corto para cada idioma!
code-golf
string
number
decision-problem
Charlie
fuente
fuente
int
tipo estándar (4 bytes), pero en realidad no me importa si su código no admite números muy grandes. Simplemente indique en su respuesta las limitaciones de su código.101
(falso debido al 0) ... ¿o debería ser cierto (1 - 01
)?101
caso con las respuestas actuales y todas regresantrue
, porque se puede dividir en1-01
ambas potencias de 2, por lo que consideraré que el caso es verdadero.log2(n)
no contiene dígitos decimales después de la coma. 2) Verifique sin AND (n-1) == 0
. 3) Cree una lista de cuadrados y verifique sin
está en esa lista.Respuestas:
05AB1E ,
98 bytes-1 byte gracias a @Emigna usando
Z
(max) para la lista de 0s y 1s para imitar unany
comando para1
(verdadero).Pruébelo en línea o verifique todos los casos de prueba . (NOTA: El
т
encabezado es100
solo para obtener la primera potencia de 100 números de 2, en lugar de la primera cantidad de potencia de entrada de 2 números. Funciona también con la cantidad de potencia de entrada de 2, pero es bastante ineficiente y podría tiempo de espera en TIO si la entrada es lo suficientemente grande).Explicación:
fuente
.œ.²1%O0å
(9 bytes también). La mía falló0
, sin embargo..²1%O0
es bastante inteligente. Pensé en usar delog2
esta manera.²DïQ
, pero requeriría un mapa a su alrededor para hacer esto para cada número, y de hecho no funcionó para el caso de borde0
.JavaScript (Node.js) , 54 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) ,
696458 bytesPruébalo en línea!
Ingresar como número. La parte lógica es bastante complicada, así que no tengo idea de cómo desenredarla y deshacerla
q
.-11 bytes jugando al golf el cheque de potencia de 2.
fuente
JavaScript (Node.js) ,
7569 bytes-6 bytes gracias @Arnauld. Como máximo, soporte de 32 bits
Pruébalo en línea!
Entrada como una cadena.
fuente
Jalea , 9 bytes
¡Mira el paquete de prueba!
Alternativa
No funciona para los casos de prueba grandes debido a problemas de precisión.
¡Mira el paquete de prueba!
¿Cómo?
Programa I
Programa II
fuente
Python 2 ,
7270 bytesPruébalo en línea!
fuente
JavaScript, 59 bytes
Pruébalo en línea!
Crea una expresión regular
/^(1|0*2|0*4|0*8|0*16|0*32|…|0*1)+$/
de poderes de 2 y la pruebas
.Por supuesto, solo funciona con la precisión de los números de JavaScript: eventualmente, los términos en la expresión regular se verán como
1.2345678e30
(oInf
). Pero dado que los poderes de 2 son fáciles de representar con precisión en coma flotante, nunca serán enteros incorrectos , lo que sería más descalificador, creo.@tsh guardó 14 bytes. Neato!
fuente
Python 2 , 85 bytes
Pruébalo en línea!
fuente
Perl 6 ,
282423 bytes-4 bytes gracias a Jo King
Pruébalo en línea!
Maneja potencias hasta 2 31 .
fuente
0*
parte interpoladaAPL (NARS), 154 caracteres, 308 bytes
La función para el ejercicio es h. El algoritmo no parece exponencial o factorial ... prueba:
fuente
Python 2 , 57 bytes
Pruébalo en línea!
fuente
Python 2 , 86 bytes
Pruébalo en línea!
fuente
Ruby , 55 bytes
Pruébalo en línea!
La salida es
0
si es verdadera ynil
si es falsa.fuente
Ruby , 49 bytes
Pruébalo en línea!
Solo funciona en teoría. Toma para siempre grandes valores de
n
fuente
PHP, 101 bytes
Parece que no puedo conseguir esto por debajo de 100; pero podría llegar a 100 si
101
fuera un caso falso.variaciones:
PHP 5 o anterior, 95 bytes
fuente
Rojo ,
212211 bytesPruébalo en línea!
Otra presentación larga, pero no estoy completamente insatisfecho, porque no hay una función integrada para encontrar todas las subcadenas en rojo.
Más legible:
fuente
Axioma, 198 bytes
ungolf y prueba
fuente
Japt
-!
, 12 bytesToma la entrada como una cadena.
Intentalo
fuente
0
caso saletrue
y, por lo tanto, casos como1010
también salidatrue
.C # 157 bytes
Puedes probarlo en línea
fuente
APL (NARS), 70 caracteres, 140 bytes
prueba:
No trato de hacer otros números más grandes ... Tengo que tener en cuenta que P no es una partición normal, pero es una partición donde todos los elementos están subconjuntos que tienen miembros todos consecutivos, por ejemplo
tenga en cuenta que está ausente el elemento ((ac) (b)) o mejor ,, ¨ ('ac') 'b'
fuente
POSIX ERE, 91 bytes
Esto es una trampa total, basada en los números grandes de texto (realmente no es necesario que su código los maneje) en la pregunta; maneja todos los valores en el rango de tamaño de los ejemplos. Obviamente se puede extender hasta el rango completo de tipos enteros de 32 o 64 bits a expensas del tamaño. Lo escribí principalmente como una demostración de cómo el problema encaja naturalmente en la herramienta. Un ejercicio divertido sería reescribirlo como un programa que genera el ERE para un rango arbitrario y luego coincide con él.
fuente
C (gcc) ,
-DA=asprintf(&c,
+ 108 = 124 bytesPruébalo en línea!
Esto genera una expresión regular de las potencias de 2 hasta 2 ** 32, y luego hace coincidir la cadena de entrada con ella.
fuente
Powershell, 56 bytes
Script de prueba:
Salida:
Explicación:
Construye una expresión regular como
^(0*1|0*2|0*4|0*8|0*16|0*32|…)+$
de potencias de 2, y la prueba con argumentos.fuente
JavaScript (Node.js) , 56 bytes
Pruébalo en línea!
fuente