Introducción
La fórmula P n = 0.5 × (3n 2 -n) genera un número pentagonal ( A000326 ) . O simplemente puede contar la cantidad de puntos utilizados:
Puedes usar la fórmula o el gif de arriba para encontrar los primeros números pentagonales:
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425, 477, etc...
A continuación, tenemos que calcular la suma de x números consecutivos.
Por ejemplo, si x = 4 , debemos mirar P n + P n + 1 + P n + 2 + P n + 3 (que consta de 4 términos). Si la suma de los números pentagonales también es un número pentagonal, llamaremos a esto un número pentágono pentagonal .
Para x = 4 , el número pentágono pentagonal más pequeño es 330
, que está hecho de 4 números pentagonales consecutivos: 51, 70, 92, 117
. Entonces, cuando la entrada es 4
, su programa de función debería salir 330
.
Tarea
- Cuando se le da un número entero mayor que 1, genera el número pentágono pentagonal más pequeño.
- Puede proporcionar una función o un programa.
- Nota: No hay soluciones para, por ejemplo, x = 3 . Esto significa que si no se puede hacer un número a partir de los primeros 10000 números pentagonales, debe dejar de calcular y generar lo que mejor le convenga.
- Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Casos de prueba:
Input: 2
Output: 1926 (which comes from 925, 1001)
Input: 3
Output: ?
Input: 4
Output: 330 (which comes from 51, 70, 92, 117)
Input: 5
Output: 44290 (which comes from 8400, 8626, 8855, 9087, 9322)
Input: 6
Output: 651 (which comes from 51, 70, 92, 117, 145, 176)
Input: 7
Output: 287 (which comes from 5, 12, 22, 35, 51, 70, 92)
Input: 8
Output: ?
Input: 9
Output: 12105 (which comes from 1001, 1080, 1162, 1247, 1335, 1426, 1520, 1617, 1717)
Input: 10
Output: ?
También se pueden dar números más grandes:
Input: 37
Output: 32782
Input: 55
Output: 71349465
Input: 71
Output: 24565290
10001-x
x = 3
no tiene solución?9919
->496458299155
Respuestas:
CJam, 29 bytes
Pruébalo en línea.
Tarda un par de segundos en correr.
Explicación
Primero, debemos verificar cuántos números pentagonales debemos considerar como sumas potenciales. La suma de los primeros 10,000 números pentagonales es
500050000000
. El primer número pentagonal mayor que ese es el 577,380º.Utilicé un programa ligeramente modificado para encontrar las entradas más grandes que producen una solución no vacía. Estas son todas las soluciones para entradas mayores a 9,000:
fuente
Lua, 142 bytes
Sin golf
Yay para invertir mesas!
Actualización de 142 bytes: se guardaron 10 bytes al eliminar la llamada de función 'tonumber' superflua.
fuente
Haskell, 109 bytes
Devuelve
0
si no hay un número de pentágono pentagonal.Ejemplo de uso (tarda un poco en terminar):
map (#take(10^4)p) [1..10]
->[1,1926,0,330,44290,651,287,0,12105,0]
.Es más o menos una implementación directa de la definición: si la suma de los primeros
x
elementos está en la lista, envíela, de lo contrario, vuelva a intentarlo con la cola de la lista. Comience con los primeros 10,000 números pentagonales, pare y regrese0
si la lista tiene menos dex
elementos.fuente
PARI / GP, 71 bytes
Me gusta la
ispolygonal
función en PARI / GP.fuente
Python 3, 144 bytes
Esto invierte la definición de un número pentagonal; si P (n) = (3n ^ 2-n) / 2, entonces una P dada será un número pentagonal iff (1 + sqrt (24 * P + 1)) / 6 es un número entero. (Técnicamente, también debe mirar (1-sqrt (24 * P + 1)) / 6, pero eso siempre debe ser negativo.) También usa espacios y pestañas como dos niveles de sangría diferentes, como se sugiere aquí . Esto no genera nada si no puede encontrar un número pentagonal pentagonal; ¿Confío en que está bien?
Creo firmemente que alguien más inteligente que yo podría encontrar una manera de acortar esto aún más, probablemente alrededor del ciclo for.
fuente
LabVIEW, 39 primitivas de LabVIEW
No hay gif que se ejecute esta vez.
El nodo matemático en bucle crea una matriz de todos los números. Tome Sub-array, agregue elementos, busque ese número, si se encuentra, tome el índice y pare el ciclo.
Una entrada inválida saca el número pentagonal más alto.
fuente
R,
114100bytessin golf (un poco)
fuente
Jalea , 30 bytes
Este código funciona con esta versión de Jelly y es equivalente al siguiente código binario:
Es mucho más lento y necesita mucha memoria para el intérprete en línea, ya que verifica los primeros 150,000,000 de pentagonalidad (149,995,000 es el número pentagonal número 10,000 ).
Al acortar el rango a algo más sensato, ¡puede probarlo en línea! para entradas lo suficientemente pequeñas.
Idea
Un resultado conocido sobre los números pentagonales es que x es pentagonal si y solo si sqrt (24x + 1) - 1 es divisible por 6 .
En lugar de calcular los primeros 10,000 números pentagonales, definimos un enlace auxiliar que elimina los números no pentagonales de una matriz dada. ¿Por qué? Debido a que la última versión de Jelly que es anterior a este desafío no tiene una forma sensata de cruzar listas ...
Código
Gelatina, 21 bytes (no competitiva)
La última versión de Jelly tiene dos características nuevas (cortes superpuestos y filtrado / intersección de listas) y una corrección de errores, que permite un recuento de bytes mucho menor.
Este código funciona bien en mi computadora de escritorio, pero es un poco lento para el límite de tiempo de TIO. Para probarlo en línea! (para entradas suficientemente pequeñas), tenemos que reducir el rango inicial una vez más.
Cómo funciona
fuente
Mathematica 85 bytes
realiza una búsqueda rápida hasta P 10 4 .
fuente
Axioma, 157 bytes
sin golf y resultados
esplenation: podemos encontrar n usando el resultado "a", ver abajo
[use 1 + sqrt (...) porque n> 0]
Esto significa que si existe uno n0 tal que
que
Después de eso tenemos que demostrar que p (n0) = a para estar seguros (porque no siempre es así)
Pero el truco principal sería hacer la suma
solo al comienzo, y encuentre la siguiente suma de elementos x simplemente usando
y así sucesivamente para las otras sumas (usando arriba en la declaración a: = a + p (j + x) -p (j)). Esto significa que no es necesario una suma de elementos número x dentro del bucle ...
fuente
Python 2 ,
128124 bytesPruébalo en línea!
fuente
Javascript 93 bytes
fuente