Trên các máy chơi game hiện đại và các thiết bị khác không có bàn phím truyền thống, cố gắng nhập văn bản là một cơn ác mộng. Phải gõ bằng một vài nút và phím điều khiển trên bàn phím ảo thật khó chịu và tôi muốn thực hiện càng ít chuyển động / nhấn nút càng tốt.
Bàn phím bạn sẽ sử dụng trông như thế này:
+---+---+---+---+---+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+---+---+---+---+---+---+---+---+---+---+
| q | w | e | r | t | y | u | i | o | p |
+---+---+---+---+---+---+---+---+---+---+
| a | s | d | f | g | h | j | k | l | - |
+---+---+---+---+---+---+---+---+---+---+
| z | x | c | v | b | n | m | _ | @ | . |
+---+---+---+---+---+---+---+---+---+---+
Các hoạt động sau đây có thể được sử dụng:
L
: di chuyển một hình vuông sang trái trên bàn phím (kết thúc tốt đẹp)R
: di chuyển một hình vuông sang bên phải trên bàn phím (kết thúc tốt đẹp)U
: di chuyển một hình vuông lên trên bàn phím (kết thúc tốt đẹp)D
: di chuyển một ô vuông xuống trên bàn phím (kết thúc tốt đẹp)Y
: chèn một khoảng trắngB
: di chuyển con trỏ chèn một khoảng trắng sang trái (không làm gì nếu con trỏ ở đầu)F
: di chuyển con trỏ chèn một khoảng trắng sang phải (không làm gì nếu con trỏ ở cuối)C
: bật khóaA
: chèn ký tự được chọn vào vị trí của con trỏ chèn
Đưa ra một chuỗi đầu vào chỉ chứa các ký tự ASCII có thể được nhập bằng bàn phím và các lệnh (khớp [a-zA-Z0-9 _@.-]*
) ở trên, xuất ra một chuỗi các lệnh sẽ dẫn đến chuỗi đầu ra. Vị trí ban đầu của con trỏ nằm trên 1
phím (phía trên bên trái) và khóa mũ ban đầu bị tắt.
Chấm điểm
Đối với bất kỳ chuỗi nào, một cách tiếp cận ngây thơ sẽ là, đối với mỗi ký tự trong chuỗi, điều hướng đến ký tự trên bàn phím bằng đường dẫn ngắn nhất, chuyển đổi khóa mũ nếu cần và chọn ký tự. Một cách tiếp cận ngây thơ như vậy sẽ tạo ra một lệnh dài (length of input string) + (sum of Manhattan distances on keyboard between consecutive non-space characters) + (number of times the string alternates between lowercase and uppercase characters) + (1 if string starts with an uppercase letter else 0)
. Ví dụ, cách tiếp cận ngây thơ 101
sẽ dẫn đến ALARA
, một lệnh có độ dài 5 và Noob 5
sẽ dẫn đến DDDRRRRRCAUURRRCAADDLLLLAYUUUA
một lệnh có độ dài 30.
Trình của bạn, tuy nhiên, tìm cách làm tốt hơn so với cách tiếp cận ngây thơ. Đối với mỗi chuỗi đầu vào, việc gửi của bạn sẽ nhận được điểm bằng số lượng lệnh mà cách tiếp cận ngây thơ sử dụng trừ đi số lượng lệnh mà kết quả gửi của bạn. Điểm tổng thể của bạn sẽ là tổng điểm của từng điểm.
Quy tắc
- Đệ trình sẽ được chạy trên không gian làm việc ảo miễn phí của Cloud9 . Không gian làm việc có 512 MB RAM, 2 GB dung lượng ổ đĩa, 8 CPU Intel (R) Xeon (R) @ 2.50 GHz (thông tin CPU đầy đủ, được tìm thấy bằng cách chạy
cat /proc/cpuinfo
, có thể tìm thấy ở đây ) và đang chạy Ubuntu 14.04 64 bit Mạnh mẽ Bạn có thể yêu cầu quyền truy cập vào không gian làm việc thử nghiệm để chạy và chấm điểm bài nộp của bạn hoặc tôi có thể chấm điểm cho bạn. - Đệ trình sẽ được chạy một lần cho mỗi trường hợp thử nghiệm. Lưu trữ trạng thái giữa các lần chạy bị cấm. Đệ trình có thể không ghi hoặc đọc từ bất kỳ tệp nào ngoài tệp nguồn (có thể không được sửa đổi giữa các lần chạy), ngoại trừ có thể đọc tệp đầu vào nếu được yêu cầu.
- Đệ trình được giới hạn trong 1 phút thời gian chạy cho mỗi trường hợp thử nghiệm. Đệ trình có thể xuất ra nhiều giải pháp, nhưng chỉ giải pháp hợp lệ cuối cùng trong thời gian quy định sẽ được sử dụng để chấm điểm. Việc không đưa ra bất kỳ giải pháp hợp lệ nào trong thời gian quy định sẽ dẫn đến điểm 0 cho trường hợp thử nghiệm đó.
- Vui lòng bao gồm các hướng dẫn về cách gọi trình của bạn, cũng như bất kỳ công cụ / thư viện nào cần được cài đặt không có trong bản cài đặt Ubuntu 14.04 tiêu chuẩn.
- Người chiến thắng sẽ là người nộp bài với số điểm lớn nhất. Trong trường hợp hòa, bài nộp với độ phức tạp thuật toán tốt hơn sẽ giành chiến thắng. Nếu cà vạt vẫn không được giải quyết, lần gửi đầu tiên để đạt được điểm số và độ phức tạp thuật toán sẽ giành chiến thắng.
- Đệ trình có thể không tối ưu hóa cho các trường hợp thử nghiệm. Tôi bảo lưu quyền thay đổi các trường hợp thử nghiệm nếu tôi cảm thấy có nhu cầu.
Các trường hợp thử nghiệm
Định dạng: input string => naive score
(nếu bạn thấy bất kỳ lỗi nào trong số này, vui lòng để lại nhận xét với sự điều chỉnh)
101 => 5
quip => 12
PPCG => 15
Mego => 25
Noob 5 => 26
penguin => 27
867-5309 => 32
2_sPoOkY_4_mE => 60
The Nineteenth Byte => 76
penguins@SouthPole.org => 95
8xM3R__5ltZgrkJ.-W b => 98
correcthorsebatterystaple => 104
verylongRUNSOFCAPSandnocaps => 118
This is an English sentence. => 122
WNtza.akjzSP2GI0V9X .0epmUQ-mo => 131
Programming Puzzles and Code Golf => 140