Kiểm tra thư liền kề


12

Một khía cạnh của kiểm tra độ mạnh mật khẩu là chạy các chữ cái liền kề trên bàn phím. Trong thử thách này, một chương trình phải được tạo để trả về truenếu một chuỗi chứa bất kỳ chuỗi ký tự liền kề nào.

Những gì được tính là một loạt các chữ cái liền kề?

Đối với phiên bản đơn giản này của trình kiểm tra độ mạnh mật khẩu, một ký tự liền kề là 3 hoặc nhiều chữ cái nằm cạnh nhau theo một hướng (trái, phải, trên hoặc dưới) trên bàn phím QWERTY. Với mục đích của thử thách này, bố cục của bàn phím trông như thế này:

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

Trong sơ đồ trên Qlà bên dưới 1nhưng không phải bên dưới 2, do đó, một chuỗi có chứa 1qahoặc aq1bất cứ nơi nào bên trong nó sẽ làm cho chương trình trở lại true, nhưng 2qasẽ không.

Đầu vào

Chuỗi mật khẩu để kiểm tra. Nó sẽ chỉ chứa các ký tự [0-9a-z]hoặc [0-9A-Z](sự lựa chọn của bạn).

Đầu ra

Chương trình phải trả về một giá trị trung thực nếu mật khẩu chứa một hoặc nhiều lần chạy các khóa liền kề hoặc falsey nếu nó không chứa.

Ví dụ

Các đầu vào sau đây nên đầu ra đúng:

  • asd
  • ytrewq
  • ju7
  • abc6yhdef

Và những đầu vào này nên xuất sai:

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

Quy tắc

  • Câu trả lời có thể là chương trình hoặc chức năng hoàn chỉnh.
  • Sơ hở tiêu chuẩn là không được phép.
  • Đây là , điểm thấp nhất (tính bằng byte) thắng!

Câu trả lời:


3

Pyth - 66 62 60 byte

Cách tiếp cận khá đơn giản. Kiểm tra xem có bất kỳ chuỗi con nào len 3 trong bất kỳ góc quay nào của bàn phím không. Sẽ được sử dụng mã hóa cơ sở cho bàn phím.

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

Phòng thử nghiệm .


@ user81655 đã sửa lưu hai byte.
Maltysen

2

Japt , 78 byte

Japt là phiên bản rút gọn của Ja vaScri pt . Thông dịch viên

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

Đầu ra 0cho các trường hợp falsey; mặt khác, một số nguyên dương. Các ?nên được thay thế bằng chưa in ra Unicode char U + 0086, hoặc nếu bạn không muốn đi đến tất cả những rắc rối, chỉ as.

Làm thế nào nó hoạt động

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 là falsey, 1 là sự thật. Nối tất cả các phím theo chiều ngang và dọc, và đảo ngược, và kiểm tra xem có bất kỳ 3 ký tự đầu vào nào được chứa trong đó không.

C # thực sự dài dòng, phải đi sâu vào các ngôn ngữ khác :(


0

PHP, 173 + 1 byte

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;

Chạy như đường ống với -nRđầu vào chữ thường hoặc thử trực tuyến .


0

Clojure, 156 byte

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

Đây là một nhiệm vụ khá thú vị để thực hiện.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.