Su tarea es bastante simple, calcule el enésimo elemento de A190810 .
Los elementos de A190810 se calculan de acuerdo con estas reglas:
- El primer elemento es 1
- La secuencia va en aumento
- Si
x
ocurre en la secuencia, entonces2x+1
y3x-1
también
Puede usar la indexación basada en 1 o en 0, pero si usa la indexación basada en 0, dígalo en la respuesta.
Casos de prueba
a(1) = 1
a(2) = 2
a(3) = 3
a(4) = 5
a(5) = 7
a(10) = 17
a(20) = 50
a(30) = 95
a(55) = 255
Como se trata de código de golf, ¡la respuesta más corta en bytes gana!
x ϵ A → (2*x) + 1 ϵ A
yx ϵ A → (3*x)-1 ϵ A
, dondeϵ
significa "es miembro de" y→
puede entenderse como "implica".Respuestas:
Jalea , 16 bytes
Muy ineficiente Pruébalo en línea!
Cómo funciona
fuente
Python 2,
888372 bytesEs posible que desee leer los programas en esta respuesta en orden inverso ...
Más lento y más corto aún, gracias a Dennis:
Pruébalo en línea
Esto no se ejecuta tan rápido, pero es más corto ( 83 bytes ). Al ordenar y eliminar duplicados en cada iteración, así como al eliminar el primer elemento, elimino la necesidad de un índice en la lista. El resultado es simplemente el primer elemento después de las
n
iteraciones.Puede que haya superado a Dennis. :RE
Pruébalo en línea
Esta versión a continuación ( 88 bytes ) se ejecuta muy rápido, encontrando el elemento 500000 en aproximadamente dos segundos.
Es muy simple Calcule elementos de la lista hasta que haya tres veces más elementos que
n
, ya que cada elemento agregado puede agregar como máximo 2 elementos únicos más. Luego elimine los duplicados, ordene e imprima eln
elemento th (indexado a cero).Pruébalo en línea
fuente
Python 2, 59 bytes
Basado en la respuesta de Python de @ mbomb007 . Pruébalo en Ideone .
fuente
min
es O (n) mientras que la indexación de la lista es O (1) , por lo que esta solución es al menos O (n²) ...Haskell,
767369 bytesUtiliza un índice basado en 0. Ejemplo de uso:
(filter t[1..]!!) 54
->255
.En lugar de construir la lista insertando repetidamente
2x+1
y3x-1
como se ve en la mayoría de las otras respuestas, reviso todos los enteros y compruebo si pueden reducirse1
aplicando repetidamente(x-1) / 2
o(x+1) / 3
si son divisibles.fuente
f=filter t[1..]!!
), porque no creo que esto sea correcto.Haskell
7774 bytesEsto proporciona una función
a
para la enésima entrada. Es cero indexado. Alternativamente,a=nub$f[1]
creará la lista completa (perezosamente).Es una variante de la lista del
Set
código de Reinhard Zumkeller .fuente
y
lugar dexs
guardar dos bytes? Además, creo que puede reducir la última línea a algo como(!!)$nub.f[1]
(x:xs)
, lo olvidé por completo, gracias.Python 2,
8884 bytesPruébalo en Ideone .
fuente
Pyth,
2019 bytesPruébalo en línea. Banco de pruebas.
Utiliza indexación basada en cero.
fuente
1
y obviamente no funcionó.Brachylog , 45 bytes
Calcula
N = 1000
en aproximadamente 6 segundos en mi máquina.Esto está indexado en 1, por ejemplo
Explicación
Predicado principal:
Predicado 1:
Puede notar que no pasamos ninguna entrada al predicado 1 cuando llamamos
y - Yield
. Debido a la propagación de restricciones, encontrará la entrada correcta una vez que llegue a la1.
cláusula que propagará los valores de entrada correctos.fuente
MATL,
19, 1817 bytesEste es un algoritmo extremadamente ineficiente. El intérprete en línea se queda sin memoria para entradas mayores de 13.
¡Un byte guardado, gracias a Luis Mendo!
Pruébalo en línea!
Esta versión es más larga, pero más eficiente (21 bytes)
Pruébalo en línea
Explicación:
La forma lógica de hacerlo es agregar elementos a la matriz hasta que sea lo suficientemente largo como para agarrar el i-ésimo elemento. Así es como funciona el eficiente. La forma golfosa (e ineficiente) de hacerlo es aumentar el tamaño de la matriz i veces.
Así que, primero, se define la matriz de inicio:
1
. Luego intercambiamos los dos elementos superiores, de modo que la entrada esté en la parte superior.w
. Ahora, recorremos la entrada con:"
. Entonces yo veces:Ahora, tenemos una matriz gigantesca de la secuencia. (Mucho más de lo que se necesita para calcular) Así que dejamos de hacer bucles
]
y tomamos el i-ésimo número de esta matriz conG)
(indexado 1)fuente
1`tEQy3*qvuStnG<]G)
. La condición del bucle estnG<
(salir cuando la matriz ya tiene el tamaño requerido)for
versión de bucle puede tomar la entrada en unario como una cadena y eliminar el:
JavaScript (ES6), 63 bytes
Probablemente se rinde rápidamente debido a la recurrencia.
fuente
Retina, 57
Pruébalo en línea!
0 indexado. Sigue el algoritmo de uso frecuente: elimine el valor mínimo del conjunto actual, llámelo
x
y agregue2x+1
y3x-1
al conjunto un número de veces igual a la entrada, entonces el número inicial es el resultado. El "conjunto" en Retina es solo una lista que se ordena repetidamente y se hace para que contenga solo elementos únicos. Hay algunos bits furtivos agregados al algoritmo para el golf, que explicaré una vez que haya tenido más tiempo.¡Muchas gracias a Martin por jugar unos 20 bytes!
fuente
Clojure,
114108 bytesNo me sorprendería si esto pudiera reducirse / reducirse en gran medida, pero
set
el hecho de que no sea compatible realmente daña mi tren de pensamiento.Prueba el en línea
Versión con espacios:
fuente
05AB1E,
1817 bytesUtiliza la codificación CP-1252 .
Explicación
Pruébelo en línea para números pequeños
Muy lento.
Utiliza indexación basada en 0.
fuente
C ++, 102 bytes
Esta función lambda requiere
#include <map>
yusing std::map
.El
map
aquí es solo una colección de llaves; Sus valores son ignorados. Utilizomap
para beneficiarme del código breve para la inserción:Gracias al orden ordenado de
map
, el elemento más pequeño es extraído pork.begin()->first
.fuente
set
y inicializador listas:[](int i){int t;set<int>k{1};for(;i--;k.erase(t))t=*k.begin(),k.insert({t*2+1,t*3-1});return t;};
.En realidad, 27 bytes
Pruébalo en línea!
Este programa utiliza indexación basada en 0. El enfoque es de fuerza bruta, así que no esperes que funcione en el intérprete en línea para entradas más grandes.
Explicación:
fuente
CJam (25 bytes)
Demo en línea . Tenga en cuenta que esto usa indexación basada en cero.
Esto utiliza un enfoque similar a la mayoría: aplica los
n
tiempos de transformación y luego ordena y extrae eln
elemento th. Como un guiño a la eficiencia, la deduplicación se aplica dentro del ciclo y la clasificación se aplica fuera del ciclo.fuente
1ari{(_2*)\3*(@||$}*0=
(También mucho más eficiente.)Retina , 48 bytes
Pruébalo en línea!
Inspirado por la respuesta de nimi, pensé en probar un enfoque diferente para Retina, haciendo uso de la marcha atrás del motor regex para averiguar si algún número (unario) dado está en la secuencia o no. Resulta que esto se puede determinar con una expresión regular de 27 bytes, pero usarlo cuesta unos pocos más, pero aún así es más corto que el enfoque generativo.
Aquí hay una solución alternativa de 48 bytes:
Y usando E / S unarias podemos hacer 42 bytes, pero estoy tratando de evitar eso y la otra respuesta Retina usa decimal también:
fuente
Ruby, 70 bytes
Explicación
fuente
*1
truco es buenoJ, 31 bytes
Utiliza indexación basada en cero. Muy ineficiente de memoria.
Explicación
fuente
Octava, 68 bytes
fuente
;end
Perl,
173132 bytes +1 para -n = 133Sin golf:
Probablemente pueda hacerlo mejor si lo pensara más, pero esto es lo que se me ocurrió después de unos minutos. Mi primera vez jugando al golf, ¡fue muy divertido!
Gracias a @Dada y @ TùxCräftîñg (y un montón de optimizaciones de bytes menores) por -40 bytes
fuente
my
s, thereturn
y theprint
(No puedo probar, no tengo perl)return
. Elprint
puede ser reemplazado por asay
. La mayoría de losmy
no son necesarios (sólo se necesita la anterior$a
en la función que pienso. No inicialice ni declarar@b
. Es probable que pueda dejar caer la inicialización de$i
si lo hace$i++
en el inicio del tiempo en lugar de al final.pop
Se más corto queshift
. Tenga en cuenta que hay mucho más para jugar al golf que simplemente eliminar espacios en blanco y líneas nuevas ...JavaScript (ES6), 58
Menos golf
Prueba
Acerca del tiempo y la memoria: elemento 500000 en ~ 20 segundos y 300 MB utilizados por mi FireFox de 64 bits alfa
fuente