package main
import (
"fmt"
"strings"
)
func nextRow(prevRow []int) []int {
current := make([]int, 0, len(prevRow)+1)
current = append(current, 1)
for i := 1; i < len(prevRow); i++ {
current = append(current, prevRow[i-1]+prevRow[i])
}
current = append(current, 1)
return current
}
func Triangle(rows int) [][]int {
triangle := [][]int{}
if rows <= 0 {
return triangle
}
triangle = append(triangle, []int{1})
for i := 1; i < rows; i++ {
triangle = append(triangle, nextRow(triangle[i-1]))
}
return triangle
}
func present(line []int) string {
words := make([]string, len(line), len(line))
for i, v := range line {
words[i] = fmt.Sprintf("%4v ", v)
}
return strings.Join(words, " ")
}
func main() {
tri := Triangle(10)
for _, line := range tri {
fmt.Println(present(line))
}
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImZtdCIKCSJzdHJpbmdzIgopCgpmdW5jIG5leHRSb3cocHJldlJvdyBbXWludCkgW11pbnQgewoJY3VycmVudCA6PSBtYWtlKFtdaW50LCAwLCBsZW4ocHJldlJvdykrMSkKCgljdXJyZW50ID0gYXBwZW5kKGN1cnJlbnQsIDEpCgoJZm9yIGkgOj0gMTsgaSA8IGxlbihwcmV2Um93KTsgaSsrIHsKCQljdXJyZW50ID0gYXBwZW5kKGN1cnJlbnQsIHByZXZSb3dbaS0xXStwcmV2Um93W2ldKQoJfQoKCWN1cnJlbnQgPSBhcHBlbmQoY3VycmVudCwgMSkKCglyZXR1cm4gY3VycmVudAp9CgpmdW5jIFRyaWFuZ2xlKHJvd3MgaW50KSBbXVtdaW50IHsKCXRyaWFuZ2xlIDo9IFtdW11pbnR7fQoJaWYgcm93cyA8PSAwIHsKCQlyZXR1cm4gdHJpYW5nbGUKCX0KCXRyaWFuZ2xlID0gYXBwZW5kKHRyaWFuZ2xlLCBbXWludHsxfSkKCWZvciBpIDo9IDE7IGkgPCByb3dzOyBpKysgewoJCXRyaWFuZ2xlID0gYXBwZW5kKHRyaWFuZ2xlLCBuZXh0Um93KHRyaWFuZ2xlW2ktMV0pKQoJfQoJcmV0dXJuIHRyaWFuZ2xlCn0KCmZ1bmMgcHJlc2VudChsaW5lIFtdaW50KSBzdHJpbmcgewoJd29yZHMgOj0gbWFrZShbXXN0cmluZywgbGVuKGxpbmUpLCBsZW4obGluZSkpCglmb3IgaSwgdiA6PSByYW5nZSBsaW5lIHsKCQl3b3Jkc1tpXSA9IGZtdC5TcHJpbnRmKCIlNHYgIiwgdikKCX0KCXJldHVybiBzdHJpbmdzLkpvaW4od29yZHMsICIgIikKfQoKZnVuYyBtYWluKCkgewoJdHJpIDo9IFRyaWFuZ2xlKDEwKQoJZm9yIF8sIGxpbmUgOj0gcmFuZ2UgdHJpIHsKCQlmbXQuUHJpbnRsbihwcmVzZW50KGxpbmUpKQoJfQp9Cg==