introduction
En mathématiques, un nombre polygonal est un nombre représenté par des points ou des cailloux disposés sous la forme d'un polygone régulier. Les points sont considérés comme des alphas (unités). Ce sont un type de nombres figuratifs bidimensionnels.
Le nombre 10, par exemple, peut être organisé en triangle:
* ** *** ****
Mais 10 ne peut pas être organisé en carré. Le chiffre 9, en revanche, peut être:
*** *** ***
Certains nombres, comme 36, peuvent être organisés à la fois en carré et en triangle:
****** * ****** ** ****** *** ****** **** ****** ***** ****** ******
Par convention, 1 est le premier nombre polygonal pour un nombre quelconque de côtés. La règle pour agrandir le polygone à la taille suivante consiste à étendre deux bras adjacents d'un point, puis à ajouter les côtés supplémentaires requis entre ces points. Dans les schémas suivants, chaque couche supplémentaire est représentée en rouge.
Numéros triangulaires:
Numéros carrés:
Des polygones avec un plus grand nombre de côtés, tels que des pentagones et des hexagones, peuvent également être construits selon cette règle, bien que les points ne formeront plus un réseau parfaitement régulier comme ci-dessus.
Nombres pentagonaux:
Numéros hexagonaux:
Source: Wikipedia
Ta tâche
Étant donné un entier positif N (1 <= N <= 1000), imprimez chaque type de nombre polygonal N à partir des nombres triangulaires jusqu'aux nombres icosagonaux (20 gon) inclus.
Par exemple, le nombre 10 est un nombre triangulaire et un nombre décagonal, donc la sortie devrait ressembler à quelque chose (vous pouvez choisir votre propre format de sortie, mais il devrait ressembler à ceci):
3 10
Cas de test
1 -> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 -> (None)
3 -> 3
6 -> 3 6
36 -> 3 4 13
Pour référence, le n
-ième- k
numéro de zone est:
Crédits: xnor
N'oubliez pas qu'il s'agit de code-golf , donc le code avec le moins d'octets gagne.
la source
n
nombre k-gonal est(k-2)*n*(n-1)/2 + n
.Réponses:
Python 3, 68 octets
Pour chaque nombre potentiel de côtés
s+2
, résout la formule quadratiqueR=s*n*(n-1)/2 + n
pourn
voir si le résultat est un nombre entier.Comparer (73 octets):
Une approche alternative de résolution de
s
donne 62 octets en Python 3, mais échoueR=1
.la source
JavaScript (ES6), 90 octets
Résout l'équation quadratique. 73 octets sur les nouvelles versions de Firefox:
la source
> <>, 62 + 3 = 65 octets
Attend l'entrée en haut de la pile, donc +3 octets pour l'
-v
indicateur.Il s'agit de ma première programmation dans> <>, il me manque donc peut-être des astuces évidentes pour raccourcir le code.
Explication:
Initialisation
Déplace N dans le registre, pousse le compteur dans la pile (à partir de
1
, ce qui correspond aux nombres triangulaires), et démarre la séquence avec les valeurs0
et1
.Boucle principale
Compare le haut de la pile avec le registre. S'il est égal, passez à la routine d'impression. S'il est supérieur, passez à la routine de réinitialisation. Sinon, prenez la différence entre les deux éléments de pile supérieurs, ajoutez le compteur et ajoutez à l'élément de pile supérieur précédent. Ceci calcule le prochain nombre polygonal.
Impression
Imprime le compteur + 2, suivi d'une nouvelle ligne, puis passe à la routine de réinitialisation.
Réinitialiser
Supprime les deux premiers éléments de la pile et incrémente le compteur. Termine le programme si le compteur est supérieur à 18, sinon pousse les nombres de départ
0
et1
vers la pile et revient à la boucle principale.la source
Gelée , 22 octets
Essayez-le en ligne!
Explication
la source
Axiome 203 octets
voici moins de golf et de routine qui montrent des chiffres
la source
AWK , 67 octets
Essayez-le en ligne!
J'ai essayé de résoudre le quadratique, mais vérifier chaque valeur pour voir si cela fonctionne est plus court (et moins sujet aux erreurs pour moi)
la source
R,
6866 octetsLit à
N
partir de stdin. Calcule les premiersN
nombres k-gonaux et obtient lesk
où ils sont égauxN
, en utilisant la formule de xnor; cependant, enregistre les octets entre parenthèses en utilisant1:18
au lieu de3:20
et en ajoutant2
à la fin.expand.grid
par défaut les noms des colonnesVar1
,Var2
..., si un nom n'est pas donné.$
index par correspondance partielle,m$V
correspond donc àm$Var2,
la deuxième colonne.ancienne version:
Essayez-le en ligne!
la source
Pari / GP , 34 octets
Pari / GP a un intégré pour tester si un nombre est un nombre polygonal.
Essayez-le en ligne!
la source
Gelée , 20 octets
Je viens de commencer à écrire une dupe efficace de ce défi (bien que couvrant tous les k> 1 et pas seulement [1,20]) ... alors à la place je vais y répondre!
Un programme complet imprimant une représentation de la liste Jelly des résultats *
Essayez-le en ligne!
* Aucun résultat n'imprime rien;
un seul résultat imprime juste ce nombre;
plusieurs résultats imprime une liste de nombres
[]
fermée et,
séparéeComment?
la source