LINUX.ORG.RU

История изменений

Исправление LINUX-ORG-RU, (текущая версия) :

Херня какая-то получилась. Всё чаще за собой обнаруживаю что я теряюсь когда дело заходит о комбинациях чего либо.
Кабзда… Деменция и разжижение мозжечка не иначе

local function expand(inp)
    local out = { }
    local box = { }
    local pre = box
    for x in inp:gmatch('{(.-)}') do
       box.block = x
       box.items = { }
       box.next_box = { }
       for y in (x..','):gmatch('(.-),') do
           box.items[#box.items + 1] = y
       end
       box = box.next_box
    end
    local function substritute(inp,box,out)
       if box and box.items then
          for i,_ in ipairs(box.items) do
              local item = inp:gsub(box.block,box.items[i])
              if not item:find(',') then
                 out[#out+1] = item
              end
              substritute(item,box.next_box,out);
          end
       end
    end
    substritute(inp,pre,out)
    for k,v in ipairs(out) do
        out[k] = v:gsub('{',''):gsub('}','')
    end
    print(table.concat(out,'\n'))
end

expand("~/{.local/share,.config,.cache}/{foo,bar}-package")

Работает строго с единичными {вариантами,для,подмены}, без выкрутасов и фичей что в шапке описаны.

dron@gnu:~/Рабочий-стол$ lua test.lua 
~/.local/share/foo-package
~/.local/share/bar-package
~/.config/foo-package
~/.config/bar-package
~/.cache/foo-package
~/.cache/bar-package
dron@gnu:~/Рабочий-стол$ 

Но даже такая штука мне самому пригодится, закину тоже в закладки профиля. Только при случае надо переписать.

Каковое моё место в таблице лидеров чемпионата? Первый!! Снизу? :D
И каков мой приз?!!11 И где все участники?…

Исправление LINUX-ORG-RU, :

Херня какая-то получилась. Всё чаще за собой обнаруживаю что я теряюсь когда дело заходит о комбинациях чего либо.
Кабзда… Деменция и разжижение мозжечка не иначе

local function expand(inp)
    local out = { }
    local box = { }
    local pre = box
    for x in inp:gmatch('{(.-)}') do
       box.block = x
       box.items = { }
       box.next_box = { }
       for y in (x..','):gmatch('(.-),') do
           box.items[#box.items + 1] = y
       end
       box = box.next_box
    end
    local function substritute(inp,box,out)
         if not box or not box.items or #box.items == 0 then
            return
         end
         for i=1,#box.items do
             local item = inp:gsub(box.block,box.items[i])
             if not item:find(',') then
                out[#out+1] = item
             end
             substritute(item,box.next_box,out);
         end
    end
    substritute(inp,pre,out)
    for k,v in ipairs(out) do
        out[k] = v:gsub('{',''):gsub('}','')
    end
    print(table.concat(out,'\n'))
end

local input = "~/{.local/share,.config,.cache}/{foo,bar}-package"
expand(input)

Работает строго с единичными {вариантами,для,подмены}, без выкрутасов и фичей что в шапке описаны.

dron@gnu:~/Рабочий-стол$ lua test.lua 
~/.local/share/foo-package
~/.local/share/bar-package
~/.config/foo-package
~/.config/bar-package
~/.cache/foo-package
~/.cache/bar-package
dron@gnu:~/Рабочий-стол$ 

Но даже такая штука мне самому пригодится, закину тоже в закладки профиля. Только при случае надо переписать.

Каковое моё место в таблице лидеров чемпионата? Первый!! Снизу? :D
И каков мой приз?!!11 И где все участники?…

Исправление LINUX-ORG-RU, :

Херня какая-то получилась. Всё чаще за собой обнаруживаю что я теряюсь когда дело заходит о комбинациях чего либо. Кабзда… Деменция и разжижение мозжечка не иначе

local function expand(inp)
    local out = { }
    local box = { }
    local pre = box
    for x in inp:gmatch('{(.-)}') do
       box.block = x
       box.items = { }
       box.next_box = { }
       for y in (x..','):gmatch('(.-),') do
           box.items[#box.items + 1] = y
       end
       box = box.next_box
    end
    local function substritute(inp,box,out)
         if not box or not box.items or #box.items == 0 then
            return
         end
         for i=1,#box.items do
             local item = inp:gsub(box.block,box.items[i])
             if not item:find(',') then
                out[#out+1] = item
             end
             substritute(item,box.next_box,out);
         end
    end
    substritute(inp,pre,out)
    for k,v in ipairs(out) do
        out[k] = v:gsub('{',''):gsub('}','')
    end
    print(table.concat(out,'\n'))
end

local input = "~/{.local/share,.config,.cache}/{foo,bar}-package"
expand(input)

Работает строго с единичными {вариантами,для,подмены}, без выкрутасов и фичей что в шапке описаны.

dron@gnu:~/Рабочий-стол$ lua test.lua 
~/.local/share/foo-package
~/.local/share/bar-package
~/.config/foo-package
~/.config/bar-package
~/.cache/foo-package
~/.cache/bar-package
dron@gnu:~/Рабочий-стол$ 

Но даже такая штука мне самому пригодится, закину тоже в закладки профиля. Только при случае надо переписать.

Каковое моё место в таблице лидеров чемпионата? Первый!! Снизу? :D
И каков мой приз?!!11 И где все участники?…

Исправление LINUX-ORG-RU, :

Херня какая-то получилась. Всё чаще за собой обнаруживаю что я теряюсь когда дело заходит о комбинациях чего либо. Кабзда… Деменция и разжижение мозжечка не иначе

local function expand(inp)
    local out = { }
    local box = { }
    local pre = box
    for x in inp:gmatch('{(.-)}') do
       box.block = x
       box.items = { }
       box.next_box = { }
       for y in (x..','):gmatch('(.-),') do
           box.items[#box.items + 1] = y
       end
       box = box.next_box
    end
    local function substritute(inp,box,out)
         if not box or not box.items or #box.items == 0 then
            return
         end
         for i=1,#box.items do
             local item = inp:gsub(box.block,box.items[i])
             if not item:find(',') then
                out[#out+1] = item
             end
             substritute(item,box.next_box,out);
         end
    end
    substritute(inp,pre,out)
    for k,v in ipairs(out) do
        out[k] = v:gsub('{',''):gsub('}','')
    end
    print(table.concat(out,'\n'))
end

local input = "~/{.local/share,.config,.cache}/{foo,bar}-package"
expand(input)

Работает строго с единичными {вариантами,для,подмены}, без выкрутасов и фичей что в шапке описаны.

dron@gnu:~/Рабочий-стол$ lua test.lua 
~/.local/share/foo-package
~/.local/share/bar-package
~/.config/foo-package
~/.config/bar-package
~/.cache/foo-package
~/.cache/bar-package
dron@gnu:~/Рабочий-стол$ 

Но даже такая штука мне самому пригодится, закину тоже в закладки профиля. Только при случае надо переписать.

Каковое моё место в таблице лидеров чемпионата? Первый!! Снизу? :D
И каков мой приз?!!11

Исходная версия LINUX-ORG-RU, :

Херня какая-то получилась. Всё чаще за собой обнаруживаю что я теряюсь когда дело заходит о комбинациях чего либо. Кабзда… Деменция и разжижение мозжечка не иначе

local function expand(inp)
    local out = { }
    local box = { }
    local pre = box
    for x in inp:gmatch('{(.-)}') do
       box.block = x
       box.items = { }
       box.next_box = { }
       for y in (x..','):gmatch('(.-),') do
           box.items[#box.items + 1] = y
       end
       box = box.next_box
    end
    local function substritute(inp,box,out)
         if not box or not box.items or #box.items == 0 then
            return
         end
         for i=1,#box.items do
             local item = inp:gsub(box.block,box.items[i])
             if not item:find(',') then
                out[#out+1] = item
             end
             substritute(item,box.next_box,out);
         end
    end
    substritute(inp,pre,out)
    for k,v in ipairs(out) do
        out[k] = v:gsub('{',''):gsub('}','')
    end
    print(table.concat(out,'\n'))
end

local input = "~/{.local/share,.config,.cache}/{foo,bar}-package"
expand(input)

Работает строго с единичными {вариантами,для,подмены}, без выкрутасов и фичей что в шапке описаны.

dron@gnu:~/Рабочий-стол$ lua test.lua 
~/.local/share/foo-package
~/.local/share/bar-package
~/.config/foo-package
~/.config/bar-package
~/.cache/foo-package
~/.cache/bar-package
dron@gnu:~/Рабочий-стол$ 

Но даже такая штука мне самому пригодится, закину тоже в закладки профиля. Только при случае надо переписать.