Prueba de letras adyacentes


12

Un aspecto de la prueba de seguridad de la contraseña es la ejecución de letras adyacentes en el teclado. En este desafío, se debe crear un programa que regrese truesi una cadena contiene alguna serie de letras adyacentes.

¿Qué cuenta como una serie de letras adyacentes?

Para esta versión simplificada de un probador de seguridad de contraseña, una serie de caracteres adyacentes son 3 o más letras que están una al lado de la otra en una sola dirección (izquierda, derecha, arriba o abajo) en un teclado QWERTY. Para el propósito de este desafío, la distribución del teclado se ve así:

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

En el diagrama de arriba Qestá debajo 1pero no debajo 2, por lo que una cadena que contiene 1qao en aq1cualquier lugar dentro de él haría que el programa regrese true, pero 2qano lo haría.

Entrada

La cadena de contraseña para verificar. Solo contendrá los caracteres [0-9a-z]o [0-9A-Z](su elección).

Salida

El programa debe devolver un valor verdadero si la contraseña contiene una o más ejecuciones de claves adyacentes, o falsey si no contiene ninguna.

Ejemplos

Las siguientes entradas deberían dar como resultado verdadero:

  • asd
  • ytrewq
  • ju7
  • abc6yhdef

Y estas entradas deberían generar falso:

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

Reglas

  • Las respuestas pueden ser programas completos o funciones.
  • Las lagunas estándar no están permitidas.
  • Este es el , gana la puntuación más baja (en bytes).

Respuestas:


3

Pyth - 66 62 60 bytes

Enfoque bastante sencillo. Comprueba si alguna de las subcadenas len 3 se encuentra en alguna de las rotaciones del teclado. Utilizará la codificación base para el teclado.

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

Test Suite .


@ user81655 arreglado y guardado dos bytes.
Maltysen

2

Japt , 78 bytes

Japt es una versión abreviada de Ja vaScri pt . Interprete

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

Salidas 0para casos de falsey; de lo contrario, un entero positivo. El ?debe ser reemplazado por el carbón no imprimible Unicode U + 0086, o si no quiere ir a todos esos problemas, simplemente as.

Cómo funciona

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 es falsey, 1 es verdadero. Concatena todas las teclas horizontal y vertical, y se invierte, y comprueba si contiene alguno de los 3 caracteres de entrada.

C # es realmente detallado, tengo que sumergirme en otros idiomas :(


0

PHP, 173 + 1 bytes

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;

Ejecutar como canalización con -nRentrada en minúsculas o probarlo en línea .


0

Clojure, 156 bytes

#(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 %))

Esta fue una tarea bastante interesante de implementar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.