モールス信号(英文)をエンコード/デコード

Pythonでモールス信号をエンコード/デコードするコード。

#CodePuzzle ( Code Puzzle ) で書いてみたので。

10/24追記

記号の対応を右記に差し替えました。参考: http://www.benricho.org/symbol/morse.html#ei


http://codepad.org/NEn363Da

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.