Этот вопрос требует функциональности сопоставления словаря T9, что является очень интересной проблемой. Но у T9 есть другой способ печатать, и это печатать по буквам. Вам НЕ нужен словарь для реализации этой клавиатуры.
Вот карта клавиш клавиатуры T9, если вы забыли:
+-------+-------+-------+
| 1 | 2 | 3 |
| .?! | ABC | DEF |
+-------+-------+-------+
| 4 | 5 | 6 |
| GHI | JKL | MNO |
+-------+-------+-------+
| 7 | 8 | 9 |
| PQRS | TUV | WXYZ |
+-------+-------+-------+
| * | 0 | # |
| ← | SPACE | → |
+-------+-------+-------+
Как работает Т9
Чтобы ввести символ с Т9, вам нужно нажать цифровую клавишу, представляющую время этого символа n
. n
это порядок этого символа, написанного на этом ключе. Цифры являются последним символом, который вы можете ввести для каждой клавиши. Например, для ввода B
я нажимаю 2
два раза или для 5
ввода нажимаю 5
четыре раза. Чтобы закончить вводить этот символ, я нажимаю #
. *
это просто забой. В нашей версии клавиатуры нет заглавных букв.
Примеры ввода и вывода:
8#99999#055#33#999#22#666#2#777#3# → T9 KEYBOARD
Объяснение:
8
выбираетT
и#
переходит к следующему персонажу99999
выберите последний символ9
ключа, который является9
и#
перемещается к следующему символу0
вставляет пробел33
выбирает второй символ3
клавишиK
и#
переходит к следующему символу- И так далее...
правила
Ваша функция или программа должна принимать строку, представляющую нажатия клавиш T9. Вывод - это текст, полученный из этих нажатий клавиш, как указано выше.
Это базовый код гольфа, поэтому победитель является самым коротким в байтах, и применяются стандартные правила / лазейки.
T9 KEYBOARD
полностью неверен. То, что читаетT9 JEYBARD
#
если последовательные кнопки отличаются в любом случае. это сказанное: без этого бонуса, что должно произойти, если#
опущено?Ответы:
CJam,
10994 байта (2- й бонус)Очень наивное и долгое решение
Это полная программа, хотя функция будет такой же длины.
Ввод идет в STDIN
Пример:
Выход:
Попробуйте онлайн здесь
источник
JavaScript ES6,
220-10 = 210178 байтКак часть CMC Helka , я переиграл свой первый вызов.
Пример выходов:
объяснение
Это реализует рекурсивную замену, заменяя все символы, за которыми следуют,
*
пока не останется*
s.Это соответствует всем сериям последовательных цифр или
*
s.Это создает нужный словарь, получая закодированную часть из большой строки, затем добавляя к ней нужную цифру.
Это получает характер,
a
длина по модулю .Это подготовит строку для обработки и удаления
*
s.источник
t("2#2");
даетB
вместоAA
. Попробуйте сопоставить любой#
вместо того, чтобы удалить их.Python,167157151 байт(не поддерживает '*')
Ничего особенного. Я использую регулярное выражение для преобразования ввода в список, а затем я зацикливаю записи. Я использую первый символ и длину каждой записи для поиска в списке поиска:
После некоторого игры в гольф это выглядит так:
Нет бонусов (пока). Я не знаю, как бы я реализовал первый бонус в регулярных выражениях. Второй бонус добавит много байтов, так как элементы поиска имеют разный размер. Не очень понимаю третий бонус.
источник
Perl 5: 106 (104 кода + 2 флага)
Модифицировано для обработки удалений.
Использование:
Perl 5: 88 (86 кодов + 2 флага)Старая версия без звездочки-удаления.
источник
AWK 211 байт (с бонусами)
Это полная программа, которая читает входные данные из стандартного ввода. Было бы более эффективно не перераспределять клавиатуру для каждой строки, но это сделало бы скрипт длиннее.
Также, если бы ключ «0» был чем-то отличным от 0, сценарий был бы на 4 байта короче, но это часть игры: o)
источник
C (245 байтов)
Выход
объяснение
Количество байтов не включает входную строку, указанную в первом
#define
.Я использую двумерный массив в качестве таблицы поиска для того, какой символ печатать. Программа читает символы, разделенные символом
'#'
.Для каждой группы входной номер определяет индекс массива первого измерения, а количество повторений входного номера определяет индекс массива второго измерения. В
'*'
пятится индекс массива для вывода строки так, чтобы перезаписать предыдущее письмо.Таким образом, входная строка
44#
(1 повторение'4'
) переводится в таблицу поискаK[4][1]
, которая является символомH
.Безголовая версия
источник
Рубин
254,248, 229 байтGolfed:
Ungolfed:
Все эти характеристики должны быть успешными:
0 0
Ответ выглядит немного как Hacky решение. Посмотрим на это, когда у меня будет время.источник
PHP, 183-10 = 173 байта
Все версии получают данные из аргумента командной строки; позвонить с
php -r '<code>' <string>
.Примечание : все версии выдают предупреждение, если ввод начинается с
*
.Приступите
$o=[];
к коду, чтобы удалить этот недостаток.210-10 - ?? = ??? байтов
181 байт, без бонуса
сломать
Версии «без хеш-тегов» разбивают строку на (полоса равных чисел) и (звездочка) и забывают обо всем остальном. Версия без бонусов принимает (полоса чисел с последующим
#
) и (звездочка).Затем выполните цикл поиска совпадений: если '*' найдено, удалите последний элемент массива результатов.
Разница между версиями заключается в
else
части:-1
.источник
JavaScript, 147 байт
Ответ Конора был исправлен с помощью регулярного выражения из моего ответа PHP и упал.
сломать
вращающаяся версия, 158 байт
добавлено,
s=
чтобы запомнить строку и%s.length
повернуть.источник