From d62ad73ae7557eb9dc4ef02dcfc4aaf42f5765d6 Mon Sep 17 00:00:00 2001 From: paladin Date: Wed, 2 Sep 2026 23:25:46 +0000 Subject: [PATCH] Update main.lua --- main.lua | 141 +++++++++++++++++++------------------------------------ 1 file changed, 48 insertions(+), 93 deletions(-) diff --git a/main.lua b/main.lua index cc09228..9186c90 100644 --- a/main.lua +++ b/main.lua @@ -1,110 +1,65 @@ --- it's like dancing on ice -local function class(factory,stuff) - local meta = stuff - for index,item in pairs(stuff) do - meta["__"..index] = item - end - return setmetatable(meta,{ - __call=function(this,...) - setmetatable(factory(...),meta) - end - }) +local C = 0 +local class_registry = {} +local function class() + C = C + 1 + class_registry[C] = {} + return C end -local function iterate(thing) - local closure = pairs(thing) - return function(...) - local index,item in closure(...) - return item - end +local link = function(a,c,v,b) + if not a[c] then a[c] = {} end + if not b[-c] then b[-c] = {} end + a[c][b] = v + b[-c][a] = v end - -local c = class(function() - return {i = {}} -end) - -local n = class(function(c,v,a,b) - local new = {c = c, v = v, a = a, b = b, s = {}} - table.insert(a.s,new) - table.insert(c.instances,new) - return new -end) -local I = 1 -local n = function(c,...) - N(c,I,...) +local classes = {} +for character in ("abcdefghijklmnopqrstuvwxyz "):gmatch(".") do + classes[character] = class() end - -c.cookie = c() -c.before = c() -c.after = c() -c.out = c() -c.in = c() -c.so = c() -c[";"] = c() -for i in string.byte("a"),string.byte("z") do c[string.char(i)] = c() end -do - -- !a; !b; !next(a,b) <- !before(b,a) -- if b is after a then a is before b - local a = n(); - local b = n(); - N(c.so,N(c.next,a,b),N(c.before,b,a)) +classes.next = class() +classes.inp = class() +classes.out = class() +local function l(a,c,v,b) + end - -local function s(r) - local objects = {r} - local time = 0 - while true do - for o in iterate(objects) do - for similar in iterate(o.c.i) do - for _depends in iterate(similar.s) do - if _depends.c == c.so then - for linked in iterate(_depends.b.s) do - local fail = false - for depends in iterate(linked.s) do - if depends.c == c.so and depends.b == linked then - for instanced in iterate(o.s) do - if depends.c == instanced.c then - - end - end - end - end - if not fail then - - end - end - end - end +local function r(it) + for class,link in pairs(it) do + for to,value in pairs(link) do + r(to) + if class > 0 then + l(it,class,value,to) + else + l(to,-class,value,it) end - for linked in iterate(o.s) do - table.insert(objects,linked) - end - time = time + 1 - if time > 100 then return end end end end - while true do local input = io.read() - local command,rest = input:match("%a*.+") - local previous = N(c()) - local function write(text,author) - for char in text:match(".") do - if author[char] then - local it = n(author[char]) - N(c.in,it) - N(c.after,previous,it) + local command,param = input:match("([^%s]+)(.*)") + local function say(author,text) + local previous + for character in text:gmatch(".") do + if classes[character] then + local it = {} + if previous then + link(previous,classes.next,I,it) + end + link(it,classes.inp,I,{}) + link(it,classes[character],I,{}) + previous = it + r(it) end end end (({ - ["in"] = function() - write(rest,c.in) + ["inp"] = function(text) + say(classes.inp,text) end, - ["out"] = function() - write(rest,c.out) + ["out"] = function(text) + say(classes.out,text) end, - ["cookie"] = function() - write() - end, - })[command] or function() write(command..rest,c.in) end)() + ["exit"] = function() + os.exit() + end + })[command] or function(param) print("Unexpected command: '"..command.."' for '"..param.."''") end)(param) end