Pythonでモールス信号をエンコード/デコードするコード。
#CodePuzzle ( Code Puzzle ) で書いてみたので。
10/24追記
記号の対応を右記に差し替えました。参考: http://www.benricho.org/symbol/morse.html#ei
class Morse: TABLE = {'A':'iI', 'B':'Iiii', 'C':'IiIi', 'D':'Iii', 'E':'i', 'F':'iiIi', 'G':'IIi', 'H':'iiii', 'I':'ii', 'J':'iIII', 'K':'IiI', 'L':'iIii', 'M':'II', 'N':'Ii', 'O':'III', 'P':'iIIi', 'Q':'IIiI', 'R':'iIi', 'S':'iii', 'T':'I', 'U':'iiI', 'V':'iiiI', 'W':'iII', 'X':'IiiI', 'Y':'IiII', 'Z':'IIii', '1':'iIIII', '2':'iiIII', '3':'iiiII', '4':'iiiiI', '5':'iiiii', '6':'Iiiii', '7':'IIiii', '8':'IIIii', '9':'IIIIi', '0':'IIIII', '.': 'iIiIiI', ',': 'IIiiII', ':': 'IIIiii', '?': 'iiIIii', "'":'iIIIIi', '-': 'IiiiiI', '(': 'IiIIi', ')': 'IiIIiI', '/':'IiiIi', '=': 'IiiiI', '+': 'iIiIi', '"': 'iIiiIi', '@': 'iIIiIi'} RTABLE = dict(map(lambda(k,v):(v,k), TABLE.items())) def encode(self, s): return ' '.join(map((lambda x: self.TABLE[x]), list(s.upper()))) def decode(self, s): return ''.join(map((lambda x: self.RTABLE[x]), s.split())) morse = Morse() def decode_morse(s): return morse.decode(s) def encode_morse(s): return morse.encode(s) if __name__ == '__main__': morse = Morse() code = morse.encode('Hello,World.') print code print morse.decode(code)
出力:
iiii i iIii iIii III IIiiII iII III iIi iIii Iii iIiIiI HELLO,WORLD.