import std.stdio : writeln; import std.algorithm.comparison: min, equal; import std.algorithm.iteration: sum; import core.time: MonoTime, Duration; auto sum_subranges(T)(T input, uint range) { import std.range : chunks; import std.algorithm : map; if (range != 0) { return input.chunks(range).map!(sum); } return typeof(return).init; } void main() { import std.range : iota, array; auto v = iota(0,1000000).array; int sum; MonoTime beg = MonoTime.currTime; for (int i=0; i < 100; i++) sum += cast(int)sum_subranges(v,2).length; MonoTime end = MonoTime.currTime; writeln(end-beg); writeln(sum); assert(equal(sum_subranges([1,1,1], 2), [2, 1])); assert(equal(sum_subranges([1,1,1,2,3,3], 2), [2, 3, 6])); assert(equal(sum_subranges(cast(int[])[], 2), cast(int[])[])); assert(equal(sum_subranges([1], 2), [1])); }