introduction
Un nombre pentagonal ( A000326 ) est généré par la formule P n = 0,5 × (3n 2 -n) . Ou vous pouvez simplement compter la quantité de points utilisés:
Vous pouvez utiliser la formule ou le gif ci-dessus pour trouver les premiers nombres pentagonaux:
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425, 477, etc...
Ensuite, nous devons calculer la somme de x nombres consécutifs.
Par exemple, si x = 4 , nous devons regarder P n + P n + 1 + P n + 2 + P n + 3 (qui se compose de 4 termes). Si la somme des nombres pentagonaux est également un nombre pentagonal, nous l'appellerons un nombre pentagonal pentagonal .
Pour x = 4 , le plus petit nombre pentagonal pentagone est 330
, qui est fait de 4 nombres pentagonaux consécutifs: 51, 70, 92, 117
. Ainsi, lorsque l'entrée est 4
, votre programme de fonction devrait sortir 330
.
Tâche
- Lorsque vous donnez un entier supérieur à 1, sortez le plus petit nombre pentagone pentagonal.
- Vous pouvez fournir une fonction ou un programme.
- Remarque: Il n'y a pas de solutions pour par exemple x = 3 . Cela signifie que si un nombre ne peut pas être créé à partir des 10000 premiers nombres pentagonaux, vous devez arrêter le calcul et produire ce qui vous convient le mieux.
- C'est du code-golf , donc la soumission avec le moins d'octets gagne!
Cas de test:
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: ?
De plus grands nombres peuvent également être donnés:
Input: 37
Output: 32782
Input: 55
Output: 71349465
Input: 71
Output: 24565290
10001-x
x = 3
, qui n'a pas de solutions?9919
->496458299155
Réponses:
CJam, 29 octets
Essayez-le en ligne.
Prend quelques secondes à courir.
Explication
Tout d'abord, nous devons vérifier combien de nombres pentagonaux nous devons considérer comme des sommes potentielles. La somme des 10 000 premiers nombres pentagonaux est
500050000000
. Le premier nombre pentagonal supérieur à celui-ci est le 577 380ème.J'ai utilisé un programme légèrement modifié pour trouver les entrées les plus importantes qui donnent une solution non vide. Ce sont toutes les solutions pour des entrées supérieures à 9 000:
la source
Lua, 142 octets
Non golfé
Ouais pour inverser les tables!
Mise à jour de 142 octets: économisé 10 octets en supprimant l'appel de fonction 'tonumber' superflu.
la source
Haskell, 109 octets
Renvoie
0
s'il n'y a pas de nombre pentagone pentagonal.Exemple d'utilisation (prend un certain temps pour terminer):
map (#take(10^4)p) [1..10]
->[1,1926,0,330,44290,651,287,0,12105,0]
.C'est plus ou moins une implémentation directe de la définition: si la somme des premiers
x
éléments est dans la liste, sortez-la, sinon réessayez avec la queue de la liste. Commencez avec les 10 000 premiers nombres pentagonaux, arrêtez et revenez0
si la liste contient moins dex
éléments.la source
PARI / GP, 71 octets
J'aime la
ispolygonal
fonction dans PARI / GP.la source
Python 3, 144 octets
Cela inverse la définition d'un nombre pentagonal; si P (n) = (3n ^ 2-n) / 2, alors un P donné sera un nombre pentagonal ssi (1 + sqrt (24 * P + 1)) / 6 est un entier. (Techniquement, il devrait également regarder (1-sqrt (24 * P + 1)) / 6, mais cela doit toujours être négatif.) Utilise également des espaces et des tabulations comme deux niveaux d'indentation différents, comme suggéré ici . Cela ne produit rien s'il ne trouve pas de nombre pentagonal pentagonal; J'espère que c'est OK?
Je crois fermement que quelqu'un de plus intelligent que moi pourrait trouver un moyen de raccourcir encore plus cela, probablement autour de la boucle for.
la source
LabVIEW, 39 primitives LabVIEW
Pas de gif en cours d'exécution cette fois.
Le nœud mathématique en boucle crée un tableau de tous les nombres. Prenez un sous-tableau, ajoutez des éléments, recherchez ce numéro, s'il est trouvé, prenez l'index et la boucle d'arrêt.
Une entrée non valide affiche le nombre pentagonal le plus élevé.
la source
R,
114100 octetsnon golfé (un peu)
la source
Gelée , 30 octets
Ce code fonctionne avec cette version de Jelly et est équivalent au code binaire suivant:
Il est de loin lent et gourmand en mémoire pour l'interprète en ligne, car il vérifie les premiers 150 000 000 de pentagonalité (149 995 000 se trouve être le 10 000 e nombre pentagonal).
En réduisant la gamme à quelque chose de plus sensé, vous pouvez l' essayer en ligne! pour des entrées suffisamment petites.
Idée
Un résultat connu sur les nombres pentagonaux est que x est pentagonal si et seulement si sqrt (24x + 1) - 1 est divisible par 6 .
Plutôt que de calculer les 10 000 premiers nombres pentagonaux, nous définissons un lien d'assistance qui supprime les nombres non pentagonaux d'un tableau donné. Pourquoi? Parce que la dernière version de Jelly antérieure à ce défi n'a aucun moyen raisonnable d'intersecter les listes ...
Code
Gelée, 21 octets (non concurrent)
La dernière version de Jelly a deux nouvelles fonctionnalités (superposition de tranches et filtrage / intersection de listes) et une correction de bogue, qui permet un nombre d'octets beaucoup plus faible.
Ce code fonctionne bien sur mon ordinateur de bureau, mais c'est un peu lent pour le délai de TIO. Pour l' essayer en ligne! (pour des entrées suffisamment petites), nous devons à nouveau réduire la plage initiale.
Comment ça fonctionne
la source
Mathematica 85 octets
effectue une recherche rapide jusqu'à P 10 4 .
la source
Axiome, 157 octets
non golfé et résultats
esplénation: on peut trouver n en utilisant le résultat "a", voir ci-dessous
[utilisez 1 + sqrt (...) car n> 0]
Cela signifie que s'il existe un n0 tel que
que
Après, il faut prouver que p (n0) = a pour être sûr (car il n'en est pas toujours ainsi)
Mais l'astuce principale serait de faire la somme
seulement au début, et trouver la somme des éléments x suivants simplement en utilisant
et ainsi de suite pour les autres sommes (en utilisant ci-dessus dans l'instruction a: = a + p (j + x) -p (j)). Cela signifie qu'il n'est pas nécessaire un nombre x élément somme à l'intérieur de la boucle ... ..
la source
Python 2 ,
128124 octetsEssayez-le en ligne!
la source
Javascript 93 octets
la source