Тест смежных букв

12

Одним из аспектов проверки надежности пароля является запуск соседних букв на клавиатуре. В этой задаче должна быть создана программа, которая возвращает, trueесли строка содержит какие-либо серии соседних букв.

Что считается серией соседних букв?

Для этой упрощенной версии тестера надежности пароля набор соседних символов составляет 3 или более букв, которые расположены рядом друг с другом в одном направлении (влево, вправо, над или под) на клавиатуре QWERTY. Для этой задачи раскладка клавиатуры выглядит следующим образом:

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

На приведенной выше диаграмме Qниже, 1но не ниже 2, поэтому строка, которая содержит 1qaили aq1где-либо внутри нее, будет возвращать программу true, но 2qaне будет.

вход

Строка пароля для проверки. Он будет содержать только символы [0-9a-z]или [0-9A-Z](на ваш выбор).

Выход

Программа должна вернуть истинное значение, если пароль содержит один или несколько циклов смежных ключей, или false, если оно не содержит ни одного.

Примеры

Следующие входные данные должны вывести true:

  • asd
  • ytrewq
  • ju7
  • abc6yhdef

И эти входы должны вывести false:

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

правила

  • Ответы могут быть полными программами или функциями.
  • Стандартные лазейки запрещены.
  • Это , выигрывает самая низкая оценка (в байтах)!
user81655
источник

Ответы:

3

Pyth - 66 62 60 байт

Довольно простой подход. Проверяет, находится ли какая-либо из подстрок len 3 в любом из вращений клавиатуры. Будет использовать базовую кодировку для клавиатуры.

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

Тестовый пакет .

Maltysen
источник
@ user81655 исправлено и сохранено два байта.
Maltysen
2

Japt , 78 байт

Japt - это сокращенная версия Ja vaScri pt . переводчик

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

Выходы 0для ложных случаев; в противном случае положительное целое число. Его ?следует заменить непечатаемым символом Unicode U + 0086, или, если вы просто не хотите заниматься всеми этими проблемами as.

Как это устроено

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
источник
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 ложь, 1 правдива. Объединяет все ключи по горизонтали и вертикали и переворачивает их, а также проверяет, содержится ли в них какой-либо из трех символов ввода.

C # действительно многословен, должен погрузиться в другие языки :(

noisyass2
источник
0

PHP, 173 + 1 байт

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;

Запустите как трубу с -nRвводом в нижнем регистре или попробуйте онлайн .

Titus
источник
0

Clojure, 156 байт

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

Это была довольно интересная задача для реализации.

NikoNyrh
источник