У день ваших бабусь і дідусів набір номера телефону робився за допомогою поворотного циферблата таким чином:
Щоб набрати кожну цифру, покладіть палець у відповідний отвір, потягніть його до упору і відпустіть. Механізм призведе до того, що циферблат повернеться до положення спокою, і телефон відключить і знову підключить ланцюг певну кількість разів, зробивши чутні клацання.
Набір цифри N вимагає N таких "імпульсів", за винятком N = 0, що становить десять імпульсів.
Поворотні телефони мають властивість, що для набору великих цифр (8, 9, 0) потрібно більше часу, ніж для малих цифр (1, 2, 3). Це було важливим фактором при складанні ранніх кодів кодів району, і чому Нью-Йорк з його щільною густотою населення (та телефонної лінії) отримав 212 (всього 5 імпульсів), тоді як 907 (26 імпульсів) пішли на малонаселену Аляску. Звичайно, все це стало неактуальним, коли набирали популярність сенсорний набір номера.
Змагання
Напишіть у якомога менше байтах програму або функцію, яка приймає за введення рядок (або послідовність символів), що містить телефонний номер, і виводить його кількість імпульсів обертового набору. Вони підраховуються наступним чином:
Цифри
- Цифри 1-9 вважаються такою кількістю імпульсів.
- Цифра 0 вважається 10 імпульсами.
Листи
Зауважте, що цифри 2-9 на циферблаті мають літери латинського алфавіту, пов'язані з ними. Спочатку вони були призначені для іменних обмінів , але останні були повторно призначені для телефонних слів та для систем введення текстових повідомлень.
Ви повинні підтримувати наявність літер у своїх телефонних номерах, використовуючи призначення E.161 літер цифрам :
- А, В, С = 2
- D, E, F = 3
- G, H, I = 4
- J, K, L = 5
- M, N, O = 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
*
та #
, які мають особливі значення на телефонах із сенсорним тоном і не піддаються набору на ротарії.
+- ()*#.
) так само, як літери обмежені великими літерами. Виправте мене, якщо я помиляюся.