Сусідний лист-тест


12

Одним з аспектів тестування міцності пароля є запуски суміжних літер на клавіатурі. У цьому виклику має бути створена програма, яка повертається, trueякщо рядок містить будь-які пробіги суміжних літер.

Що вважається пробігом суміжних літер?

Для цієї спрощеної версії тестера на захист пароля, пробіг суміжних символів - це 3 або більше літер, які знаходяться поруч один з одним в одному напрямку (ліворуч, праворуч, вище чи нижче) на клавіатурі QWERTY. Для цього завдання макет клавіатури виглядає так:

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

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

Вхідні дані

Рядок пароля для перевірки. Він буде містити лише символи [0-9a-z]або [0-9A-Z](на ваш вибір).

Вихідні дані

Програма повинна повернути триєдине значення, якщо пароль містить один або більше запусків суміжних клавіш, або фальси, якщо він не містить жодного.

Приклади

Наступні входи повинні виводити істинні:

  • asd
  • ytrewq
  • ju7
  • abc6yhdef

І ці входи повинні виводити помилкові:

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

Правила

  • Відповіді можуть бути повноцінними програмами або функціями.
  • Стандартні лазівки заборонені.
  • Це , найнижчий рахунок (у байтах) виграє!

Відповіді:


3

Pyth - 66 62 60 байт

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

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

Тестовий сюїт .


@ user81655 виправлено та збережено два байти.
Малтісен

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 char 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

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 - правда. З’єднайте всі клавіші горизонтально і вертикально, і поверніть назад, і перевіряє, чи міститься якийсь із 3 символів введення.

C # насправді багатослівний, треба пірнати іншими мовами :(


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малим вводом або спробуйте в Інтернеті .


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

Це було досить цікаве завдання для реалізації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.