Aidez-moi! Je viens de me connecter à Stack Exchange, mais j'ai oublié mon mot de passe! J'ai besoin d'un moyen de le résoudre avant de me déconnecter.
Heureusement, je suis un excellent hacker. Non seulement j'ai pu trouver le hachage de mon mot de passe, mais j'ai également trouvé l'algorithme de hachage de Stack Exchange! Il prend la valeur ASCII de chaque chiffre multipliée par la place de ce chiffre, puis additionne toutes ces valeurs ensemble. Par exemple:
"135" -> 1*49 + 2*51 + 3*53 = 310
Je me souviens que mon mot de passe comporte 3 chiffres et que chaque caractère est un nombre compris entre 0 et 5 inclus (de telle sorte qu'il correspondra à l'expression régulière:) ^[0-5]{3}$
, mais c'est encore trop de possibilités à deviner. J'ai besoin d'un programme qui peut reconvertir un hachage en mots de passe potentiels, mais en dépit d'être un pirate expert, je ne peux pas coder pour me sauver la vie! J'ai cependant pu écrire ces tests à la main:
input -> output
288 -> 000 // lowest possible hash
290 -> 200, 010
298 -> 022, 050, 103, 131, 212, 240, 321, 402, 430, 511
318 -> 555 // highest possible hash
Est-ce que l'un de vous peut écrire un programme pour moi qui comprendra un hachage et imprimera tous les mots de passe possibles que j'aurais pu utiliser?
L'entrée pourra toujours produire au moins un mot de passe valide. Tout format de sortie est autorisé, tant que les chaînes peuvent être clairement identifiées. Je ne m'inquiète pas non plus des zéros non significatifs, donc si un mot de passe potentiel est 001
, j'accepte 01
ou1
.
Aidez-moi à ne pas être bloqué sur Stack Exchange!
Notation
C'est le code-golf , donc la réponse la plus courte dans chaque langue gagne!
1
la valeur Ascii49
de48
?"135" -> 1*49 + 2*51 + 3*53 = 310
54
je peux travailler les zéros devant.Réponses:
05AB1E , 9 octets
Essayez-le en ligne!
Renvoie la liste des listes de chiffres.
la source
C ,
113108 octetsIl est unique de voir ce qui est destiné à la sortie, la sortie est au format: 200010
Tous les mots de passe sont écrits en 3 chiffres sans délimiteur.
la source
Gelée , 16 octets
Un lien monadique renvoyant une liste de listes de chiffres.
Essayez-le en ligne!
Comment?
la source
Python 2 ,
12675 octets-2 grâce à @ArnoldPalmer
Essayez-le en ligne!
la source
P/6/6
parP/36
, vous économisez 2 octetsMATL , 20 octets
Essayez-le en ligne!
Explication
la source
Python 2 , 81 octets
Essayez-le en ligne!
la source
Haskell,
71706461 octetsEssayez-le en ligne!
la source
C # (.NET Core) ,
133 131 125123 octetsEssayez-le en ligne!
la source
Console.Write($"{i%48}{j%48}{k%48},");
pour la sortie plutôt que de créer une valeur de retour et de supprimer les crochets inutiles autour de l'instruction if pour économiser 8 octets.Func<int,string>
, mais si vous le définissez commeAction<int>
alors il ne s'attend pas à une valeur de retour.char
etint
en C #, vous pouvez déclarer vos variables d'itération commechar
dans la première boucle et toujours faire le calcul de hachage exactement comme vous le faites tout en simplifiant laConsole.Write()
phrase. Ainsi, vous pouvez obtenir une solution appropriée de 119 octets. Essayez-le en ligne!Fusain , 33 octets
Essayez-le en ligne!
Une approche similaire à d'autres réponses: boucle trois fois de 0 à 5, calcule le hachage et affiche l'état des variables d'itération s'il coïncide avec le hachage d'entrée.
Lien vers la version détaillée .
la source
CJam ,
2625 octets-1 octet grâce à Challenger5
Bloc anonyme attend le hachage sur la pile (sous forme d'entier) et laisse le résultat sur la pile (sous forme de liste de chaînes).
Essayez-le en ligne!
Explication
la source
{:H;6Zm*{s:i3,:).*:+H=},}
est 1 octet plus court. Il utilise des chaînes de chiffres dans le filtre plutôt que des nombres pour utiliserm*
la plage automatique de.Java, 162 octets
la source
JavaScript (Firefox 30-57), 72 octets
la source
Pyth, 18 octets
la source
QBIC , 40 octets
Explication
la source
R ,
676261 octets-5 octets grâce à Jarko Dubbeldam
Essayez-le en ligne!
lit le nombre de
stdin
; renvoie une matrice où les lignes sont les caractères.Il génère tous les trios possibles de chiffres dans un format matriciel (
b
), calcule le produit matricielb * [1,2,3]
, prend les lignesb
qui correspondent (en soustrayant288
de l'entrée qui est1*48+2*28+3*48
) et les renvoie.la source
t(t(m))
est un raccourci pouras.matrix(m)