func dif(arr) { gather { range(0, arr.end-1).each { |i| take(arr[i+1] - arr[i]); } } } func difn(n, arr) { n.times { arr = dif(arr) }; arr; } say dif([1, 23, 45, 678]); # => [22, 22, 633] say difn(2, [1, 23, 45, 678]); # => [0, 611]