XKCD: Bàn phím Mash dị thường


16

Một cuộc thi lấy cảm hứng từ XKCD . Cái này dựa trên Bàn phím Mash .

Đưa ra một chuỗi đầu vào, xác định các ký tự dị thường, giả sử rằng phần lớn đã được gõ trên một hàng của bàn phím QWERTY tiêu chuẩn của Hoa Kỳ . Các chuỗi đầu vào có thể chứa các nét phím đã được dịch chuyển, nhưng chúng sẽ không chứa các giá trị vận chuyển (Enter), các ký tự bị ảnh hưởng CTRL / ALT, dấu cách, tab và khoảng cách (vì điều đó sẽ là ngớ ngẩn). Bàn phím số sẽ không được coi là một phần của bàn phím cho thử thách này.

Thách thức là xuất các ký tự không nằm trên cùng một hàng bàn phím với phần lớn các ký tự riêng lẻ trong một chuỗi. Đầu ra chỉ nên chứa mỗi ký tự dị thường một lần và không có ký tự nào khác.

Trong trường hợp số lượng ký tự dị thường bằng nhau trên hai hàng trở lên, thì ngắt kết nối được xác định theo thứ tự sau:

  • Danh sách duy nhất ngắn nhất
  • Hàng trên cùng

Đầu vào

Một chuỗi thông qua STDIN, ARGV hoặc tham số hàm

Đầu ra

Một chuỗi để STDOUT hoặc trả về hàm. Nó nên có mỗi nhân vật dị thường chỉ một lần, nhưng không cần phải ra lệnh.

Ví dụ

Đầu vào: FJAFJKLDSKF7KFDJ
Đầu ra: 7

Đầu vào: ASDF11111
Đầu ra: ASDF

Đầu vào: lkjrhsDdftkjhrksRjd
Đầu ra: rtR

Đầu vào: } * 3% & 2098 @ $ 2k234 # @ $ M
Đầu ra: }

Danh sách hàng trên cùng được trả về
Đầu vào: ASD! @ # Vcx
Đầu ra : ! @ #

Danh sách duy nhất ngắn nhất được trả về
Đầu vào: ASdf1233qwER
Đầu ra: 123

Danh sách ngắn nhất trên cùng được trả về
Đầu vào: 12334QWTTSDFDSXVVBBX
Đầu ra: QWT

Đây là mã golf, vì vậy chiến thắng ngắn nhất.

Câu trả lời:


8

CJam, 111 89 88 86 84 83 byte

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

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.