Create a variable number of loop

Hi all,

I want to create a variable number of loop based on the input:
if the input is 1, I will create a loop ( I call it 1-loop);
if the input is 2 , I will create a nested loop( 2-loop);
if the input is 3, I will create a loop of loop of loop (3-loop);
if the input is 4, I will create a 4-loop, so on and so on.
How I can do that?

Thanks,

Li

array=%W{A B C D}

#input is 1

array.each do |e1|
puts e1
end

#input is 2
array.each do |e1|
array.each do |e|2
puts e1+e2
end
end

#input is 4
array.each do |e1|
array.each do |e2|
array.each do |e3|
array.each do |e4|
puts e1+e2+e3+e4
end
end
end
end

Would recursive methods be allowed in Ruby?

regards,
Vikas Sarin

2009/7/21 Li Chen [email protected]

Hi all,

I want to create a variable number of loop based on the input:
if the input is 1, I will create a loop ( I call it 1-loop);
if the input is 2 , I will create a nested loop( 2-loop);
if the input is 3, I will create a loop of loop of loop (3-loop);
if the input is 4, I will create a 4-loop, so on and so on.
How I can do that?

Would this input be the size of the array you’re looping over? Seems
from
your example that you’re trying to sum all the combinations of values in
the
array. If so there’s probably a clean recursive way to do this.

2009/7/21 Li Chen [email protected]

 array.each do |e3|
 array.each do |e4|
         puts e1+e2+e3+e4
 end
end

end
end

You can do this recursively by decrementing a depth count until you hit
the
bottom, at which point to print the data you want:

def print_sums(array, depth, memo = 0)
array.each do |x|
if depth == 1
puts memo + x
else
print_sums(array, depth - 1, memo + x)
end
end
end

data = %W{A B C D}
print_sums(data, 1)
print_sums(data, 2)
print_sums(data, 3)
print_sums(data, 4)

You can do this recursively by decrementing a depth count until you hit
the
bottom, at which point to print the data you want:

Hi James,

Thank you very much for the codes. It solves part of my problem. I try
to follow your idea and
implement the reamining part. But I don’t think I can. Here is the
whole story:

What I really try to do is to create a word of using letters of
‘A,B,C,D’’ only with different size
(1-letter, 2-letter,3-letter, …, up to 25-letter word).
For each word created I count the value for each individual letter and
get the sum for the word.

And here are the rules:
A=0; B=1;C=2;D=3
for a word of 1 letter its value is:

‘A’=>0; ‘B’=>1;’‘C’=>2; '‘D’=>3;

for ‘A’, it has 0*(40) if it appears on 0th, 0*(41) if on 10th,
0*(42) if on 100th, so on and so on
for ‘B’, it has 1*(4
0) if it appears on 0th, 1*(41) if on 10th,
1*(4
2) if on 100th, so on and so on
similar to ‘C’ and ‘D’

so the following word of ‘ABCD’ has a value: 0*(43)+ 1*(42)+
2**(41)+3*(40)
‘DDDD’ has a value:3*(43)+ 3*(42)+ 3**(41)+3*(40)

Li

steve wrote:

Li Chen wrote:

‘A’=>0; ‘B’=>1;’‘C’=>2; '‘D’=>3;

Li

C:\Documents and Settings\Administrator>irb
irb(main):001:0> “DDDD”.tr(“DCBA”,“3210”).to_i(4)
=> 255
irb(main):002:0>

Steve,

Thank you so much. It is so neat!

Li

Li Chen wrote:

‘A’=>0; ‘B’=>1;’‘C’=>2; '‘D’=>3;

Li

C:\Documents and Settings\Administrator>irb
irb(main):001:0> “DDDD”.tr(“DCBA”,“3210”).to_i(4)
=> 255
irb(main):002:0>

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs