# math problem

## Recommended Posts

So guys, Im stuck at this.

I want to divide a random number by 5.

value = math.random(100, 500)

how to do so? each divider also has random number, and when we sum them up result is the value.

for example value is 500, we divide it by 5 get random number 100, 210, 140, 50. I want to operate this but I dont know how to do to get these 5 random values.

Thanks.

##### Link to comment
• Moderators

good question.

But try something like this:

```-- setup --
local value = 500
local splitUpInParts = 5
-----------

local valuePeaks = (100/splitUpInParts)/100
local results = {}
local valueInParts = math.floor((value/splitUpInParts)+0.5)
local valueTotal = 0
for i=1,splitUpInParts-1 do
local peak
if math.random(2) == 1 then
peak = math.random(math.floor((valueInParts*valuePeaks)+0.5))
else
peak = -math.random(math.floor((valueInParts*valuePeaks)+0.5))
end

local result = valueInParts+ peak
results[#results+1] = result
valueTotal = valueTotal+result
end

results[#results+1] =  value - valueTotal -- rest value

for i=1,5 do
outputChatBox(results[i])
end
```

This are the results from the demo

92

84

96

116

112

The results do not have extreme ups and downs, but at least they will not be lower then zero.

##### Link to comment
```
results = {}
function divideThisValue(value)
local value = value
local splitUpInParts = 5
------

local valuePeaks = (100/splitUpInParts)/100
local results = {}
local valueInParts = math.floor((value/splitUpInParts)+0.5)
local valueTotal = 0
for i=1,splitUpInParts-1 do
local peak
if math.random(2) == 1 then
peak = math.random(math.floor((valueInParts*valuePeaks)+0.5))
else
peak = -math.random(math.floor((valueInParts*valuePeaks)+0.5))
end

local result = valueInParts+ peak
results[#results+1] = result
valueTotal = valueTotal+result
end
results[#results+1] = value - valueTotal
end

onFactoryWindowClose()
if estimating then
estimating = false
end
valueof = getElementData(getLocalPlayer(), "Rocks:iron") or 0
if guiGetVisible(GUIEditors.window) then
divideThisValue(valueof)
copper = results
bronze = results
silver = results
iron = results
gold = results
guiSetText(GUIEditors.copper,  tostring(copper).." grams\n"..tonumber(copper*25).."\$")
guiSetText(GUIEditors.bronze,  tostring(broze).." grams\n"..tonumber(bronze*35).." \$")
guiSetText(GUIEditors.silver, tostring(silver).." grams\n"..tonumber(silver*45).." \$")
guiSetText(GUIEditors.iron, tostring(iron).." grams\n"..tonumber(iron*46).." \$")
guiSetText(GUIEditors.gold,  tostring(gold).." grams\n"..tonumber(gold*60).." \$")
end
end)
```

I failed, what's wrong? these vars get nil value.

##### Link to comment
• Moderators

Because results is defined 2 times and the one inside the function is a local.

```function divideThisValue(value)
local value = value
local splitUpInParts = 5
------

local valuePeaks = (100/splitUpInParts)/100
local results = {}
local valueInParts = math.floor((value/splitUpInParts)+0.5)
local valueTotal = 0
for i=1,splitUpInParts-1 do
local peak
if math.random(2) == 1 then
peak = math.random(math.floor((valueInParts*valuePeaks)+0.5))
else
peak = -math.random(math.floor((valueInParts*valuePeaks)+0.5))
end

local result = valueInParts+ peak
results[#results+1] = result
valueTotal = valueTotal+result
end
results[#results+1] = value - valueTotal
return results
end

onFactoryWindowClose()
if estimating then
estimating = false
end
local valueof = tonumber(getElementData(getLocalPlayer(), "Rocks:iron")) or 0
if guiGetVisible(GUIEditors.window) then
local results = divideThisValue(valueof)
if results then
local copper = results or 0 -- if it fails some how, which probably will not happen.
local bronze = results or 0
local silver = results or 0
local iron = results or 0
local gold = results or 0
guiSetText(GUIEditors.copper,  tostring(copper).." grams\n"..tonumber(copper*25).."\$")
guiSetText(GUIEditors.bronze,  tostring(broze).." grams\n"..tonumber(bronze*35).." \$")
guiSetText(GUIEditors.silver, tostring(silver).." grams\n"..tonumber(silver*45).." \$")
guiSetText(GUIEditors.iron, tostring(iron).." grams\n"..tonumber(iron*46).." \$")
guiSetText(GUIEditors.gold,  tostring(gold).." grams\n"..tonumber(gold*60).." \$")
end
end
end)
```

##### Link to comment
• Moderators

np. ## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account

• ### Recently Browsing   0 members

• No registered users viewing this page.
×

• #### Social Media

×
• Create New...