La solution évidente serait de simplement les imprimer sous forme de chaîne, mais est-il possible d'écrire un code plus court?
Exigences:
- Aucune entrée ne doit être traitée et la sortie doit être sous la forme
2 3 5 7 11 13 ...
etc. - Aucun mot réservé dans la langue n'est utilisé du tout
- Le langage devrait au moins permettre une programmation structurée et avoir des mots réservés (sinon le point 2 serait théorique).
J'ai d'abord pensé exclusivement au C / C ++, mais j'ai étendu la question tout en essayant d'empêcher la tricherie
Réponses:
C, 60 caractères
La limitation "pas de mots clés" n'a pas d'importance ici. Je suis à peu près sûr que l'amélioration, si possible, ne se fera pas en ajoutant des mots clés.
Version alternative:
La sortie n'est pas aussi agréable, mais j'aime l'
printf
abus.L'astuce dans les deux solutions est de fusionner deux boucles (implémentées par récursivité) en une seule.
n
est le prochain potentiel premier,m
le prochain diviseur potentiel.Dans chaque appel récursif, nous incrémentons
n
(tout en définissantm
sa valeur précédente) ou décrémentonsm
.la source
Python, 108 caractères
Python n'était pas fait pour ce défi. Tu veux
print
? C'est réservé. Eh bien, que diriez-vous que nous utilisonsstdout
? Eh bien, ça va coûter unimport
... vous l'avez deviné, réservé. Eh bien ... je suis sur unix, donc je peux ouvrir le descripteur de fichier 1, qui se trouve être stdout. Pirater!Homme, et itération? Rien que
eval
. Pas de boucles, bien sûr, mais nous ne pouvons même pas définir une fonction avecdef
oulambda
. Et pour ajouter l'insulte à la blessure, nous ne pouvons même pas utiliser la compréhension de la liste! Je cherche toujours une excuse pour utiliser des choses commemap(p.__mod__,...)
dans le golf de code ... la compréhension est toujours meilleure. Jusqu'à présent, c'est.Maintenant, vous pourriez plaignez
exec
est un mot clé, même si je n'ai pas utilisé le mot - clé (je ne l' ai pas mêmeeval
unexec
). Eh bien, voici une solution de 117 caractères qui n'utilise pas'exec'
.la source
__import__
, mais ça va coûter des caractèresJavaScript (80 caractères)
Exécutez dans la console de votre navigateur Web.
Utilisé un tamis primaire, qui s'est avéré être très condensé.
la source
C, 183 caractères
Eh bien, voici une première tentative rapide. Je pense que cela devrait satisfaire aux exigences. J'utilise une division d'essai simple pour trouver les nombres premiers et une boucle déroulée construite à l'aide du préprocesseur pour l'itérer jusqu'à ce que j'en trouve suffisamment. Le nombre de répétitions a été modifié pour que 128 nombres premiers soient imprimés.
la source
C, 87 caractères
(J'ai essayé de l'écrire dans un style plus fonctionnel, mais mon incapacité à utiliser a en
return
quelque sorte tué ce plan.)la source
C, 134 caractères
Voici une solution alternative qui essaie d'éviter d'utiliser autant que possible des mots, réservés ou non:
Tout ce qu'il utilise est
printf
etmain
avec un seul argument.la source
Mathematica 50 caractères
Je ne sais pas comment interpréter les "mots réservés" pour Mathematica, mais je veux jouer, donc je suppose que cela signifie se passer de fonctions intégrées pour générer des nombres premiers ou tester la primalité.
la source
Haskell, 72 caractères
Certes, éviter les mots clés n'est pas trop difficile dans Haskell.
la source
K (ngn / k) , 31 octets
Essayez-le en ligne!
la source