介绍
在此挑战中,您将解决对角线Burrows-Wheeler变换。这是什么是对角Burrows-Wheeler变换的一般概述。要对消息进行编码,必须首先确保其长度为奇数(即5、7、9等)。然后,n
通过来构建网格,n
其中n
消息的长度在哪里。第一行是原始消息。此后的每一行都是其上方的一行,但向左移动了1个字符,第一个字符向后移动。例如:
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
WorldHello
WorldHello
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
然后,将NW到SE对角线上的每个字母放入一个新字符串中:
Hello World H
ello WorldH l
llo WorldHe o
lo WorldHel W
o WorldHell r
WorldHello d
WorldHello e
orldHello W l
rldHello Wo (space)
ldHello Wor o
dHello Worl l
您的编码信息是HloWrdel ol
。要进行解码,请先获取编码后的消息的长度,再加1,然后除以2 x
。现在我们知道x
,从第一个字母开始,每个字母都x
在最后一个字母之后,然后循环。例如:
H l o W r d e l o l
1
Then...
H l o W r d e l o l
1 2
And again...
H l o W r d e l o l
1 3 2
Until you get...
H l o W r d e l o l
1 3 5 7 9 11 2 4 6 8 10
现在,只需按照正确的顺序重新排列字母即可Hello World
!
挑战
您面临的挑战是编写两个程序,函数或其中之一。但是,两者必须使用相同的语言。第一个程序将接受通过STDIN输入的字符串,程序参数或函数参数,并使用此方法对其进行编码。第二个程序将接受通过STDIN输入的字符串,程序参数或函数参数,并使用此方法对其进行解码。
要求
第一个程序/功能
- 使用上面列出的任何方法输入的单个字符串。
- 必须使用对角线Burrows-Wheeler转换样式对字符串进行编码。
第二程序/功能
- 使用上面列出的任何方法输入的单个字符串。
- 必须使用对角线Burrows-Wheeler转换样式对字符串进行解码。
约束条件
- 您不能使用任何内置或外部功能来完成此任务。
- 不允许出现标准漏洞。
- 两个程序/功能必须使用相同的语言。
计分
这是代码高尔夫球,因此以字节为单位的最短程序获胜。
如果我需要添加更多信息,请发表评论!