W czasach dziadków wybieranie numeru telefonu odbywało się za pomocą tarczy obrotowej w następujący sposób:
Aby wybrać każdą cyfrę, włóż palec do odpowiedniego otworu, pociągnij go do oporu i zwolnij. Mechanizm powoduje, że tarcza obraca się z powrotem do pozycji spoczynkowej, a telefon rozłącza i ponownie łączy obwód określoną liczbę razy, słyszalnie klikając.
Wybranie cyfry N wymaga N takich „impulsów”, z wyjątkiem N = 0, czyli dziesięciu impulsów.
Telefony obrotowe mają tę właściwość, że wybieranie dużych cyfr (8, 9, 0) trwa dłużej niż małe cyfry (1, 2, 3). Było to ważne przy opracowywaniu wczesnych map kierunkowych i dlaczego Nowy Jork z gęstą gęstością zaludnienia (i linii telefonicznej) otrzymał 212 (tylko 5 impulsów), podczas gdy 907 (26 impulsów) pojechało na rzadko zamieszkaną Alaskę. Oczywiście wszystko to stało się nieistotne, gdy popularne stało się wybieranie tonowe.
Wyzwanie
Napisz, w jak najmniejszej liczbie bajtów, program lub funkcję, która przyjmuje jako dane wejściowe ciąg znaków (lub sekwencję znaków) zawierający numer telefonu i wysyła liczbę impulsów wybierania obrotowego. Należy je liczyć w następujący sposób:
Cyfry
- Cyfry 1-9 liczą się jako liczba impulsów.
- Cyfra 0 liczy się jako 10 impulsów.
Listy
Zauważ, że cyfry 2-9 na tarczy mają przypisane litery alfabetu łacińskiego. Pierwotnie były one przeznaczone do wymiany nazwanych , ale później zostały ponownie wykorzystane w słowach telefonicznych i systemach wprowadzania wiadomości tekstowych.
Musisz obsługiwać litery w numerach telefonów, używając przypisania liter E.161 do cyfr:
- A, B, C = 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
Możesz założyć, że dane wejściowe zostały już złożone na duże lub małe litery.
Inne postaci
Państwo musi umożliwić wykonanie wybranego wykorzystanie znaków ()+-./
i przestrzeń jako separatory formatowania. Państwo może wybrał, aby umożliwić dowolną postać niealfanumeryczny do tego celu, jeśli jest to łatwiejsze do wykonania.
Te postacie nie mają wpływu na liczbę impulsów.
Przykładowy kod
Tabela i funkcja wyszukiwania bez golfa w Pythonie:
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)
Przykładowe wejście i wyjście
911
→ 11867-5309
→ 48713 555 0123
→ 42+1 (212) PE6-5000
→ 571-800-FLOWERS
→ 69PUZZLES
→ 48
*
i #
, które mają specjalne znaczenie w telefonach z wybieraniem tonowym i nie można ich wybierać w telefonach obrotowych.
+- ()*#.
), podobnie jak litery są ograniczone do wielkich liter. Popraw mnie, jeśli się mylę.