• Subject: ROT13 implementation in various languages
• From: Philippe Lhoste <PhiLho@...>
• Date: Fri, 22 Oct 2004 12:48:34 +0200

Just found a page, similar to the 99 Bottles of Beer on the Wall page, which mentions Lua. The purpose is simple, a bit less trivial than Hello World, though: to implement the ROT13 algorithm <http://en.wikipedia.org/wiki/Rot13 >.
```
Oh, it is Roberto which implemented the algorithm! In Lua 4.

```
Before finding this page, I have made my own implementation (Lua 5), given below in case somebody might be interested...
```
#!Lua-5.0.exe
-- ROT-13 text.
-- http://en.wikipedia.org/wiki/Rot13
-- by Philippe Lhoste <PhiLho(a)GMX.net> http://Phi.Lho.free.fr
-- v. 1.0 -- 2004/10/21 -- Creation

local text = "Put text to rotate here"

function Rotate13(t)
return (string.gsub(t, "[%a]",
function (char)
local bUpper = (char < 'a')
local b = string.byte(string.upper(char)) - 65 -- 0 to 25
b = math.mod(b  + 13, 26)
if bUpper then
return string.char(b + 65)
else
return string.char(b + 97)
end
end
))
end

print(Rotate13(text))

```
One may make it more concise, but I often prefer readability over terseness... OK, I rewrite this to follow Roberto ideas. I have some hard time to integrate (not forget) the "b and v1 or v2" paradigm, which is quite similar to the C "b ? v1 : v2" which I missed when writing the code above. Sigh.
```
function Rotate13(t)
local byte_a, byte_A = string.byte('a'), string.byte('A')
return (string.gsub(t, "[%a]",
function (char)
local offset = (char < 'a') and byte_A or byte_a
local b = string.byte(char) - offset -- 0 to 25
b = math.mod(b  + 13, 26) + offset -- Rotate
return string.char(b)
end
))
end

```
Also more elegant because it doesn't rely on numeric Ascii values (although Roberto let a '97' slip in the code...).
```
--
Philippe Lhoste
--  (near) Paris -- France
--  Professional programmer and amateur artist
--  http://Phi.Lho.free.fr
--  --  --  --  --  --  --  --  --  --  --  --

```