Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > create a variable number of loop

Reply
Thread Tools

create a variable number of loop

 
 
Li Chen
Guest
Posts: n/a
 
      07-21-2009
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
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
James Coglan
Guest
Posts: n/a
 
      07-21-2009
[Note: parts of this message were removed to make it a legal post.]

2009/7/21 Li Chen <(E-Mail Removed)>

> 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.

--
James Coglan
http://jcoglan.com

 
Reply With Quote
 
 
 
 
James Coglan
Guest
Posts: n/a
 
      07-21-2009
[Note: parts of this message were removed to make it a legal post.]

2009/7/21 Li Chen <(E-Mail Removed)>

> 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




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)

--
James Coglan
http://jcoglan.com

 
Reply With Quote
 
Li Chen
Guest
Posts: n/a
 
      07-21-2009
> 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*(4**0) if it appears on 0th, 0*(4**1) if on 10th,
0*(4**2) if on 100th, so on and so on
for 'B', it has 1*(4**0) if it appears on 0th, 1*(4**1) 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*(4**3)+ 1*(4**2)+
2**(4**1)+3*(4**0)
'DDDD' has a value:3*(4**3)+ 3*(4**2)+ 3**(4**1)+3*(4**0)


Li
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
steve
Guest
Posts: n/a
 
      07-22-2009
Li Chen wrote:
>> 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*(4**0) if it appears on 0th, 0*(4**1) if on 10th,
> 0*(4**2) if on 100th, so on and so on
> for 'B', it has 1*(4**0) if it appears on 0th, 1*(4**1) 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*(4**3)+ 1*(4**2)+
> 2**(4**1)+3*(4**0)
> 'DDDD' has a value:3*(4**3)+ 3*(4**2)+ 3**(4**1)+3*(4**0)
>
>
> Li


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


 
Reply With Quote
 
Li Chen
Guest
Posts: n/a
 
      07-22-2009
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
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Triple nested loop python (While loop insde of for loop inside ofwhile loop) Isaac Won Python 9 03-04-2013 10:08 AM
Create a loop that loop for x number of seconds. How ? KingdomHeart Java 0 01-23-2009 12:17 AM
Looping through variable number of arrays variable times? Mike P Javascript 27 11-06-2005 10:16 AM
OT: Number Nine, Number Nine, Number Nine FrisbeeŽ MCSE 37 09-26-2005 04:06 PM
The while loop for calculating a power of a number less than another number? Erik the Red Ruby 4 07-29-2005 08:28 PM



Advertisments