Skip to content

Instantly share code, notes, and snippets.

@banderson
Last active August 29, 2015 13:56
Show Gist options
  • Save banderson/8976085 to your computer and use it in GitHub Desktop.
Save banderson/8976085 to your computer and use it in GitHub Desktop.
Pascal's Triangle in Coffeescript
module.exports = (rows) ->
result = []
for n in [0..rows]
if n is 0
result[n] = [1]
else
previous = new Array().concat 0, result[n-1], 0
current = []
for val, idx in previous
sum = val + previous[idx+1]
current.push sum unless isNaN(sum)
result[n] = current
result
module.exports = (rows, results = null) ->
if results is null
arguments.callee rows, [[1]]
else if results.length > rows
results
else
previous = [].concat 0, results[results.length-1], 0
results.push (previous.map (val, idx) ->
val + previous[idx+1]
).filter (val, idx) -> !isNaN(val)
arguments.callee rows, results
pascal = require './pascal'
describe 'Pascal', ->
it 'should return 1 for 0', ->
result = pascal 0
expect(result.length).toBe 1
expect(result[0]).toEqual [1]
it 'should return correctly for 1', ->
result = pascal 1
expect(result.length).toBe 2
expect(result[1]).toEqual [1,1]
it 'should return correctly for 2', ->
result = pascal 2
expect(result.length).toBe 3
expect(result[2]).toEqual [1,2,1]
it 'should return correctly for 3', ->
result = pascal 3
expect(result.length).toBe 4
expect(result[3]).toEqual [1,3,3,1]
it 'should return correctly for 4', ->
result = pascal 4
expect(result.length).toBe 5
expect(result[4]).toEqual [1,4,6,4,1]
it 'should return correctly for 5', ->
result = pascal 5
expect(result.length).toBe 6
expect(result[5]).toEqual [1,5,10,10,5,1]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment