La secuencia de la curva del dragón (o la secuencia de plegado de papel normal) es una secuencia binaria. a(n)
está dado por la negación del bit restante del 1 menos significativo de n
. Por ejemplo, para calcular a(2136)
primero convertimos a binario:
100001011000
Encontramos nuestro bit menos significativo
100001011000
^
Toma el bit a su izquierda
100001011000
^
Y devuelve su negación
0
Tarea
Dado un entero positivo como entrada, salida a(n)
. (Puede generar por entero o por booleano). Debe intentar que su código sea lo más pequeño posible medido por bytes.
Casos de prueba
Aquí están las primeras 100 entradas en orden
1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0 1 1 0 1
100001011000
es a0
. ¿Te refieres a lo menos significativo1
?Respuestas:
Mathematica 25 Bytes
Otras formas de hacer esto:
56 bytes
58 bytes
fuente
Python 3 ,
2221 bytes1 byte gracias a ETHproductions.
Pruébalo en línea!
Bitwise aritmética ftw.
fuente
0+(...)
?n&1
ponerse entre paréntesis? ¿O es1+(n^~-n)<1
que se puede poner entre paréntesis? O es1+(n^~-n)
...&
tiene la menor prioridad, por lo que es1+(n^~-n)
retina ,
383429 bytesPruébalo en línea!
A Martin y Leaky se les ocurrió esta idea, ¡con 5 bytes más de descuento!
Convierte la entrada en unaria, y luego divide progresivamente el número por 2. Una vez que ya no puede hacerlo de manera uniforme (es decir, el número es impar), elimina los parches de 4 de la entrada, calculando el resultado de la última operación mod 4 Finalmente, esto verifica si el resultado fue 1, lo que significa que el dígito a la izquierda del 1 bit menos significativo fue cero. Si eso es cierto, el resultado final es 1, de lo contrario es cero.
fuente
Jalea , 5 bytes
Pruébalo en línea!
Cómo funciona
fuente
Alice , 8 bytes
Pruébalo en línea!
Toma la entrada como el punto de código de un carácter Unicode y genera el resultado como un byte 0x00 o 0x01 en consecuencia.
Para verificar, aquí hay una versión decimal de E / S de 12 bytes que usa exactamente el mismo algoritmo (solo E / S es diferente):
Pruébalo en línea!
Si Alice era un lenguaje de golf y no requería E / S explícita y terminación del programa, esto se
2z1xn
registraría en solo 5 bytes ( ) superando tanto a 05AB1E como a Jelly.Explicación
fuente
05AB1E , 6 bytes
Pruébalo en línea!
fuente
Sabio ,
282016 bytesPruébalo en línea!
Explicación
Este es un puerto de la respuesta Python de Leaky Nun. Desafortunadamente, no funciona en TIO porque la versión de TIO del intérprete está un poco desactualizada.
Comenzamos haciendo 3 copias de nuestra entrada con
::
, luego disminuimos la copia superior en 1. Esto cambiará todos los bits hacia arriba hasta el primer 1. Luego lo enviaremos a otra copia de nuestra entrada. Dado que todos los bits hasta el primer 1 en nuestra entrada se han invertido, esto dará como resultado que todos esos bits sean 1 en el resultado. Si luego agregamos uno~-
al resultado, obtendremos un solo 1 en el lugar a la izquierda de nuestro menos significativo 1. Nosotros Y esto con la entrada para obtener ese bit de la entrada. Ahora tendremos0
si ese bit estaba apagado y una potencia de 2 si ese bit estaba encendido, podemos cambiar esto en un solo1
o0
con:[?>]
. Una vez hecho esto, solo necesitamos negar el bit~-^
y listo.fuente
Python 2 , 19 bytes
Pruébalo en línea!
fuente
Haskell ,
454339 bytes6 bytes guardados gracias a nimi
Pruébalo en línea!
fuente
div
lugar dequot
.divMod
:f x|(d,m)<-divMod x 2=[mod(1+d)2,f d]!!m
|(d,m)<-divMod x 2
Es un guardia de patrón para unend
adiv x 2
ym
amod x 2
. Usamosm
para indexar la lista de dos elementos[...,...]!!m
. En caso dem==0
que volvamosmod(1+d)2
y en caso dem==1
f d
.[f d,mod(1+d)2]
. Pruébalo en línea! .Código de máquina x86,
171615 bytes:Asume un ABI donde los parámetros se insertan en la pila y el valor de retorno está en el
AL
registro.Esto se desmonta de la siguiente manera:
fuente
JavaScript (ES6),
1714 bytesEditar: ahorré 3 bytes al portar la respuesta de @ Dennis una vez que noté que la salida booleana era aceptable.
fuente
C (gcc) , 20 bytes
Pruébalo en línea!
fuente
INTERCAL , 50 bytes
Los operadores unarios de INTERCAL son bastante adecuados para esto, así que decidí escribir mi primera publicación.
fuente
Haskell , 33 bytes
Pruébalo en línea!
Utiliza indexación 0.
fuente
~
en este contexto? Entiendo que es una perezosa, pero ¿por qué necesitas una perezosa?Jalea ,
76 bytes1 byte gracias a Erik the Outgolfer.
Pruébalo en línea!
Programas más largos
Họ¡2&2Ị
Bt0ṫ-ḄỊ
fuente
ṖṪṆ
(como mi respuesta eliminada) en lugar deṫ-ḄỊ
.BUḌDḊḢ¬
,,, ,
109 bytesExplicación
Tome la entrada como 3 por ejemplo.
fuente
Haskell , 26 bytes
Pruébalo en línea!
Salida booleana.
fuente
Octava , 34 bytes
Pruébalo en línea!
Explicación:
fuente
Sumisión:
Python 2 ,
4139 bytesPruébalo en línea!
-2 bytes gracias a FryAmTheEggman
Solución inicial
Python 2 , 43 bytes
Pruébalo en línea!
fuente
~-x&1
funciona para la condición while, creo.MATL ,
1110 bytesPruébalo en línea! O vea las primeras 100 salidas .
Explicación
fuente
Pari / GP , 20 bytes
Utilizando la símbolo de Kronecker .
Pruébalo en línea!
fuente
Befunge-98 , 19 bytes
Pruébalo en línea!
fuente
SCALA, 99 (78?) Caracteres, 99 (78?) Bytes
donde
i
esta la entradaComo puede ver, guardo 21 bytes si no me ocupo del cero (como lo hizo el autor en su caso de prueba):
Este es mi primer codegolf, así que espero haberlo hecho bien :)
Pruébalo en línea! Aunque es bastante largo para calcular jajaja.
fuente
C (gcc) ,
3531 bytesSe cambió a una implementación recursiva. Pruébalo en línea!
fuente
Java 8, 17 bytes
Puerto sencillo de la respuesta Python 3 de LeakyNun . No estoy lo suficientemente familiarizado con las operaciones bit a bit y la precedencia del operador para ver una solución más corta; tal vez hay una manera de evitar la parentetesis extra?
fuente
Japt ,
10 89 bytesPruébalo en línea!
Explicación
fuente
false
todo porque el carácter (0 o 1) siempre es una cadena.1
ahora.JavaScript (ES6),
5334 bytesfuente
a=>!+(a=a.toString(2))[a.lastIndexOf(1)-1]
PHP> = 7.1, 32 bytes
PHP Sandbox en línea
PHP , 40 bytes
Pruébalo en línea!
PHP , 41 bytes
Pruébalo en línea!
fuente
Lisp común, 56 bytes
Pruébalo en línea!
fuente
Chip , 93 bytes
Toma la entrada como pequeños bytes endian. (El TIO tiene un poco de python que hace esto por usted). Da salida como
0x0
o0x1
. (El TIO usa xxd para inspeccionar el valor).Pruébalo en línea!
¿Cómo se hace esto?
El chip mira la entrada de un byte a la vez, por lo que el manejo de la entrada multibyte agrega algo de volumen, pero no tanto como temía.
Vamos a entrar en eso:
Estos son
HZ
, bit alto del byte anterior (si había uno), yA
-G
, los siete bits más bajos del byte actual. Estos se utilizan para localizar el bit de ajuste más bajo del número.Cuando se encuentra el bit de ajuste más bajo, tenemos algunas cosas que hacer. Este primer fragmento dice "si tenemos un bit establecido (el
)
's), entonces deje deS
presionar la salida yt
ermine después de imprimir la respuesta.Cualquier parte del byte actual (
A
-H
) solo está precedido por un grupo de ceros y luego uno (\
y/
: estos miran los bits directamente al norte de ellos; podemos confiar en que todos los bits anteriores eran cero) se pasan a los cables en la derecha (v
,'
, ...), a continuación, el que sea valor se se invierte y se da como el bit bajo de salida (~a
).fuente