# \#84 Pascal Triangle

**URL:** <https://www.ruby-forum.com/t/84-pascal-triangle/64458>\
**Category:** Ruby\
**Created:** [June 26, 2006, 1:11am UTC](https://www.ruby-forum.com/t/84-pascal-triangle/64458 "2006-06-26T01:11:16Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![dirk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/87869e/32.png) [@dirk](https://www.ruby-forum.com/u/dirk)\
**Post date:** [June 26, 2006, 1:11am UTC](https://www.ruby-forum.com/t/84-pascal-triangle/64458/1 "2006-06-26T01:11:16Z")

</div>

hi everyone,  
here’s my own solution to the problem:

## pascal.rb

class Pascal  
attr\_reader :triangle

def initialize(rows)  
@triangle=[]  
generate(rows)  
end

def [](row, n)  
if row\>0 and row\<=@triangle.length and n\>0 and n\<=  
@triangle[row-1].length  
@triangle[row-1][n-1]  
else  
nil  
end  
end

def generate(rows)  
return nil if rows\<@triangle.length  
rows.times do |s|  
row=[1]  
1.upto(s-1) do |n|  
row[n]=@triangle[s-1][n-1]+@triangle[s-1][n]  
end  
row[s]=1  
@triangle \<\< row  
end  
end

def to\_s  
spacing=@triangle.last.max.to\_s.length  
total\_length=(spacing+1)\*@triangle.last.length  
@triangle.map do |row|  
row.map do |number|  
number.to\_s.center(spacing)  
end.join(" “).center(total\_length)  
end.join(”\n")  
end

end

puts Pascal.new(ARGV[0].to\_i)
