16 lines
578 B
Julia
16 lines
578 B
Julia
→(a::Char, b::Char, ± = +) = 'A'+((a-'A')±(b-'A')+26)%26
|
|
←(a::Char, b::Char) = →(a,b,-)
|
|
|
|
cleanup(str) = filter(a-> a in 'A':'Z', collect(uppercase.(str)))
|
|
match_length(word, len) = repeat(word,len)[1:len]
|
|
|
|
function →(message::String, codeword::String, ↔ = →)
|
|
plaintext = cleanup(message)
|
|
key = match_length(cleanup(codeword),length(plaintext))
|
|
return String(plaintext .↔ key)
|
|
end
|
|
←(message::String, codeword::String) = →(message,codeword,←)
|
|
|
|
cyphertext = "I want spearmint gum" → "Gimme!"
|
|
println(cyphertext)
|
|
println(cyphertext ← "Gimme!")
|