CA

getAdditionByString(string)

Por caotic, 14 de ago. de 2013 em Mods, funções e outros

3
820
caoticC
14 de agosto de 2013 às 17:01

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 por caotic

SkymagnumS
14 de agosto de 2013 às 17:52

Muito bom, mas loadstring já faz isso.

 

local value = "280 + 220"
loadstring("return print(" .. value .. ")")()

Editado Agosto 14 por Skymagnum

caoticC
15 de agosto de 2013 às 10:15

 

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 por caotic