Ai giorni dei tuoi nonni, la composizione di un numero di telefono veniva effettuata con una manopola rotativa come questa:
Per comporre ciascuna cifra, inserire il dito nel foro corrispondente, tirarlo fino all'arresto e rilasciarlo. Un meccanismo farà tornare il quadrante in posizione di riposo e il telefono si disconnetterà e riconnetterà un circuito un numero specificato di volte, facendo clic udibili.
La composizione della cifra N richiede N di tali "impulsi", ad eccezione di N = 0 che è dieci impulsi.
I telefoni rotativi hanno la proprietà che le cifre grandi (8, 9, 0) richiedono più tempo per la composizione rispetto alle cifre piccole (1, 2, 3). Questa è stata una considerazione importante nella stesura delle prime mappe di prefisso, e perché New York City con la sua densa popolazione (e linea telefonica) ha ottenuto 212 (solo 5 impulsi), mentre 907 (26 impulsi) sono andati nell'Alaska scarsamente abitata. Naturalmente, tutto questo è diventato irrilevante quando la composizione a toni è diventata popolare.
La sfida
Scrivere, nel minor numero di byte possibile, un programma o una funzione che accetta come input una stringa (o sequenza di caratteri) contenente un numero di telefono e genera il suo numero di impulsi di selezione rotativa. Questi devono essere conteggiati come segue:
cifre
- Le cifre 1-9 contano come quel numero di impulsi.
- La cifra 0 conta come 10 impulsi.
Lettere
Si noti che le cifre 2-9 sul quadrante hanno lettere dell'alfabeto latino associate ad esse. Questi erano originariamente destinati agli scambi denominati , ma in seguito sono stati riappropriati per le parole telefoniche e per i sistemi di immissione dei messaggi di testo.
Devi supportare la presenza di lettere nei tuoi numeri di telefono, usando l' assegnazione di lettere E.161 alle cifre:
- 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
Si può presumere che l'input sia già stato piegato in maiuscolo o in maiuscolo o minuscolo.
Altri caratteri
È necessario consentire l'uso arbitrario dei personaggi()+-./ e dello spazio come separatori di formattazione. È possibile scegliere di consentire qualsiasi carattere non alfanumerico per questo scopo, se è più facile da implementare.
Questi caratteri non contribuiscono al conteggio degli impulsi.
Codice di esempio
Una tabella di ricerca non golfizzata e funzione in 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)
Esempio di input e output
911→ 11867-5309→ 48713 555 0123→ 42+1 (212) PE6-5000→ 571-800-FLOWERS→ 69PUZZLES→ 48
*e #, che hanno significati speciali sui telefoni touch-tone e non sono dialable sui rotary.
+- ()*#.) proprio come le lettere sono limitate in maiuscolo. Correggimi se sbaglio.