XKCD: Аномалії клавіатури


16

Ще одна натхненна конкуренція XKCD . Цей заснований на клавіатурі 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.