À l'époque de vos grands-parents, la composition d'un numéro de téléphone se faisait avec un cadran rotatif comme celui-ci:
Pour composer chaque chiffre, placez votre doigt dans le trou correspondant, tirez-le jusqu'à la butée et relâchez-le. Un mécanisme fera revenir le cadran dans sa position de repos et le téléphone déconnectera et reconnectera un circuit un nombre spécifié de fois, en produisant des clics audibles.
La composition du chiffre N nécessite N de telles "impulsions", à l'exception de N = 0 qui correspond à dix impulsions.
Les téléphones rotatifs ont la propriété que les gros chiffres (8, 9, 0) prennent plus de temps à composer que les petits chiffres (1, 2, 3). C’était là un facteur important dans l’établissement des premières cartes indicatrices interurbaines et des raisons pour lesquelles la ville de New York, avec sa densité de population (et sa ligne téléphonique) dense, s’élevait à 212 (seulement 5 impulsions), alors que 907 (26 impulsions) étaient destinées à l’Alaska peu peuplé. Bien sûr, tout cela est devenu inutile lorsque la numérotation à clavier est devenue populaire.
Le défi
Ecrivez, avec le moins d’octets possible, un programme ou une fonction prenant en entrée une chaîne de caractères (ou une séquence de caractères) contenant un numéro de téléphone et émettant son nombre d’impulsions de cadran rotatif. Ceux-ci doivent être comptés comme suit:
Chiffres
- Les chiffres 1 à 9 comptent comme ce nombre d'impulsions.
- Le chiffre 0 compte pour 10 impulsions.
Des lettres
Notez que les lettres 2 à 9 du cadran sont associées à des lettres de l'alphabet latin. Celles-ci étaient à l'origine destinées aux échanges nommés , mais ont été réappropriées pour les mots de téléphone et les systèmes de saisie de SMS.
Vous devez pouvoir utiliser des lettres dans vos numéros de téléphone, en utilisant l' affectation de lettres en chiffres E.161 :
- 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
Vous pouvez supposer que l'entrée a déjà été pliée en majuscules ou en minuscules.
Autres personnages
Vous devez autoriser l'utilisation arbitraire des caractères ()+-./
et de l'espace en tant que séparateurs de formatage. Vous pouvez choisir d’autoriser tout caractère non alphanumérique à cette fin, s’il est plus facile à implémenter.
Ces caractères ne contribuent pas au nombre d'impulsions.
Exemple de code
Une table de recherche non-golfée et une fonction 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)
Exemple d'entrée et de sortie
911
→ 11867-5309
→ 48713 555 0123
→ 42+1 (212) PE6-5000
→ 571-800-FLOWERS
→ 69PUZZLES
→ 48
*
et #
, qui ont une signification particulière sur les téléphones à clavier et ne sont pas numérotables sur des rotations.
+- ()*#.
), tout comme les lettres sont limitées à des majuscules. Corrige moi si je me trompe.