Created
November 14, 2019 16:47
-
-
Save sshark/5002d3d59a03e72114e284f8d319fa50 to your computer and use it in GitHub Desktop.
Pascal Triangle
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| object PascalTri { | |
| def triangle(level: Int): List[List[Int]] = { | |
| def triGen(loop: Int, xs: List[Int], acc: List[List[Int]]): List[List[Int]] = | |
| if (loop == 0) acc | |
| else { | |
| val ts = 1 +: xs.sliding(2).map(_.sum).toList :+ 1 | |
| triGen(loop - 1, ts, acc :+ ts) | |
| } | |
| triGen(level - 2, List(1, 1), List(List(1), List(1, 1))) | |
| } | |
| def main(args: Array[String]): Unit = | |
| prettyPrint(triangle(args(0).toInt))) | |
| def prettyPrint(triangle: List[List[Int]]): Unit = { | |
| def _pp(xs: List[List[Int]], balance: Int): Unit = { | |
| if (balance == 0) println() else { | |
| println(s"${" " * (balance - 1)}${xs.head.mkString(" ")}") | |
| _pp(xs.tail, balance - 1) | |
| } | |
| } | |
| _pp(triangle, triangle.size) | |
| } | |
| } | |
| /* REPL Output | |
| scala> import Solution._ | |
| scala> prettyPrint(triangle(5)) | |
| 1 | |
| 1 1 | |
| 1 2 1 | |
| 1 3 3 1 | |
| 1 4 6 4 1 | |
| scala> prettyPrint(triangle(15)) | |
| 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 | |
| 1 11 55 165 330 462 462 330 165 55 11 1 | |
| 1 12 66 220 495 792 924 792 495 220 66 12 1 | |
| 1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1 | |
| 1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1 | |
| */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment