38 lines
828 B
V
38 lines
828 B
V
import rand
|
|
|
|
const (
|
|
lo_abc = 'abcdefghijklmnopqrstuvwxyz'
|
|
up_abc = 'ABCDEFGHIJKLMNIPQRSTUVWXYZ'
|
|
)
|
|
|
|
fn main() {
|
|
key := rand.int_in_range(2, 25) or {13}
|
|
encrypted := caesar_encrypt('The five boxing wizards jump quickly', key)
|
|
println(encrypted)
|
|
println(caesar_decrypt(encrypted, key))
|
|
}
|
|
|
|
fn caesar_encrypt(str string, key int) string {
|
|
offset := key % 26
|
|
if offset == 0 {return str}
|
|
mut nchr := u8(0)
|
|
mut chr_arr := []u8{}
|
|
for chr in str {
|
|
if chr.ascii_str() in up_abc.split('') {
|
|
nchr = chr + u8(offset)
|
|
if nchr > u8(90) {nchr -= 26}
|
|
}
|
|
else if chr.ascii_str() in lo_abc.split('') {
|
|
nchr = chr + u8(offset)
|
|
if nchr > u8(122) {nchr -= 26}
|
|
}
|
|
else {nchr = chr}
|
|
chr_arr << nchr
|
|
}
|
|
return chr_arr.bytestr()
|
|
}
|
|
|
|
fn caesar_decrypt(str string, key int) string {
|
|
return caesar_encrypt(str, 26 - key)
|
|
}
|