RosettaCodeData/Task/Caesar-cipher/Red/caesar-cipher.red

28 lines
479 B
Plaintext

Red ["Ceasar Cipher"]
rot: func [
char [char!]
key [number!]
ofs [char!]
][
to-char key + char - ofs // 26 + ofs
]
caesar: function [
src [string!]
key [integer!]
][
lower: charset [#"a" - #"z"]
upper: charset [#"A" - #"Z"]
parse src [
any [
change s: [lower (o: #"a") | upper (o: #"A")] (rot s/1 key o)
| skip
]
]
src
]
encrypt: :caesar
decrypt: func spec-of :caesar [caesar src negate key]