+--[[ Towers of hanoi - Lua 5.1 ]]--
+
+local move = function(a, b)
+ print( a, '->', b )
+end
+
+local hanoi
+hanoi = function(n, orig, pivot, dest)
+ if n < 1 then
+ return
+ end
+
+ if n == 1 then
+ move( orig, dest )
+ return
+ end
+
+ if n == 2 then
+ move( orig, pivot )
+ move( orig, dest )
+ move( pivot, dest )
+ return
+ end
+
+ hanoi(n-2, orig, pivot, dest)
+ move( orig, pivot )
+ hanoi(n-2, dest, orig, pivot)
+ move( orig, dest )
+ hanoi(n-1, pivot, orig, dest)
+end
+
+io.write "Value of N: "
+local n = io.read "*n"
+
+if type(n) == 'number' then
+ n = math.floor(n)
+else
+ io.stderr "Value given is not a number.\n"
+ os.exit(1)
+end
+
+hanoi(n, 'Left', 'Center', 'Right')