轨道
/
Haskell
Haskell
/
练习
/
旋转密码
旋转密码

旋转密码

中等

说明

实现一个旋转密码,它有时也被称作凯撒密码。

凯撒密码是一种简单的移位密码,它通过一个介于0和26之间的整数密钥,对字母表中的所有字母进行移位。由于模运算的关系,使用0或26作为密钥总是得到相同的输出。字母会按照密钥的值移动相应的位数。

旋转密码的通用记法是ROT + <key>。最常用的旋转密码是ROT13。

对拉丁字母表应用ROT13的效果如下:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: nopqrstuvwxyzabcdefghijklm

它比埃特巴什密码更强,因为它有 27 个可能的密钥,其中 25 个可用。

密文的书写格式与输入相同,包括空格和标点。

示例

  • ROT5 把omg变成trl
  • ROT0 把c变成c
  • ROT26 把Cool变成Cool
  • ROT13 把The quick brown fox jumps over the lazy dog.变成Gur dhvpx oebja sbk whzcf bire gur ynml qbt.
  • ROT13 把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类型。

作为本练习的一个可选扩展,你可以

  • 阅读 Haskell 中关于字符串类型的内容。
  • 在 package.yaml 的依赖列表中添加- text。
  • 用以下方式导入Data.Text:
import qualified Data.Text as T
import           Data.Text (Text)
  • 使用Text类型,例如rotate :: Int -> Text -> Text,并以T.pack这样的方式引用Data.Text中的组合子。
  • 查阅Data.Text的文档。
  • 把 RotationalCipher.hs 中所有出现的String替换为Text,即:
rotate :: Int -> Text -> Text

这部分完全是可选的。


来源

Wikipedia链接会在新窗口或新标签页中打开
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Haskell Exercism

准备好开始 旋转密码 了吗?

注册 Exercism,借助 107 个练习 和真人导师指导,学习并掌握 Haskell,全部免费。