Votre défi est de mot de passe la chaîne! Qu'est-ce que la mot de passe, demandez-vous?
Prenez une chaîne en entrée. Cette chaîne ne contiendra que des lettres majuscules, des lettres minuscules, des chiffres et des espaces.
Vous devez remplacer tous les espaces par des traits de soulignement et déplacer tous les nombres à la fin de la chaîne dans l'ordre dans lequel ils apparaissent de gauche à droite. Ensuite, pour chaque lettre de la chaîne, changez-la au hasard en majuscule ou en minuscule.
Exemples (la casse des caractères doit varier à chaque fois):
Input
Hello world
Output
HElLo_wORld
Input
pa55 w0rd
Output
pA_Wrd550
Input
14 35
Output
_1435
Input
0971
Output
0971
Input
[space]
Output
_
Le code le plus court en octets gagne!
Celui qui demande à Information Security SE si c'est un bon algorithme de hachage gagne! - Ne vous inquiétez pas, suzerains SE, je plaisante.
Réponses:
Pyth, 15 octets
Manifestation
la source
Labyrinthe , 76 octets
Une autre collaboration avec @ MartinBüttner et du côté le plus fou du spectre du Labyrinthe - pour la première fois, nous avons tous les quatre
^>v<
dans le même programme. Essayez-le en ligne!Explication
L'algorithme général, qui s'exécute en boucle, est le suivant:
Pour garder l'explication compacte, voici à peu près comment chaque partie du programme correspond au pseudocode ci-dessus:
Voici les parties intéressantes.
Obtenir l'aléatoire dans le labyrinthe
Il n'y a qu'une seule façon d'obtenir l'aléatoire dans Labyrinth, et c'est quand l'IP essaie d'avancer mais 1) il n'y a ni chemin en avant ni en arrière et 2) il y a des chemins disponibles à gauche et à droite. Dans ce cas, l'IP choisit au hasard entre les routes gauche et droite.
Cela n'est possible qu'en utilisant les
^>v<
opérateurs, qui font apparaîtren
et décaler la ligne / colonnen
de 1. Par exemple, le programme ( Essayez-le en ligne! )renvoie 1 ou 2 de façon aléatoire, car la
v
colonne décale de 0 (c'est-à-dire la colonne sur laquelle l'IP est activée) de 1, ce qui donneL'IP est orienté vers la droite et essaie d'avancer (le haut de la pile est nul) mais ne peut pas. Il ne peut pas non plus reculer, il choisit donc aléatoirement entre gauche ou droite.
Astuces de golf
Le programme démarre à partir du premier caractère dans l'ordre de lecture, ce que vous remarquerez en fait à l'étape 6. Cependant, le saut à partir d'une pile de labyrinthe vide donne 0, donc les étapes 10 et 14 se produisent, décalant un zéro vers la pile auxiliaire, ce qui est effectivement un no-op.
La pile principale est effectivement vide après chaque itération, ce qui nous permet de jouer la disposition du code en utilisant
>
et<
sur les zéros implicites en bas. L'>
encapsule la ligne du bas de façon à ce que l'IP se déplace du bas à droite vers le bas à gauche, et le<
fait reculer la ligne. L'IP se déplace ensuite joyeusement vers le haut de la colonne de gauche pour continuer la boucle.Les chiffres dans Labyrinth pop
n
et push10*n + <digit>
. De plus, les caractères sont pris modulo 256 avant d'être sortis. Mettre ces deux ensemble nous permet de sortir 95 (soulignement) en faisant`33
32 (espace), ce qui fonctionne parce que-3233 % 256 = 95
. Même s'il existe d'autres façons de transformer 32 en 95 (;95
étant la plus simple), travailler avec un nombre négatif ici nous permet de compacter un peu le code avec des virages à gauche.la source
05AB1E ,
222120 octetsCode:
Utilise le codage CP-1252 .
Essayez-le en ligne!
la source
CJam , 25 octets
Essayez-le en ligne!
Explication
Traduction de ma réponse MATL.
la source
CJam, 23 octets
Testez-le ici.
Explication
la source
Python, 107 octets
Une amélioration par rapport aux deux autres réponses Python car:
[...,'_'][c<'!']
est utilisé à la place des.replace(' ','_')
, etchoice(c+c.swapcase())
est utilisé au lieu dechoice([c.upper(),c.lower()])
la source
JavaScript (ES6),
114101 octets47 octets juste pour randomiser la casse d'un caractère ...
Edit: enregistré un énorme 13 octets grâce à @ edc65.
la source
f=s=>s.replace(/./g,x=>x>'9'?x[`to${Math.random()<.5?"Low":"Upp"}erCase`]():x>' '?(s+=x,''):'_',s='')+s
MATL , 27 octets
Essayez-le en ligne!
la source
Python 3,
128 122 122118 caractèresMerci à xnor d'avoir rasé 6 octets.
la source
lambda x:''.join(choice([i.upper(),i.lower()])for i in sorted(x.replace(' ','_'),key=str.isnumeric))
Perl 6,
777561 octetsS///
est commes///
sauf qu'il ne modifie pas$_
en placela source
Pyth, 17 octets
Essayez-le ici!
Explication
la source
Mathematica, 86 octets
Merci à Sp3000 pour avoir économisé 1 octet.
Ahhh, le traitement des chaînes Mathematica ... n'est-il pas beau. Il s'agit d'une fonction sans nom qui prend et renvoie une chaîne.
En raison de tout le sucre syntaxique, l'ordre de lecture est un peu drôle:
Divisez la chaîne en caractères, sinon nous ne pourrons vraiment rien faire du tout.
Trie les chiffres jusqu'à la fin. En enveloppant la fonction de test dans une liste, nous rendons le tri stable.
Mappe la fonction de gauche sur chaque caractère de la liste.
Choisit une fonction de changement de casse aléatoire pour le personnage actuel.
S'applique au caractère actuel.
Remplace les espaces par des traits de soulignement.
Rejoint enfin tous les caractères dans une chaîne.
la source
PowerShell, 113 octets
PowerShell est synonyme de langage de golf horrible. Divisez en tableau de caractères et remplacez les espaces par des traits de soulignement. Prenez chaque personnage et processus. Collectez les nombres dans la variable $ d pour une sortie ultérieure. Chaque autre caractère est transformé au hasard en majuscules ou en minuscules en appelant une expression à l'aide de
'char'.ToLower()
ou'char'.ToUpper()
. Si des chiffres ont été collectés, ajoutez-les à la fin.la source
$_-in0..9
et l'-in
opérateur introduit dans PowerShell v3 au lieu de l'expression régulière-match
.Julia,
888778 octetsIl s'agit d'une fonction anonyme qui accepte une chaîne et retourne une chaîne. Pour l'appeler, assignez-le à une variable.
Nous divisons d'abord la chaîne d'entrée en un tableau de ses caractères et trions le tableau selon que chaque caractère est un chiffre. Cela maintient l'ordre dans le texte et les chiffres mais pousse les chiffres jusqu'à la fin. Ensuite, pour chaque caractère du tableau, nous vérifions s'il s'agit d'un espace. Si tel est le cas, remplacez-le par un trait de soulignement, sinon choisissez au hasard l'un des caractères
ucfirst
oulcfirst
à appliquer au caractère, le convertissant ainsi en majuscules ou minuscules, respectivement. Joignez le tableau en une chaîne et nous avons terminé!Essayez-le ici
9 octets enregistrés grâce au Sp3000!
la source
Perl,
5148 octetsComprend +2 pour
-lp
Exécutez avec l'entrée sur STDIN:
passwordify.pl
:la source
Facteur, 154 octets
ou 222 avec importation
kernel splitting sequences ascii combinators.random regexp
Je ne suis pas trop doué pour jouer au golf, et je ne sais pas si j'ai adopté la meilleure approche ici, mais j'ai pensé que j'allais essayer
la source
Rubis, 84 octets
Fonction anonyme. La suppression de l'espace avant
c.downcase
provoque une erreur de syntaxe pour une raison quelconque et je ne sais pas pourquoi.la source
Lua, 125 octets
Lorsque l'objet rencontre le fonctionnel, vous pouvez faire de jolies choses, même en lua! Je ne pense pas pouvoir jouer au golf, c'est déjà un énorme gâchis, et je suis déjà heureux de battre la plupart des réponses en python: D.
Non golfé et explications
la source
Sérieusement, 25 octets
Essayez-le en ligne!
Explication:
la source
IPOS - non concurrent, 14 octets
Oui, j'ai ajouté des buildins pour ce défi, mais ceux-ci ne sont pas spécialement ciblés sur ce problème.
Cela fonctionne avec la version 0.1 de l'interpréteur .
Exemple d'exécution
Explication
la source
PHP, 368 octets
Code non golfé:
la source
Python 2, 179 octets
Il y a probablement beaucoup de place à l'amélioration ici que je développerai plus tard.
la source
AWK, 128 octets
Le
srand()
est nécessaire pour nous donner des nombres aléatoires différents à chaque exécution.Pour que cela fonctionne correctement avec une entrée multiligne, nous devons mettre quelque chose comme
A=N=""
avant lafor
boucle.la source
Python 3.5 - 118 octets:
Comme vous pouvez le voir, j'utilise essentiellement la
choice
fonction du module aléatoire pour choisir une fonction aléatoire (soit .upper () ou .lower ()) pour chaque lettre dans la version triée de la chaîne donnée, dans laquelle tous les chiffres vont à la fin. En outre, chaque espace est remplacé par un trait de soulignement dans la chaîne triée.la source
PHP,
164158caractères / octetsC'est mieux que l'autre golf PHP , car:
Scénario
Exemple
la source
> <> , 73 octets
Rien de fou ici, ça:
_
quand il rencontreVous pouvez l'essayer ici !
la source
Python 3, 151 octets
la source