Definamos una secuencia de enteros positivos. Definiremos la secuencia en números pares para que sea el doble del término anterior. Los índices impares de la secuencia serán el número entero positivo más pequeño que aún no aparece en la secuencia.
Aquí están los primeros dos términos.
1,2,3,6,4,8,5,10,7,14,9,18,11,22,12,24,13,26,15,30
También puede pensar en esto como la lista de pares concatenados (n, 2n) donde n es el entero positivo menos utilizado hasta ahora.
Tarea
Dado un número n como calcular entrada de la n º término en esta secuencia.
Este es el código de golf, por lo que debe intentar minimizar el tamaño de su código fuente medido en bytes.
(n,2n)
y cada número aparece solo una vez. Cada par se elige para ser el más pequeño posible mientras se adhiere a la última restricción.Respuestas:
Haskell, 40 bytes
De base cero.
l
construye incrementalmente la secuencia a partir de una lista perezosa de enteros restantes.fuente
JavaScript (ES6),
9282696765 bytes¿Cómo?
Hacemos un seguimiento de:
Internamente, estamos usando un índice basado en 0 i . Por lo tanto, los comportamientos pares e impares se invierten:
En posiciones impares, el siguiente valor es simplemente
2 * b
.En las posiciones pares, utilizamos la función recursiva g () y la tabla de búsqueda a para identificar el valor de coincidencia más pequeño:
Para ahorrar unos pocos bytes, i se inicializa en
{}
lugar de0
. Esto nos obliga a usar:i^n
comparar i con n porque({}) ^ n === n
mientras se({}) - n
evalúa aNaN
.-~i
para incrementar i , porque({}) + 1
generaría una cadena.Manifestación
Mostrar fragmento de código
fuente
Python 3 ,
807269 bytes-7 bytes gracias al Sr. Xcoder !
Pruébalo en línea!
fuente
set(...)
con `{* ...} para 78 bytes{*...}
lugar deset(...)
.{...for...in...}
sería más adiós.True
para 1)Jalea , 15 bytes
Pruébalo en línea!
fuente
Matemáticas ,
5653 bytes-3 bytes gracias JungHwan Min !
Pruébalo en línea!
Basado en la expresión de Mathematica dada en el enlace OEIS.
fuente
Nest[k=0;If[#~FreeQ~++k,#~Join~{k,2k},#]&,{},#][[#]]&
PHP , 64 bytes
Pruébalo en línea!
PHP , 77 bytes
Pruébalo en línea!
PHP , 78 bytes
Pruébalo en línea!
fuente
PHP, 56 bytes
PHP,
7572 bytesPruébalo en línea
fuente
05AB1E ,
161514 bytes1 indexado.
Utiliza el hecho de que la representación binaria de elementos en índices impares en la secuencia termina en un número par de ceros: A003159 .
Pruébalo en línea!
Explicación
fuente
Python 2 ,
595149 bytesPruébalo en línea!
Fondo
Cada entero n positivo puede expresarse únicamente como n = 2 o (n) c (n) , donde c (n) es impar.
Deje ⟨a n ⟩ n> 0 ser la secuencia de la especificación desafío.
Afirmamos que, para todos los enteros positivos , n , o (a 2n-1 ) es par. Como o (a 2n ) = o (2a 2n-1 ) = o (a 2n-1 ) + 1 , esto es equivalente a afirmar que o (a 2n ) siempre es impar.
Suponga que la afirmación es falsa y deje que 2m-1 sea el primer índice impar de la secuencia de manera que o (a 2m-1 ) sea impar. Tenga en cuenta que esto hace que 2m sea el primer índice par de la secuencia de manera que o (a 2m-1 ) sea par.
o (a 2m-1 ) es impar y 0 es par, por lo que un 2m-1 es divisible por 2 . Por definición, un 2m-1 es el número entero positivo más pequeño que aún no aparece en la secuencia , lo que significa que un 2m-1 /2 debe haber aparecido antes. Deje k ser el (primer) índice de un 2m-1 /2 en a .
Como o (a k ) = o (a 2m-1 /2) = o (a 2m-1 ) - 1 es par, la minimidad de n implica que k es impar. A su vez, esto significa que a k + 1 = 2a k = a 2m-1 , contradiciendo la definición de a 2m-1 .
Cómo funciona
está por venir
fuente
R ,
706965 bytesPruébalo en línea!
Una función anónima que toma un argumento.
F
El valor predeterminado esFALSE
o0
para que el algoritmo evalúe correctamente que todavía no hay enteros positivos en la secuencia.El algoritmo genera los pares en un
for
bucle de la siguiente manera (en el quei
va desde2
a2n
por2
):fuente
Haskell , 63 bytes
Pruébalo en línea!
Éste abusa de la evaluación perezosa de Haskell en toda su extensión.
fuente
Perl 6 , 50 bytes
Pruébalo en línea!
1, { ... } ... *
es una secuencia infinita generada perezosamente donde cada término después del primero es proporcionado por el bloque de código delimitado por llaves. Como el bloque hace referencia a la@_
matriz, recibe toda la secuencia actual en esa matriz.@_ % 2
), estamos generando un elemento aún indexada, por lo que el siguiente elemento es el doble del último elemento que tenemos hasta ahora:2 * @_[*-1]
.first * ∉ @_, 1..*
.$_
es el argumento de la función externa. Se indexa en la secuencia infinita, dando el valor de retorno de la función.fuente
Mathematica, 82 bytes
Pruébalo en línea!
fuente
k , 27 bytes
1 indexado. Pruébalo en línea!
Usando en
(!y)^x
lugar de&^x?!y
obras también.fuente
C # (compilador interactivo de Visual C #) , 82 bytes
Pruébalo en línea!
-6 bytes gracias a @ASCIIOnly!
fuente
:
se necesiten los s, ya que será el número más grande en la lista2.0
=>2f
Clojure, 102 bytes
Itera los
n
tiempos para construir la secuencia y devuelve eln
elemento th, indexado 1.fuente
Rubí, 60 bytes.
0 indexado. Hacemos un bucle de
n/2+1
tiempos, generando dos valores cada vez y almacenándolos al completar una matriz en sus índices.v+v*n%2
da la salida, ya seav
ov*2
dependiendo de la paridad den
.fuente
Ruby , 49 bytes
Comience con [0], agregue pares a la matriz hasta que tengamos al menos n + 1 elementos, luego tome el n + 1 (basado en 1)
Pruébalo en línea!
fuente
JavaScript (ES6), 60
65bytesUna solución iterativa.
Menos golf
Prueba
fuente
Jalea ,
131210 bytesEsto usa la observación de mi respuesta de Python .
Pruébalo en línea!
Cómo funciona
fuente