lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]



On 08/05/2014 12:38, phlnc8 wrote:

226! (If I am counting correctly :)

I started with Daniel's version and used loadstring and gsub to "compress" the repeated sequences...  (Didn't actually test the result :)

loadstring(('dA,t)if"table"~=type(a)thenBaCt={}r=r or{}r[a]=t Da[r[x]or d(x,r)]=r[y]or d(y,r)CBtCtable.copy={shallowA)b={}Db[x]=yCBbC,deep=d}'):gsub('%u',{A='=function(a,r',B=' return ',C=' end ',D='for x,y in next,a do '}))()

You should change that a[r[x]or d(x,r)]=r[y]or d(y,r) to change the "t" not "a"...

Also it's not safe: _G.next,_G.type=nil,nil and it errors...

So I would try to find a way to make this smaller:

loadstring(('local k,o,d=next,type dA,t)if"table"~=o(a)thenBaCt={}r=r or{}r[a]=t Dt[r[x]or d(x,r)]=r[y]or d(y,r)CBtCtable.copy={shallowA)b={}Db[x]=yCBbC,deep=d}'):gsub('%u',{A='=function(a,r',B=' return ',C=' end ',D='for x,y in k,a do '}))()

On May 8, 2014 11:25 AM, "Pierre-Yves Gérardy" <pygy79@gmail.com> wrote:
I doubt you can get an improvement with `load`.

    load"local a=..."

is three characters longer than

    function(a)end

You can cache the prologue in a variable, but two functions is too
little to gain from it:

L="local a,b,c=..."load(L.."")load(L.."")
function(a,b,c)endfunction(a,b)end
—Pierre-Yves


On Thu, May 8, 2014 at 4:57 PM, Philipp Janda <siffiejoe@gmx.net> wrote:
> Am 08.05.2014 15:47 schröbte Thiago L.:
>
>>
>> I wonder if less than 239 chars is possible (maybe with some
>> load()/loadstring() trickery?)
>
>
> Sure. Using Paul's trick I'm currently at 230 bytes (234 if you don't like
> global `next`). But it's based on my original proposal, so you won't like it
> ...
>
> But using `load` is an interesting idea (e.g. for avoiding the `function`
> keyword) ...
>
> Philipp
>
>
>