Nous avons eu deux des défis sur la spirale d' Ulam. Mais cela ne suffit pas.
Dans ce défi, nous allons tracer une spirale Ulam triangulaire (par opposition à la spirale Ulam carrée habituelle). Voici un croquis de ce à quoi ressemble la spirale.
Comme nous le savons, la spirale Ulam organise tous les nombres naturels dans une spirale extérieure et ne marque que ceux qui sont premiers. Ainsi, dans l'esquisse ci-dessus, seuls les nombres qui apparaissent en noir (les nombres premiers) seraient affichés.
Le défi
Acceptez un nombre N en entrée et affichez la spirale triangulaire d'Ulam jusqu'à ce nombre.
- L'entrée peut être stdin ou un argument de fonction.
- La spirale doit tourner dans le sens positif (c'est-à-dire dans le sens antihoraire), comme dans la figure ci-dessus.
- N'importe lequel des virages à 120 degrés de la figure ci-dessus serait valide, et le virage peut être différent pour différentes entrées. Mais le côté le plus bas des triangles implicites doit être horizontal, car les seuls virages autorisés sont (multiples de) 120 degrés.
- Le code doit s'exécuter théoriquement (avec suffisamment de temps et de mémoire) pour tout N jusqu'à ce qui est autorisé par les calculs intermédiaires que vous effectuez avec votre type de données par défaut.
double
est assez; pas besoin de grands types entiers. - Toutes les fonctions intégrées sont autorisées.
- Je n'accepterai pas ma propre réponse (pas que je pense que ce serait la plus courte de toute façon ...).
Formats de sortie
Choisissez l'une des options suivantes.
Affichez un graphique avec un marqueur (point, cercle, croix, tout ce que vous préférez) aux nombres premiers, et rien aux nombres non premiers. Il n'est pas nécessaire que l'échelle soit la même pour les deux axes. Autrement dit, les triangles implicites n'ont pas besoin d'être équilatéraux. Les axes, les lignes de grille et les étiquettes d'axe sont facultatifs. Seuls les marqueurs aux nombres premiers sont requis.
Un exemple de sortie pour N = 12 serait le suivant (comparer avec le croquis ci-dessus). Le deuxième graphique est un exemple plus intéressant, correspondant à N = 10000.
- Produisez un fichier image avec ce qui précède, dans n'importe quel format d'image bien connu (tel que png, tiff, bmp).
Affichez la spirale en tant qu'art ASCII , en utilisant un seul caractère de votre choix pour les nombres premiers et un espace vide pour les non-nombres premiers, avec un espace vide pour séparer les positions numériques dans la même ligne. Les espaces de début ou de fin ou les nouvelles lignes sont autorisés. Par exemple, le cas N = 12 utilisant
o
comme caractère seraito · · · o · o · · · o · o
où bien sûr, seule la
o
marque aux nombres premiers serait effectivement affichée. Le·
at non-prime est présenté ici à titre de référence uniquement.
Critère gagnant
La récompense réelle est de voir par vous-même ces modèles incroyables Code golf, le code le plus court gagne.