Angrenzender Buchstabentest


12

Ein Aspekt beim Testen der Kennwortstärke besteht darin, dass mehrere benachbarte Buchstaben auf der Tastatur ausgeführt werden. Bei dieser Herausforderung muss ein Programm erstellt werden, das zurückgibt, truewenn eine Zeichenfolge mehrere benachbarte Buchstaben enthält.

Was zählt als Aneinanderreihung von Buchstaben?

Bei dieser vereinfachten Version eines Kennwortprüfgeräts besteht eine Folge benachbarter Zeichen aus 3 oder mehr Buchstaben, die auf einer QWERTZ-Tastatur in einer Richtung (links, rechts, oben oder unten) nebeneinander stehen. Für diese Herausforderung sieht das Layout der Tastatur folgendermaßen aus:

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

In der obigen Abbildung Qist unten, 1aber nicht unten 2, sodass ein String, der 1qaoder aq1irgendwo darin enthalten ist, das Programm zurückgeben würde true, aber 2qanicht.

Eingang

Die zu überprüfende Kennwortzeichenfolge. Es enthält nur die Zeichen [0-9a-z]oder [0-9A-Z](Ihre Wahl).

Ausgabe

Das Programm muss einen Wahrheitswert zurückgeben, wenn das Kennwort eine oder mehrere Reihen benachbarter Schlüssel enthält, oder falsch, wenn es keine enthält.

Beispiele

Die folgenden Eingaben sollten true ausgeben:

  • asd
  • ytrewq
  • ju7
  • abc6yhdef

Und diese Eingaben sollten false ausgeben:

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

Regeln

  • Die Antworten können vollständige Programme oder Funktionen sein.
  • Standardlücken sind nicht zulässig.
  • Dies ist , die niedrigste Punktzahl (in Bytes) gewinnt!

Antworten:


3

Pyth - 66 62 60 Bytes

Ziemlich unkomplizierter Ansatz. Prüft, ob sich eine der Teilzeichenfolgen 3 in einer der Drehungen der Tastatur befindet. Verwendet die Basiscodierung für die Tastatur.

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

Test Suite .


@ user81655 behoben und zwei Bytes gespeichert.
Maltysen

2

Japt , 78 Bytes

Japt ist eine verkürzte Version von Ja vaScri pt . Dolmetscher

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

Ausgänge 0für Falschgeldfälle; ansonsten eine positive ganze Zahl. Das ?sollte durch das nicht druckbare Unicode-Zeichen U + 0086 ersetzt werden, oder wenn Sie sich nicht um all diese Probleme kümmern möchten, einfach as.

Wie es funktioniert

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 ist falsch, 1 ist wahr. Verketten Sie alle Tasten horizontal und vertikal und vertauschen Sie sie. Überprüfen Sie, ob 3 Zeichen der Eingabe enthalten sind.

C # ist wirklich wortreich, muss in andere Sprachen eintauchen :(


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;

Laufen Sie als Pipe mit -nRKleinbuchstaben oder versuchen Sie es online .


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

Dies war eine sehr interessante Aufgabe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.