在您的祖父母节那天,使用旋转式拨号拨打电话号码是这样的:
要拨出每个数字,将手指放在相应的孔中,将其拉到手指挡块上,然后松开。一种机制将使转盘旋转回到其静止位置,并且电话将断开并重新连接电路指定的次数,从而发出喀哒声。
拨数字N需要N个这样的“脉冲”,但N = 0(十个脉冲)除外。
旋转电话的特性是大数字(8、9、0)的拨号时间比小数字(1、2、3)长。这是绘制早期区号地图时的重要考虑因素,也是为什么人口稠密的纽约市(和电话线)的密度为212(仅5个脉冲),而稀疏的阿拉斯加却有907(26个脉冲)。当然,当按键式拨号变得流行时,所有这些都变得无关紧要。
挑战
用尽可能少的字节写一个程序或函数,该程序或函数将包含电话号码的字符串(或字符序列)作为输入,并输出其旋转拨号脉冲数。这些计数如下:
位数
- 数字1-9计为该脉冲数。
- 数字0计为10个脉冲。
字母
请注意,表盘上的数字2-9具有与之关联的拉丁字母。这些最初是用于命名交换的,但后来被重新分配给电话词和文本消息输入系统。
您必须使用E.161将字母分配给数字来支持电话号码中包含字母:
- A,B,C = 2
- D,E,F = 3
- G,H,我= 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
*
和#
,它们在按键式电话上具有特殊含义,并且不能在旋转台上拨打。
+- ()*#.
)的字母和空格,就像字母限于大写字母一样。如果我错了纠正我。