# Pascal's Triangle

**URL:** <https://www.ruby-forum.com/t/pascals-triangle/105777>\
**Category:** Ruby\
**Created:** [June 2, 2007, 4:44pm UTC](https://www.ruby-forum.com/t/pascals-triangle/105777 "2007-06-02T16:44:53Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ari\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a698b9/32.png) [@Ari\_B](https://www.ruby-forum.com/u/Ari_B)\
**Post date:** [June 2, 2007, 4:44pm UTC](https://www.ruby-forum.com/t/pascals-triangle/105777/1 "2007-06-02T16:44:53Z")

</div>

Hey all,  
my second submission to RQ. My first one is GOING TO BE fizzbuzz. Now  
now, now’s not the time to battle my inconsistencies…

Here’s my code for Pascals Triangle. Can someone help me shorten it up?

# Pascals triangle

def factorial(n)  
sum = 1  
sum.upto(n) { |i| sum \*= i }  
sum  
end

def nCr(n, r)  
numerator = factorial(n)  
denominator = factorial® \* factorial(n - r)

@combinations = numerator / denominator  
end

def pascal max\_row

0.upto(max\_row) {|row\_num|

```
 holder = []
 ticker = 0
 while ticker != row_num
   result = nCr(row_num, ticker)
   ticker = ticker + 1
   holder.push(result)
 end
 puts holder.join(' ').center(80)

```

}

end

puts ‘How many rows do you want?’  
max\_row = gets.chomp.to\_i  
pascal max\_row

Thanks,  
---------------------------------------------------------------|  
~Ari  
“I don’t suffer from insanity. I enjoy every minute of it” --1337est  
man alive

---

<div class="post-metadata">

**Author:** ![Ari\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a698b9/32.png) [@Ari\_B](https://www.ruby-forum.com/u/Ari_B)\
**Post date:** [June 2, 2007, 5:20pm UTC](https://www.ruby-forum.com/t/pascals-triangle/105777/2 "2007-06-02T17:20:04Z")

</div>

On Jun 2, 2007, at 9:44 AM, Ari B. wrote:

> sum = 1  
> sum.upto(n) { |i| sum \*= i }  
> sum  
> end

(1…n).inject(1) { |fact, i| fact \* i }

> ```
> holder = []
> ticker = 0
> while ticker != row_num
> result = nCr(row_num, ticker)
> ticker = ticker + 1
> holder.push(result)
> end
> 
> ```

That inner loop could be:

(0…row\_num).each do |ticker|

# …

end

> ```
> puts holder.join(' ').center(80)
> 
> ```
> 
> }
> 
> end
> 
> puts ‘How many rows do you want?’  
> max\_row = gets.chomp.to\_i  
> pascal max\_row

James Edward G. II

---

<div class="post-metadata">

**Author:** ![Ari\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a698b9/32.png) [@Ari\_B](https://www.ruby-forum.com/u/Ari_B)\
**Post date:** [June 3, 2007, 2:42am UTC](https://www.ruby-forum.com/t/pascals-triangle/105777/3 "2007-06-03T02:42:45Z")

</div>

James G. wrote:

> (0…row\_num).each do |ticker|  
> James Edward G. II

For those I prefer:  
row\_num.times { |ticker| …

Regards  
Stefan

---

<div class="post-metadata">

**Author:** ![Ari\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/a698b9/32.png) [@Ari\_B](https://www.ruby-forum.com/u/Ari_B)\
**Post date:** [June 3, 2007, 2:50am UTC](https://www.ruby-forum.com/t/pascals-triangle/105777/4 "2007-06-03T02:50:56Z")

</div>

Ari B. wrote:

> Hey all,  
> my second submission to RQ. My first one is GOING TO BE fizzbuzz. Now  
> now, now’s not the time to battle my inconsistencies…
> 
> Here’s my code for Pascals Triangle. Can someone help me shorten it up?

Most of it has already been said, anyway, here’s my take based on your  
approach:

class Integer  
def factorial  
(1…self).inject(1) { |fac, i| fac\*i } # as James already stated  
end

def cr®  
factorial/(r.factorial\*(self-r).factorial)  
end  
end

# IMHO number of rows is more intuitive and leaves less questions open

(like: does it start with 0 or 1?)  
def pascal(rows)  
rows.times do |row\_num|  
holder = []  
row\_num.times do |ticker|  
holder \<\< row\_num.cr(ticker)  
end  
holder # the formatting stuff etc. IMHO does not belong into this  
function  
end

puts ‘How many rows do you want?’  
max\_row = gets.chomp.to\_i  
puts pascal(max\_row).join(’ ').center(80)

Regards  
Stefan
