단어가 서로 인접한 키로 입력 가능합니까?


13

이것을 읽기 전에 나는이 작은 퍼즐을 읽는 것이 좋습니다 : /puzzling/11408/longest-word-with-adjacent-letters-on-a-keyboard

키보드에서 인접한 키를 사용하여 단어를 입력 할 수있는 경우 단어 (소문자 만)를 사용하고 "예"를 출력하는 프로그램을 만들고 싶습니다 (단어 참조). 인접한 글자로 입력하지 마십시오.

이 도전에 사용 된 키보드 레이아웃은 다음과 같습니다.

 ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
 | Q | W | E | R | T | Y | U | I | O | P |
 └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘
   | A | S | D | F | G | H | J | K | L |
   └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┘
     | Z | X | C | V | B | N | M |
     └───┴───┴───┴───┴───┴───┴───┘

기억하십시오 : 이것은 codegolf이므로 최단 답변이 승리합니다!


입력이 문자로만 구성되어 있다고 가정 할 수 있습니까? 그것들이 모두 하나의 경우에 주어진다고 가정 할 수 있습니까?
Martin Ender

2
"이 두 개의 인접한 키는 1.5 * 키 사이의 키 간격을 가질 수 있습니다." 분명히 인접한 키는 실제로 인접 해 있습니다. 즉, 연결된 퍼즐에서와 같이 키 사이에 공간이 없습니까?
Luke

논쟁하는 법? STDIN? 기능?
theonlygusti

답변:


9

피시스, 66

?"Yes".Am>2sm^-.uk2Cm.Dx"qwertyuiopasdfghjkl*zxcvbnm"b9.5dC,ztz"No

여기에서 시도하십시오.

나는 Pyth가 빗변 기능을 가지고 있지 않다는 것을 알고 놀랐습니다. 나는 Pyth에 빗변 기능을 제안 할 것이기 때문에, 앞으로 이러한 문제는 일어나지 않을 것입니다.

설명

키보드를 다음과 같이 변환합니다.

┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
| Q | W | E | R | T | Y | U | I | O | P |
└─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐
  | A | S | D | F | G | H | J | K | L | * |
  └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴───┘
    | Z | X | C | V | B | N | M |
    └───┴───┴───┴───┴───┴───┴───┘

그런 다음로 인코딩합니다 "qwertyuiopasdfghjkl*zxcvbnm". 그런 다음 divmod를 modulo 9.5와 함께 사용하여 모든 키의 2D 좌표를 계산했습니다. 그런 다음 연속 키 사이의 거리를 계산하고 제곱 거리 <2인지 확인합니다.


3

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.";

바로 CJam을 배우고 있습니다.
Soham Chowdhury

@octatoan Pyth를 배우는 것이 더 나을 것 같습니다. : P
Runer112

하하, 아마도이 경우라면 그렇습니다.
Soham Chowdhury

2

J, 77 바이트

No`Yes{::~[:*/2>+/"1@(2|@-/\3(|,.<.@%~+-:@|)'qazwsxedcrfvtgbyhnujmikXolX'i.])

용법:

   f=.No`Yes{::~[:*/2>+/"1@(2|@-/\3(|,.<.@%~+-:@|)'qazwsxedcrfvtgbyhnujmikXolX'i.])

   f 'redresser'
Yes
   f 'qwergy'
No
   f 'ppcg'
No

방법:

모든 입력 문자에 대해 문자열의 색인을 기반으로 2D 좌표 (질문의 이미지와 유사)를 생성합니다 'qazwsxedcrfvtgbyhnujmikXolX'. 입력의 모든 문자 쌍에 대해 좌표의 맨해튼 거리가 2보다 작은 지 확인합니다. 모두 같으면 출력합니다 Yes( No그렇지 않으면`연산자를 남용하여).

여기에서 온라인으로 사용해보십시오.


당신은 편지를 잊었다 p.
mbomb007

@ mbomb007 찾을 수없는 문자의 경우 i.연산자는 반환 index of the last element + 1하므로 1 바이트를 쓰지 않고 저장할 p수 있으며 올바른 인덱스를 얻을 수 있습니다.
randomra

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.