27 lines
811 B
Plaintext
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))
|