Test de lettres adjacentes


12

Un aspect du test de résistance des mots de passe est l'exécution de lettres adjacentes sur le clavier. Dans ce défi, un programme doit être créé qui renvoie truesi une chaîne contient des séries de lettres adjacentes.

Qu'est-ce qui compte comme une série de lettres adjacentes?

Pour cette version simplifiée d'un testeur de force de mot de passe, une série de caractères adjacents est composée de 3 lettres ou plus qui sont côte à côte dans une seule direction (gauche, droite, au-dessus ou en dessous) sur un clavier QWERTY. Aux fins de ce défi, la disposition du clavier ressemble à ceci:

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

Dans le diagramme ci Q- dessus est en dessous 1mais pas en dessous 2, donc une chaîne qui contient 1qaou aq1n'importe où à l'intérieur ferait le retour du programme true, mais 2qane le ferait pas.

Contribution

La chaîne de mot de passe à vérifier. Il ne contiendra que les caractères [0-9a-z]ou [0-9A-Z](votre choix).

Production

Le programme doit renvoyer une valeur véridique si le mot de passe contient une ou plusieurs séries de clés adjacentes, ou falsey s'il n'en contient aucune.

Exemples

Les entrées suivantes doivent afficher true:

  • asd
  • ytrewq
  • ju7
  • abc6yhdef

Et ces entrées devraient produire false:

  • abc
  • aaa
  • qewretry
  • zse
  • qwdfbn
  • pas

Règles

  • Les réponses peuvent être des programmes ou des fonctions complets.
  • Les failles standard ne sont pas autorisées.
  • C'est le , le score le plus bas (en octets) gagne!

Réponses:


3

Pyth - 66 62 60 octets

Approche assez simple. Vérifie si l'une des sous-chaînes len 3 est dans l'une des rotations du clavier. Sera utilisé l'encodage de base pour le clavier.

.E}Rjb+J+Kc+jkS9"0
qwertyuiop
asdfghjkl
zxcvbnm"b.tKN_MJ.:z3

Suite de tests .


@ user81655 corrigé et enregistré deux octets.
Maltysen

2

Japt , 78 octets

Japt est une version abrégée de Ja vaScri pt . Interprète

V=1oA ¬+`0\nqØÆyuiop\n?dfghjkl \nzxcvbnm`;1+¡Y©(((VbX -VbUgY-1)-5 a -5 %A a)bB

Sorties 0pour les cas de falsey; sinon, un entier positif. Le ?devrait être remplacé par le caractère Unicode non imprimable U + 0086, ou si vous ne voulez pas vous poser tous ces problèmes, juste as.

Comment ça fonctionne

V=1oA q +"0\nqwertyuiop\nasdfghjkl \nzxcvbnm";1+Um@Y&&(((VbX -VbUgY-1)-5 a -5 %A a)bB
           // Implicit: U = input string
V=1oA q    // Set variable V to the digits 1-9, plus
+"...";    // this string.
Um@        // Take U and map each character X and its index Y with this function:
Y&&        //  If Y is 0, return Y; otherwise,
VbX -      //  take the index of X in V, subtract
VbUgY-1    //  the index of (char at position Y - 1 in U) in V,
-5 a -5    //  subtract 5, take the absolute value, subtract 5 again,
%A a       //  take modulo by 10, then take the absolute value.
           //  This returns 1 for any pair of characters that is adjacent
           //  within V, horizontally or vertically.
bB +1      // Take the index of 11 in the result and add one.
           // Implicit: output last expression

2

C #, 227

int h(string k){var q="1234567890,QWERTYUIOP,ASDFGHJKL,ZXCVBNM,1QAZ,2WSX,3EDC,4RFV,5TGB,6YHN,7UJM,8IK,9OL,";int i=0,j=0;for(;i<k.Length-2;i++)if((q+String.Concat(Enumerable.Reverse(q))).Contains(k.Substring(i,3)))j=1;return j;}

0 est falsey, 1 est véridique. Concaténé toutes les clés horizontales et verticales et inversées, et vérifie si l'un des 3 caractères d'entrée est contenu à l'intérieur.

C # est vraiment verbeux, je dois plonger dans d'autres langues :(


0

PHP, 173 + 1 octets

while(~$argn[$i+2])($p=preg_match)($r=_.join(".{10}",str_split(($t=substr($argn,$i++,3))))."|$t"._,$d=_1234567890_qwertyuiop_asdfghjkl__zxcvbnm)||$p($r,strrev($d))?die(1):0;

Exécuter en tant que pipe avec une -nRentrée en minuscules ou l' essayer en ligne .


0

Clojure, 156 octets

#(some(set(for[R[["1234567890""QWERTYUIOP""ASDFGHJKL.""ZXCVBNM..."]]R[R(apply map list R)]r R p(partition 3 1 r)p((juxt seq reverse)p)]p))(partition 3 1 %))

C'était une tâche assez intéressante à mettre en œuvre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.