Кажется, существует постоянное увлечение людьми, утомительно изучающими новые раскладки клавиатуры, такие как Dvorak или Neo, потому что это якобы делает их более производительными. Я утверждаю, что переключение раскладок клавиатуры - плохая идея, потому что вам могут понадобиться месяцы, чтобы набрать скорость, и когда вы на 5% быстрее остальных, вы облажались, если вам нужно печатать на компьютере, который не работает. твой собственный.
Кроме того, все эти люди забывают, где находится настоящее узкое место в современном общении - телефонная клавиатура.
Вот так выглядит ваша обычная телефонная клавиатура:
Буква «r» - третья буква на кнопке 7; поэтому, если бы вы вводили букву «r» на мобильном телефоне, вы бы нажимали кнопку 7 три раза, для «s» вы нажимали бы ее 4 раза, а для «a» вы нажимали кнопку 2 один раз.
Учитывая это, ставить 'e' после 'd', вероятно, было плохим решением - 'e' - это наиболее часто используемая буква в английском алфавите, поэтому, если бы вы пометили кнопку 3 "EDF" вместо "DEF", вы спасло бы довольно много нажатий клавиш.
Более того, вы, вероятно, испытали на себе, что ввод 2 букв, которые имеют одну и ту же кнопку, создает неудобства - если вы хотите написать «TU», вы не можете просто нажать 8 три раза, потому что это приведет к «V». Поэтому обычно вы пишете 'T', затем нажимаете пробел, затем нажимаете клавишу Backspace, а затем пишете 'U', что равно 5 нажатию кнопок вместо 3.
TL; DR
Учитывая эти два правила:
- Буква набирается нажатием кнопки n раз, где n - это позиция буквы на этикетке кнопки.
- Для написания двух букв, набираемых с помощью одной и той же кнопки, требуются дополнительные нажатия двух кнопок
Какая раскладка клавиатуры телефона требует наименьшего количества нажатий кнопок, учитывая определенный текст? Вы должны использовать только кнопки 2-9, 1 и 0 зарезервированы для специальных символов.
вход
Текст, для которого вы должны найти оптимальный макет, предоставляется через стандартный ввод. Вам не нужно обрабатывать что-либо, кроме строчных букв, и вы можете предположить, что ввод состоит только из этого. Вы также можете предположить, что вводимый текст достаточно велик, и каждая буква присутствует там хотя бы один раз, если это поможет.
Выход
Я не хочу накладывать слишком много ограничений на вывод, так как это иногда дает одни языки преимущества перед другими; поэтому, однако, ваш язык показывает, что массивы в порядке, или вы можете разделить каждую метку новой строкой.
Может быть несколько возможных оптимальных макетов, вы можете распечатать любой из них. Вот простой пример:
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
Бонусные очки
-35, если ваш алгоритм не использует все возможные макеты (я смотрю здесь на «перестановки» Хаскелла)
-3, если ваш код помещается в текстовое сообщение (140 символов), и вы публикуете фотографию, на которой вы отправляете код другу.
Это мой первый вызов на StackExchange. Я был бы рад услышать, нравится ли вам это или есть другие отзывы об этом!
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77
уникальные перестановки, подсчитывающие простые перестановки клавиш только один раз.