Skip to content

Commit

Permalink
Feat/pascal (TheAlgorithms#433)
Browse files Browse the repository at this point in the history
Co-authored-by: Rak Laptudirm <[email protected]>
Co-authored-by: github-action <${GITHUB_ACTOR}@users.noreply.github.com>
  • Loading branch information
3 people authored Nov 12, 2021
1 parent 37cb38e commit eb39cb7
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -565,6 +565,16 @@ Read our [Contribution Guidelines](CONTRIBUTING.md) before you contribute.

1. [`IsPalindrome`](./strings/palindrome/ispalindrome.go#L26): No description provided.

---
</details><details>
<summary> <strong> pascal </strong> </summary>

---

##### Functions:

1. [`GenerateTriangle`](./math/pascal/pascaltriangle.go#L24): GenerateTriangle This function generates a Pascal's triangle of n lines

---
</details><details>
<summary> <strong> password </strong> </summary>
Expand Down
34 changes: 34 additions & 0 deletions math/pascal/pascaltriangle.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// pascaltriangle.go
// description: Pascal's triangle
// details:
// Pascal's triangle is a triangular array of the binomial coefficients that arises in probability theory, combinatorics, and algebra. - [Pascal's triangle](https://en.wikipedia.org/wiki/Pascal%27s_triangle)
// example:
//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
//1 10 45 120 210 252 210 120 45 10 1
//...
// author(s) [red_byte](https://github.com/i-redbyte)
// see pascaltriangle_test.go

package pascal

// GenerateTriangle This function generates a Pascal's triangle of n lines
func GenerateTriangle(n int) [][]int {
var triangle = make([][]int, n)
for i := 0; i < n; i++ {
triangle[i] = make([]int, i+1)
triangle[i][0], triangle[i][i] = 1, 1
for j := 1; j < i; j++ {
triangle[i][j] = triangle[i-1][j] + triangle[i-1][j-1]
}
}
return triangle
}
37 changes: 37 additions & 0 deletions math/pascal/pascaltriangle_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// pascaltriangle_test.go
// description: Test for Pascal's triangle
// author(s) [red_byte](https://github.com/i-redbyte)
// see pascaltriangle.go

package pascal

import (
"reflect"
"testing"
)

func TestGenerateTriangle(t *testing.T) {
tests := []struct {
name string
n int
want [][]int
}{
{name: "Pascal's three-line triangle", n: 3, want: [][]int{{1}, {1, 1}, {1, 2, 1}}},
{name: "Pascal's 0-line triangle", n: 0, want: [][]int{}},
{name: "Pascal's one-line triangle", n: 1, want: [][]int{{1}}},
{name: "Pascal's 7-line triangle", n: 7, want: [][]int{{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}}},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if got := GenerateTriangle(test.n); !reflect.DeepEqual(got, test.want) {
t.Errorf("GenerateTriangle() = %v, want %v", got, test.want)
}
})
}
}

func BenchmarkGenerateTriangle(b *testing.B) {
for i := 0; i < b.N; i++ {
GenerateTriangle(10)
}
}

0 comments on commit eb39cb7

Please sign in to comment.