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)) }