XKCD : 키보드 매시 이상


16

또 다른 XKCD 는 경쟁에서 영감을 얻었습니다. 이것은 Keyboard Mash를 기반으로 합니다.

입력 문자열이 주어지면 대다수가 표준 미국 QWERTY 키보드 의 단일 행에 입력되었다고 가정하고 이상 문자를 식별하십시오 . 입력 문자열에는 시프트 된 키 스트로크가 포함될 수 있지만 캐리지 리턴 (Enter), CTRL / ALT에 영향을받는 문자, 공백, 탭 및 백 스페이스 (어리 석음)가 포함되지 않습니다. 이 도전에서는 숫자 패드가 키보드의 일부로 간주되지 않습니다.

문제는 단일 문자열에서 대부분의 개별 문자와 동일한 키보드 행에없는 문자를 출력하는 것입니다. 출력에는 각 변칙 문자가 한 번만 포함되고 다른 문자는 포함되지 않아야합니다.

둘 이상의 행에 걸쳐 동일한 개수의 변칙 문자가있는 경우 다음 순서로 타이 브레이크가 결정됩니다.

  • 가장 짧은 고유 목록
  • 최고 행

입력

STDIN, ARGV 또는 함수 매개 변수를 통한 문자열

산출

STDOUT에 대한 문자열 또는 함수 반환 각 이례적인 특성을 한 번만 가져야하지만 주문할 필요는 없습니다.

입력 : FJAFJKLDSKF7KFDJ
출력 : 7

입력 : ASDF11111
출력 : ASDF

입력 : lkjrhsDdftkjhrksRjd
출력 : rtR

입력 : } * 3 % & 2098 @ $ 2k234 # @ $ M
출력 : }

맨 위 행 목록이 리턴 됨
입력 : ASD! @ # Vcx
출력 : ! @ #

가장 짧은 고유 목록이 리턴되었습니다.
입력 : ASdf1233qwER
출력 : 123

맨 위의 짧은 목록을 반환
입력 : 12334QWTTSDFDSXVVBBX의
출력 : QWT

이것은 코드 골프이므로 최단 참가작이 승리합니다.

답변:


8

CJam, 111 89 88 86 84 83 바이트

la9*~"{}qwertyuiop ;':asdfghjkl ,./<>?zxcvbnm"{_32^}%_'ÿ,^a\S%+{[f&s\e|__|]:,}$0=&

CJam 통역사 에서 온라인으로 사용해보십시오 .

작동 원리

la9*~     e# Push the input 9 times on the stack.

"{}qwertyuiop ;':<STX>asdfghjkl ,./<>?zxcvbnm"

{_32^}%   e# XOR a copy of each character with 32.
_'<DEL>,^ e# Push a string of all ASCII characters that are missing.
a\        e# Wrap it in an array.
S%+       e# Split the string at spaces and concatenate with the array.
{         e# Sort the chunks according to the following:
  [       e#
    f&s   e# Push the string of characters from the input that are in this chunk.
    \e|   e# If the result is empty, replace it with the input.
    __|   e# Push a copy with duplicates removed.
  ]       e# Collect both strings in an array.
  :,      e# Replace each string with its length.
}$        e#
0=        e# Retrieve the minimum.
&         e# Intersect it with the input.

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