Create a class - ideas

Evening

I am trying to create a class. I am struggling to figure the best flow
to get the maths side to work.

So say that

R is a float given by user input
P is a Total amount(Pool)
Per is a variable %
X is a variable that is a percentage of P defined by a maximum
allocation.

So main = (( R * X)/P)*100

What I want to test is the value of X needed to equal Per from X’s
maximum allocation down.

What i am thinking but cant get right

Say

R = 5
P = 10
Per = 190
X = max 80% of P

For X in main = Per ( Closest whole number or half that equals closest
to but greater than Per)
main = (( 5 * 8)/10)*100

So in example intially main equalled 400%. And answer I would want to
resolve it to is X = 4 which is 200% as 3.50 equals 180%.

Any ideas?

On 06.11.2010 10:19, flebber wrote:

So main = (( R * X)/P)*100

First of all you should get your variables right. Variable “Per” does
not show up in the formula and “main” is not mentioned in the list.

The meaning of the formula is totally unclear to me. From what you gave
you are calculating the fraction (R/P) multiply it with 100 (so you
actually get (R/P) percent and now you multiply with another percentage
(X). So you have a percentage of a percentage.

What I want to test is the value of X needed to equal Per from X’s
maximum allocation down.

Can you write down a formula that contains all variables in your list
and point at the fixed ones (constants), user inputs and variables you
want to resolve?

to but greater than Per)
main = (( 5 * 8)/10)*100

So in example intially main equalled 400%. And answer I would want to
resolve it to is X = 4 which is 200% as 3.50 equals 180%.

Any ideas?

Sorry you lost me somewhere along the path. Also it’s tea time right
now…

Cheers

robert

On Nov 7, 2:24am, Robert K. [email protected] wrote:

X is a variable that is a percentage of P defined by a maximum
(X). So you have a percentage of a percentage.

P = 10
Any ideas?

Sorry you lost me somewhere along the path. Also it’s tea time right now…

Cheers

robert


remember.guy do |as, often| as.you_can - without
endhttp://blog.rubybestpractices.com/

So I want to check by changing X when in forumla “main” that it is =>
than “per”

In simple terms I want to calculate units needed to reach a rate of
return, X represents the variable units and per is the ROI(return of
investment rate I would deaire to acheive), R is the ratio of return
and P is a pool or base amount, I am using base 10 to start off with.

I am trying to test X for a value, the only constraint on X is that it
cannot exceed 80% of the P or Pool amount.
So if I set per = 190%

R = 5
P = 10
Per = 190
X = max 80% of P

For X in main >= per

main = (( 5 * X)/10)*100 >= 190%

so for X = 80% of P or 8 base units

main = (( 5 * 8)/10)*100

which would test out as

main >= per

400 => 190 -

So when X is 8 units the main section is greater than per but its not
the closest whole unit to per.

So when X = 40% or 4 base units

main = (( 5 * 4)/10)*100
main >= per
200 >= 190

this is the largest unit in 0.5 increments that remains greater than
Per of 190 so I would want X once tested to resolve to this.

I hope that made sense.

On Nov 6, 2010, at 7:00 PM, flebber wrote:

X is a variable that is a percentage of P defined by a maximum
(X). So you have a percentage of a percentage.
Say
So in example intially main equalled 400%. And answer I would want to

I am trying to test X for a value, the only constraint on X is that it
main = (( 5 * X)/10)*100 >= 190%

Per of 190 so I would want X once tested to resolve to this.

Cheers

Sayth

The wording is pretty vague at several points, but I’m trying to work
through it to make sense of it…

You’ve really lost me when 80% turns into 8 (or 8 base units). What is
a base unit? And why would it be equal to 10%?
Are you looking to vary X from 80% down by 5% increments?

Mike C.

[email protected]

On Nov 7, 9:45am, flebber [email protected] wrote:

On 06.11.2010 10:19, flebber wrote:

allocation.

resolve it to is X = 4 which is 200% as 3.50 equals 180%.
remember.guy do |as, often| as.you_can - without
endhttp://blog.rubybestpractices.com/
cannot exceed 80% of the P or Pool amount.

So when X is 8 units the main section is greater than per but its not

I hope that made sense.

So how do I best get X to run a loop in 0.5 increments until it
reaches the closest value that makes the left side of an equation
greater or equal to the right. But where it is the lowest value that
is greater than or equal to the the right.

Main => Per - where main is the lowest value it can be greater than
per.

Cheers

Sayth

On Nov 7, 11:06am, Mike C. [email protected] wrote:

On Nov 7, 9:45 am, flebber [email protected] wrote:

P is a Total amount(Pool)
you are calculating the fraction (R/P) multiply it with 100 (so you
What i am thinking but cant get right
main = (( 5 * 8)/10)*100
robert
and P is a pool or base amount, I am using base 10 to start off with.
For X in main >= per

Main => Per - where main is the lowest value it can be greater than
and X = X*P

x -= 0.05

per = 190.0
[email protected]://blog.mikecargal.com
Thanks for looking at this for me.

You’ve really lost me when 80% turns into 8 (or 8 base units). What is a base
unit? And why would it be equal to 10%?
Are you looking to vary X from 80% down by 5% increments?

This test is the first of 4 I plan to make into one program. For each
their while be a maximum allocation so in this case 80% so may be 40%
etc. The pool in future will vary but I am using base 10 while I write
it(hoping it would be clearer for another person reading it). So that
means that X has a max allocation of units if 40% was the maximum
allocation and base 10 then X would be 4 units and I would want my
loop to test X from 0 to 4 in 0.5 increments.

I am going to need more time to read your solution as I haven’t got it
first read. I had started to look at
http://www.rubyist.net/~slagell/ruby/iterators.html

and a solution flow similar to

ruby> def WHILE(cond)
| return if not cond
| yield
| retry
| end
nil
ruby> i=0; WHILE(i<3) { print i; i+=1 }
012 nil

On Nov 7, 12:13pm, flebber [email protected] wrote:

X is a variable that is a percentage of P defined by a maximum
(X). So you have a percentage of a percentage.
Say
So in example intially main equalled 400%. And answer I would want to

I am trying to test X for a value, the only constraint on X is that it
main = (( 5 * X)/10)*100 >= 190%

Per of 190 so I would want X once tested to resolve to this.

so… main =

puts “#{lastSuccess*100.0}%”

Thanks for looking at this for me.
loop to test X from 0 to 4 in 0.5 increments.
| end
nil
ruby> i=0; WHILE(i<3) { print i; i+=1 }
012 nil- Hide quoted text -

  • Show quoted text -

Actually after re-reading your post I get it. All but one small bit.

In your formula how does the ? “#{lastSuccess*100.0}%” bit work? what
data does lastSuccess pull.

x = 0.05
const = r100 # simplified without X
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{lastSuccess*100.0}%” : “no answer”

and a solution flow similar to

ruby> def WHILE(cond)
| return if not cond
| yield
| retry
| end
nil
ruby> i=0; WHILE(i<3) { print i; i+=1 }

This WHILE loop will not work because the condition is only evaluated
once. If you want it to work you need to turn the condition into a
lambda, like so:

def WHILE(cond)
loop do
return if !cond.()
yield
end
end

and use like this:

i = 0
WHILE(->{i < 3}) { puts i; i+=1 }

On 07.11.2010 05:41, John M. wrote:

This WHILE loop will not work because the condition is only evaluated
and use like this:

i = 0
WHILE(->{i< 3}) { puts i; i+=1 }

Where’s the point in doing this when there are “while” loops already
built into the language?

I still think we first need to get the math correct before we can come
up with solutions. Formulas I have seen in this thread look like they
could be solved with some simple transformations and do not need any
nested intervals or similar approximation algorithms. So far I find the
problem description quite confusing.

Cheers

robert

Where’s the point in doing this when there are “while” loops already
built into the language?
robert

fun
:slight_smile:

On Nov 6, 2010, at 7:00 PM, flebber wrote:

X is a variable that is a percentage of P defined by a maximum
(X). So you have a percentage of a percentage.
Say
So in example intially main equalled 400%. And answer I would want to

I am trying to test X for a value, the only constraint on X is that it
main = (( 5 * X)/10)*100 >= 190%

Per of 190 so I would want X once tested to resolve to this.

Cheers

Sayth

Something’s not right with your formulas (I suspect)

main = (( R * X)/P)*100

and X = X*P

so… main =
R*(X*P)
----------- * 100
P

the P’s cancel out…
RX100

varying P will not change the results of your calculations…

here’s what I believe that you’re asking for…

r = 5.0
p = 10.0
per = 190.0
x = 0.8

begin
main = ((r*(x*p))/p)100
lastSuccess = x if main >= per
x -= 0.05
end while main >= per
puts "#{lastSuccess
100.0}%"

note: you can change p al day long and always get the same answer

there are probably more “rubified” ways to express this.
I’ve tried to maintain the approach you’ve stated. However, I would
simplify the equation first, and since the last X that succeeds as you
decrement is the same thing as the first that succeeds as you’re going
up, I’d probably turn t into something like…

r = 5.0
p = 10.0
per = 190.0
max_x = 0.8

x = 0.05
const = r100 # simplified without X
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{lastSuccess*100.0}%” : “no answer”

Mike C.

[email protected]

On Nov 8, 3:33am, Mike C. [email protected] wrote:

On Nov 7, 12:13 pm, flebber [email protected] wrote:

to get the maths side to work.

Per = 190

than “per”
R = 5
main = (( 5 * 8)/10)*100
So when X = 40% or 4 base units
So how do I best get X to run a loop in 0.5 increments until it

x = 0.8
there are probably more “rubified” ways to express this.
puts x <= max_x ? “#{lastSuccess*100.0}%” : “no answer”

puts x <= max_x ? "#{lastSuccess100.0}%" : “no answer”
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{x*100.0}%” : “no answer”

Mike C.

[email protected]://blog.mikecargal.com

I still think we first need to get the math correct before we can come
up with solutions. Formulas I have seen in this thread look like they
could be solved with some simple transformations and do not need any
nested intervals or similar approximation algorithms. So far I find the
problem description quite confusing.

Essentially without formulas all I am calculating is how many units at
a specified rate of return it would take to reach a percentage of rate
of return. Only additionally I have specified a maximum unit
allocation. There would ultimately be several options with different
return rates and max allocations from each pool. A pool is a
percentage subset of a bank.

x = 0.05
const = r100 # simplified without X
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{x*100.0}%” : “no answer”

Mikes solution definitely works for working units(X)…thank you. I
need to set constants and obtain user inputs for different scenarios
and call it to the function.

could be solved with some simple transformations and do not need any
I need to lookup what a transformation is…

On Nov 8, 9:40pm, flebber [email protected] wrote:

R is a float given by user input
The meaning of the formula is totally unclear to me. From what you gave

to but greater than Per)

investment rate I would deaire to acheive), R is the ratio of return

main >= per
200 >= 190

varying P will not change the results of your calculations…
lastSuccess = x if main >= per
p = 10.0

it(hoping it would be clearer for another person reading it). So that
| return if not cond

r = 5.0

allocation. There would ultimately be several options with different
and call it to the function.

could be solved with some simple transformations and do not need any

I need to lookup what a transformation is…

This is where I was headed with it…any suggestions apprecaited.

Bank = $500.00 # later to be a running total calculated

def ROIcalc
const = r100 # simplified without X
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{x*100.0}%” : “no answer”
end

def pool
if Bank > 200 then Bank * 0.05
Else 10.00
end

Scenario 1

a = ROIcalc(per = 190, max_x = 0.8, puts “What ratio of return do you
expect?” r = gets.chomp, pool)
b = ROIcalc(per = 200, max_x = 0.4, r = 12.00, pool)

output result if valid

or return no valid result choose another scenario or end.

This is where I was headed.

Bank = $500.00 # later to be a running total calculated

def ROIcalc
const = r100 # simplified without X
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{x*100.0}%” : “no answer”
end

def pool
if Bank > 200 then Bank * 0.05
Else $10.00
end

Scenario 1

a = ROIcalc(per = 190, max_x = 0.8, puts “What ratio of return do you
expect?” r = gets.chomp, pool)
b = ROIcalc(per = 200, max_x = 0.4, r = 12.00, pool)

output result if valid

or return no valid result choose another scenario or end.

On Nov 7, 2010, at 12:20 AM, flebber wrote:

On Nov 7, 2:24 am, Robert K. [email protected] wrote:

Per is a variable %
actually get (R/P) percent and now you multiply with another percentage

400 => 190 -
this is the largest unit in 0.5 increments that remains greater than
per.

here’s what I believe that you’re asking for…
end while main >= per
max_x = 0.8

allocation and base 10 then X would be 4 units and I would want my
| retry
data does lastSuccess pull.

x = 0.05
const = r100 # simplified without X
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{lastSuccess*100.0}%” : “no answer”

my bad…

r = 5.0
p = 10.0
per = 190.0
max_x = 0.8

x = 0.05
const = r100 # simplified without X
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{x*100.0}%” : “no answer”

Mike C.

[email protected]

On Nov 10, 12:44pm, flebber [email protected] wrote:

R is a float given by user input
The meaning of the formula is totally unclear to me. From what you
gave

to but greater than Per)

investment rate I would deaire to acheive), R is the ratio of return

main >= per
200 >= 190

varying P will not change the results of your calculations…
lastSuccess = x if main >= per
p = 10.0

it(hoping it would be clearer for another person reading it). So that
| return if not cond

r = 5.0

allocation. There would ultimately be several options with different
and call it to the function.
const = r100 # simplified without X
a = ROIcalc(per = 190, max_x = 0.8, puts "What ratio of return do you
const = r
100 # simplified without X
a = ROIcalc(per = 190, max_x = 0.8, puts “What ratio of return do you
expect?” r = gets.chomp, pool)
b = ROIcalc(per = 200, max_x = 0.4, r = 12.00, pool)

output result if valid

or return no valid result choose another scenario or end.

upated.

Bank = $500.00 # later to be a running total calculated

def ROIcalc
const = r100 # simplified without X
x += 0.05 while (x
const < per) && (x <= max_x)
puts x <= max_x ? “#{x*100.0}%” : “no answer”
end

def pool
if Bank > 200 then Bank * 0.05
Else $10.00
end

Scenario 1

a = ROIcalc(per = 190, max_x = 0.8, puts “What ratio of return do you
expect?” r = gets.chomp, pool)
b = ROIcalc(per = 200, max_x = 0.4, r = 12.00, pool)

if a + b > 10 then err = 10.00 - ( a + b) puts “Your exceeding your
pool by” + err.to_s
else a + b < 10 then readd = 10.00 - ( a + b)
# then use readd to reassign extra units in ratio 75/25 to a and b
end