caotic 393 Postado Agosto 14, 2013 Share Postado Agosto 14, 2013 (editado) Eu estava pensando em desenvolver o operador de adição então resolvi desenvolver uma função capaz de fazer a operação de adição sem usar nenhum tipo de operador matematico. Claro que antes precisamos da tabuada mais como ele e muito extensa e ninguem quer ficar escrevendo a tabuada desenvolvi uma função que e capaz de dar a tabuada numa tabela. Ela tem uma unica limitação que quando os valores somados tiver uma quantidade algarismo diferentes podem acontecer alguns bugs. Do mais FICO UM POG QUE NOSSA MAIS TA VALENDO. function string.explode(e, sep) local result = {} e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end) return result end function generateTableAdd(table) if table then local result = "local tab = {\n" end result = "{\n" for i=0, 9 do for x=0, 9 do local add = x+i local sep = "," if add >= 18 then sep = "" end result = result..'["'..i..'+'..x..'"] = '..add..''..sep..'\n' end end return result.."\n}" end function repeatValue(char, rep) str = "" for i=1, rep do str = str..char end return str end function getConvertPosByValueAddition(string) local sin = "+" local value = string.explode(string, sin) if #value[1] > #value[2] then string = value[1].."+"..repeatValue("0", #value[1]-#value[2])..value[2] end return string end function getAdditionByString(string) string = getConvertPosByValueAddition(string) print(string) local sin = "+" local add = string.explode(string, sin) local result = "" y = loadstring('return (' .. generateTableAdd() .. ')')() local table = loadstring('return (' .. generateTableAdd() .. ')')() i = #add[1] while i >= 1 do s = s and s or "no" local number = string.sub(add[1], i, i) ss = 0 if string.sub(add[2], i, i) ~= "" and s ~= "no" then local ss = y[string.sub(add[2], i, i).."+"..s] end local num = string.sub(add[2], i, i) ~= "" and string.sub(add[2], i, i) or "0" local p = s ~= "no" and s or "0" local number1 = ""..num.."+"..p.."" local adds = y[number1] local cont = tostring(y[number.."+"..adds]) s = "no" a = string.sub(cont, 2, 2) if #cont <= 1 then a = string.sub(cont, 1, 1) end result = result..a if #cont >= 2 then s = string.sub(cont, 1, 1) end i = i-1 end if s ~= "no" then result = result..s end return string.reverse(result) end print(getAdditionByString("500+500")) Editado Agosto 15, 2013 por caotic Link para o comentário Compartilhar em outros sites More sharing options...
Skymagnum 234 Postado Agosto 14, 2013 Share Postado Agosto 14, 2013 (editado) Muito bom, mas loadstring já faz isso. local value = "280 + 220" loadstring("return print(" .. value .. ")")() Editado Agosto 14, 2013 por Skymagnum Link para o comentário Compartilhar em outros sites More sharing options...
caotic 393 Postado Agosto 15, 2013 Autor Share Postado Agosto 15, 2013 (editado) Muito bom, mas loadstring já faz isso. local value = "280 + 220" loadstring("return print(" .. value .. ")")() Acho que você não entendeu o proposito da função. Era para fazer a operação sem usar um operador matematico ou um suporte como as blibiotecas maths. Fazendo assim você so ta transformando a string em um codigo. Aproveitando retirei a limitação dos numeros os algarismo podem ter quantidade diferentes Editado Agosto 15, 2013 por caotic Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados