// Create a Pascal's triangle with a given number of rows.
// Returns an empty array for row_nr <= 0.
fun pascals_triangle(row_nr i32) [][]i32 {
	mut rows := [][]i32

	// Iterate over all rows
	for r := 0; r < row_nr; r += 1 {
		// Store the row above the current one
		mut above := rows[r - 1]

		// Fill the current row. It contains r + 1 numbers
		for i := 0; i <= r; i += 1 {
			// First number is always 1
			if i == 0 {
				rows.push([1]) // Push new row
			}
			// Last number is always 1
			else if i == r {
				rows[r].push(1)
			}
			// Other numbers are the sum of the two numbers above them
			else {
				rows[r].push(above[i - 1] + above[i])
			}
		}
	}

	return rows
}


// Helper function to pretty print triangles.
fun print_triangle(triangle [][]i32) {
	for i, row in triangle {
		// Create string with leading spaces
		mut s := ' '.repeat(triangle.length - i - 1)

		// Add each number to the string
		for n in row {
			s += n.str() + ' '
		}

		// Print and trim the extra trailing space
		println(s.trim_right(' '))
	}
}


fun main() {
	print_triangle(pascals_triangle(7))
}
