El otro día se me ocurrió una serie de números y decidí verificar cuál era el número OEIS. Para mi sorpresa, la secuencia no parecía estar en la base de datos de OEIS, así que decidí nombrar la secuencia después de mí (tenga en cuenta que alguien más que es mucho más inteligente que yo probablemente ya haya llegado a esto, y si alguien encuentra el nombre real de esta secuencia, comente y cambiaré el título de la pregunta). Como no pude encontrar la secuencia en ningún lado, decidí ponerle un nombre, de ahí "Números de grifos". EDITAR: Gracias a @Surb por llamar mi atención sobre el hecho de que esta secuencia es igual a la secuencia OEIS A053696 - 1.
Un número de grifo es un número de la forma , donde y son enteros mayores o iguales que dos, y la secuencia de grifo es el conjunto de todos los números de grifo en forma ascendente orden. Si hay varias formas de formar un número de grifo (el primer ejemplo es , que es y ), el número solo se cuenta una vez en la secuencia. Los primeros números de Gryphon son: .
Tu tarea:
Escribir un programa o función que recibe un número entero como entrada y salida a la ésimo número Gryphon.
Entrada:
Un entero entre 0 y 10000 (inclusive). Puede tratar la secuencia como indexada a 0 o indexada a 1, lo que prefiera. Indique qué sistema de indexación utiliza en su respuesta para evitar confusiones.
Salida:
El número de grifo correspondiente a la entrada.
Casos de prueba:
Tenga en cuenta que esto supone que la secuencia está indexada en 0. Si su programa asume una secuencia indexada en 1, no olvide incrementar todos los números de entrada.
Input: Output:
0 ---> 6
3 ---> 20
4 ---> 30
10 ---> 84
99 ---> 4692
9999 --> 87525380
Tanteo:
Este es el código de golf , por lo que gana la puntuación más baja en bytes.
Respuestas:
Jalea , 9 bytes
Un programa completo que lee un número entero (1 indexado) de STDIN e imprime el resultado.
Pruébalo en línea!
¿Cómo?
Un número de Gryphon es un número que se puede expresar en una base menor que sí mismo, de modo que todos los dígitos son unos excepto el menos significativo, que es un cero. Por ejemplo:
Este programa toma
n
, luego comienzav=0
y comprueba esta propiedad e incrementav
hasta encontrarn
esos números, luego genera el último.Para probar un- 1
b
número base , resta uno de cada dígito, convierte de basev
y luego verifica si el resultado es . (Tenga en cuenta que es menor que )b
v
fuente
MATL ,
1613 bytesBasado en 1.
Pruébalo en línea!
Explicación
Considere la entrada
n = 3
como un ejemplo.La matriz obtenida en el paso (*) contiene posiblemente números repetidos de Gryphon. En particular, contiene
n
distintos números de Gryphon en su primera fila. Estos no son necesariamente losn
números más pequeños de Gryphon. Sin embargo, la entrada inferior izquierda2+2^+···+2^n
excede la entrada superior derechan+n^2
y, por lo tanto, todos los números en la última fila exceden los de la primera fila. Esto implica que extender la matriz hacia la derecha o hacia abajo no contribuiría con ningún número de Gryphon menor que losn
números más bajos de la matriz. Por lo tanto, se garantiza que la matriz contenga losn
números de Gryphon más pequeños. En consecuencia, sun
elemento único más bajo es la solución.fuente
Haskell , 53 bytes
Pruébalo en línea!
Generamos una lista infinita de todos modo que una búsqueda de fuerza bruta muestra que este es el caso.n ≥ 6
La respuesta es una función de índice (indexado a cero) en esta lista, denotada en Haskell como
(list!!)
.¿Por qué es
a^y+n==n*a+a
correcto?De la fórmula para sumar una progresión geométrica :
tenemos, dejando :( α , ρ , ν) = ( a , a , x ) n = ∑i = 1Xunayo= a ( 1 - aX)1 - a= a - ax +11 - a.
Al reorganizar la ecuación, obtenemos .n ( 1 - a ) = a - ax + 1
Reorganizando eso aún más, obtenemos .unax + 1+ n = n a + a
Una sustitución en la búsqueda de fuerza bruta produce la expresión final .y= x + 1
a^y+n=n*a+a
¿Está buscando hasta que sea
n
suficiente?Si (en otras palabras, ), entonces que prueba . Por lo tanto, no tiene sentido verificar ninguno de los valores .a > n a ≥ n +1 unay+ n > a2≥ ( n + 1 ) a = n a + a unay+ n ≠ n a + a a > n
Del mismo modo: si , entonces demostrando nuevamente .y> n unay+ n > anorte= an -1a ≥ 2n -1a >∗( n + 1 ) a = n a + a , unay+ n ≠ n a + a
fuente
Python 3.8 (versión preliminar) ,
9892897871 bytesPruébalo en línea!
0 indexado. La división de enteros se debe usar aquí porque f (10000) desborda los flotadores.
Genera todos los números Gryphon donde y , los ordena, y selecciona el -ésimo elemento.2 ≤ a ≤ n + 2 2 ≤ x ≤ n + 2 norte
-6 bytes gracias a Jonathan Allan
-3 bytes gracias a ArBo. Casi hice lo que me sugirió, pero traté de usar
{*(...)}
lo que de todos modos no ahorró espacio-11 bytes gracias a Mathmandan
-7 bytes gracias a ArBo
Prueba matemática de validez
Uso de la indexación 0 en aras de esta prueba, a pesar de que la convención matemática está indexada en 1.
fuente
f=
es innecesario ylambda n,r=range:
ahorrará 4 más ( como así )set()
y sustituirla por una comprensión de conjunto para llegar a 89f=
enlace TIO poniéndolo en el encabezado, como en el TIO de mi 89-byterJ ,
3532 bytes-3 bytes gracias a FrownyFrog
Pruébalo en línea!
La explicación es la misma que la original. Simplemente usa la forma explícita para guardar los bytes al eliminar el múltiplo
@
.respuesta original, tácita, con explicación: 35 bytes
Pruébalo en línea!
Similar al enfoque de Luis Mendo, creamos una "tabla de potencia" (como una tabla de tiempos) con la fila superior
2 3 ... n
y la columna izquierda que1 2 ... n
resultan en:^~/ >:
crea la tabla, y1+i.@+&2
crea las1... n
secuencias, y agregamos 2 (+&2
) a la entrada para asegurarnos de que siempre tengamos suficientes elementos para crear una tabla, incluso para 0 o 1 entradas.Después de tener la tabla de arriba, la solución es trivial. Simplemente escaneamos la suma de las filas
+/\
, y luego eliminamos la primera fila, aplanamos, tomamos únicos y ordenamos/:~@~.@,@}.
. Finalmente{
usa la entrada original para indexar ese resultado, produciendo la respuesta.fuente
Gaia , 18 bytes
Pruébalo en línea!
Índice basado en 1.
Esta es una respuesta bastante triste con una nariz larga:
)┅:
probablemente desearía poder jugar más golf.Copia el algoritmo dado por la respuesta de Luis Mendo
fuente
R ,
6562 bytes-1 byte gracias a Giuseppe.
Pruébalo en línea!
1 indexado.
Tenga en cuenta que
sort(unique(...))
no funcionaría, yaunique
que daría filas únicas de la matriz y no entradas únicas. Usarunique(sort(...))
obras porque sesort
convierte en vector.fuente
t
ydiffinv
es de 64 bytesdiffinv
. Golfé otros 2 bytes reemplazando[-1:-2,]
con[3:n,]
.JavaScript (ES7), 76 bytes
1 indexado.
Pruébalo en línea!
JavaScript (ES7), 89 bytes
1 indexado.
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) , 51 bytes
Pruébalo en línea!
1 indexado
-8 bytes de @attinat
fuente
Carbón , 36 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. 1 indexado. Utiliza el algoritmo de Luis Mendo. Explicación:
Elimina los más bajosn−1
Imprima el número de grifo restante más bajo.
fuente
Japt , 23 bytes
Querido Jebus! ¡O realmente he olvidado cómo jugar golf o el alcohol finalmente está pasando factura!
No es un puerto directo de la solución de Jonathan, pero está muy inspirado por su observación.
Intentalo
fuente
05AB1E , 12 bytes
0 indexado
Explicación:
fuente