建立旋轉密碼的實作,它有時也稱為凱薩密碼。
凱薩密碼是一種簡單的移位密碼,它會用介於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
這個部分完全是選用的喔。