Teste de letra adjacente

12

Um aspecto do teste de força da senha é a execução de letras adjacentes no teclado. Nesse desafio, é necessário criar um programa que retorne truese uma sequência contiver execuções de letras adjacentes.

O que conta como uma sequência de letras adjacentes?

Para esta versão simplificada de um testador de força de senha, uma sequência de caracteres adjacentes é de três ou mais letras que estão próximas uma da outra em uma única direção (esquerda, direita, acima ou abaixo) em um teclado QWERTY. Para os propósitos deste desafio, o layout do teclado se parece com o seguinte:

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

No diagrama acima Qestá abaixo, 1mas não abaixo 2, portanto, uma string que contenha 1qaou em aq1qualquer lugar dentro dela faria o programa retornar true, mas 2qanão o faria.

Entrada

A sequência de senha a ser verificada. Ele conterá apenas os caracteres [0-9a-z]ou [0-9A-Z](sua escolha).

Resultado

O programa deve retornar um valor verdadeiro se a senha contiver uma ou mais execuções de chaves adjacentes ou falsey se não houver nenhuma.

Exemplos

As seguintes entradas devem gerar true:

  • asd
  • ytrewq
  • ju7
  • abc6yhdef

E essas entradas devem gerar false:

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

Regras

  • As respostas podem ser programas ou funções completos.
  • As brechas padrão não são permitidas.
  • Isso é , a menor pontuação (em bytes) vence!
user81655
fonte
Duplicado de codegolf.stackexchange.com/questions/48406/… ?
Orlp 27/11/2015

Respostas:

3

Pitão - 66 62 60 bytes

Abordagem bastante direta. Verifica se algum dos substrings len 3 está em alguma das rotações do teclado. Estará usando a codificação básica para o teclado.

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

Conjunto de Teste .

Maltysen
fonte
@ user81655 foi corrigido e salvou dois bytes.
Maltysen 27/11/2015
2

Japonês , 78 bytes

Japt é uma versão abreviada do Ja vaScri pt . Intérprete

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

Saídas 0para casos de falsey; caso contrário, um número inteiro positivo. Ele ?deve ser substituído pelo caractere Unicode não imprimível U + 0086, ou, se você não quiser enfrentar esse problema, basta as.

Como 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
ETHproductions
fonte
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 é falsey, 1 é verdade. Concatenou todas as chaves na horizontal e na vertical e inverteu e verifica se algum dos 3 caracteres de entrada está contido.

C # é realmente detalhado, precisa mergulhar em outros idiomas :(

noisyass2
fonte
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;

Execute como pipe com -nRentrada em minúscula ou experimente online .

Titus
fonte
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 %))

Essa foi uma tarefa bastante interessante de implementar.

NikoNyrh
fonte