Rot-13: Difference between revisions
Content added Content deleted
(Updated 2 D entries) |
|||
Line 491: | Line 491: | ||
=={{header|D}}== |
=={{header|D}}== |
||
===Using Standard Functions=== |
|||
{{works with|D|2}} |
|||
⚫ | |||
import std.ascii: letters, U = uppercase, L = lowercase; |
|||
import std.string: maketrans, translate; |
|||
immutable r13 = maketrans(letters, |
|||
⚫ | |||
U[13 .. U.length] ~ U[0 .. 13] ~ |
|||
L[13 .. L.length] ~ L[0 .. 13]); |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
===Imperative Implementation=== |
|||
<lang d>import std.stdio, std.traits, std.ascii, std.range, std.conv; |
<lang d>import std.stdio, std.traits, std.ascii, std.range, std.conv; |
||
⚫ | |||
⚫ | |||
⚫ | |||
S rot(S)(in S s, in int key) if (isSomeString!S) { |
S rot(S)(in S s, in int key) if (isSomeString!S) { |
||
auto r = new dchar[s.walkLength]; |
auto r = new dchar[s.walkLength]; |
||
foreach (i, dchar c; s) { |
foreach (i, const dchar c; s) { |
||
if ( |
if (c.isLower()) |
||
r[i] = ((c - 'a' + key) % 26 + 'a'); |
|||
else if ( |
else if (c.isUpper()) |
||
r[i] = ((c - 'A' + key) % 26 + 'A'); |
|||
else |
|||
r[i] = c; |
|||
} |
} |
||
return to!S(r); |
return to!S(r); |
||
⚫ | |||
⚫ | |||
⚫ | |||
} |
} |
||
void main() { |
void main() { |
||
"Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt!".rot13().writeln(); |
|||
⚫ | |||
⚫ | |||
⚫ | |||
{{works with|D|1}} |
|||
⚫ | |||
⚫ | |||
auto r13 = letters.maketrans(uppercase[13..$] ~ uppercase[0..13] ~ |
|||
⚫ | |||
⚫ | |||
}</lang> |
}</lang> |
||