摩尔斯解码
* * * *
拉格朗日计划
* * * *
摩尔斯解码

用 ▄ (U+2584,左下方块记号) 表示点,解码给定的摩尔斯电码,具体规则如下:

电码由点和划构,连续三点表示一划。

同一字符中的点和划之间由一个空格隔开。

不同字符之间由三个空格隔开。

不同单词之间由十个空格隔开。

    "A": ". -",             "B": "- . . .",         "C": "- . - .",
    "D": "- . .",           "E": ".",               "F": ". . - .",
    "G": "- - .",           "H": ". . . .",         "I": ". .",
    "J": ". - - -",         "K": "- . -",           "L": ". - . .",
    "M": "- -",             "N": "- .",             "O": "- - -",
    "P": ". - - .",         "Q": "- - . -",         "R": ". - .",
    "S": ". . .",           "T": "-",               "U": ". . -",
    "V": ". . . -",         "W": ". - -",           "X": "- . . -",
    "Y": "- . - -",         "Z": "- - . .",         "1": ". - - - -",
    "2": ". . - - -",       "3": ". . . - -",       "4": ". . . . -",
    "5": ". . . . .",       "6": "- . . . .",       "7": "- - . . .",
    "8": "- - - . .",       "9": "- - - - .",       "0": "- - - - -",
    " ": "    "
本题难度:



解答

将每个单词视作左右两侧都有三个空格,然后根据编码表不断作字符串替换即可。

最终代码有六行。

代码长度:384字节 vs. 全站第一:136字节。

import sys
s=[' '.join({'.':'▄','-':'▄▄▄'}[i]for i in c)for c in'----. ---.. --... -.... ..... ....- ...-- ..--- .---- ----- --.. -.-- -..- ...- --.- .--. .-.. .--- .... ..-. -.-. -... .-- ..- ... .-. --- -.- --. -.. -. -- .. .- - .'.split()]
b='   '
a=b+sys.argv[1]+b
for k in s:a=a.replace(b+k+b,b+'9876543210ZYXVQPLJHFCBWUSROKGDNMIATE'[s.index(k)]+b)
print(a.replace(b,''))