Sur Github, il y a une liste des 10 000 mots de passe les plus courants. J'ai également généré ma propre liste de mots de passe aléatoires .
Votre travail consiste à identifier la différence entre les deux listes (avec une précision de 100%).
Par conséquent, votre programme doit accepter une chaîne et renvoyer:
- Une valeur vraie si le mot de passe est sur la liste des mots de passe communs
- Une valeur fausse si le mot de passe est sur la liste des mots de passe aléatoires
- Tout ce que vous souhaitez si le mot de passe n'est pas non plus
Pour ceux qui sont intéressés, mon programme génère des mots de passe de 5 à 10 caractères et chaque caractère est soit une lettre minuscule soit un chiffre.
Remarque: Vous ne devez pas utiliser ces mots de passe dans quelque chose de sécurisé. Mon algorithme de génération n'est pas sécurisé du tout, et les résultats sont affichés en ligne pour que tous puissent les voir
$args[0]-in(gc .\10k-passwords.txt)
? Devons-nous trouver une sorte de modèle qui reconnaît l'un mais pas l'autre?Réponses:
CJam,
2262908620512503 octetsCela imprime un entier positif pour les mots de passe courants et zéro pour les autres.
Vérification
la source
Python,
719664 octetsJ'ai un peu de mal à tester cela dans Retina , alors voici Python pour l'instant. Testez en donnant
lambda
un nom et en l'exécutant sur les listes de mots:C'est une très grosse expression régulière, donc je prends une pause pour jouer au golf un peu.
la source
Bash - 5324 octets
où se trouve rp.gz sur http://dl.tyzoid.com/rp.gz
Cela renvoie 1 si sur la liste aléatoire. C'est faux, car bash évalue 0 comme une valeur truty.
la source
rp.gz
en un nom de fichier de 1 octet pour enregistrer 4 octets ...gunzip
etgrep
, aussi pas besoin dewc
:zgrep -c $1 rp.gz
. Micro-optimisation également, maisxz
compresse de façon insignifiante. Au fait, ne serait-il pas préférable d'utiliser-x
(--line-regexp
) ou-w
(--word-regexp
) pour ne pas faire correspondre les fragments de mots?sort rpass.txt | 7z -si -mx=9 a r.gz
devrait vous donner un rasage d'environ 480 octets ...Haskell, 8047 octets
Cela semble être le meilleur que je puisse comprendre sans casser les algorithmes de compression, et aucun des langages que j'aime utiliser n'a vraiment une brève méthode de compression intégrée.
L '"algorithme" est extrêmement simple; vérifiez s'il est dans la liste des mots de passe aléatoires et retournez False s'il l'est et True s'il ne l'est pas.
la source