Different Ways To Loop

W

Wyatt Greene

I love the flexibility of Ruby. It gives you several ways to do
something, leaving you to pick the most appropriate one. In the
spirit of showing off the flexibility of Ruby, I'd like to see how
many different ways there are to write a loop that prints the numbers
1 to 100, one on each line. I'll start off:

1.upto(100) { |x| puts x }

I know there's at least a dozen more ways to do this...
 
L

Linux Devil

Wyatt said:
I love the flexibility of Ruby. It gives you several ways to do
something, leaving you to pick the most appropriate one. In the
spirit of showing off the flexibility of Ruby, I'd like to see how
many different ways there are to write a loop that prints the numbers
1 to 100, one on each line. I'll start off:

1.upto(100) { |x| puts x }

I know there's at least a dozen more ways to do this...

100.times {|x| puts x + 1}
(1..100).to_a.each {|x| puts x}
 
A

ara.t.howard

1.upto(100) { |x| puts x }


here are a few

# 1
puts Array.new(100){|i| i + 1}

# 2
i = 0 and loop do
puts i+=1
break if i >= 100
end

# 3
puts <<-chars.strip.split(%r//).map{|c| c[0]}
\001\002\003\004\005\006\a\b\t\n\v\f\r
\016\017\020\021\022\023\024\025\026\027\030\031\032\e\034\035\036\037!
\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcd
chars

# 4
100.times{|i| puts i + 1}



a @ http://codeforpeople.com/
 
D

Dan Zwell

Don't forget the "traditional" style loop:

for x in 1..100 do
puts x+1
end

ara.t.howard said:
1.upto(100) { |x| puts x }


here are a few

# 1
puts Array.new(100){|i| i + 1}

# 2
i = 0 and loop do
puts i+=1
break if i >= 100
end

# 3
puts <<-chars.strip.split(%r//).map{|c| c[0]}
\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\e\034\035\036\037!\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcd

chars

# 4
100.times{|i| puts i + 1}



a @ http://codeforpeople.com/
 
M

Mike McKinney

[Note: parts of this message were removed to make it a legal post.]

of course there's...

i=0 and while(i<100) do
puts i+=1
end

i=0 and until(i==100) do
puts i+=1
end




Don't forget the "traditional" style loop:

for x in 1..100 do
puts x+1
end


ara.t.howard said:
1.upto(100) { |x| puts x }


here are a few

# 1
puts Array.new(100){|i| i + 1}

# 2
i = 0 and loop do
puts i+=1
break if i >= 100
end

# 3
puts <<-chars.strip.split(%r//).map{|c| c[0]}
\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\e\034\035\036\037!\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcd

chars

# 4
100.times{|i| puts i + 1}



a @ http://codeforpeople.com/


--
Aloha!

Mike McKinney
(e-mail address removed)
(http://blog.huikau.com)
 
W

Wyatt Greene

[Note: parts of this message were removed to make it a legal post.]

of course there's...

i=0 and while(i<100) do
puts i+=1
end

i=0 and until(i==100) do
puts i+=1
end



Don't forget the "traditional" style loop:
for x in 1..100 do
puts x+1
end
ara.t.howard wrote:
On May 3, 2008, at 8:10 PM, Wyatt Greene wrote:
1.upto(100) { |x| puts x }
here are a few
# 1
puts Array.new(100){|i| i + 1}
# 2
i = 0 and loop do
puts i+=1
break if i >= 100
end
# 3
puts <<-chars.strip.split(%r//).map{|c| c[0]}
\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\e\034\035\036\037!\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcd
chars
# 4
100.times{|i| puts i + 1}
a @http://codeforpeople.com/

--
Aloha!

Mike McKinney
(e-mail address removed)
(http://blog.huikau.com)

And here's an "object-oriented" way:

class Counter
def count
@Count ||= 1
puts @Count
@Count += 1
@Count > 100
end
end

counter = Counter.new
until counter.count; end
 
A

Ashley Wharton

[Note: parts of this message were removed to make it a legal post.]

[Note: parts of this message were removed to make it a legal post.]

of course there's...

i=0 and while(i<100) do
puts i+=1
end

i=0 and until(i==100) do
puts i+=1
end



Don't forget the "traditional" style loop:
for x in 1..100 do
puts x+1
end
ara.t.howard wrote:
On May 3, 2008, at 8:10 PM, Wyatt Greene wrote:
1.upto(100) { |x| puts x }
here are a few
# 1
puts Array.new(100){|i| i + 1}
# 2
i = 0 and loop do
puts i+=1
break if i >= 100
end
# 3
puts <<-chars.strip.split(%r//).map{|c| c[0]}
# 4
100.times{|i| puts i + 1}
a @http://codeforpeople.com/

--
Aloha!

Mike McKinney
(e-mail address removed)
(http://blog.huikau.com)

And here's an "object-oriented" way:

class Counter
def count
@Count ||= 1
puts @Count
@Count += 1
@Count > 100
end
end

counter = Counter.new
until counter.count; end

Based on a response from Eric when I first asked for alternative ways to
do this:

MAX = 100
def print_from_to(start, stop)
start.upto(stop) do |number|
puts number
end
end
loop do
number = 1
print_from_to(number, MAX)
break
end
 
D

David A. Black

Hi --

[Note: parts of this message were removed to make it a legal post.]

of course there's...

i=0 and while(i<100) do
puts i+=1
end

i=0 and until(i==100) do
puts i+=1
end



Don't forget the "traditional" style loop:

for x in 1..100 do
puts x+1
end

ara.t.howard wrote:

On May 3, 2008, at 8:10 PM, Wyatt Greene wrote:

1.upto(100) { |x| puts x }

here are a few

# 1
puts Array.new(100){|i| i + 1}

# 2
i = 0 and loop do
puts i+=1
break if i >= 100
end

# 3
puts <<-chars.strip.split(%r//).map{|c| c[0]}
chars

# 4
100.times{|i| puts i + 1}

a @http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama

--
Aloha!

Mike McKinney
(e-mail address removed)
(http://blog.huikau.com)

And here's an "object-oriented" way:

class Counter
def count
@Count ||= 1
puts @Count
@Count += 1
@Count > 100
end
end

counter = Counter.new
until counter.count; end

Based on a response from Eric when I first asked for alternative ways to
do this:

MAX = 100
def print_from_to(start, stop)
start.upto(stop) do |number|
puts number
end
end
loop do
number = 1
print_from_to(number, MAX)
break
end

I can think of lots of ways:

puts *1..100
puts *1..101-1
puts *1..102-2 ...

or

"This evaluates to true" and loop do ...

"So does this" and loop do ...

:)

I don't mean to scoff at the "more than one way" thing, but it does
in a sense contain the seeds of its own destruction :)


David

--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
See http://www.rubypal.com for details and updates!
 
W

Wyatt Greene

Hi --



[Note: parts of this message were removed to make it a legal post.]
of course there's...
i=0 and while(i<100) do
puts i+=1
end
i=0 and until(i==100) do
puts i+=1
end
Don't forget the "traditional" style loop:
for x in 1..100 do
puts x+1
end
ara.t.howard wrote:
On May 3, 2008, at 8:10 PM, Wyatt Greene wrote:
1.upto(100) { |x| puts x }
here are a few
# 1
puts Array.new(100){|i| i + 1}
# 2
i = 0 and loop do
puts i+=1
break if i >= 100
end
# 3
puts <<-chars.strip.split(%r//).map{|c| c[0]}
\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\e\034\035\036\037!\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcd
chars
# 4
100.times{|i| puts i + 1}
a @http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama
--
Aloha!
Mike McKinney
(e-mail address removed)
(http://blog.huikau.com)
And here's an "object-oriented" way:
class Counter
def count
@count ||= 1
puts @count
@count += 1
@count > 100
end
end
counter = Counter.new
until counter.count; end
Based on a response from Eric when I first asked for alternative ways to
do this:
MAX = 100
def print_from_to(start, stop)
start.upto(stop) do |number|
puts number
end
end
loop do
number = 1
print_from_to(number, MAX)
break
end

I can think of lots of ways:

puts *1..100
puts *1..101-1
puts *1..102-2 ...

or

"This evaluates to true" and loop do ...

"So does this" and loop do ...

:)

I don't mean to scoff at the "more than one way" thing, but it does
in a sense contain the seeds of its own destruction :)

David

--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
Seehttp://www.rubypal.comfor details and updates!

This discussion will self-destruct after 20 posts... :)
 
K

Ken Bloom

I love the flexibility of Ruby. It gives you several ways to do
something, leaving you to pick the most appropriate one. In the spirit
of showing off the flexibility of Ruby, I'd like to see how many
different ways there are to write a loop that prints the numbers 1 to
100, one on each line. I'll start off:

1.upto(100) { |x| puts x }

I know there's at least a dozen more ways to do this...

([nil]*100).each_with_index{|_,i| puts i+1}
Array.new(100).each_with_index{|_,i| puts i+1}
 
W

Wyatt Greene

I love the flexibility of Ruby. It gives you several ways to do
something, leaving you to pick the most appropriate one. In the spirit
of showing off the flexibility of Ruby, I'd like to see how many
different ways there are to write a loop that prints the numbers 1 to
100, one on each line. I'll start off:
1.upto(100) { |x| puts x }
I know there's at least a dozen more ways to do this...

([nil]*100).each_with_index{|_,i| puts i+1}
Array.new(100).each_with_index{|_,i| puts i+1}

Nice ones, Ken! :)

Here's another one, lifted from page 128 of "The Ruby Programming
Language":

x = 10
puts x = x + 1 while x < 100
 
R

Robert Klemme

2008/5/4 Wyatt Greene said:
I love the flexibility of Ruby. It gives you several ways to do
something, leaving you to pick the most appropriate one. In the
spirit of showing off the flexibility of Ruby, I'd like to see how
many different ways there are to write a loop that prints the numbers
1 to 100, one on each line. I'll start off:

1.upto(100) { |x| puts x }

I know there's at least a dozen more ways to do this...

I haven't seen 'retry' so far:

10:48:13 RTEConnector$ ruby -e 'i=0;begin;puts i;raise
"X";rescue;i+=1;retry if i<=10;end'
0
1
2
3
4
5
6
7
8
9
10
10:48:25 RTEConnector$

Cheers

robert
 
M

Marc Heiler

Hmm, the example with p *1..100 surprised me, I knew the * but I somehow
havent seen this used in such a short way :)

I guess fun examples would be that noone notices that a loop is a
work... isn't there an obfuscated way with Array(pack/unpack)?
 
D

David A. Black

Hi --

Hmm, the example with p *1..100 surprised me, I knew the * but I somehow
havent seen this used in such a short way :)

I guess fun examples would be that noone notices that a loop is a
work... isn't there an obfuscated way with Array(pack/unpack)?

I think there are infinite obfuscated ways. It depends what you
consider a "way" to print the integers 1 to 100. You can surround it
with unintelligible garbage, encrypt it and then unencrypt and eval
it, and so forth.

It's an interesting question: what's the horizon of a "way" to do
something, using "way" as in "Ruby gives you different ways to do
xyz"? I don't believe that the relation between, say, p *1..100 and
puts [1,2,3,...,100] is the same as the relation between either of
those ways of printing integers and

puts [*eval("1" + (("$%#$&*."[-1,1]) * 2) +
((212-32)*5/9).to_s)].pack(%{#{"".class.class.name[0].chr}*}).unpack("#{'B'.succ}*")

or whatever. That prints the numbers but I don't think it can usefully
be described as a "way" to print an array of integers.


David

--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
See http://www.rubypal.com for details and updates!
 
J

Jimmy Kofler

Different Ways To Loop
Posted by Wyatt Greene (Guest) on 04.05.2008 04:10

I love the flexibility of Ruby. It gives you several ways to do
something, leaving you to pick the most appropriate one. In the
spirit of showing off the flexibility of Ruby, I'd like to see how
many different ways there are to write a loop that prints the numbers
1 to 100, one on each line. ...


Just for the sake of completeness!

puts Array(1..100)

Cheers,

j.k.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,265
Latest member
TodLarocca

Latest Threads

Top