Pascal's Triangle in Ruby
< >

Jun 28 2006 Kelly Norton

My friend Brent posted a solution to the most recent ruby quiz today. When I saw it, I tried to put it out of my mind. But curiosity, coupled with the fact that I seldom get to write any ruby these days, finally proved too much. As an act of rebellion against the overwhelming curiosity, I committed to do it in the most hideously unreadable form imaginable, a single expression …

#!/usr/bin/env ruby

puts (0...ARGV.first.to_i).inject([[1]]) { |a,x|
    a.unshift a.first.inject([0,[]]) { |b,y|
        [y,b.last << (b.first + y)]
    }.last + [1]
}.inject([]) { |c,z|
    next [z[z.length/2].to_s.length*2,z.length,""] if c.empty?
    [c[0],c[1], z.map { |j|
            j.to_s.center(c[0])
        }.join('').center(c[0]*c[1])+"\n#{c.last}"]
}.last
                                1                                 
                             1     1                              
                          1     2     1                           
                       1     3     3     1                        
                    1     4     6     4     1                     
                 1     5     10    10    5     1                  
              1     6     15    20    15    6     1               
           1     7     21    35    35    21    7     1            
        1     8     28    56    70    56    28    8     1         
     1     9     36    84   126   126    84    36    9     1      

Check out more ruby quizzes with far less hideous solutions in the ruby quiz archive.

0
0