In classic APL, the operators also bind to the left eg.
+/ 1 2 3 4
means
(+/) 1 2 3 4
but operators only apply to primitive verbs if I remember correctly.
Вск, 25 Сен 2011, Nick Simicich писал(а):
> Thanks, Bill. I had tried a bunch of different bracketings, but not this
> one.
>
> APL, is a way was simpler, nothing worked from left to right, everything
> worked from right to left. I understand why conjunctions have to bind left
> to right, I think, but what I don't understand is why
>
> (5&{.!.1) /. (5 5 $i. 25)
>
> fails while yours yours works.
>
> The entire program (with your mod to bracketing is:
>
> >./(,4 */\ a) ,(,4 */\ |:a) ,(,4*/\"1 (20&({.!.1)/.a)),(,4*/\"1
> (20&({.!.1)/.|:a))
>
> The point is to take the largest of products of groups of four, overlapping,
> on the verticals, horizontals, or diagonals. 'a' is pre-loaded with the
> 20x20 matrix.
>
>
> >./(,4 */\ a) ,(,4 */\ |:a) ,(,4*/\"1>20{.!.1 L:_1 </.a),(,4*/\"1>20{.!.1
> L:_1 </.|:a)
>
> My solution was above, but I was extending every line separately, then
> unboxing the array and and while it does not matter for this 20x20 array, I
> want to learn techniques that I can apply to other problems, and to J in
> general. I thought that once I finished reading JforC, I would practice
> programs, and then I discovered projecteuler.org. So this is not just about
> solving problems, although there have been a couple I just gave up on J for
> solving because the search space was too big. One, for example, I allowed J
> to work on for 12 hours and it was not memory short. I wrote a D solution
> that ran in a couple seconds. That one
>
> First off, the actual solution can be found in the verticals and horizontals
> - I had tried a partial solution, put a row of 1's onto the array so that it
> was 20x21 and reshaped it so that it was 21x20, but that didn't really work.
> I had read how /. worked, but I thought it only took maximum length
> diagonals. Wrong presumption. >./(,4 */\ a) ,(,4 */\ |:a) gets you into
> the forums, but I thought that was a cheat, since I had ignored the hard
> part of the problem. I got the boxed version working, and then I wanted to
> code it without boxes.
>
> I first went looking to see if I could specify a fill to unbox, but there is
> no such operation. Reading the discussion here, I see that it is likely
> that the fill is applied separately, not by unbox. It just presents the
> line of the array, and the system makes the array regular, which only allows
> for a zero fill. Because I want the last shard to go into the candidate
> list, and I don't care that there are extra 1's there, I decided to try the
> 1 fill, and that could be done with boxes.
>
> I saw the solution that involved boxing the diagonals and I guess I could
> have just done groups of four on the boxed diagonals. I have solved a
> couple of the problems with severe performance problems and I got on the
> forum and there was a much faster solution, and the main difference between
> my solution is that I boxed permutations of the stuff while when I got into
> the forums I found much faster solutions that used tables to create
> permutations using u/~, and in a couple of cases they got most of their
> performance boost by handling more data at once than I was. So I'm leery of
> boxing, and try not to use it, unless I am doing something like sorting line
> by line.
>
> So I wanted to do something without boxing. When I looked at the solution,
> I saw that the /. adverb didn't just restrict itself to full length
> diagonals, and that led me to making a rectangular table with 1 fills.
>
>
> On Sun, Sep 25, 2011 at 3:06 AM, bill lam <[email protected]> wrote:
>
> > No idea on the problem or forgotten.
> >
> > conjunction binds to the left so that you need brackets, eg.
> > 5&({.!.1) /. (5 5 $i. 25)
> >
> > or if you are only interested in the product, it might be
> >
> > *//. (5 5 $i. 25)
> >
>
> I need the products of groups of four, and can't find any bracketing of (4
> (*/)\)/. (5 5 $i. 25) that does not produce an error.
>
> no, the problem calls for products in groups of four
>
> >
> > Вск, 25 Сен 2011, Nick Simicich писал(а):
> > > I'm working on euler 11 from projecteuler.org. I got the answer by
> > doing
> > > something really crummy, and I decided to go back and do proper code for
> > the
> > > diagonals. The problem is to take the greatest product of four
> > consecutive
> > > numbers in a 20 by 20 array where the possibilities are rows, columns and
> > > diagonals.
> > >
> > > Rows and columns are trivial, and now that I understand that /. does not
> > > only take the longest diagonal the diagonals are not much harder.
> > >
> > > Because this is a product, I wanted to use a 1 fill.
> > >
> > > a is a 20 by 20 array of small numbers.
> > >
> > > My first attempt was to box the diagonals, and then fill them, the unbox
> > > them and then do my product on the crosswise bits, and then take the max,
> > > so
> > >
> > > >./(,4 */\ a) ,(,4 */\ |:a) ,(,4*/\"1 > 20{.!.1 L:_1 </.a),(,4*/\"1 >
> > > 20{.!.1 L:_1 </.|:a)
> > >
> > > I transpose the array to get the other diagonals, and do it again so that
> > I
> > > can do the horizontals and verticals.
> > >
> > > I used a box for the diagonals because my thought was that they were all
> > > different lengths, so they needed to be boxed. Once I fixed them to be
> > > conformant, I could unbox them.
> > >
> > > Then I looked and determined that I could get an array with the diagonals
> > on
> > > the lines as:
> > >
> > > 20&{. /.aa
> > >
> > > And this gives (the small, forum appropriate version):
> > > 5&{. /. (5 5 $i. 25)
> > > 0 0 0 0 0
> > > 1 5 0 0 0
> > > 2 6 10 0 0
> > > 3 7 11 15 0
> > > 4 8 12 16 20
> > > 9 13 17 21 0
> > > 14 18 22 0 0
> > > 19 23 0 0 0
> > > 24 0 0 0 0
> > >
> > > But because it is a product, I need a 1 fill. I am using a 1 fill with
> > take
> > > above, when I am taking from the lines individually.
> > >
> > > 5&{.!.1 /. (5 5 $i. 25)
> > > |domain error
> > > | 5&{.!.1/.(5 5$i.25)
> > >
> > > I could not, at first, figure out why the domain error was occuring.
> > Take
> > > should fix the length of the line no matter what the length of the
> > incoming
> > > line.
> > >
> > > Then I thought, suppose it is calculating a number of things to add to
> > the
> > > vector, and the second vector it tries to finesse the calculation, using
> > the
> > > same value to produce a line, and then having a domain error when that
> > value
> > > of pad produces an unsquare array. What if I change the rank of the verb
> > to
> > > try and get it, say, not to run on all of the lines produced by /. at the
> > > same time, but instead to run on each line? So I tried a few different
> > > values for the rank.
> > >
> > > (5&{.!.1)"_1 /. (5 5 $i. 25)
> > > |domain error
> > >
> > > I won't bore you by repeating this, but that theory simply didn't work. I
> > > could not get the verb to stop reporting an error.
> > >
> > > 0+/. a builds me a zero filled array that looks exactly like 20{. .
> > Can't
> > > use 1+ or a verb with a test assuming I could get it to work (usually
> > can't,
> > > I'm new to this) because there are zeros in the array that I think I have
> > to
> > > leave alone.
> > >
> > > Maybe the real problem is that the fill is not coming from where I expect
> > it
> > > to come from. But I think they come from the take verb when I do 20{.
> > > /. aand well, this is interesting:
> > >
> > > (#,5&{.) /. (5 5 $i. 25)
> > > 1 0 0 0 0 0
> > > 2 1 5 0 0 0
> > > 3 2 6 10 0 0
> > > 4 3 7 11 15 0
> > > 5 4 8 12 16 20
> > > 4 9 13 17 21 0
> > > 3 14 18 22 0 0
> > > 2 19 23 0 0 0
> > > 1 24 0 0 0 0
> > >
> > >
> > > so the lines are clearly not being padded before the verb is called.
> > >
> > > and, um-- well, I think I just don't understand things more complex, it
> > > implies that if I can derive the length I should be able to prepend
> > > (5-#L$1), instead of hash but I always get hung in anything complex.
> > >
> > > Is this a bug or a feecher? Other than boxing it, is there a way to code
> > > it? Am I just missing how to do it?
> > >
> > >
> > >
> > >
> > >
> > > --
> > > Of course I can ride in the carpool lane, officer. Jesus is my constant
> > > companion.
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> > --
> > regards,
> > ====================================================
> > GPG key 1024D/4434BAB3 2008-08-24
> > gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
>
>
>
>
> --
> Of course I can ride in the carpool lane, officer. Jesus is my constant
> companion.
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
--
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm