Ir para conteúdo

getAdditionByString(string)


caotic

Posts Recomendados

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 por caotic
Link para o comentário
Compartilhar em outros sites

 

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 por caotic
Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...