CJam、83 75 74バイト
l_1>]z["qwertyuiop asdfghjkl zxcvbnm "[__B>]z+s_W%+_]zsf{\#)}:*"Yes""No"?
オンラインでお試しください。
説明
一般的なアプローチは、隣接するキーボード文字のすべてのペアを含む大きな隣接文字列を作成し、隣接する入力文字のすべてのペアがその文字列に含まれていることを確認することです。
非常にシンプルでコンパクトなロジックを使用する隣接文字列の作成方法に非常に満足しています。
l_1>]z "Read a line of input and create a list of every pair of
adjacent input characters. There will be a trailing element
of just the final character, but that's okay since any single
lowercase letter can be found in the adjacency string.";
["qwertyuiop asdfghjkl zxcvbnm "
"^ Create the in-row forward adjacency string.";
[__B>]z "Create the alternating-row forward adjacency string by
interleaving the in-row string with a substring of itself
starting with the middle row letters:
'q w e r t y u i o p a s d f g h j k l zxcvbnm '
+ ' a s d f g h j k l z x c v b n m '[no interleave here]
-----------------------------------------------------
'qawsedrftgyhujikolp azsxdcfvgbhnjmk l zxcvbnm '";
+s "Append the alternating-row forward adjacency string to the
in-row forward adjacency string.";
_W%+ "Append the reverse of the forward adjacency string (the
backward adjacency string) to the forward adjacency string.";
_]zs "Double every character in the adjacency string so every
character is adjacent to itself.";
f{\#)} "Map each pair of input characters to its 1-indexed location in
the adjacency string (0 if not found).";
:* "Calculate the product of each pair's location in the adjacency
string. This will be nonzero if and only if every pair of
input characters are in fact adjacent.";
"Yes""No"? "If the product is nonzero, produce 'Yes'; otherwise, produce
'No'.";
"Implicitly print the result.";