En los días de tus abuelos, marcar un número de teléfono se hacía con un dial giratorio como este:
Para marcar cada dígito, coloque el dedo en el orificio correspondiente, tírelo hasta el tope y suéltelo. Un mecanismo hará que el dial gire nuevamente a su posición de reposo, y el teléfono se desconectará y volverá a conectar un circuito un número específico de veces, haciendo clics audibles.
Marcar el dígito N requiere N de tales "pulsos", excepto por N = 0 que es diez pulsos.
Los teléfonos rotativos tienen la propiedad de que los dígitos grandes (8, 9, 0) tardan más en marcarse que los dígitos pequeños (1, 2, 3). Esta fue una consideración importante en la elaboración de mapas de códigos de área tempranos, y por qué la ciudad de Nueva York con su densidad de población (y línea telefónica) recibió 212 (solo 5 pulsos), mientras que 907 (26 pulsos) fueron a Alaska escasamente habitada. Por supuesto, todo esto se volvió irrelevante cuando la marcación por tonos se hizo popular.
El reto
Escriba, en la menor cantidad de bytes posible, un programa o función que tome como entrada una cadena (o secuencia de caracteres) que contenga un número de teléfono y genere su número de pulsos de marcación giratoria. Estos deben contarse de la siguiente manera:
Dígitos
- Los dígitos 1-9 cuentan como ese número de pulsos.
- El dígito 0 cuenta como 10 pulsos.
Letras
Tenga en cuenta que los dígitos 2-9 en el dial tienen letras del alfabeto latino asociado con ellos. Originalmente estaban destinados a intercambios con nombre , pero posteriormente se reapropiaron para palabras telefónicas y para sistemas de entrada de mensajes de texto.
Debe admitir tener letras en sus números de teléfono, utilizando la asignación E.161 de letras a dígitos:
- 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
Puede suponer que la entrada ya se ha plegado a mayúsculas o minúsculas.
Otros personajes
Usted debe permitir el uso arbitrario de los personajes ()+-./
y el espacio como separadores de formato. Usted puede elegir para permitir que cualquier carácter no alfanumérico para este propósito, si es más fácil de implementar.
Estos caracteres no contribuyen al conteo de pulsos.
Código de ejemplo
Una tabla y función de búsqueda sin golf en 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)
Ejemplo de entrada y salida
911
→ 11867-5309
→ 48713 555 0123
→ 42+1 (212) PE6-5000
→ 571-800-FLOWERS
→ 69PUZZLES
→ 48
+- ()*#.
) al igual que las letras están en mayúsculas. Corrígeme si me equivoco.*
y#
, que tienen significados especiales en los teléfonos de tonos y no se pueden marcar en los rotativos.