26 lines
608 B
OCaml
26 lines
608 B
OCaml
let islower c =
|
|
c >= 'a' && c <= 'z'
|
|
|
|
let isupper c =
|
|
c >= 'A' && c <= 'Z'
|
|
|
|
let rot x str =
|
|
let upchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
and lowchars = "abcdefghijklmnopqrstuvwxyz" in
|
|
let rec decal x =
|
|
if x < 0 then decal (x + 26) else x
|
|
in
|
|
let x = (decal x) mod 26 in
|
|
let decal_up = x - (int_of_char 'A')
|
|
and decal_low = x - (int_of_char 'a') in
|
|
String.map (fun c ->
|
|
if islower c then
|
|
let j = ((int_of_char c) + decal_low) mod 26 in
|
|
lowchars.[j]
|
|
else if isupper c then
|
|
let j = ((int_of_char c) + decal_up) mod 26 in
|
|
upchars.[j]
|
|
else
|
|
c
|
|
) str
|