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
xocurre en la secuencia, entonces2x+1y3x-1tambié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 ϵ Ayx ϵ 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
niteraciones.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 elnelemento 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
mines 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+1y3x-1como se ve en la mayoría de las otras respuestas, reviso todos los enteros y compruebo si pueden reducirse1aplicando repetidamente(x-1) / 2o(x+1) / 3si son divisibles.fuente
f=filter t[1..]!!), porque no creo que esto sea correcto.Haskell
7774 bytesEsto proporciona una función
apara la enésima entrada. Es cero indexado. Alternativamente,a=nub$f[1]creará la lista completa (perezosamente).Es una variante de la lista del
Setcódigo de Reinhard Zumkeller .fuente
ylugar dexsguardar 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
1y obviamente no funcionó.Brachylog , 45 bytes
Calcula
N = 1000en 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)forversió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
xy agregue2x+1y3x-1al 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
setel 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
mapaquí es solo una colección de llaves; Sus valores son ignorados. Utilizomappara 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
sety 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
ntiempos de transformación y luego ordena y extrae elnelemento 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
*1truco es buenoJ, 31 bytes
Utiliza indexación basada en cero. Muy ineficiente de memoria.
Explicación
fuente
Octava, 68 bytes
fuente
;endPerl,
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
mys, thereturny theprint(No puedo probar, no tengo perl)return. Elprintpuede ser reemplazado por asay. La mayoría de losmyno son necesarios (sólo se necesita la anterior$aen la función que pienso. No inicialice ni declarar@b. Es probable que pueda dejar caer la inicialización de$isi lo hace$i++en el inicio del tiempo en lugar de al final.popSe 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