В день ваших бабушек и дедушек, набор номера телефона был сделан с помощью поворотного набора, как это:
Чтобы набрать каждую цифру, поместите палец в соответствующее отверстие, потяните его до упора и отпустите. Механизм заставит циферблат вращаться обратно в исходное положение, а телефон будет отключать и повторно подключать цепь указанное количество раз, делая слышимые щелчки.
Набор цифры N требует N таких «импульсов», за исключением N = 0, что составляет десять импульсов.
Поворотные телефоны обладают тем свойством, что для набора больших цифр (8, 9, 0) требуется больше времени, чем для маленьких цифр (1, 2, 3). Это было важным соображением при составлении ранних кодовых карт, и почему Нью-Йорк с его высокой плотностью населения (и телефонной линией) получил 212 (всего 5 импульсов), в то время как 907 (26 импульсов) отправились на малонаселенную Аляску. Конечно, все это стало неактуальным, когда стал популярным тональный набор.
Соревнование
Запишите, как можно меньше байт, программу или функцию, которая принимает в качестве входных данных строку (или последовательность символов), содержащую номер телефона, и выводит число импульсов вращающегося набора. Они должны учитываться следующим образом:
Digits
- Цифры 1-9 считаются как количество импульсов.
- Цифра 0 считается как 10 импульсов.
Письма
Обратите внимание, что цифры 2-9 на циферблате имеют связанные с ними буквы латинского алфавита. Первоначально они предназначались для именованных обменов , но позднее были переназначены для фоновых слов и для систем ввода текстовых сообщений.
Вы должны поддерживать наличие букв в своих телефонных номерах, используя назначение букв E.161 цифрам:
- А, В, С = 2
- D, E, F = 3
- G, H, I = 4
- J, K, L = 5
- М, Н, О = 6
- P, Q, R, S = 7
- T, U, V = 8
- W, X, Y, Z = 9
Вы можете предположить, что ввод уже был сложен в верхний или нижний регистр.
Другие персонажи
Вы должны разрешить произвольное использование символов ()+-./
и пробела в качестве разделителей форматирования. Для этой цели вы можете разрешить использовать любой не алфавитно-цифровой символ, если это проще реализовать.
Эти символы не влияют на количество импульсов.
Пример кода
Таблица поиска без функции гольфа и функция в Python:
PULSES = {
'1': 1,
'2': 2, 'A': 2, 'B': 2, 'C': 2,
'3': 3, 'D': 3, 'E': 3, 'F': 3,
'4': 4, 'G': 4, 'H': 4, 'I': 4,
'5': 5, 'J': 5, 'K': 5, 'L': 5,
'6': 6, 'M': 6, 'N': 6, 'O': 6,
'7': 7, 'P': 7, 'Q': 7, 'R': 7, 'S': 7,
'8': 8, 'T': 8, 'U': 8, 'V': 8,
'9': 9, 'W': 9, 'X': 9, 'Y': 9, 'Z': 9,
'0': 10
}
def pulse_count(phone_num):
return sum(PULSES.get(digit, 0) for digit in phone_num)
Пример ввода и вывода
911
→ 11867-5309
→ 48713 555 0123
→ 42+1 (212) PE6-5000
→ 571-800-FLOWERS
→ 69PUZZLES
→ 48
*
и #
, которые имеют особое значение для телефонов с тональным набором и не набираются на поворотных устройствах.
+- ()*#.
), точно так же, как буквы ограничены заглавными буквами. Поправьте меня если я ошибаюсь.