This solution essentially is what I gave as a spoiler:
C=.([: +/ B {~ ] i: i.@>:@{:)\ A
R.E. Boss
> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens Aai
> Verzonden: donderdag 4 augustus 2011 15:19
> Aan: Programming forum
> Onderwerp: Re: [Jprogramming] complicated sums of subarrays
>
> > I am having a problem understanding this description.
> I think the process can be described by
>
> makeSeq=: 4 :0
> s=.0,}.(1 i:~])@(<{:)\x
> z=.{.y
> for_i. }.i.#y do.
> z=.z,(i{y)+z{~i{s
> end.
> )
>
> transform A to an index array
>
> 0,}.(1: i:~])@(<{:)\A
> 0 0 0 2 3 3 3 6 6 8 2 2 11 12 12 12 15 15 11 18 19 20 18
>
> These indices are used to select an element in the unfolding array C which
is
> then added to the current element of B.
>
> A makeSeq B
> 14 30 22 28 33 36 34 50 50 69 35 34 37 38 46 49 66 49 43 48 65 72 52
>
> or as a (un)fold
>
> (],{+ B{~#@])/(|.}.(1 i:~]<{:)\A),{.B
> 14 30 22 28 33 36 34 50 50 69 35 34 37 38 46 49 66 49 43 48 65 72 52
>
>
> --
> Met vriendelijke groet,
> =@@i
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm