祖父母の日、電話番号のダイヤルは次のようなロータリーダイヤルで行われました。
各数字をダイヤルするには、対応する穴に指を入れて指先まで引っ張り、離します。メカニズムにより、ダイヤルが静止位置に戻り、電話機は指定された回数だけ回路を切断および再接続し、カチッという音がします。
数字Nをダイヤルするには、10個のパルスであるN = 0を除き、そのような「パルス」をN 個必要とします。
回転式電話には、大きい数字(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、I = 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
*
およびを含めません#
。これらは、タッチトーン電話では特別な意味を持ち、ロータリではダイヤルできません。
+- ()*#.
)に通常使用されているものに制限されていると思います。私が間違っている場合は修正してください。