XKCD: Keyboard Mash Anomaly


16

Kompetisi terinspirasi XKCD lainnya . Yang ini didasarkan pada Keyboard Mash .

Diberikan string input, identifikasi karakter anomali, dengan asumsi bahwa mayoritas telah diketik pada satu baris keyboard US QWERTY standar . String input dapat berisi stroke key bergeser, tetapi mereka tidak akan mengandung carriage return (Enter), karakter yang dipengaruhi CTRL / ALT, spasi, tab dan spasi mundur (karena itu akan konyol). Panel angka tidak akan dianggap sebagai bagian dari keyboard untuk tantangan ini.

Tantangannya adalah untuk mengeluarkan karakter yang tidak berada di baris keyboard yang sama dengan mayoritas karakter individu dalam string tunggal. Output harus berisi setiap karakter anomali hanya sekali dan tidak ada karakter lain.

Dalam kasus jumlah karakter anomali yang sama di dua baris atau lebih, tie break ditentukan dalam urutan ini:

  • Daftar unik terpendek
  • Baris terbanyak

Memasukkan

String melalui STDIN, ARGV atau parameter fungsi

Keluaran

String ke STDOUT atau fungsi kembali. Seharusnya masing-masing karakter anomali hanya sekali, tetapi tidak perlu dipesan.

Contohnya

Input: FJAFJKLDSKF7KFDJ
Output: 7

Input: ASDF11111
Output: ASDF

Input: lkjrhsDdftkjhrksRjd
Output: rtR

Input: } * 3% & 2098 @ $ 2k234 # @ $ M
Output: }

Daftar baris teratas dikembalikan
Input: ASD! @ # Vcx
Output :! @ #

Daftar unik terpendek dikembalikan
Input: ASdf1233qwER
Output: 123

Daftar terpendek yang dikembalikan
Input: 12334QWTTSDFDSXVVBBX
Output: QWT

Ini golf kode, jadi entri terpendek menang.

Jawaban:


8

CJam, 111 89 88 86 84 83 byte

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

Cobalah online di juru bahasa CJam .

Bagaimana itu bekerja

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.