#!/usr/bin/ruby

# Translation of: https://rosettacode.org/wiki/9_billion_names_of_God_the_integer#Python

var cache = [[1]];

func cumu (n) {
    for l in range(cache.len, n) {
        var r = [0];
        for i in (1..l) {
            r.append(r[-1] + cache[l-i][[i, l-i].min])
        }
        cache.append(r);
    }

    return(cache[n]);
}

func row (n) {
    var r = cumu(n);
    return (n-1 -> range.map{|i| r[i+1] - r[i] });
}

"rows:".say;
for i in (1..10) {
    "%2d: %s\n".printf(i, row(i).dump);
}

"\nsums:".say;

[2, 5, 23, 32].each { |i|
    "%2d : %4d\n".printf(i, (cumu(i))[-1]);
}