XKCD: Klavye Ezmesi Anomalileri


16

Başka bir XKCD ilham yarışması. Bu Klavye Mash dayanmaktadır .

Bir giriş dizesi verildiğinde, çoğunluğun standart ABD QWERTY klavyesinde tek bir satıra yazıldığını varsayarak anormal karakterleri belirleyin . Giriş dizeleri kaydırılmış tuş vuruşları içerebilir, ancak satırbaşı (Enter), CTRL / ALT etkilenen karakterler, boşluklar, sekmeler ve arka boşluklar içermez (bu saçma olur). Sayısal tuş takımı, bu meydan okuma için klavyenin bir parçası olarak değerlendirilmez.

Zorluk, tek bir karakter dizisindeki tek tek karakterlerin çoğunluğu ile aynı klavye satırında olmayan karakterlerin çıktısını almaktır. Çıktı her anormal karakteri sadece bir kez içermeli ve başka karakter içermemelidir.

İki veya daha fazla satır boyunca eşit sayıda anormal karakter olması durumunda, kravat kesmesi şu sırayla belirlenir:

  • En kısa benzersiz liste
  • En üst sıra

Giriş

STDIN, ARGV veya işlev parametresi yoluyla bir dize

Çıktı

STDOUT için bir dize veya işlev döndürmesi. Her bir anormal karakteri sadece bir kez olmalıdır, ancak sipariş edilmesi gerekmez.

Örnekler

Giriş: FJAFJKLDSKF7KFDJ
Çıkış: 7

Giriş: ASDF11111
Çıkış: ASDF

Giriş: lkjrhsDdftkjhrksRjd
Çıktı: rtR

Girdi: } *% 3 & 2098 @ $ 2k234 # @ $ M
Çıktı: }

En üst satır listesi döndürüldü
Girdi: ASD! @ # Vcx
Çıktı :! @ #

En kısa benzersiz liste döndürüldü
Giriş: ASdf1233qwER
Çıktı: 123

En kısa liste döndürüldü
Girdi: 12334QWTTSDFDSXVVBBX
Çıktı: QWT

Bu kod golf, bu yüzden en kısa giriş kazanır.

Yanıtlar:


8

CJam, 111 89 88 86 84 83 bayt

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

CJam yorumlayıcısında çevrimiçi deneyin .

Nasıl çalışır

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.