Les mots courants doivent toujours être évités pour être utilisés comme mots de passe. Ce défi consiste à coder un programme très simple qui communique un mot de passe donné ( M odifier U ntil N ot G uessed E asily).
Contribution
Un mot, qui est une chaîne écrite dans l'alphabet abcdefghijklmnopqrstuvwxyz
. Peu importe que les lettres soient en minuscules ou en majuscules.
Munging
- Remplacez toute séquence répétée d'une même lettre par elle-même, précédée du nombre de fois que la lettre a été répétée (
LLLL
avec4L
) - Changez le premier
a
avec@
- Changez le premier
b
avec8
- Changez le premier
c
avec(
- Changez le premier
d
avec6
- Changez le premier
e
avec3
- Changez le premier
f
avec#
- Changez le premier
g
avec9
- Changez le premier
h
avec#
- Changez le premier
i
avec1
- Changez la seconde
i
avec!
- Changez le premier
k
avec<
- Changez le premier
l
avec1
- Changez la seconde
l
aveci
- Changez le premier
o
avec0
- Changez le premier
q
avec9
- Changez le premier
s
avec5
- Changez la seconde
s
avec$
- Changez le premier
t
avec+
- Changez le premier
v
avec>
- Changez la seconde
v
avec<
- Changez le premier
w
avecuu
- Changez la seconde
w
avec2u
- Changez le premier
x
avec%
- Changez le premier
y
avec?
La règle 1 doit être appliquée le nombre de fois nécessaire jusqu'à ce qu'il ne soit plus possible de l'appliquer davantage. Après cela, le reste des règles est appliqué.
Sortie Le mot munged
Exemples
codegolf
->(0639o1#
programming
->pr09r@2m1ng
puzzles
->pu2z135
passwords
->p@25uu0r6$
wwww
->4uu
aaaaaaaaaaa
->11a
lllolllolll
->3103io3l
jjjmjjjj
->3jm4j
Il s'agit de code-golf , veuillez donc rendre votre programme le plus court possible!
Rien dans ce post ne doit être utilisé comme idées de mot de passe ou comme partie des pratiques de mot de passe.
Réponses:
Java 8,
237321319280247241240237 octets+84 octets car les règles ont changé. ( EDIT: Enfin, revenons à mes 237 octets initiaux. ) Remplacer
WWWW
par222W
est facile en Java, mais4W
pas ... Si seulement Java avait un moyen d'utiliser le groupe de capture regex pour quelque chose. . Obtenir la longueur avec"$1".length()
, remplacer la correspondance elle-même par"$1".replace(...)
, convertir la correspondance en un entier avecnew Integer("$1")
, ou utiliser quelque chose de similaire à Retina (c.-à-d.s.replaceAll("(?=(.)\\1)(\\1)+","$#2$1")
) ou JavaScript (ies.replaceAll("(.)\\1+",m->m.length()+m.charAt(0))
) serait ma première chose que j'aimerais voir en Java dans le futur pour bénéficier du codegolfing ..>.> Je pense que c'est la 10ème fois que je déteste Java ne peut rien faire avec le match de groupe de capture ..-78 octets grâce à @ OlivierGrégoire .
Les E / S sont en majuscules.
Explication:
Essayez-le ici.
la source
JavaScript (ES6), 147 octets
Cas de test
Afficher l'extrait de code
Explication
Exécute une série de remplacements sur la chaîne d'entrée
s
, dans l'ordre spécifié par le défi. Chaque élément de la série est un tableau ou une chaîne, avec deux éléments, qui est ensuite spread (...r
) et transmis às.replace()
.la source
05AB1E , 69 octets
-9 octets grâce à Emigna
Essayez-le en ligne!
la source
'w„uu„2u‚â
4uu
γvygD≠×yÙ}J
Perl 5 , 152 + 1 (
-p
) = 153 octetsEssayez-le en ligne!
la source
-p
est utilisé comme argumentperl
sur la ligne de commande qui lit automatiquement les entréesSTDIN
etprint
le contenu de$_
à la fin du script. TIO autorise cette option, et puisqu'ilperl -pe<code>
s'agit d'un octet de plusperl -e<code>
qu'il n'est compté comme un octet supplémentaire.~
intervalle ne devrait-il pas plutôtj~k
être un!
? Actuellement, il remplace la deuxième occurrence dei
par un~
au lieu d'un!
.Probablement pas le plus golfé possible, mais ça marche.
-6 octets grâce aux ovs
-77 octets grâce à NieDzejkob et Jonathan French
Python 3 ,
329323 octets246 octetsEssayez-le en ligne!
la source
.lower()
jjjmjjjj
devrait sortir3jm4j
mais sorties3jm3jj
. Edit: 258 octets avec ce problème corrigéRétine ,
166124 octetsEssayez-le en ligne!Explication:
Remplacez une série de lettres répétées par la longueur et la lettre.
Faites correspondre la première occurrence des lettres
a
ày
et marquez-les avec un espace réservé.Correction de la première occurrence de
w
.Corrigez la première occurrence de toutes les autres lettres de
a
ày
et supprimez les espaces réservés.Marquer le ( à l' origine) deuxième occurrence des lettres
i
,l
,s
,v
ouw
avec un espace réservé.Correction de la deuxième occurrence de
w
.Correction de la deuxième occurrence des quatre autres lettres.
la source
Haskell ,
221218213 octetsEssayez-le en ligne!
Des abus
foldr
pour exécuter la chaîne à travers une séquence de transformations de chaîne à l'envers. La séquence "commence" avecr
laquelle se fait le remplacement du nombre de répétitions en utilisantspan
pour casser la queue de la chaîne lorsqu'elle cesse d'être égale à la tête. Si la première partie n'est pas vide, c'est une répétition, nous imprimons donc la longueur +1. Ensuite, nous curry un argument enf
pour chaque remplacement de caractère dans l'ordre (inverse). Les remplacements sont codés comme une chaîne unique, le premier caractère étant le caractère à remplacer et le reste comme la chaîne (puisque les remplacements w sont plusieurs caractères) pour aller à sa place. J'ai mis ces chaînes codées dans une grande chaîne séparée par des espaces afin dewords
pouvoir la décomposer en une liste pour moi.EDIT: Merci @Laikoni de m'avoir sauvé 5 octets! C'était une utilisation intelligente de laquelle
$
je ne pensais pas. Je ne connaissais pas non plus cette<-
astuce.la source
(p,q)<-span(==a)b
place delet(p,q)=span(==a)b
etp>[]
au lieu dep/=[]
.m
points gratuits:($(f<$>words"w2u ... y?")++[r]).foldr($)
essayez-le en ligne!Lua , 173 octets
Essayez-le en ligne!
Non golfé et expliqué:
la source
C # (.NET Core),
317,289, 279 octetsEssayez-le en ligne!
J'espère que c'est correct de recevoir un tableau de caractères en entrée et non une chaîne.
Non golfé :
la source
C ++,
571495478444 octets-127 octets grâce à Zacharý
la
"/a@/b8/c(/d6/e3/f#/g9/h#/i1//i!/k</l1//li/o0/q9/s5//s$/t+/v>/wuu//w2u/x%/y?/"
chaîne est utilisée pour passer d'un caractère à d'autres. 1/
signifie que le premier "caractère suivant" doit être remplacé par ce qui suit le suivant/
, 2 signifie que le deuxième "caractère suivant" doit être remplacé par ce qui suit.Essayez-le en ligne
la source
R ,
224219 octetsEssayez-le en ligne!
Méchant, mais l'essentiel est la substitution itérative dans le
Reduce
.sub
ne modifie que la première occurrence de la correspondance.Merci à JayCe d'avoir souligné un beau golf!
la source
Perl 5 , 123 octets
Code de 122 octets + 1 pour
-p
.Développé indépendamment de la réponse de @ Xcali , mais en utilisant un processus très similaire.
Essayez-le en ligne!
la source
Python 2 ,
220216194190 190188 octetsEssayez-le en ligne!
Python 3 , 187 octets
Essayez-le en ligne!
la source
Pip ,
103102 octetsEssayez-le en ligne!
Explication
Le code effectue trois étapes de transformation:
* Nous devons tester si
a@?m@0
est nul. Il ne suffit pas de vérifier sa véracité, car 0 est un indice légitime qui est falsey. Pip n'a pas de méthode intégrée courte pour tester si une valeur est nulle, mais tester sa longueur fonctionne assez bien dans ce cas: tout nombre aura une longueur d'au moins 1 (véridique), et nil aura une longueur de zéro (falsey).la source