10.11.07
Iterators - enough of a reason for Ruby
A non-programmer friend recently asked me why I liked Ruby so much. I asked him for a simple task that I could write in Ruby and we came up with a pyramid - from a single “a” to 26 “z”s. So I showed him this one-liner:
"a".upto("z") { |c| puts c * (1 + c[0] - "a"[0]) }
And then showed him the same program in C:
#include "stdio.h"
int main( int argc, char **argv )
{
int loop = 0;
for( loop = 0; loop < 26; loop++ )
{
int innerloop = 0;
for( innerloop = 0; innerloop <= loop; innerloop++ )
{
printf( "%c", 'a' + loop );
}
printf("n");
}
return 0;
}
Enough said.
a bb ccc dddd eeeee ffffff ggggggg hhhhhhhh iiiiiiiii jjjjjjjjjj kkkkkkkkkkk llllllllllll mmmmmmmmmmmmm nnnnnnnnnnnnnn ooooooooooooooo pppppppppppppppp qqqqqqqqqqqqqqqqq rrrrrrrrrrrrrrrrrr sssssssssssssssssss tttttttttttttttttttt uuuuuuuuuuuuuuuuuuuuu vvvvvvvvvvvvvvvvvvvvvv wwwwwwwwwwwwwwwwwwwwwww xxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyy zzzzzzzzzzzzzzzzzzzzzzzzzz
2/6/2008 Update: it might be shorter and more clear like this
("a".."z").each_with_index { |c,i| puts (c * (i + 1)) }