摩尔斯编码采用变长的点号“.”和短划线“-”序列来表示字符。实际编码时,电文中的字符用空格隔开,表6.1是摩尔斯编码中各字符对应的编码。
表6.1 摩尔斯编码表
字符 |
编码 |
字符 |
编码 |
字符 |
编码 |
字符 |
编码 |
A |
.- |
H |
.... |
O |
--- |
V |
...- |
B |
-... |
I |
.. |
P |
.--. |
W |
.-- |
C |
-.-. |
J |
.--- |
Q |
--.- |
X |
-..- |
D |
-.. |
K |
-.- |
R |
.-. |
Y |
-.-- |
E |
. |
L |
.-.. |
S |
... |
Z |
--.. |
F |
..-. |
M |
-- |
T |
- |
|
|
G |
--. |
N |
-. |
U |
..- |
|
|
注意,在上表中点号和短划线有4个组合没有采用。在本题中,将这四种组合分配以下给定的字符:
下划线:..-- 点号:---.
逗号:.-.- 问号:----
因此电文“ACM GREATER_NY_REGION”被编码为:.--.-.--..----..-...--..-...---.-.--..--.-..--...----.。
Ohaver基于摩尔斯编码提出了一种加密方法。这种方法的思路是去掉字符间的空格,并且在编码后给出每个字符编码的长度。例如电文“ACM”编码成
“.--.-.--242”。
Ohaver的加密(解密也是一样的)方法分为3个步骤:
(1)将原文转换成摩尔斯编码,去掉字符间的空格,然后把每个字符长度的信息添加在后面;
(2)将表示各字符长度的字符串反转;
(3)按照反转后的各字符长度,解释点号和短划线序列,得到密文。
例如,假设密文为“AKADTOF_IBOETATUK_IJN”,解密步骤如下:
(1)将密文转换成摩尔斯编码,去掉字符间的空格,添加各字符长度组成的字符串,得到“.--.-.--..----..-...--..-...---.-.--..--.-..--...----.232313442431121334242”;
(2)将字符长度字符串反转,得到“242433121134244313232”;
(3)对字符长度字符串反转后的编码字符串,用摩尔斯编码解释该字符串,得到原文为“ACM_GREATER_NY_REGION”。
本题的目的是实现Ohaver的解密算法。