隣接文字テスト


12

パスワード強度テストの1つの側面は、キーボード上の隣接する文字の実行です。このチャレンジではtrue、文字列に隣接する文字の実行が含まれている場合に返すプログラムを作成する必要があります。

何が隣接する文字の連続としてカウントされますか?

この簡易版のパスワード強度テスターの場合、隣接する文字の連続は、QWERTYキーボード上で単一方向(左、右、上、または下)で互いに隣り合う3文字以上です。この課題のために、キーボードのレイアウトは次のようになります。

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM

上記の図でQは、下にある1が下に2はないので、文字列を含む文字列1qaまたはその中の文字列はaq1、プログラムを返しますがtrue、返し2qaません。

入力

チェックするパスワード文字列。文字[0-9a-z]または[0-9A-Z](選択した)のみが含まれます。

出力

パスワードに隣接するキーの実行が1つ以上含まれている場合、プログラムは真偽値を返す必要があります。

次の入力はtrueを出力するはずです。

  • asd
  • ytrewq
  • ju7
  • abc6yhdef

そして、これらの入力はfalseを出力するはずです:

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

ルール

  • 回答は完全なプログラムまたは機能である場合があります。
  • 標準の抜け穴は許可されていません。
  • これは、最低スコア(バイト単位)が勝ちます!

回答:


3

パイス-66 62 60バイト

非常に簡単なアプローチ。キーボードの回転のいずれかにサブストリングlen 3が含まれているかどうかを確認します。キーボードに基本エンコードを使用します。

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

テストスイート


@ user81655は、固定、および 2つのバイトを保存しました。
マルティセン

2

Japt、78バイト

JaptJa vaScri ptの短縮バージョンです。通訳

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

0偽の場合の出力。それ以外の場合、正の整数。?あなたはすべてのことトラブルに行きたくない場合だけ、印刷できないユニコード文字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 %))

これは実装するのに非常に興味深いタスクでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.