Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file: (find-angg "LUA/lowerdiag.lua") -- http://angg.twu.net/LUA/lowerdiag.lua.html -- -- Sample output: -- 1 -- >=2 -- >=+-3 -- >=>=+-4 -- >=>=+-6 -- >=+->=+-8 -- >=+-+-+-+-10 -- >=>=>=>=+-+-12 -- >=+-+-+-+-+---14 -- >=+->=+->=+---+-16 -- >=>=+->=--+---+---18 -- >=+->=---->=--+---+-20 -- >=------+---+--->=+-9 -- >=------+---+-----+---15 -- >=--+----->=-->=5 -- >=------------7 matrix = {} nodes = {} PPT = function (T) print(mytostring_table(T, ",\n ")) end PPMM = function () PPT(matrix) end PPM = function () print(table.concat(map(table.concat, matrix), "\n")) end addlinetomatrix = function (name) local n = #matrix local line = {[n + 1] = name} for i=1,n do line[i] = " " end matrix[n + 1] = line end addnodetomatrix = function (n, name) while #matrix < n do addlinetomatrix("") end matrix[n][n] = name end addnode = function (str) if not nodes[str] then -- table.insert(nodes, str) -- nodes[str] = #nodes addlinetomatrix(str) nodes[str] = #matrix -- addnodetomatrix(nodes[str], str) end return nodes[str] end addh = { [" "] = "--", ["| "] = "+-" } addv = { [" "] = "| ", ["--"] = "+-" } addlinkxy = function (x, y, str) if x > y then return addlinkxy(y, x, str) end matrix[y][x] = str for xx=x+1,y-1 do matrix[y][xx] = addh[matrix[y][xx]] or matrix[y][xx] end for yy=x+1,y-1 do matrix[yy][x] = addv[matrix[yy][x]] or matrix[yy][x] end end addlink = function (name1, name2, linkstr) addlinkxy(nodes[name1], nodes[name2], linkstr or ">=") end addnodes = function (str) map(addnode, split(str)) end tolast = function (str) spl = split(str) for i=1,#spl do addnode(spl[i]) end for i=1,#spl-1 do addlink(spl[i], spl[#spl]) end end tofirst = function (str) spl = split(str) for i=1,#spl do addnode(spl[i]) end for i=2,#spl do addlink(spl[1], spl[i]) end end --[[ -- Demo/test: * (eepitch-lua51) * (eepitch-kill) * (eepitch-lua51) ee_dofile "~/LUA/lowerdiag.lua" PPT = PPV matrix = {} nodes = {} -- tofirst "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20" -- addnodes "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20" tofirst "1 2 3 4" tofirst "2 4 6 8 10 12 14 16 18 20" tofirst "3 6 9 12 15 18" tofirst "4 8 12 16 20" tofirst "5 10 15 20" tofirst "6 12 18" tofirst "7 14" tofirst "8 16" tofirst "9 18" tofirst "10 20" PPMM() PPM() PP(nodes) --]] -- Local Variables: -- coding: raw-text-unix -- ee-anchor-format: "«%s»" -- End: