23 lines
585 B
D
23 lines
585 B
D
import std.stdio, std.traits;
|
|
|
|
S rot(S)(in S s, in int key) pure nothrow @safe
|
|
if (isSomeString!S) {
|
|
auto res = s.dup;
|
|
|
|
foreach (immutable i, ref c; res) {
|
|
if ('a' <= c && c <= 'z')
|
|
c = ((c - 'a' + key) % 26 + 'a');
|
|
else if ('A' <= c && c <= 'Z')
|
|
c = ((c - 'A' + key) % 26 + 'A');
|
|
}
|
|
return res;
|
|
}
|
|
|
|
void main() @safe {
|
|
enum key = 3;
|
|
immutable txt = "The five boxing wizards jump quickly";
|
|
writeln("Original: ", txt);
|
|
writeln("Encrypted: ", txt.rot(key));
|
|
writeln("Decrypted: ", txt.rot(key).rot(26 - key));
|
|
}
|