"custom" ord関数とchr関数を記述する必要があります。私はシーザー暗号をメッセージに適用するための小さなプログラムを書いています。これを行う最速の方法は何ですか?カスタムord関数とchr関数
関数 "ord"は、文字を取り、適切な数値を返すだけでよい。 'A'は0を返し、Bは1を返すなどとします。大文字のみを使用すると仮定すると、26通りの可能性があります。私はむしろ26人の警備員を書いてはいけません。これを行うより良い方法はありますか?使用方法は次のとおりです。 "chr"関数はその逆を行う必要があります。
caesarencipher::Int->Int->String->String
caesarencipher r s p = map chr . map encipher $ plaintext
where
plaintext = map ord p
encipher p = mod (r*p + s) 26
caesardecipher::Int->Int->String->String
caesardecipher r s c = map chr . map decipher $ ciphertext
where
ciphertext = map ord c
inverser x | mod (r * x) 26 == 1 = x
| otherwise = inverser (x + 1)
decipher c = mod ((inverser 1) * (c - s)) 26
問題があることです標準的なord関数とchr関数は私の目的のためには機能しません。 Unicodeは私が使用している暗号化アルゴリズムを壊します。 –
ああ。あなたのコメントをもっと慎重に読む必要がありました。次に、オフセットが何であるか把握する必要があります。 –
'ord' A '≡65です。具体的には、 'ordAZ x = ord x - 65'と' chrAZ x = chr(x + 65) 'です。 – ehird