RosettaCodeData/Task/Caesar-cipher/Wren/caesar-cipher.wren

27 lines
811 B
Plaintext

class Caesar {
static encrypt(s, key) {
var offset = key % 26
if (offset == 0) return s
var chars = List.filled(s.count, 0)
for (i in 0...s.count) {
var c = s[i].bytes[0]
var d = c
if (c >= 65 && c <= 90) { // 'A' to 'Z'
d = c + offset
if (d > 90) d = d - 26
} else if (c >= 97 && c <= 122) { // 'a' to 'z'
d = c + offset
if (d > 122) d = d - 26
}
chars[i] = d
}
return chars.reduce("") { |acc, c| acc + String.fromByte(c) }
}
static decrypt(s, key) { encrypt(s, 26 - key) }
}
var encoded = Caesar.encrypt("Bright vixens jump; dozy fowl quack.", 8)
System.print(encoded)
System.print(Caesar.decrypt(encoded, 8))