Mettre en œuvre ce chiffre clé
Objectif
Utilisez l'algorithme (expliqué dans la section Algorithme) pour implémenter un certain chiffre.
Le programme doit lire les entrées de STDIN ou l'équivalent disponible le plus proche, utiliser l'algorithme pour générer le texte chiffré et une clé.
Le texte chiffré et la clé seront écrits dans STDOUT ou l'équivalent disponible le plus proche. N'importe quel format est autorisé, tant qu'il génère le texte chiffré et la clé.
Algorithme
Convertissez les caractères de la chaîne en valeurs ASCII respectives. Par exemple:
Hello -> 72 101 108 108 111
Ensuite, vous devrez générer une clé tant que la chaîne avec des nombres aléatoires compris entre 0 et 9.
Hello -> 62841
Ajoutez les entiers de la séquence de nombres aléatoires aux valeurs ASCII de la chaîne. Dans les exemples ci-dessus, 72 deviendrait 78 et 101 deviendrait 104.
72 + 6 = 78, 101 + 2 = 103, 108 + 8 = 116, etc
Ensuite, reconvertissez les nouvelles valeurs en caractères. Dans les exemples ci-dessus, le texte Hello
est devenu Ngtpp
.
Exemples
(Ce ne sont que des exemples de ce à quoi pourrait ressembler la sortie . La sortie peut varier et variera.)
Hello World
Lfrlu)_supg
41606984343
This will be encoded
Zhjs$~koo gj$iuhofgj
60104723305544750226
Règles
- Vous pouvez supposer que l'entrée ne contiendra que des caractères dans la plage az, AZ et les espaces.
- Les soumissions doivent être des programmes ou des fonctions complets.
- Les soumissions seront notées en octets.
- Les failles standard sont interdites.
- C'est le code-golf, donc le code le plus court l'emporte.
(C'est l'un de mes premiers défis, s'il y a quelque chose qui ne va pas, n'hésitez pas à me dire comment je pourrais l'améliorer.)
preferably with the format (ciphertext)\n(key).
«fonctionnalités préférées» et le golf de code ne se mélangent pas très bien. Vous devez rendre cela obligatoire ou autoriser d'autres formats de sortie. 3. La clé doit-elle être imprimée sans espaces? Qu'en est-il de l'impression sous forme de liste, par exemple[0, 5, 2, ...]
?Réponses:
Gelée ,
129 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Python 3, 130 octets
Merci à @Rod d'avoir signalé un bug
Une fonction qui prend l'entrée via un argument sous forme de chaîne et imprime dans STDOUT.
Comment ça fonctionne
Essayez-le sur Ideone
la source
m=10**len(x);k=str(randint(m,m*10))[1:];
et vous enregistrez même un octet dans le processus c:randint
est inclusif, ce qui signifie que vous devriez le fairem*10-1
. Je viens de penser à un moyen de le réparer pour le même nombre d'octets.Pyth - 16 octets
En attente d'une décision de l'OP sur les formats de sortie.
Suite de tests .
la source
En fait, 17 octets
Essayez-le en ligne!
Explication:
la source
CJam - 14 octets
Quand j'ai vu le calcul du code ascii, je savais que je devais écrire une réponse CJam.
Essayez-le en ligne ici .
la source
MATL, 13 octets
La sortie ressemble à ceci:
Essayez-le en ligne!
Explication:
la source
r
ouYr
PowerShell v2 +,
7977 octetsPrend des entrées
$n
, boucle sur chaque caractère et obtient unRandom
élément de0..9
chaque itération. Stocke ces nombres (sous forme de tableau) dans$x
. Pipes ce tableau dans une autre boucle. Chaque itération, prend l'élément actuel$_
, l'ajoute au caractère positionnel découpé en$n
(transtypage implicite char-to-int), puis re-cast comme[char]
. Laisse ça sur le pipeline. C'est encapsulé en parens et-join
édité ensemble pour former le mot. Cela reste sur le pipeline. De plus, le numéro$x
est également-join
édité ensemble et laissé sur le pipeline. Ceux-ci sont implicitement imprimés avec unWrite-Output
à la fin de l'exécution, ce qui entraîne leur impression par défaut avec une nouvelle ligne.Exemple
la source
C #,
252247245232216 octetsLa taille est assez mauvaise par rapport aux autres solutions mais néanmoins ...
Ceci est ma deuxième réponse à un codegolf et je suis un débutant en ce qui concerne le C #, donc j'apprécierais de savoir comment le raccourcir :)
Non golfé:
static
de la classe pla source
b++<i.Count()
et laisser la troisième clause vide? De plus, je ne pense pas que vous ayez besoin d'une nouvelle ligne de fin, donc le dernier appel àWriteLine
pourrait être à laWrite
place.var
. c'est-à-direvar c=
au lieu destring c=
raser quelques octets.Console.ReadLine()
comme chaîne?i.Length
est plus court quei.Count()
, vous n'aurez pas besoin de System.Linq. la chaîne a un indexeur de caractères. En créant de nouveaux objets au hasard dans la boucle est moins octets:new Random().Next(10)
.CJam, 11 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
05AB1E ,
1817 octetsExplication
Essayez-le en ligne
la source
Python 3, 112 octets
c est une fonction qui renvoie le texte crypté et la clé
Voici un code qui fait la même chose et qui est un peu plus lisible
Production:
la source
PHP,
638682 octetsEdit: oublié d'imprimer la clé ...
Merci à Alex Howansky de m'avoir sauvé 4 octets.
L'entrée est donnée via un argument de ligne de commande. Prend chaque caractère de la chaîne et ajoute un entier aléatoire de 0 à 9 à son code ASCII, puis reconvertit le code en ASCII. Chaque nombre aléatoire est ajouté à
$s
, qui est imprimé à la fin.la source
$s.=$r
after la 2ème semi dans la boucle for, en économisant un octet car vous pouvez vider sa semi-fin. Ensuite, votre boucle ne sera qu'une seule instruction afin que vous puissiez couper les accolades, en économisant 2 octets supplémentaires. Ensuite, à la fin, vous pouvez mettre l'$s
intérieur de la chaîne entre guillemets en gardant l'.
opérateur pour un octet de plus. :)J, 32 octets
équivalent python:
la source
Perl, 34 octets
Comprend +1 pour
-p
la source
Perl, 65 octets
Cela m'a pris un certain temps pour comprendre comment obtenir l'entrée sans une nouvelle ligne à la fin. Le prend comme argument de ligne de commande
la source
$;
ne démarre pas vide, donc elle imprime l'ancien contenu et le rand ne peut jamais en générer 9. Ils sont faciles à corriger et l'utilisation de STDIN rendra votre code plus court :-)<>=~/./g
. Et non,int
en perl tronque vers 0, il ne s'arrondit pas.perl -wle 'print int 8.6'
sorties8
Python 2,
8499 octetsUtilise la
id()
valeur de la chaîne pour générer des nombres aléatoires.Essayez-le
la source
map(chr,[ord(a)+int(b)for a,b in zip(x,y)])
pourmap(lambda x,y:chr(ord(x)+int(y)),x,y)
? cela devrait sauver quelque choseSenva , 74 octets
Voici le programme le plus court que j'ai réalisé:
Une petite explication? (Remarque: BM signifie Back-Memory ):
Cela semble plus gros maintenant, vrai: p? Il est peut-être possible d'optimiser ce code, mais pour le moment c'est le plus court que j'ai trouvé.
la source
C #, 174 octets
Non golfé:
Assez simple, vraiment.
la source
Perl 6: 55 ou 70 octets
En tant que fonction anonyme qui prend un paramètre de chaîne et renvoie une liste de deux chaînes (54 caractères, 55 octets) :
En tant que programme qui lit depuis STDIN et écrit dans STDOUT (69 caractères, 70 octets) :
la source