Su tarea es, con un número de entrada p, encontrar el número de orden de bala de cañón positivo más pequeño pque NO sea 1.
Definición
Un número de bala de cañón (de orden p) es un número que es ambos:
- Un
pnúmero-gonal ( Ver esta página ). y un
pnúmero de pirámide gonal.- El
nnúmero de lappirámide th- gonal es la suma de los números 1 ° anth-pgonal.- (por ejemplo
4th square pyramid number = 1 + 4 + 9 + 16 = 30)
- (por ejemplo
La siguiente imagen representa el número de la 4ta pirámide cuadrada, como una pirámide cuadrada.

Para más información, visite este enlace .
- El
El número de bala de cañón de orden 3, por ejemplo, es 10, porque es:
- El cuarto número de triángulo (
1 + 2 + 3 + 4 = 10) - y el tercer número de pirámide triangular. (
1 + 3 + 6 = 10)
Fórmulas
NOTA: Si puede encontrar (o hacer) fórmulas más útiles que las mías aquí, publíquelas aquí (o envíeme un mensaje sobre el tema de chat de preguntas).
- Si está interesado, la fórmula para el
nnúmeropgonal es:
- Y el
nnúmero de lappirámide th- gonal es:
Especificaciones
pse garantiza que sea mayor que 2.- El programa debe verificar los valores para una solución de
phasta (e incluyendo)2^16. Su programa puede hacer cualquier cosa si no se encuentran soluciones parap. - Solo índices positivos para
n.
Casos de prueba
3salidas10(4 ° número de triángulo, 3 ° número de pirámide de triángulo)4salidas4900(número cuadrado 70, número piramidal cuadrado 24)
Este es el código de golf, por lo que la respuesta más corta en bytes gana.
Nota: Si publica una solución, incluya una descripción de cómo funciona el código.
¿Debo comenzar una recompensa por una solución que sea mejor y no use mis fórmulas?



n? Si no, ¿cuál es el rangonque usará?nLosnnúmeros de pirámides gonales y gonales no deberían necesitar definición.Respuestas:
Python 3,
129127bytesUna función que toma la entrada a través del argumento y devuelve la salida.
Esta es una fuerza bruta extremadamente ingenua, y lleva mucho tiempo incluso para moderadamente grande
p; el tiempo de ejecución será ridículo para cualquier cosa que se acerque al máximo dadopde2^16, pero no hay ninguna razón por la cual el programa no funcionaría, dado el tiempo suficiente.Probablemente hay formas mucho más cortas y rápidas de hacer esto, pero pensé que sería bueno publicar algo para comenzar esto.
Cómo funciona
El valor de retorno
xse inicializa en2, y luego el programa simplemente recorre todos los números piramidalespgonales ypgonales hasta el ordenx. Si los números piramidales actualesp-gonales yp-gonales, calculados usando las fórmulas, son iguales entre sí yx, entonces,xdebe ser el número de bala de cañón relevante y se devuelve. De lo contrario,xse incrementa y el programa intenta nuevamente el nuevo valor dex.En términos de golf, se utiliza un producto cartesiano para colapsar los dos bucles for para los números piramidales
pgonal ypgonal en un solo bucle, y las fórmulas se factorizaron aún más para ahorrar unos pocos bytes.fuente
JavaScript,
11198 bytessin golf
c no se reinicializa en el bucle interno porque la siguiente p [b] es definitivamente más grande que la actual g [c] (por lo que tenemos que seguir adelante de todos modos)
ejemplos
fuente
C, 107 bytes
Sin golfista con parámetros de prueba:
Esto utiliza el hecho de que el número n-ésimo p-gonal se puede definir como
n(1+(p-2)(n-1)/2)y el número de la pirámide es la suma de los números antes mencionados.Creo que se puede jugar más, dado que no es realmente necesario
aguardar la variable .fuente
ien tu fórmula el número imaginarioi?ise supone que esn. Tenía una notación diferente llena de basura en mi investigación. No puedo imaginar el uso de un número imaginario para este problema, y definitivamente no puedo imaginar el uso en Cantiguo programa PHP,
115106bytes+16 para PHP actual, ver abajo
<scriptpath>?n=<number>con PHP <5.4, agregar
register_globals=1aphp.ini(+18?)1con$n=$_GET[n]. O reemplazar1con$n=$argv[1], correrphp -f <filename> <number>.echo$pcondie(print$p)+/- 0 para la función:
bucles para siempre si no encuentra nada. Reemplace
1con$p<1e6para romper a 100k o con$p<$p+1un bucle hasta que el entero se desborde. (probado con PHP 5.6)ejemplos (en función)
ejemplos de salida
fuente