RosettaCodeData/Task/Caesar-cipher/Beads/caesar-cipher.beads

34 lines
1016 B
Plaintext

beads 1 program 'Caesar cipher'
calc main_init
var str = "The five boxing wizards (🤖) jump quickly."
log "Plain: {str}"
str = Encrypt(str, 3)
log "Encrypted: {str}"
str = Decrypt(str, 3)
log "Decrypted: {str}"
// encrypt a string by shifting the letters over by a number of slots
// pass through any characters that are not in the Roman alphabet
calc Encrypt(
input:str --- string to encrypt
nshift --- number of characters to slide over
) : str --- encrypted string
var newStr = ""
loop from:1 to:str_len(input) count:myCount
var unicode : num = from_char(subset(input, from:myCount, len:1))
if unicode >= 65 and unicode <= 90
unicode = mod((unicode - 65 + nshift), 26) + 65
elif unicode >= 97 and unicode <= 122
unicode = mod((unicode - 97 + nshift), 26) + 97
newStr = newStr & to_char(unicode)
return newStr
// undo the encryption
calc Decrypt(
input:str
nshift
) : str
// we could also just shift by 26-nshift, same as going in reverse
return Encrypt(input, -nshift)