Écrivez un programme qui testera la primauté d'un nombre spécifié et donnera la sortie sous forme de valeur booléenne (True est premier). Votre test principal peut (mais ne doit pas) être valable pour le numéro 1.
Voici le hic: votre programme lui-même doit totaliser un nombre premier. Convertissez chaque caractère (y compris les espaces) en sa valeur Unicode / ASCII ( table ). Ensuite, additionnez tous ces nombres pour obtenir la somme de votre programme.
Par exemple, prenez ce programme pas si génial que j'ai écrit en Python 3.3:
q=None
y=int(input())
for x in range(2,int(y**0.5)+1):
if y%x==0:
q=False
if not q:
q=True
print(q)
Si vous convertissez tous les caractères en leur valeur Unicode / ASCII correspondante, vous obtenez:
113 61 78 111 110 101 10 121 61 105 110 116 40 105 110 112 117 116 40 41 41 10 102 111 114 32 120 32 105 110 32 114 97 110 103 101 40 50 44 105 110 116 40 121 42 42 48 46 53 41 43 49 41 58 10 32 32 32 32 105 102 32 121 37 120 61 61 48 58 10 32 32 32 32 32 32 32 32 113 61 70 97 108 115 101 10 105 102 32 110 111 116 32 113 58 10 32 32 32 32 113 61 84 114 117 101 10 112 114 105 110 116 40 113 41
Vous pouvez ensuite trouver la somme de ces nombres manuellement ou avec votre propre programme. Ce programme spécifique s'élève à 8293, ce qui est un nombre premier.
Bien sûr, c'est Code Golf, donc plus vous pouvez faire votre programme petit, mieux c'est. Comme l'ont souligné d'autres utilisateurs, ce programme n'est pas très golfique.
Quelques règles:
Les entrées valides incluent STDIN et les invites (pas de fonctions, c'est juste un moyen d'ajouter du code supplémentaire gratuit). Les espaces sont autorisés, mais uniquement s'ils sont essentiels à la fonctionnalité de votre programme. La sortie doit être une sortie, pas seulement stockée dans une variable ou retournée (utilisez print, STDOUT, etc.)
Les indicateurs peuvent être utilisés et doivent être comptés littéralement, et non développés. Les commentaires ne sont pas autorisés. Quant aux caractères non ASCII, ils doivent être affectés à la valeur dans leur codage respectif.
Assurez-vous d'indiquer la taille de votre programme et la somme du programme. Je vais tester pour m'assurer que les programmes sont valides.
Bonne chance!
Voici un extrait pour compter la somme de votre programme et vérifier s'il est premier:
Réponses:
Bonjour le monde! , 13 octets,
1193
la source
Ruby, somme 3373, 37 octets
la source
Microscript II, 2 octets (somme 137)
Microscript II, 4 octets (somme 353)
Je suis en fait assez surpris que ces deux aient fini par avoir des sommes d'octets.
la source
Japt , 2 octets,
191
U
:85
j
:106
Essayez-le en ligne!
la source
Pyth, 2 octets,
127
Essayez-le en ligne
Sorties
1
pour les nombres premiers,0
pour les non-nombres premiers./
a un point de code47
.P
a un point de code80
.Comment ça marche:
la source
Haskell, 52 octets, 4421
Théorème de Wilson.
la source
::IO Int
devrait vraiment pas être nécessaire , à moins que c'est le chemin le plus court , vous pouvez obtenir une somme de premier choix.Python 2, 50 octets,
4201
Fonctionne pour 1. La sortie est positive si elle est première ou nulle sinon.
Essayez-le en ligne
Python 2, 44 octets,
3701
Ne fonctionne pas pour 1. Génère un booléen.
Essayez-le en ligne
la source
JavaScript (ES6), 47 octets,
3541
Ceci est fortement basé sur la fonction de test de primalité ETHproductions , qui peut être trouvée ici .
la source
05AB1E , 2 octets,
173
Explication:
Essayez-le en ligne!
la source
PHP, 38 octets, somme 2791
Fait amusant: avec
$h
au lieu de$c
, la somme serait2801
(également un nombre premier), et sa représentation binaire101011110001
lue comme décimale est également un nombre premier.prend l'argument de ligne de commande, imprime
1
ou chaîne vide. Courez avec-r
.Code tiré de ma propre fonction principale (regardez le message d'origine si vous le pouvez).
la source
R, 27
32octets, somme 22432609Enregistré 5 octets grâce à @rturnbull
Cela utilise la fonction isprime de la bibliothèque gmp.
la source
cat(!!gmp::isprime(scan()))
est 5 octets plus court, et somme à2243
, aussi premier.Python 2, 44 octets, somme des octets 3109
Il s'agit de l' implémentation de 44 octets de xnor avec les noms de variables de plus faible valeur qui produisent une somme d'octets premiers.
Imprime
1
si premier et0
sinon.la source
Gelée 6 octets , somme des octets 691
imprime
1
si premier et0
sinon.TryItOnline!
Les octets en hexadécimal sont
93 0D D5 2C CD 45
(voir la page de codes ), ou en décimal sont la147 13 213 44 205 69
somme de 691, ce qui est premier.Comment?
La
Æḍ
fonctionnalité est telle que les nombres premiers et leurs négations renvoient un alors que les autres entiers ne le font pas (les composites et leurs négations renvoient des nombres supérieurs à un, un et moins un renvoient zéro et zéro renvoie, curieusement, moins un).La
Ṡ
fonctionnalité est telle que les entiers négatifs renvoient moins un, zéro renvoie zéro et les entiers positifs retournent un.Ainsi, les deux fonctions ne renvoient que la même valeur pour les nombres premiers.
Notez que le programme à 3 octets
ƓÆP
qui teste directement si l'entrée de STDIN est premier n'est malheureusement pas un programme à somme prime (240).Le test d'égalité à l'aide de
=
(égal),e
(existe en) ou⁼
(non vectorisé égal) pour 5 octets ne donne pas non plus de programmes à somme prime.Alternative (peut-être pas acceptable) 4 octets, somme 571
Si les restrictions d'E / S autorisent toujours des programmes complets qui prennent un argument.
... en utilisant le même principe que ci-dessus, où
⁼
est l'égalité non vectorisante (l'aspect non vectorisant n'a aucun effet puisqu'il n'y a de toute façon rien à vectoriser). Les valeurs hexadécimales sont celles0D D5 8C CD
qui sont13 213 140 205
en décimales et totalisent 571, un nombre premier.Notez à nouveau que le programme à 2 octets
ÆP
n'a pas de somme première (93).la source
ƓÆPG
(311) etÆPF
(163) devraient être bien, je pense?ƓÆḍ,ṠE
, la valeur est16183
, ce qui est par hasard premier!ƓÆPG
OK. J'ai également demandé si un programme prenant des données plutôt que l'utilisation de STDIN est acceptable.ÆP¥
3 octets et 97.CJam , 4 octets, somme des octets 439
Utilise le test de primalité intégré.
Essayez-le en ligne!
Solution alternative, 4 octets, somme 461
la source
Mathematica, 21 octets,
1997
Input[]
lit une ligne d'entrée (à partir de STDIN si aucune extrémité avant est utilisée, par l' intermédiaire d' une boîte de dialogue si l'extrémité avant Mathematica est utilisé),Print@*PrimeQ
est la composition (@*
) duPrint
et lesPrimeQ
fonctions, et@
est fonction de notation de préfixe.la source
Perl 6 ,
2422 octets,1949
Les trois caractères d'espacement sont requis.
(Perl 6 ne se soucie pas du type de caractère d'espaces, cependant, j'ai donc choisi une nouvelle ligne au lieu de l'espace le plus couramment utilisé pour la seconde ...)
la source
Pyth, 4 octets,
367
Essayez-le ici!
la source
Pip , 8 octets,
511
J'ai écrit un vérificateur principal, et la somme était première. Pratique. Vérifiez les entrées 1-30: essayez-le en ligne!
Explication
la source
Pari / GP , 23 octets,
2111
Essayez-le en ligne!
la source
J, 18 octets,
1103
Non loin d'être optimal, le moins que j'ai pu jouer à un test de primalité de programme complet était de 17 octets:,
echo(p:[:".1!:1)1
ce qui correspond malheureusement à 1133 = 11 * 103.Malheureusement, je ne sais pas comment faire en sorte que la saisie au clavier fonctionne sur TIO, donc pas de lien pour le moment.
Explication:
Validation du programme:
la source
C (gcc) ,
6260 octets, 4583Assez simple. Sorties * si premier, sinon il sort un espace. Ne fonctionne pas pour 1.
-2 grâce à l4m2
Essayez-le en ligne!
la source
n;main(i){for(scanf("%d",&n);++i<n;)n=n%i?n:0;puts("*"+!n);}
peut avoir besoin de changer le nom d'une variable pour la somme principaleAWK , 36 octets, somme d'octets 2239
Essayez-le en ligne!
Sorties
0
sinon amorces et1
pour amorces. Certainement pas le code le plus efficace, car il vérifie chaque entier supérieur à1
pour voir s'il divise l'entrée.la source
Excel (57 octets, somme de code 3547)
Excel n'a pas vraiment une "entrée" en tant que telle, mais cette formule s'attend à ce que le nombre à tester soit en A1 et sort dans la cellule dans laquelle vous le déposez. C'est une formule matricielle, alors appuyez sur Ctrl-Maj-Entrée pour entrer plutôt que d'entrer.
la source
Java 8, 114 octets, Prime 10037
Essayez-le en ligne.
Explication:
J'ai utilisé
x
au lieu dei
faire de la somme unicode un nombre premier. Vérifiez ici la somme unicode.la source
Gelée , 4 octets, Σ = 239
Essayez-le en ligne!
Preuve: essayez-le en ligne! (prendre les indices basés sur 1 des caractères du programme de la page de codes de Jelly, décrémenter pour les rendre basés sur 0, additionner puis vérifier si le résultat est premier).
la source
SmileBASIC, 42 octets,
2687
Affiche 1 (vrai) si le nombre est premier, sinon 0 (faux).
Les noms de variables n'ont pas seulement été choisis pour rendre le programme premier.
N
est le n ombre de test,D
est le d iVisor, etP
conserve une trace du fait que N est p rime.la source
Wonder , 7 octets,
537
Il y a probablement une meilleure façon ...
la source
Rouille, 190 octets, 15013 partition
Non golfé
Ne fonctionne pas pour 1
la source
Stax , 349
Exécuter et déboguer
la source
|pQ
fonctionne pour un score de 317. Si l'échange de vérité / fausse est autorisé,|p!
fonctionne également pour 269.Whispers v2 , 33 octets
Essayez-le en ligne!
44381
Comment ça marche
Ceci est indiqué dans l'ordre dans lequel il est exécuté:
la source