Ce défi est inspiré de ce fantastique diagramme animé (merci à flawr de l'avoir posté dans le chat).
Étant donné une entrée n
, dessinez tous ses facteurs premiers sous forme de polygones imbriqués de points, comme spécifié.
Par exemple, étant donné le nombre 357 = 17x7x3
, vous disposez de 3 points dans un triangle, 7 versions de ces triangles dans un heptagone et 17 versions de ces heptagones dans un 17-gon. Bref, des polygones imbriqués allant du plus grand facteur premier à l'extérieur au plus petit à l'intérieur. Pour 357
, votre réponse devrait ressembler un peu à ceci (avec ou sans couleur):
Chaque polygone de chaque nombre premier >= 3
ne doit pas tourner autour du diagramme.
La seule exception est la prime 2
, en particulier pour les puissances impaires de 2
. Comme vous pouvez le voir dans l'exemple 376 = 47x2x2x2
ci-dessous, les 8
s tournent et ne sont pas des lignes simples de 2
s, mais sont des piles verticales pour 4
s dans un carré. Même les pouvoirs de 2
, disposés en carrés, n'ont pas besoin d'être tournés de cette façon.
En fait, 448 = 7x2x2x2x2x2x2
a un diagramme qui ressemble à un heptagone de 64
s, et 64
est disposé en un carré de carrés de carrés, mais sans rotation.
Deux autres exemples sont 440 = 11x5x2x2x2
et 432 = 3x3x3x2x2x2x2
. On voit 440
qu'avec une puissance impaire de 2, a tourné 8
s, mais 432
avec une puissance paire de 2
ne tourne pas ses 16
s.
Et enfin, voici un exemple minimal 10 = 5x2
, sans couleur que j'ai simulé avec Python et son turtle
module.
Le défi
- Étant donné une entrée
n
où1 <= n <= 10000
, affiche une image de ses polygones de facteurs imbriqués. - Les règles sont:
- L'image est constituée de polygones imbriqués de points, d'un polygone avec (le plus grand facteur premier) côtés à l'extérieur jusqu'au plus petit facteur premier à l'intérieur.
- Pour le facteur 2, les puissances de 2 doivent s'empiler en ligne, puis en carrés, puis en ligne de carrés, etc. Même les pouvoirs de 2 ne doivent pas être tournés. Les puissances impaires de 2 doivent être tournées autour de leurs polygones respectifs, et elles doivent être empilées verticalement avant la rotation.
- Vous pouvez orienter l'image comme vous le souhaitez (bien que je préfère vers le haut), mais chaque polygone imbriqué doit être orienté dans la même direction que tout autre polygone à la seule exception des puissances impaires de 2.
- Vous avez deux options pour la taille de l'image et la taille des points:
- La taille de l'image est statique et la taille des points diminue à mesure qu'elle
n
augmente (comme dans l'animation). - La taille du point est statique et la taille de l'image augmente à mesure qu'elle
n
augmente.
- La taille de l'image est statique et la taille des points diminue à mesure qu'elle
- Les trois premières couches de polygones doivent être distinguées des polygones voisins (c'est-à-dire ne pas se toucher), mais compte tenu de la taille des images à et autour
n=10000
, ce n'est pas grave si les couches après commencent à se toucher. Je préfèrerais que ce ne soit pas le cas, mais il peut être inévitable de tenir sur une image téléchargeable sur Stack Exchange. - La couleur est facultative.
- La forme des points dépend de vous. Si les carrés conviennent mieux à votre langue, utilisez-les.
- Pas de bonus, mais j'aimerais voir quelqu'un animer et colorier les diagrammes comme dans le post d'origine.
Merci à Conor O'Brien, EasterlyIrk, Martin Ender, Kritixi Lithos, Mego, DJ McMayhem et El'endia Starman pour leur aide dans la rédaction de cette question.
Ce code golf, donc le code le plus court gagne. Bonne chance et bon golf!
n = n //= i
censé êtren//= i
?