I guess I can do a low-level view of how the code works. Though I'm
not going to use sample data from euler 67 - have to leave you
something to do... instead, I'll use
i.3 3
0 1 2
3 4 5
6 7 8
as the sample data.
So that's this:
{. (+ 0: ,~ 2: >./\ ])/ i.3 3
12
We also don't need : after the numbers, for this particular case, in
modern versions of J, nor do we need the spaces, and I'm going to want
this to be compact, in a moment, so:
{. (+0,~2>./\])/ i.3 3
12
Let's start breaking that down. First, let's remove the 'first' verb,
so we see what it is acting on:
(+0,~2>./\])/ i.3 3
12 13 2
Now how did that happen? Well, in this case the / operator inserts its
verb between the items of its noun. So, that is:
0 1 2 (+0,~2>./\]) 3 4 5 (+0,~2>./\]) 6 7 8
12 13 2
Next, let's look at just one of these cases to see how it works:
3 4 5 (+0,~2>./\]) 6 7 8
10 12 5
So how does that work? Well, if we count the verbs in (+0,~2>./\])
there's an even number of them, so the top level structure is a hook.
And, it's a dyadic hook (with an argument on its left), so that means
we can just remove the parenthesis in that sentence (need to read the
documentation on hooks, really - I'm oversimplifying the definitions
for only their relevance in this case):
3 4 5 +0,~2>./\] 6 7 8
10 12 5
In other words, it's 3 4 5 + the result of the rest of that stuff.
So:
0,~2>./\] 6 7 8
7 8 0
That's the pair-wise sum of the elements of the list, with a zero
tacked onto the right hand side.
Again, I'm oversimplifying things here - you should be able to perform
your own experiments and/or read the definitions either in the
official dictionary
http://www.jsoftware.com/help/dictionary/vocabul.htm or in the
unofficial nuvoc http://www.jsoftware.com/jwiki/NuVoc -- but be sure
to try things out, some, to help resolve ambiguities and especially
when you think you understand things (because sometimes things are
surprising).
So anyways, {. (+ 0: ,~ 2: >./\ ])/ m is, basically:
The first thing from:
adding each row to
the pairwise sum of
this result for the previous row
(padding pairwise sums on the right, to keep things the same length)
I hope this helps.
Thanks,
--
Raul
On Sat, Jan 10, 2015 at 1:06 PM, Roger Hui <[email protected]> wrote:
> Hmm, I bet you a Java solution would be longer, eh? :-)
>
> It's been years since I solve Project Euler 67, and I am busy with other
> things on the weekend, so there'll be a delay in a detailed description.
> Probably others will chime in meanwhile.
>
>
>
> On Sat, Jan 10, 2015 at 9:58 AM, oventarb oventarb <[email protected]>
> wrote:
>
>>
>> Dear Roger Hui!
>> I solved problem 67 using Java.
>> What does this code mean:
>>
>> {. (+ 0: ,~ 2: >./\ ])/ m
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm