实现一个旋转密码,它有时也被称作凯撒密码。
凯撒密码是一种简单的移位密码,它通过一个介于0和26之间的整数密钥,对字母表中的所有字母进行移位。由于模运算的关系,使用0或26作为密钥总是得到相同的输出。字母会按照密钥的值移动相应的位数。
旋转密码的通用记法是ROT + <key>。最常用的旋转密码是ROT13。
对拉丁字母表应用ROT13的效果如下:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm
它比埃特巴什密码更强,因为它有 27 个可能的密钥,其中 25 个可用。
密文的书写格式与输入相同,包括空格和标点。
omg变成trl
c变成c
Cool变成Cool
The quick brown fox jumps over the lazy dog.变成Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
Gur dhvpx oebja sbk whzcf bire gur ynml qbt.变成The quick brown fox jumps over the lazy dog.
你需要实现rotate函数,它接收一个Int和一个String,然后用旋转密码对它进行编码。
如果你不确定类型,可以使用给出的签名,但不要让它限制你的创造力。
本练习处理的是文本数据。由于历史原因,Haskell 的String类型等同于[Char],也就是一个字符列表。为了更高效地处理文本数据,可以使用Text类型。
作为本练习的一个可选扩展,你可以
import qualified Data.Text as T
import Data.Text (Text)
Text类型,例如rotate :: Int -> Text -> Text,并以T.pack这样的方式引用Data.Text中的组合子。Data.Text的文档。String替换为Text,即:rotate :: Int -> Text -> Text
这部分完全是可选的。