XKCD: ความผิดปกติของ Keyboard Mash


16

XKCDอีกแรงบันดาลใจจากการแข่งขัน หนึ่งนี้จะขึ้นอยู่กับแป้นพิมพ์ Mash

ได้รับสายป้อนระบุตัวอักษรที่ผิดปกติสมมติว่าส่วนใหญ่ได้รับการพิมพ์บนแถวเดียวของมาตรฐาน QWERTY แป้นพิมพ์ของสหรัฐอเมริกา สตริงอินพุตสามารถมีการกดแป้น Shifted แต่พวกเขาจะไม่ประกอบด้วยผลตอบแทนการขนส่ง (Enter), CTRL / ALT ตัวละครที่ได้รับผลกระทบช่องว่างแท็บและ backspaces (เพราะมันจะโง่) แป้นตัวเลขจะไม่ถือว่าเป็นส่วนหนึ่งของแป้นพิมพ์สำหรับความท้าทายนี้

ความท้าทายคือการส่งออกอักขระที่ไม่ได้อยู่ในแถวแป้นพิมพ์เดียวกันกับอักขระส่วนใหญ่ในสตริงเดียว เอาต์พุตควรมีอักขระผิดปกติแต่ละตัวเพียงครั้งเดียวและไม่มีอักขระอื่น

ในกรณีที่มีการนับที่เท่ากันของอักขระที่ผิดปกติทั่วทั้งสองแถวขึ้นไปการแบ่งไทเบรกจะถูกกำหนดตามลำดับนี้:

  • รายการที่ไม่ซ้ำกันสั้นที่สุด
  • แถวบนสุด

อินพุต

สตริงผ่านทั้ง 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.