การทดสอบตัวอักษรที่อยู่ติดกัน


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

Test Suite


@ user81655 แก้ไขแล้วและบันทึกสองไบต์
Maltysen

2

Japt , 78 ไบต์

Japtเป็นรุ่นสั้นJa vaScri พอยต์ ล่าม

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

เอาท์พุท0สำหรับกรณี falsey; มิฉะนั้นเป็นจำนวนเต็มบวก ?ควรถูกแทนที่ด้วย unprintable 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

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 # เป็น verbose จริงๆต้องดำน้ำในภาษาอื่น :(


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

นี่เป็นงานที่น่าสนใจทีเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.