Re: Learning Lua
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: Learning Lua
- From: Frank Meier-Dörnberg <frank@...>
- Date: 2010年9月17日 08:00:13 +0200
Am 17.09.2010 02:40, schrieb liam mail:
[
mikelu-1009@mike.de>
wrote:
Victor Poughon wrote:
> When running it until 1,000,000 it finishes in about 15
seconds. (I have a
> 1.83Ghz processor).
> I'm not really concerned about performance, and i'm
sure there's a better
> algorithm for solving this problem. But an equivalent
algorithm in
> C<http://pastebin.com/9MMzS4UA>finishes
about 6 times faster.
> Is this what one should expect from Lua ?
It runs 8.5x faster with LuaJIT.
Obviously algorithmic improvements pay off a lot here. The
following code takes 60 milliseconds on my machine with
LuaJIT:
local bit = require("bit")
local bnot, bor, band = bit.bnot, bit.bor, bit.band
local shl, shr = bit.lshift, bit.rshift
local N = tonumber(arg and arg[1]) or 1000000
local cache, m, n = { 1 }, 1, 1
for i=2,N do
local j = i
for len=1,1000000000 do
j = bor(band(shr(j,1), band(j,1)-1), band(shl(j,1)+j+1,
bnot(band(j,1)-1)))
local x = cache[j]; if x then j = x+len; break end
end
cache[i] = j
if j > m then m, n = j, i end
end
io.write("Found ", n, " (chain length: ", m, ")\n")
--Mike
That code may well be faster but it is horrible code that
someone learning the language should not have to look at.
Liam
To hard words. It is just to show that it is possible.
The bit operations are challenging me at the moment, but I'm very
fine with the cache (very luaish, I think).
Mike, thank you for the stimulation.
--Frank