AndreSoYeah

Untitled

Nov 30th, 2014
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. function Substitute(Equation, Variable, NewValue)
  2. return Equation:gsub(Variable, NewValue)
  3. end
  4.  
  5. function AddMultiplication(Equation)
  6. return Equation:gsub("%d+%a",function(String)
  7. local DecimalFP,DecimalSP = String:find("%d+")
  8. local Decimal = String:sub(DecimalFP, DecimalSP)
  9. local Variable = String:sub(DecimalSP + 1)
  10. return "("..Decimal.."*"..Variable..")"
  11. end)
  12. end
  13.  
  14. function AddBracketMultiplication(Equation)
  15. return Equation:gsub("%a[(]",function(String)
  16. return String:sub(String:find("%a")).."*("
  17. end):gsub("%d+[(]",function(String)
  18. return String:sub(String:find("%d+")).."*("
  19. end)
  20. end
  21.  
  22. function GetNumber(Second)
  23. local Number = 0
  24. Second:gsub("%d+",function(Character)
  25. Number = Number + tonumber(Character)
  26. end)
  27. return Number
  28. end
  29.  
  30. function Solve(Equation, RangeA, RangeB)
  31. Equation = AddBracketMultiplication(AddMultiplication(Equation))
  32. local VarPlace = Equation:find("%a")
  33. local DefaultVar = Equation:sub(VarPlace, VarPlace)
  34. local SplitFirst = Equation:sub(1, Equation:find("=") - 1)
  35. local SplitSecond = Equation:sub(Equation:find("=") + 1)
  36. RangeA = RangeA or (not SplitSecond:find(DefaultVar) and loadstring("return "..SplitSecond)() or GetNumber(SplitSecond))
  37. RangeB = RangeB or (SplitSecond:find("%-") and -RangeA or 0)
  38. local Result = ""
  39. for Number = RangeA, RangeB, -1 do
  40. local IsNumber = loadstring("return "..Substitute(SplitFirst, DefaultVar, Number).."=="..Substitute(SplitSecond, DefaultVar, Number))()
  41. if IsNumber then
  42. Result = DefaultVar.."="..Number
  43. break
  44. end
  45. end
  46. return (Result ~= "" and Result or "Error!")
  47. end
  48.  
  49. --x = 9
  50. --print(Solve("2x+9/x=19"))
Advertisement
Add Comment
Please, Sign In to add comment