Un entero positivo N es K- disperso si hay al menos K 0 entre dos 1 consecutivos en su representación binaria.
Entonces, el número 1010101 es 1 escaso mientras que 101101 no lo es.
Su tarea es encontrar el siguiente número 1 disperso para el número de entrada dado. Por ejemplo, si la entrada es 12 ( 0b1100
), la salida debería ser 16 ( 0b10000
) y si la entrada es 18 ( 0b10010
), la salida debería ser 20 ( 0b10100
).
¡El programa o función más pequeño (en bytes) gana! Lagunas estándar no permitidas.
code-golf
number
arithmetic
base-conversion
binary
articuno
fuente
fuente
Respuestas:
Pyth, 9 bytes
x & (x*2) != 0
algoritmo de @alephalphaMi primer intento en Pyth:
Pruébalo aquí
fuente
CJam,
1411 bytes3 bytes guardados gracias a DigitalTrauma.
Pruébalo aquí.
Explicación
Esto deja el último número en la pila que se imprime automáticamente al final del programa.
fuente
Python 2, 44 bytes
Este es un programa completo de Python que lee en n e imprime la respuesta. Creo que le va bastante bien en la subcompetencia de legibilidad.
Los resultados de la prueba:
fuente
Pyth,
1211 bytesPruébelo en línea: Pyth Compiler / Executor .
fuente
"11"
en`11
.Mathematica,
4130 bytesGuardado 11 bytes gracias a Martin Büttner.
fuente
Perl, 31
O desde la línea de comando:
fuente
APL, 18 bytes
Esto se evalúa como una función monádica. Pruébalo aquí Uso:
Explicación
fuente
J, 20 caracteres
Un verbo monádico. Arreglado para obedecer las reglas.
Explicación
Primero, este es el verbo con espacios y luego un poco menos golfizado:
Leer:
Básicamente calculo si
1 1
ocurre en la representación de base 2 de la entrada. Si lo hace, incremente la entrada. Esto se pone bajo un límite de potencia, lo que significa que se aplica hasta que el resultado ya no cambie.fuente
{⍵+∨/2∧/⍵⊤⍨⍵⍴2}⍣=
.Javascript,
2519Usando el hecho de que, para un número binario escaso 1
x&2*x == 0
:fuente
JavaScript (ES6), 39
43Sin expresiones regulares, sin cadenas, recursivo:
Versión iterativa:
Es muy simple, solo usa el desplazamiento a la derecha para encontrar una secuencia de 11. Cuando la encuentre, salte al siguiente número. La versión recursiva se deriva directamente de la iterativa.
Sin espíritu y más obvio. Para jugar al golf, la parte más complicada es fusionar los bucles interno y externo (tener que iniciar x a 3 al inicio)
fuente
%4>2
parece un poco de hechicería de la teoría de los números, ¿puedes explicarlo || proporcionar un enlace?Python 2, 37 bytes
Usó la lógica
x & 2*x == 0
para 1 número disperso.Gracias a @Nick y @CarpetPython.
fuente
JavaScript,
756662 bytes¡Gracias a Martin Büttner por guardar 9 bytes y Pietu1998 por 4 bytes!
Cómo funciona: ejecuta un
for
bucle a partir dea + 1
que el número actual no sea disperso en 1, y si lo es, el bucle se interrumpe y devuelve el número actual. Para verificar si un número es escaso, lo convierte a binario y verifica si no contiene11
.Código sin golf:
fuente
Julia, 40 bytes
Esto crea una función anónima que acepta un solo entero como entrada y devuelve el siguiente entero más alto de 1 disperso. Para llamarlo, dale un nombre, por ejemplo
f=n->...
, y dof(12)
.Ungolfed + explicación:
Ejemplos:
¡Sugerencias y / o preguntas son bienvenidas como siempre!
fuente
> <> (Pez) , 31 + 3 = 34 bytes
Uso:
3 bytes agregados para la
-v
bandera.fuente
JavaScript (ECMAScript 6), 40
Por recursividad:
JavaScript, 56
Lo mismo sin funciones de flecha.
fuente
Scala, 65 bytes
(si se requiere una función con nombre, la solución será de 69 bytes)
fuente
Python,
3933 bytesPruébelo aquí: http://repl.it/gpu/2
En forma lambda (gracias a xnor para jugar al golf):
¡La sintaxis de la función estándar
resultó ser más corta que una lambda por una vez!fuente
f=lambda x:1+x&x/2and f(x+1)or-~x
. Resulta que si cambias de bit a la derecha en lugar de a la izquierda, puedes usarlo enx/2
lugar de(x+1)/2
porque la diferencia siempre está en cero bitsx+1
. Sin embargo, la especificación pide un programa.Java, 33 bytes.
Utiliza el método en esta respuesta
TIO
fuente
Rubí, 44
Bastante básico Una lambda con un bucle infinito y una expresión regular para probar la representación binaria. Desearía que
loop
cediera un número de índice.fuente
Matlab (
7774 bytes)Notas:
m+1
a2*m
, dondem
está la entrada.~any(x)
estrue
six
contiene todos ceros o six
está vacíofuente
C (32 bytes)
Implementación recursiva del mismo algoritmo que tantas otras respuestas.
fuente
Perl, 16 bytes
Combinando el
x&2*x
de varias respuestas (creo que Nick es el primero) con losredo
rendimientos de nutki :Probado en fresa 5.26.
fuente
Japt, 8 bytes
Ejecútalo en línea.
fuente
Jalea , 7 bytes
Un programa completo que acepta un número entero no negativo que imprime un número entero positivo (como enlace monádico produce una lista que contiene un número entero positivo).
Pruébalo en línea!
¿Cómo?
Comenzando en
v=n+1
, e incrementando, doblev
para desplazar cada bit hacia arriba un lugar y bit a bit Y conv
y luego realizar NO lógico para probar siv
es escaso hasta que se encuentre uno de esos números.fuente
Stax , 5 bytes
Ejecutar y depurarlo
Funciona usando este procedimiento. La entrada comienza en la parte superior de la pila.
fuente