On 11/06/14 18:32, bearophile via Digitalmars-d-learn wrote: > Marc Schütz: > >> We'd need something taking and returning a RoR that "mirrors" them >> diagonally. Then we could simply apply `map!(r => r.sum)` on the result. > > A simple solution is to create a row of values, and then sum them correctly > while you scan the rows.
The simplest solution is probably something like: auto transversal_sum(FR)(FR rr) { static struct TS { FR rr; bool empty() @property const { return rr.front.empty; } auto front() @property { import std.algorithm; return reduce!((a, b)=>a+b.front)(rr.front.front.init, rr); } void popFront() { foreach (ref r; rr) r.popFront(); } } return TS(rr); } but I think OP wanted a ready-made phobos solution, w/o all the range boilerplate... artur