Apparemment oui! En trois étapes faciles.
Étape 1
Soit f ( n ) la fonction de comptage des nombres premiers (nombre de nombres premiers inférieur ou égal à n ).
Définissez la séquence entière s ( n ) comme suit. Pour chaque entier positif n ,
- Initialliser t à n .
- Tant que t n'est ni premier ni 1, remplacez t par f ( t ) et itérez.
- Le nombre d'itérations est s ( n ).
La fin du processus itératif est garantie car f ( n ) < n pour tout n .
Considérons par exemple n = 25. Nous initiallisons t = 25. Comme ce n'est pas un nombre premier ni 1, nous calculons f (25), qui est 9. Ceci devient la nouvelle valeur de t . Ce n'est pas un nombre premier ni 1, nous continuons donc: f (9) vaut 4. Nous continuons encore: f (4) vaut 2. Comme c'est un nombre premier, nous nous arrêtons ici. Nous avons fait 3 itérations (de 25 à 9, puis à 4, puis à 2). Donc s (25) vaut 3.
Les 40 premiers termes de la séquence sont les suivants. La séquence n'est pas dans OEIS.
0 0 0 1 0 1 0 2 2 2 0 1 0 2 2 2 0 1 0 3 3 3 0 3 3 3 3 3 0 3 0 1 1 1 1 1 0 2 2 2
Étape 2
Étant donné un entier positif impair N , construisez un tableau N × N (matrice) en enroulant la séquence finie s (1), s (2), ..., s ( N 2 ) pour former une spirale extérieure carrée . Par exemple, étant donné que N = 5, la spirale est
s(21) s(22) s(23) s(24) s(25)
s(20) s(7) s(8) s(9) s(10)
s(19) s(6) s(1) s(2) s(11)
s(18) s(5) s(4) s(3) s(12)
s(17) s(16) s(15) s(14) s(13)
ou, en substituant les valeurs,
3 3 0 3 3
3 0 2 2 2
0 1 0 0 0
1 0 1 0 1
0 2 2 2 0
Étape 3
Représentez le tableau N × N sous forme d' image avec une carte de couleur grise ou avec une autre carte de couleur de votre goût. La carte doit être progressive, afin que l'ordre des nombres corresponde à un ordre des couleurs visuellement évident. Les cas de test ci-dessous montrent quelques exemples de nuanciers.
Le défi
Étant donné un entier positif impair N , produisez l'image décrite ci-dessus.
Règles
La spirale doit être vers l'extérieur, mais elle peut être dans le sens des aiguilles d'une montre ou dans le sens contraire, et peut commencer à se déplacer vers la droite (comme dans l'exemple ci-dessus), vers la gauche, vers le bas ou vers le haut.
Les échelles des axes horizontal et vertical ne doivent pas nécessairement être identiques. De plus, les étiquettes d'axe, la barre de couleur et les éléments similaires sont facultatifs. Tant que la spirale peut être clairement vue, l'image est valide.
Les images peuvent être sorties par n'importe quel moyen standard . En particulier, l'image peut être affichée à l'écran, ou un fichier graphique peut être produit, ou un tableau de valeurs RVB peut être sorti. Si vous exportez un fichier ou un tableau, postez un exemple de ce à quoi il ressemble lorsqu'il est affiché.
Les moyens de saisie et le format sont flexibles comme d’habitude . Un programme ou une fonction peut être fourni . Les échappatoires standard sont interdites .
Le code le plus court en octets gagne.
Cas de test
Les images suivantes (cliquez pour pleine résolution) correspondent à plusieurs valeurs de N . Une spirale dans le sens des aiguilles d'une montre, en commençant par la droite, est utilisée, comme dans l'exemple ci-dessus. Les images illustrent également plusieurs cartes de couleurs valides.
la source
s(n)
peut être introduit dans une fonction / package de traçage sans être modifié (je pense queimshow
matplotlib pourrait gérer cela par exemple), est-ce une forme de sortie acceptable?imshow
neimshow
fait ça.Réponses:
Dyalog APL, 94 octets
suppose
⎕IO=0
sortie pour n = 701 (converti de .pgm à .png):
la source
MATLAB -
197185178175184164163162148142140 octetsRasé 12 octets, merci à Ander et Andras, et merci à Luis pour avoir mis les deux ensemble. Rasé 16 grâce à Remco, 6 grâce à Flawr
Résultat pour
N=301
(F(301)
):Explication:
la source
Wolfram Language (Mathematica) , 124 octets
Merci à Martin Ender d' avoir économisé 12 octets!
Essayez-le en ligne!
L'image générée est:
Formule fermée de la valeur en spirale extraite directement de cette réponse .
la source
#/2-.5
enregistre un octet.p
jusqu'à ce que vous en ayez besoin:...,{y,p=(1-#)/2,-p},{x,p,-p}
MATLAB:
115114110 octetsUne doublure (exécutée dans R2016b + en tant que fonction dans un script ) 115 octets
En plaçant la fonction dans un fichier séparé, comme suggéré par flawr, et en utilisant le 1 octet supplémentaire par règle de fichier supplémentaire
Dans le fichier
s.m
, 64 + 1 octets pour le code + le fichierFenêtre de commande à définir
I
, 45 octetsTotal: 110 octets
Ceci utilise la récursivité au lieu de
while
boucler, comme le font les autres implémentations de MATLAB ( gnovice , Adriaan ). Exécutez-le en tant que script (dans R2016b ou plus récent), cela définit la fonctionI
qui peut être exécutée commeI(n)
.Version structurée:
Exemple:
Remarques:
J'ai essayé de rendre la
s
fonction anonyme aussi, bien sûr, cela réduirait considérablement le nombre. Cependant, il y a 2 problèmes:Il est difficile d'éviter une récursion infinie lors de l'utilisation de fonctions anonymes, car MATLAB ne dispose pas d'un opérateur ternaire pour offrir une condition de rupture. Éviter un opérateur ternaire (voir ci-dessous) coûte également des octets car nous avons besoin de la condition deux fois.
Vous devez passer une fonction anonyme à elle-même si elle est récursive (voir ici ) qui ajoute des octets.
Le plus proche que je suis venu à cela utilisé les lignes suivantes, peut-être qu'il peut être modifié pour fonctionner:
la source
MATLAB -
126121 * octetsJ'ai tenté une approche plus vectorisée qu'Adriaan et j'ai réussi à réduire le nombre d'octets. Voici la solution mono-ligne:
Et voici la solution bien formatée:
* Remarque: si vous êtes prêt à permettre une crapton métrique d'itérations inutiles, vous pouvez modifier la ligne
while any(i),
àfor m=v,
et enregistrer 5 octets.la source
cumsum
pour vectoriser et éviternnz(primes(...)
while any(i)
parfor m=M
. Qui se soucie de savoir si le code prend des heures à courir :-)n^2
faire mal à une autre itération! ;)Python 3,
299265 octetsSauvegardé de 5 octets grâce aux suggestions de formatage de Jonathan Frech et NoOneIsHere. Suppression de 34 octets supplémentaires en supprimant une définition de fonction appelée une seule fois.
Ceci est un peu plus long que d'autres, car python n'a pas de commande pour déterminer la primauté, ni un tableau en spirale. Il fonctionne relativement rapidement cependant, environ une minute pour
n = 700
.Testez le avec
la source
import
et*
.J, 121 octets
Définit une fonction:
la source
R, 231 octets
Un peu moins joué au golf:
Fonction anonyme. Sortie dans une fenêtre graphique. L'échelle est sur l'échelle rouge, la teinte la plus sombre est égale à 0 et les teintes plus claires augmentent les valeurs.
Résultat pour n = 101:
la source