La secuencia contiene la representación decimal de los números binarios de la forma:, 10101...
donde el enésimo término tiene n bits.
La secuencia es probablemente más fácil de explicar simplemente mostrando las relaciones entre las representaciones binarias y decimales de los números:
0 -> 0
1 -> 1
10 -> 2
101 -> 5
1010 -> 10
10101 -> 21
101010 -> 42
Reto:
Tome un entero de entrada n
y devuelva los primeros n números en la secuencia. Puede elegir tener la secuencia indexada en 0 o indexada en 1.
Casos de prueba:
n = 1 <- 1-indexed
0
n = 18
0, 1, 2, 5, 10, 21, 42, 85, 170, 341, 682, 1365, 2730, 5461, 10922, 21845, 43690, 87381
Se alientan las explicaciones, como siempre.
Este es OEIS A000975 .
[85,[42,[21,[10,[5,[2,[1,0]]]]]]]
?Respuestas:
Python 2 , 36 bytes
Pruébalo en línea! Explicación: la representación binaria de esasí que simplemente queda multiplicarlo por una potencia apropiada de 2 y tomar la porción entera.23
0.101010101...
fuente
05AB1E , 4 bytes
2 bytes guardados usando el truco 2/3 de Neil
Pruébalo en línea!
Explicación
05AB1E , 6 bytes
Pruébalo en línea!
Explicación
fuente
Jalea ,
...4 bytesGracias millas por -1 byte!
Pruébalo en línea!
Explicación:
Jalea , 4 bytes
La versión de Jonathan Allan.
Pruébalo en línea!
Una versión basada en el truco 2/3 de Neil da 5 bytes, ver historial de revisiones.
fuente
ḶḂḄƤ
Se hizo un prefijo rápido para estoḶ€ḂḄ
también funcionaría.MATL , 5 bytes
Basado en la respuesta de Neil .
Explicación
Pruébalo en línea!
MATL , 9 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 ,
453736 bytes-3 bytes gracias a user202729
-1 byte gracias a mathmandan
Pruébalo en línea!
fuente
s
es lo mismo que agregarses
a sí mismo, por lo que creo que podría hacers+=s+~s%2
para guardar un byte.Python 3,
6861544843 bytesGracias a user202729 por ayudar a guardar 19 bytes y ovs por ayudar a guardar 6 bytes.
Pruébalo en línea
fuente
x == 0
es equivalente anot x
ifx
es un número entero, intercambiar los operandos (es decir,x if c else y
=y if not c else x
) ahorrará algunos bytes más.i%2
y usar1-r%2
en su lugari
.Casco , 7 bytes
Pruébalo en línea!
Basado en 1, por lo que la entrada n da los primeros n resultados.
Explicación
fuente
APL (Dyalog Unicode) , 11 bytes de SBCS
Asume
⎕IO
( I ndex O rigin) ser0
, que es predeterminado en muchos sistemas. Función de prefijo tácito anónimo. 1 indexado.Pruébalo en línea!
⍳
d ndices 0 ... n − 1(
...)¨
aplique la siguiente función tácita a cada⍴∘1 0
reformar cíclicamente la lista[1,0]
a esa longitud2⊥
convertir de base-2 (binario) a número normalfuente
Perl
v5.10
-n
, 24 + 1 bytes-3 bytes gracias a Nahuel Fouilleul !
Pruébalo en línea!
Misma lógica que mi versión Ruby, pero más corta porque Perl es más conciso. Por alguna extraña razón,
print
no haría un separador (maldita sea!), Así que tuve que utilizarsay
desdev5.10;
el fin de la misma para ejecutar, no estoy seguro de cómo anotar esto, así que estoy dejando por ahora ?. ..Explicación
fuente
-n
) = 28 bytes, porque para ejecutar un perl one-liner, uno debe usar-e
y usar 5.10 solo necesita usar-E
, que es la misma longitud$|--
lugar de($.^=1)
Haskell , 33 bytes
Pruébalo en línea!
fuente
APL (Dyalog) , 7 bytes
Pruébalo en línea!
APL (Dyalog) , 11 bytes
Pruébalo en línea!
Usos
⎕IO←0
.fuente
⎕IO←0
(¡pero diga que está indexado!) Y cambie0,
a1+
:(2⊥2|⍳)¨1+⍳
C ,
81 5559 bytes1 indexado.
Programa completo, menos golf:
Pruébalo en línea!
EDIT 2: estaba bajo el supuesto de que las funciones no necesitaban ser reutilizables ahora que lo pienso, tiene mucho sentido que tendrían que ser reutilizables: P
EDITAR: estaba bajo la idea errónea de que tenía que incluir todo el programa en la respuesta, resulta que solo necesitaba la función que lo hace. Eso es bueno.
Estoy bastante seguro de que puedo reducir algunos bytes aquí y allá. Ya he empleado algunos trucos. Una gran parte del programa está dedicada a obtener el argumento y convertirlo en un int. Este es mi primer código de golf. Si estoy haciendo algo mal dime: P
fuente
i++
y cambiandoi&1
ai++&1
. Además, aunque como variables globalesi
yj
se inicializan a cero inicialmente, deben inicializarse dentro de la función, ya que los envíos de funciones deben ser reutilizables .i,j;f(c){for(i=j=0;i<c;)printf("%d ",j+=j+i++%2);}
Pruébelo en línea!Haskell ,
47405349444034 bytes-4 bytes gracias a user202729
-6 bytes gracias a Laikoni
Pruébalo en línea!
fuente
otherwise
con eg1>0
(otherwise == True
)Rubí , 26 bytes
Pruébalo en línea!
Supera todas las respuestas de rubí más antiguas.
Explicación
1/3
en binario se ve así0.01010101...
, así que si lo multiplicas por potencias de dos, obtienes:Pero Ruby pone los números en la división int, dándome la secuencia que necesito.
fuente
J , 9 bytes
¿Cómo funciona?
i.
- lista 0..n-12|
- los elementos de la lista mod 2\
- todos los prefijos#.
- a decimal[:
- tapa el tenedor (ya que tengo un número par (4) de verbos)Pruébalo en línea!
fuente
Retina , 28 bytes
Pruébalo en línea!
Basado en 0, por lo que la entrada n da el primer n + 1 resultados.
Explicación
Utiliza la recursividad de OEIS:
Veamos el programa:
Esta es una etapa constante: descarta la entrada y establece la cadena de trabajo en
0
el valor inicial de la secuencia. El)
envuelve esta etapa en un grupo. Ese grupo en sí no hace nada, pero casi todas las etapas (incluidas las etapas del grupo) registran su resultado en un registro, y necesitaremos dos copias de0
ese registro para que el programa funcione.Hay un montón de configuraciones aquí:
"$+"+
envuelve el escenario en un bucle. El"$+"
se trata como una sustitución y se$+
refiere a la entrada del programa, es decir, n . Esto significa que el ciclo se ejecuta n veces.Luego
¶<
envuelve cada iteración en una etapa de salida, que imprime la entrada de la etapa con un salto de línea final (por lo que la primera iteración imprime el cero, la segunda iteración imprime el resultado de la primera iteración y así sucesivamente).La etapa misma reemplaza toda la cadena de trabajo con la sustitución en la última línea. Ese utiliza un paréntesis de cierre implícito y argumentos implícitos para el operador de repetición
*
, por lo que en realidad es la abreviatura de:Las cosas dentro de los paréntesis se pueden dividir en tres partes:
$&*_
: da una cadena de a (n-1)_
s._
: da un sencillo_
.2*$-1*_
: da una cadena de 2 * a (n-1)_
. Se$-1
refiere al penúltimo resultado en el registro de resultados, es decir, la iteración del bucle antes del último. Por eso, para empezar, necesitábamos copias del cero en el registro, de lo contrario, esto se referiría a la entrada del programa en la primera iteración.Luego
$.(…)
mide la longitud de la cadena resultante. En otras palabras, hemos calculadoa(n) = a(n-1) + 1 + 2*a(n-2)
yendo a través de unary (aunque en realidad no:$.(…)
es vago y en realidad no evalúa su contenido si puede determinar la longitud resultante directamente a través de la aritmética, por lo que esto es incluso bastante eficiente).El resultado de la iteración final del bucle (el elemento n + 1º de la secuencia) se imprime debido a la salida implícita de Retina al final del programa.
fuente
Brain-Flak , 36 bytes
Pruébalo en línea!
Explicación:
El siguiente número en la secuencia se obtiene por
n*2+1
on*2+0
.fuente
Ruby
42 41 43 41 37 35 31 3330 bytes-2 bytes gracias a Unihedron
-3 bytes gracias a GB
Pruébalo en línea!
fuente
->x{a=0;x.times{a-=~a+p(a)%2}}
> <> , 22 + 3 (-v indicador) bytes
Pruébalo en línea!
Explicación
La pila se inicializa con el contador de bucle.
fuente
Java 8,
115818052 bytesPuerto de la respuesta Python 2 de @Neil .
1 indexado y enviado directamente, cada valor en una línea separada.
Explicación:
Pruébalo en línea.
Antigua respuesta de 80 bytes:
Entrada indexada 1 y
String
salida delimitada por espaciosExplicación:
Pruébalo en línea.
fuente
Perl 6 ,
35 30 27 2520 bytesPruébalo (35)
Pruébalo (30)
Pruébalo (30)
Pruébalo (27)
Pruébalo (25)
Pruébalo (20)
Expandido:
fuente
Python 2 , 33 bytes
Pruébalo en línea!
Python 2 , 34 bytes
Pruébalo en línea!
Devoluciones en orden inverso.
fuente
C,
4746 bytesEl acumulador
a
comienza con cero. En cada paso, lo duplicamos (a+=a
) y agregamos uno si el bit menos significativo anterior fue cero (!(a%2)
o equivalente-(~a)%2
).Programa de prueba
Resultados
fuente
Japt ,
10976 bytesTodo derivado independientemente de otras soluciones.
1 indexado.
Intentalo
Explicación
Intentalo
Versión de 7 bytes
Intentalo
Versión de 9 bytes
Intentalo
fuente
Haskell , 52 bytes
Pruébalo en línea!
fuente
MATL , 7 bytes
Pruébalo en línea!
Explicación:
La salida sería
0, 1, 2, 5 ...
siP
se agregara al final (flip
), lo que lo convierte en 8 bytes.fuente
&+
Rubí
-n
,3230 + 1 bytesYa que tenemos exactamente 1 línea de entrada, ¡
$.
es muy conveniente!EDITAR: Estoy sorprendido de que logré superarme a mí mismo, pero parece usar el
-n
que cuenta como 1 (por la regla 2 en condiciones especiales predeterminadas , ya que Ruby se puede ejecutar conruby -e 'full program'
(por lo tanto,-n
es 1), todas las instancias de lasgets
cuales solo se usan una vez. se golfed 1 char de esta manera; creo que este es un hito para el rubí, por favor, hable si no está de acuerdo con este tren de pensamiento antes de reutilizarlo repetidamente en el futuro)Pruébalo en línea!
Explicación
fuente
AWK
a=0
, 31 bytesPruébalo en línea!
Utiliza la fórmula descaradamente robada de esta otra respuesta de Ruby.
Si bien no haber
a=0
funcionado (awk trata "vacío" como 0), el primer elemento de 0 no se imprimirá y en su lugar será unaempty
línea, que si bien diría que una salida válida probablemente no pasará, por loa=0
que puede ser insertado como argumento de línea de comando.fuente
C, 52 bytes
1 indexado
Pruébalo en línea!
fuente
brainfuck , 40 bytes
Pruébalo en línea!
0 indexado. Entrada como código de caracteres, salida como unario con bytes nulos que separan series de códigos de caracteres 1. Asume celdas de 8 bits a menos que desee ingresar más de 255. Asume celdas negativas, aunque esto podría solucionarse a expensas de varios bytes.
Anteriormente, 50 bytes
Pruébalo en línea!
Entradas como código char, salidas como código char. 1 indexado. Probablemente podría jugar un poco al golf.
@Unihedron señala que olvidé especificar que esto necesita celdas de tamaño infinito, de lo contrario, supera el octavo número.
fuente