En dépit de votre protestation, votre patron vous a mis au travail sur un programme qui prend en entrée un seul entier non signé et affiche la chaîne "prime" si cet entier est premier et "pas premier" s'il ne l'est pas. Vous pouvez choisir la langue dans laquelle vous le faites, tant que le programme résultant est court; votre patron apprécie beaucoup le faible nombre de personnages. (Il comptera manuellement les caractères après avoir imprimé le code source.)
Donc, vous feriez mieux de commencer, le plus petit nombre de personnages gagne.
La partie amusante
Ceci est juste entre vous et moi, mais votre programme devrait également être valable dans une autre langue. Dans cette langue cependant, il convient d’afficher la chaîne "Si le chef trouve cela, j’arrête". Assurez-vous que votre patron ne comprend pas qu'il y a une insulte cachée lors de la lecture répétée du code, car il oublie s'il a déjà compté jusqu'à 17 ou 18. Pour cette raison, vous ne pouvez utiliser aucun des mots suivants: "le patron trouve cet arrêt" dans une partie du code, ni utiliser des anagrammes de ces 5 mots.
Bonus challenge pour lequel j'ai créé une prime
Ecrivez un programme qui ressemble réellement à ça, il résout simplement la première question et ne semble pas contenir de caractères inutiles. Cela inclut les commentaires et les segments de code qui ne contribuent évidemment à rien. Idéalement, un profane croirait que votre programme est en réalité aussi bref que possible sans être ingérable. Un commentaire utile ici et là, ça va.
Les règles du challenge bonus sont un peu plus lâches, au lieu d'être jugées sur des critères facilement mesurables, votre programme sera jugé davantage sur la manière dont il est interprété pour moi (et les votants bien sûr).
Je serai le dernier juge de l’entrée qui mérite le plus cette prime.
Modifier:
Après quelques minutes de comptage par votre chef, il a demandé à l’un de vos collègues d’écrire un programme de comptage de caractères pour lui. Ainsi, même les personnages qui ne sont pas visibles comptent pour votre nombre de personnages.
Réponses:
CJam ( GolfScript ),
6059 octetsMerci à @mnbvmar pour le golf d'un octet!
Comment ça marche (CJam)
Essayez-le en ligne!
Comment ça marche (GolfScript)
Essayez-le en ligne!
la source
Python 2 / Python 3 - 128
Identifie les nombres premiers avec Python 2 , vous pose des problèmes avec Python 3 .
Prime
Essayez-le avec Python 2 ou Python 3 ! (Contrairement à la version golf ci-dessus, les rôles ont été modifiés: Python 3 est l'identificateur du nombre premier. Python 2 contient l'œuf de Pâques.)
S'il vous plaît, excusez mon mauvais anglais dans le texte d'aide! ;)
Et j'utilise le mot "quitter". Mais d’une manière ou d’une autre, j’ai besoin de décrire la fin de mon programme. ;)
la source
/
problème"? (division entière vs division en virgule flottante)Soumission de bonus (C / C ++ 11)
Les tests de primalité utilisant la méthode naïve habituelle sont tellement courants. C'est pourquoi j'ai inventé une toute nouvelle méthode naïve randomisée! Ce test est le suivant:
sqrt(n)
.not prime
.20sqrt(n)
temps de test , la sortieprime
, sinon répétez.Si le nombre est composite, il n'y a que très peu de probabilité (environ 10 -9 ) que cela ne fonctionne pas. Bien sûr, je ne pense pas que le générateur de nombres pseudo-aléatoires C / C ++ soit assez puissant. C'est pourquoi j'utilise mon propre générateur LFSR 256 bits !
C ++ 11 fonctionne correctement. Cependant, le compilateur C semble sortir un programme défectueux pour n> 2 ...
Remarque : rappelez-vous que C a besoin de l’
-lm
option (link math library) pour pouvoir compiler correctement.Si vous trouvez la sortie défectueuse suivante:
incorrect, il suffit de supprimer la
fprintf
ligne appropriée .la source
Mathematica / Brainfuck, 260
la source
Golfscript / Javascript (126
125129130132134205207)Essayez Golfscript ici et Javascript ici .
Je dirais que c'est incroyablement proche de ces solutions Mathematica qui, après tout, ont un contrôle intégré pour les nombres premiers.
Edit: Merci à Peter pour avoir enregistré
deuxautres six octets!Voici quelques détails:
1.
est nécessaire car ce qui suit//
est un commentaire en Javascript, mais effectue deux fois la division en Golfscript. Cela provoquera une erreur si rien ne se trouve sur la pile, nous devons donc lui attribuer deux nombres. Incidemment,1.
est une syntaxe parfaitement valide en Javascript et sera simplement ignorée."…"{(}%
prend la chaîne, décrémente leurs valeurs de code de caractère de un et la pousse comme une chaîne. Cela se traduit par la chaîne que nous devons imprimer.'
démarre une chaîne dans Golfscript qui, par défaut, s'étend sur plusieurs lignes, de sorte que le code Javascript ci-dessous ne soit placé que dans la chaîne.';#'
ferme la chaîne multiligne dans Golfscript, la supprime puis ignore le reste de la ligne. En Javascript, il s'agit simplement d'un littéral de chaîne qui sera ignoré.la source
1+
est)
. Et1 1
est1.
, que je soupçonne que la JS serait aussi heureux avec comme1
{)}/]""+
tout à fait possible{)}%
.C ++ / C99 / C90 - 248
Le code fonctionnera bien en C90, mais peut montrer quelque chose d'autre en C99 / C ++.
Non-golfé pour plus de clarté:
Comment cela fonctionne: C90 ne reconnaissant pas les commentaires sur une seule ligne, la chaîne du problème n'est plus multipliée par zéro.
la source
for
. Il imprime "pas premier" si vous entrez 6. Également impriméprime
pour zéro et unn
au début définit le nombre premier à trouver.prime
pour zéro et un, comme l'a remarqué pqnet plus tôt.CJam / Ruby,
132959187Ma solution précédente était nettement sur-conçue; Celui-ci a été fortement inspiré par la solution de Martin Büttner, comprenant notamment le fait que la
#bytes
méthode peut apparemment prendre un bloc.Comment ça marche?
Ruby comment character (
#
) est l'opérateur d'exponentiation dans CJam, nous aurons donc besoin d'au moins deux nombres sur la pile avant de commencer, mais deux nombres nus (0 0
) sont une erreur de syntaxe dans Ruby. L’un est bon, cependant, et, utilement, les nombres Ruby peuvent contenir des traits de soulignement comme séparateurs (1_234
)._
est l'opérateur de duplication de CJam, nous devons donc faire apparaître deux fois (;;
) une fois que nous sommes à l'intérieur du commentaire.limp
lit une ligne à partir de l'entrée standard, la convertit en un entier, la saute et indique si elle est première ou non.Pour entrer en mode Ruby, nous ouvrons une chaîne et continuons sur la ligne suivante afin que nous ne soyons plus dans le commentaire Ruby (ainsi, la nouvelle ligne est significative et doit être comptée). Chaque caractère du message est décodé et imprimé, puis nous commençons un autre commentaire Ruby afin de pouvoir fermer en toute sécurité la chaîne CJam avant de l'écraser. Ce qui reste sur la pile est de savoir si l'entrée était bonne ou non, ce qui sera imprimé à la fin du programme CJam.
CJam / Whitespace, 353 caractères (25 significatifs une fois imprimés)
Compte tenu de la nature sournoise du défi et du fait que le patron imprimera nos programmes afin de compter les personnages, j'ai accepté la suggestion de faire une solution impliquant Whitespace .
Contrairement à ma précédente affirmation, le programme Whitespace le plus court possible, qui affiche "Si le patron le trouve, j’arrête." 372 caractères, celui-ci le fait en 330. L'astuce consiste à utiliser l'
copy
instruction qui vous permet de sélectionner des caractères répétés quelque part sur la pile au lieu de transmettre toutes les valeurs ASCII, qui seront toujours beaucoup plus grandes et nécessiteront donc davantage d'espaces. et des onglets à encoder. Voici une représentation pseudo-assemblée du programme pour les curieux:la source
#chars
et#lines
aussi, ce que je devrai garder à l'esprit pour les défis futurs.chars
et cela ne fonctionnait pas pour une raison quelconque.limp4*"not prime">
pour le rendre encore plus courtSoumission de prix en prime (Perl / B? F? N? E-? 3)
Edit: Au départ, j’avais oublié d’imprimer la phrase, puis j’ai remarqué qu’elle l’imprimerait dans l’ordre inverse. J'ai remarqué cela après avoir été fait. J'étais sur le point de tuer un chaton, mais je l'ai réparé maintenant.
Ce n’est plus une mince affaire à présent, mais je pense que le rendre peu suspect et court est une tâche ardue. J'ai principalement réutilisé une de mes soumissions golfées, mais dans celle-ci, je dirais que la deuxième langue est vraiment difficile à repérer.
Si le patron le trouve, je démissionne vraiment, car je ne pourrai jamais l'insulter secrètement et si je ne peux pas le faire, à quoi ça sert?
Flexion
et violationdes règles:J'utilise le mot "le" ici, mais ce n'est pas le "le" qui est imprimé. Techniquement, il est peut-être invalide. Je vais laisser le PO décider si les règles doivent être aussi strictes pour le challenge bonus. Si oui, alors ainsi soit-il.la source
^
= monter). Certaines lettres de commentaires sont placées sur une pile imprimée à la fin, impressionIf the boss finds this, I quit.
Voir exemple via l'URL de la réaction d'Ingo:"!dlrow olleH">:#,_@
Mathematica / Ruby,
115106 octetsLa partie Mathematica a été légèrement inspirée par la soumission de Peter Olson, mais la polyglotte avec Ruby est un peu plus élaborée ici.
Ruby fonctionne, car les deux
#
commentent tout ce qui est Mathematica. La raison pour laquelle Mathematica fonctionne est un peu plus intéressante. Le code que je veux exécuter est:Mais ce n'est pas valide Ruby, donc je dois ajouter un
#
quelque part.#
est le paramètre de Mathematica pour les fonctions anonymes. Donc, je mets#
à l'avant, ce qui multiplie l'argument avec le résultat duIf
. Oui, cela sera multiplié par une ficelle , peu importe ce que cela signifie. Ensuite, je transforme cela en une fonction anonyme&
et l'appelle immédiatement avec argument1
. Mathematica est assez intelligent pour savoir que la multiplication par 1 est toujours l’identité et n’exporte que la chaîne. Ensuite, le code Ruby est simplement placé dans un commentaire de bloc.la source
C (Soumission Bonus)
La version C est un vérificateur principal, tableau d'entrée en haut. Essayez de deviner quelle langue donne
If the boss finds this, I quit.
(ce n'est pas un espace).L'autre langue:
la source
Perl / Befunge-93 (108
106110)Ma deuxième soumission, juste parce que. Utilise également des expressions régulières. Je parie qu'il y a un meilleur choix que Perl, par exemple Octave, mais je ne savais pas comment imprimer conditionnellement de manière brève.
J'abuse de la règle pour que la chaîne soit imprimée, car j'évite les anagrammes en la scindant en plusieurs chaînes.
Le numéro à vérifier provient de stdin.
if
au lieu deunless
4 octets sauvegardés.la source
Lua / PBrain (Brainf * ck procédural) - 813
Heh ... Désolé, j'ai été pris au piège en essayant d'être sournois. PBrain est comme BF, mais il vous permet de déclencher et de définir des blocs réutilisables de code BF. Son utilisation était complètement inutile.
la source
Python 2 / Rot13 - 270 octets (69 sans les commentaires)
Ceci utilise un algorithme très simple (ie inefficace). Lorsqu'il est exécuté avec rot13 (ce n'est pas un langage de programmation), il génère la phrase requise (avec d'autres non-sens).
Le pire, c’est que les commentaires énoncent une évidence et sont de toute façon plutôt inutiles.
C'est un polyglotte d'une autre manière, car il contient l'anglais et "l'espéranto". J'espère que le patron n'est pas un polyglotte.
la source
05AB1E / Jelly , 28 octets
Pas une, mais DEUX langues de golf!
Explication dans 05AB1E:
Explication en gelée:
Essayez-le en ligne! (Jelly) Essayez-le en ligne! (05AB1E)
la source
Python, 403 octets
Ceci est destiné au challenge bonus. Les commentaires ne comptent pas dans le bytecount.
Les tests au bas du code impriment:
Ce nombre entier maximum que j'ai défini (mi) cache le secret. Si converti en hexadécimal, la représentation en lettres ASCII de tous les deux chiffres de l'hexagone indique "Si le boss le trouve, je quitte." La partie sournoise utilise la fonction chr. Si le patron sait ce que cela fait et regarde assez attentivement, il saura que le code cache un message secret. Cependant, je l'ai un peu obscurci et j'ai fourni suffisamment d'explications à l'ensemble de l'entier max integer pour assurer, espérons-le, que c'est une partie légitime du programme.
Notez que pour la plupart des paramètres, cela fonctionne comme le veut le patron, mais si l’entrée n’est pas un entier ou si le nombre est supérieur à mi, p renvoie l’erreur qui contient la chaîne masquée. J'aurais pu mettre un appel d'impression dans la fonction, mais je pensais que son apparence serait plus réelle si elle était renvoyée.
la source
C # - 288
Certainement pas le plus court, mais cela pourrait passer par beaucoup de patrons:
Une version lisible:
la source