28 lines
479 B
Plaintext
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]
|