XKCD: Аномалии клавиатуры Mash


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.