func polymod(n, *divs) {
gather {
divs.each { |i|
var m = take(n % i)
(n -= m) /= i
}
take(n)
}
}
func compound_duration(seconds) {
(polymod(seconds, 60, 60, 24, 7) ~Z <sec min hr d wk>).grep { |a|
a[0] > 0
}.reverse.map{.join(' ')}.join(', ')
}
[7259, 86400, 6000000].each { |s|
say "#{'%7d' % s} sec = #{compound_duration(s)}"
}