На сучасних ігрових консолях та інших пристроях без традиційних клавіатур спроба ввести текст - це кошмар. Набір тексту за допомогою декількох кнопок та джойстика на віртуальній клавіатурі дратує, і мені подобається робити якомога менше рухів / натискань кнопок.
Клавіатура, яку ви будете використовувати, виглядає приблизно так:
+---+---+---+---+---+---+---+---+---+---+
| 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 | _ | @ | . |
+---+---+---+---+---+---+---+---+---+---+
Можна використовувати наступні операції:
L
: пересуньте один квадрат ліворуч на клавіатурі (обгортання)R
: перемістіть один квадрат праворуч на клавіатурі (обгортання)U
: переміщення на квадрат на клавіатурі (обгортання)D
: перемістіть на клавіатурі один квадрат вниз (обгортання)Y
: вставити пробілB
: перемістіть покажчик вставки на один пробіл ліворуч (нічого не робить, якщо вказівник знаходиться на початку)F
: перемістіть покажчик вставки на один пробіл праворуч (нічого не робить, якщо вказівник знаходиться в кінці)C
: тумблер блокуванняA
: вставити вибраний символ у місці вказівника вставки
З огляду на рядок введення, що містить лише символи ASCII, які можна набрати за допомогою вищевказаної клавіатури та команд (збігів [a-zA-Z0-9 _@.-]*
), виведіть послідовність команд, що призведе до вихідного рядка. Початкове положення курсору знаходиться на1
клавіші (ліворуч вгорі), а блокування шапки спочатку вимкнено.
Оцінка балів
Для будь-якого даного рядка, наївним підходом було б, щоб кожен символ в рядку переходив до символу на клавіатурі найкоротшим шляхом, перемикав шапки блокування, якщо потрібно, і вибирав символ. Такий наївний підхід породжував би команду довжини (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)
. Наприклад, наївний підхід до 101
призведе до ALARA
, команда довжиною 5, і Noob 5
призведе до DDDRRRRRCAUURRRCAADDLLLLAYUUUA
команди 30 довжиною.
Однак ваше подання прагне зробити краще, ніж наївний підхід. За кожен рядок введення ваше повідомлення отримає очки, що дорівнює кількості команд, яким застосовується наївний підхід за вирахуванням кількості команд, які виводить ваше представлення. Ваш загальний бал становитиме суму індивідуальних балів.
Правила
- Подання будуть виконуватись у вільній віртуальній робочій області Cloud9 . Робоча область має 512 Мбайт оперативної пам’яті, 2 Гб дискового простору, 8 процесорних процесорів Intel (R) Xeon (R) @ 2,50 ГГц (повну інформацію про процесор, знайдений під час запуску
cat /proc/cpuinfo
, можна знайти тут ), а також працює 64-розрядний Ubuntu 14.04 Довірливий. Ви можете подати запит на доступ до тестової робочої області , щоб запустити та оцінити ваше подання, або я можу оцінити його за вас. - Подання будуть виконуватись один раз у тестовому випадку. Зберігання стану між прогонами заборонено. Записи можуть не записувати чи читати з будь-яких файлів, окрім вихідного файлу (який не може бути змінено між прогонами), за винятком можливого вилучення читання вхідного файлу, якщо потрібно.
- Подання обмежено 1 хвилиною виконання для кожного тестового випадку. Подані матеріали можуть виводити декілька рішень, але лише останнє дійсне рішення протягом відведеного часу буде використано для оцінки. Якщо не буде виведено жодних дійсних рішень протягом відведеного часу, то для цього тестового випадку вийде 0 балів.
- Будь ласка, включіть інструкції щодо виклику вашої подання, а також будь-які інструменти / бібліотеки, які потрібно встановити, які не входять до стандартної установки Ubuntu 14.04.
- Переможцем стане подання з найбільшою кількістю балів. У випадку вирівнювання виграш подання з кращою алгоритмічною складністю. Якщо нічия все ще не вирішена, виграє перше подання для досягнення оцінки та складності алгоритміки.
- Подання може не оптимізуватися для тестових випадків. Я залишаю за собою право змінювати тестові справи, якщо відчуваю, що в цьому є потреба.
Тестові кейси
Формат: input string => naive score
(якщо ви бачите в них помилки, залиште коментар із виправленням)
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