Générer un chiffre à partir d'un nombre et d'une chaîne
Votre tâche est simple. Étant donné une chaîne s
et un nombre 0 <= n <= 9
en entrée, insérez un caractère ASCII imprimable pseudo-aléatoire entre chaque caractère de la chaîne n
. Tels que pour chaque personnage s
il y a n
des caractères aléatoires entre eux. Les espaces doivent être rognés.
Contribution:
s
phrase de chaîne à chiffrer dans le chiffrement- entier
n
dans la plage de0 <= n <= 9
Exemple:
Contribution:
The treasure is here
2
Production:
T ! 0 h 32 e F4 t 0i r lk e hm a 7y s # 0 u * & r * h e ! 2 i H ^ s B, h ! @ E 0) r $ h e
C'est du code-golf donc le code le plus court gagne! Bonne chance et amusez-vous bien!
code-golf
string
random
cryptography
jacksonecac
la source
la source
n
caractères se compose den
copies du même caractère aléatoire, ils sont toujours aléatoires, mais ils le sont pas statistiquement indépendant. Et ainsi de suiteO
soient plus susceptibles que les espaces ou~
? Si elle doit être uniforme, vous devez le dire explicitement. Et s'il ne doit pas être uniforme, vous devez au moins indiquer que quelque chose comme chaque personnage doit avoir une probabilité non nulle. Vous avez également déclaré dans un commentaire précédent que chaque personnage doit avoir une distribution indépendante, donc si c'est important, cela devrait être mentionné dans le défi. Le spectre aléatoire est très large.Réponses:
C #,
141131 octetsAssez similaire à la réponse Java de @ Geobit , sauf plus longtemps actuellement :(
Trucs lambda complets:
la source
R=...
vous pouvez simplement utiliser directementnew System.Random().Next(...)
je pense05AB1E , 11 octets
Essayez-le en ligne!
Explication
la source
Java 7,
132124 octetsRien d'extraordinaire, juste une double boucle comme vous vous en doutez. Extérieur pour boucler la chaîne, intérieur pour remplir les aléas:
la source
k
:String f(int n,char[]a){String o="";for(char b:a)if(b>32){o+=b;for(int i=0;i++<n;o+=(char)(33+Math.random()*94));}return o;}
(125 octets)char
casting. Merci!Pyke,
12119 octetsEssayez-le ici!
La fin des caractères aléatoires est correcte selon OP.
la source
Octave, 43 octets
Cela prend une chaîne
s
et un entiern
en entrée. Une chaîne dans Octave est simplement un tableau de caractères.s>32
est une carte logique avec1
pour tous les caractères non spatiaux. Le code ajoute une matrice avec desn
lignes et le même nombre de colonness(s>32)
, contenant des nombres à virgule flottante entre 33 et 126. Il est implicitement arrondi en nombres entiers et converti en caractères ASCII lorsqu'il est concaténé avec la chaînes
.(:)'
redresse cela à un tableau horizontal de caractères.Testez-le ici!
la source
Python 2,
123122118 11811498 octetsMec, je souhaite que ce
random
ne soit pas si cher (et que nous n'ayons pas eu à filtrer les espaces). Maintenant, nous avons de grandes économies d'être autorisés à avoir des caractères de chiffrement à la fin :) Quoi qu'il en soit, voici:la source
JavaScript (Firefox 30+), 96 octets
Pure ES6 est plus long de deux octets:
Voici une approche vraiment cool qui est malheureusement de 26 octets de plus:
la source
/. *(?=.)/
cela ne fonctionne pas pour les chaînes commençant ou se terminant dans des espaces, pas que quiconque s'en soucie. (Vous êtes même autorisé à suivre des personnages aléatoires maintenant.)(?=.)
qui prend soin des espaces à la fin des chaînes.94+33
au lieu de95+32
R, 97 octets
Fonction sans nom prenant les entrées
x
(chaîne) etn
.Essayez-le sur R-fiddle
la source
CJam ,
2118 octetsEssayez-le en ligne!
Imprime
n
des caractères de fin aléatoires.Explication
la source
Bash, 124 octets
Pure bash + coreutils , pas de structures de flux de contrôle, pas de sous-langues, pas d '"eval"
Golfé
Tester
la source
Q / KDB +,
39 3634 octetsVariables utilisées:
Celui-ci utilise l' adverbe précédent , qui applique la fonction à sa gauche entre chaque élément à droite et son prédécesseur. (Essentiellement, applique la fonction à gauche entre chaque caractère à droite.)
Générez n nombres aléatoires compris entre 40 et 126, puis convertissez-les en un caractère équivalent: (q ne semble avoir que des caractères pour ceux-ci)
Exemple de sortie:
EDIT:
économisé 3 octets en convertissant le raze de q en (, /) en utilisant la notation k et changé de manière similaire avant `: Merci à @slackwear pour la mise à jour, rasé 2 octets :)
la source
10h$
Java 8, 114 octets
Golfé
Lambda qui accepte un entier et une chaîne. Inspiré par la réponse Java 7, double boucle en utilisant une syntaxe Java 8 Stream (
String.chars
) pour économiser quelques octets.Contribution
Production
la source
Scala,
9594 octetsRien d'extraordinaire, à part l'utilisation de mkString sur une chaîne. Il traite la chaîne comme une liste de caractères et me permet d'insérer un séparateur entre eux. Mon séparateur est le nombre approprié de caractères alphanumériques générés aléatoirement.
la source
Random.alphanumeric
fera que chaque morceau sera le même, donc c'est un chiffre boiteux ... Voir cet exemple:scala> c("Hello", 1) res0: String = Hbeblblbo
filter
. L'invocationmkString
d'une chaîne la traitera comme une collection de caractères.> <> (Poisson),
107106103 octetsEssayez-le en ligne!
Ce n'est pas super aléatoire, mais c'est aléatoire. Placez simplement la chaîne et l'entier sur la pile (exemple: "Bonjour tout le monde!", 5).
Explication complète
Il s'agit d'une version légèrement plus ancienne du code, jusqu'à ce que je mette à jour l'explication. C'est à peu près la même chose, peut-être un peu plus facile à lire:
Nous prétendons que le paramètre de chaîne est
s
et le paramètre entier esti
.Le
<
dit au poisson de se déplacer immédiatement vers la gauche, qui s'enroule vers" "
, ce qui ajoute un espace à la pile. Ensuite, le poisson se déplace&
, ce qui ajoute de l'espace au registre.r
inverse la pile et{:}
décale la pile vers la gauche (en mettanti
la fin de la pile), copie la valeur à la fin de la pile, puis la décale vers la droite.v
dit au poisson de commencer à descendre.x
indique au poisson de se déplacer dans une direction aléatoire, entraînant finalement le poisson à droite et continue vers le bas, ou passe au-dessus1+
ou2+
avant. Ceux-ci ajoutent respectivement 1 ou 2 au nombre à la fin de la pile. Si le poissonv
remonte , il frappe à nouveau et redescend.}
décale la pile vers la droite, puis ayanti
à la position 1 sur la pile et cette nouvelle variable à la position 0 (nous l'appelleronsm
).Cette section est une fonction, appelons-la whitespaceTrimmer . Cela commence là où
<
est. Il supprime simplement les espaces qui se trouvent à la fin de la pile (donc au début de la chaîne) jusqu'à ce qu'il rencontre un caractère non-espace.Donc, immédiatement, le poisson nage dans un
<
et doit se déplacer vers la gauche. Il s'exécute ensuite dans:&:&
lequel copie la valeur à la fin de la pile, place l'espace du registre à la fin de la pile, le copie, puis le replace sur le registre.Ensuite, le poisson frappe
=?!v ~
, ou plus précisément,=
qui sort les deux dernières valeurs (les deux que nous venons de créer) de la pile, les compare, place un 1 à la fin de la pile si elles sont égales et un 0 sur la fin de la pile si elles sont différentes. Le fait?
apparaître la nouvelle valeur à la fin de la pile, s'il est égal à 0, il n'exécute pas l'instruction suivante, qui dans ce cas!
, il exécute à la placev
, ce qui ordonne au poisson de se déplacer vers le bas (en quittant la fonction).Si c'est 1 cependant, alors il a trouvé un espace, donc il exécute le
!
qui est un trampoline, et cela fait que le poisson saute l'instruction suivante, qui est unv
, donc le poisson continue. Devant le poisson, il voit~
qui lui dit de sortir la dernière valeur de la pile (confirmée comme étant un espace), puis le poisson continue et exécute à nouveau la fonction.Le poisson est immédiatement averti de nager à droite de a
>
, puis de sortir le dernier caractère de la pileo
(qui, la première fois qu'il est exécuté, est le premier caractère des
). Il obtient la longueur de la pilel
, place un2
à la fin de la pile, puis-
en soustrait 2l
. Il frappe?!;
ce qui, se souvenant de ce qui?
fait, fait sauter le poisson!
si la pile est vide et atterrir;
, ce qui met fin au programme.Après s'il y a encore des caractères sur la pile, nous exécutons
!
ce qui fait rebondir le poisson sur;
et exécutea6.
, qui stockea
(AKA10
), et6
à la fin de la pile, qui sont lesx, y
coordonnées de.
, ce qui les fait disparaître à la fin de la empiler, puis téléporter le poisson10, 6
et exécuter l'instruction à droite de cette position (car le poisson nage à droite).C'est moins compliqué qu'il n'y paraît lorsque vous réalisez que la
y
position 6 est la ligne en dessous de celle-ci.x
la position 10 est alorsv
, et à droite de celle-ci, qui est un no-op. Cela amène le poisson à continuer de nager à droite et à commencer l'exécution en fait au début de la ligne ...
C'est donc la fonction qui ajoute le texte aléatoire entre les caractères. C'est un peu bouchée, mais c'est juste parce que j'ai essayé de le rendre un peu plus aléatoire. Appelons cela genRandomChars .
Le
:{{:}l1-[rv
est en fait la configuration de la fonction, et moins une partie de la fonction elle-même. Le poisson nage d'abord sur:{{
lequel copie la valeur à la fin de la pile, puis la déplace deux fois vers la gauche. Si vous vous souvenez quei
c'était à la position 1 sur la pile, alors vous sauriezi
c'est maintenant à la fin de la pile.Le poisson nage ensuite sur les
:}
copiesi
et déplace la pile vers la droite, en la plaçanti
au début et à la fin de la pile.l1-[
demande au poisson de placer la longueur à la fin de la pile, soustrayez-en 1, puis[
créez une nouvelle pile, en déplaçantl-1
(longueur de la pile moins 1) les valeurs vers la nouvelle pile (donc en laissant simplementi
sur l'ancienne pile). Ensuite, le poisson frappe simplement,rv
ce qui inverse à nouveau la pile (je pense que la création d'une nouvelle pile l'inverse pour une raison quelconque) et ordonne au poisson de nager à nouveau vers le bas, en commençant vraiment la fonction<
ci - dessous.Donc, actuellement, la fin de la pile a
m
et notre temporairei
, que nous appelleronsti
. Immédiatement, le poisson nage1-}
, ce qui soustrait 1ti
et le déplace au début de la pile. Ensuite,:}
qui copie simplementm
et le déplace au début de la pile (en mettantti
à la position de pile 1).C'est là que nous avons touché cette petite chose:
C'est vraiment simple. Le
!
fait sauter|
et exécuter le poissonx
. En se souvenant de ce qui sex
passe, nous nous souvenons que cela fait bouger le poisson dans 4 directions.|
est simplement un miroir, et fait revenir le poissonx
. Donc, fondamentalement, le poisson placera 1, 2 ou 3 à la fin de la pile et continuera à se déplacer vers la gauche, en s'enroulant.Le poisson s'exécute ensuite,
*+o
ce qui provoque le saut des deux dernières valeurs de la pile, leur multiplication et le retour du résultat, puis la même chose avec addition, puis la valeur finale est sautée de la pile et sortie aveco
. Notre pile est maintenant contenant encore relativement normale juste [m
,ti
,s
].:}}:
entraîne las
copie de la valeur à la fin de la pile (essentiellement la position 0), puis la pile est déplacée deux fois vers la droite (en la replaçantti
sur le devant), puisti
est copiée.?!v
devrait être assez facile à comprendre maintenant. Fondamentalement, siti
est 0, nous quittons la fonction avecv
, sinon nous exécutons!
et sautonsv
(en faisant une autre boucle).Si
ti
est 0 et que nous avons fini de produire des caractères légèrement aléatoires, alors nous exécutonsv
et voyons:Rien d'extraordinaire ici. Nous retirons
ti
de la pile via~
. Puis]
c'est nouveau, il sort toutes nos valeurs de la pile et les place sur l'ancienne pile! En raison de la question de l' inversion on inverse avecr
, puis déplacer la pile à droite deux fois avec}}~
, shufting la pile à droite, nous donnant [m
,i
,s
], l'~
est de supprimer le supplément en doubles[0]
plus tôt dans la fonction que nous aurions besoin si nous faisions une boucle (mais nous ne le sommes pas, nous sortons).v
dit au poisson de nager vers le bas et vers l'>34.
intérieur (inversé pour montrer l'ordre d'exécution), ce qui dit au poisson de simplement nager vers la gauche et vers l'intérieur3, 4
(parce que le.
c'est un saut!).3, 4
est en fait juste à droite du débutwhitespaceTrimmer
, ce qui est parfait car nous partons à gauche.En suivant toute cette logique, nous pouvons suivre le poisson jusqu'à ce que la pile soit finalement vide et que le programme se termine juste après
whitespaceTrimmer
son exécution.la source
Perl 5, 81 octets
J'espère que ce qui suit vous aide à comprendre ce que fait le one-liner:
la source
Clojure,
126123118 118122117 octetsMappe le message, insère des caractères aléatoires, puis concatène le résultat.
Les instructions suggèrent que tous les espaces doivent être supprimés de la chaîne de résultat. Si seuls les espaces du message d'origine sont censés être supprimés, je peux changer cela.
Non golfé:
la source
Python 3, 127 octets
Probablement bien plus longtemps que nécessaire, mais c'est le mien joué jusqu'à présent.
la source
PHP, 96 octets
Prend String comme argument 1 et Number comme argument 2
Essayez-le en ligne
la source
Python 3, 133 octets
la source
Node.js, 88 octets
Exemples de sorties:
Essayez-le en ligne!
la source
C,
102100 octets-2 octets pour sauter
continue
.Non golfé:
Usage:
la source