I have this code in lua (sorry if its bad).
function splitIntoTable(inputstr,sep)
local t = {}
for str in string.gmatch(inputstr,"([^" .. sep .. "] )") do
table.insert(t,str)
end
return t
end
function displayList(table)
for k, v in ipairs(table) do
print(table[k])
end
end
local tocalc = "57 38"
print("Inputted: " .. tocalc)
tocalc = "0 " .. tocalc
local workwith = splitIntoTable(tocalc," ")
local did = 0
local doing = 1
local lenOfWorkwith = 0
for k in pairs(workwith) do
lenOfWorkwith = lenOfWorkwith 1
end
repeat
if workwith[doing] == " " then
did = did workwith[doing - 1] workwith[doing 1]
end
doing = doing 1
until doing > lenOfWorkwith
did = math.floor(did 0.5)
print("Result: " .. did)
I know it's a bit inefficient, but I just need it usable right now. Basically, what its supposed to do is simply plus numbers. For example, I put in 57 38, it works fine and gives me the correct calculation, but as soon as I put in 3 numbers (for example, 57 38 40), it breaks down and doesn't give the correct answer.
CodePudding user response:
You can simplify this significantly by using load or loadstring depending on your Lua version.
local tocalc = "57 38 40"
print("Result: " .. load("return " .. tocalc)())
Your algorithm is adding the middle term an additional time.
if workwith[doing] == " " then
did = did workwith[doing - 1] workwith[doing 1]
end
Here on the first " " you will be did 57 38, so did will be 95. on the next " " you will have get did 38 40, causing 38 to be added to the final value twice. To fix this you should simply look at the numbers and add them individually not in pairs.
repeat
if workwith[doing] ~= " " then
did = did workwith[doing]
end
doing = doing 1
until doing > lenOfWorkwith
The algorithm still has other issues, I strongly suggest using solution using load I described above.
