I got this:
   countRects 77 36x
1999998

where I got the "77 36" from this:
   ({~ idxClosest@:(countRects"1)) getSizes >: i.200
77 36


On Tue, Oct 7, 2014 at 12:15 PM, 'Pascal Jasmin' via Programming <
[email protected]> wrote:

> countRects a cool solution that just works without my complete
> understanding of it either.
>
> I'm not convinced of the getSizes range being used though:
>
> this is pretty close to 2M
>
>    4 %~ */@(, >:) 3 816x
> 2000016
>
> So I think a "triangulation" algorithm would be more general than the
> getSizes filter for >: i.2000
>
>    4 %~ */@(, >:) 1 2000x
> 2001000
>    4 %~ */@(, >:) 1 1999x
> 1999000
>
>
> ----- Original Message -----
> From: Devon McCormick <[email protected]>
> To: J-programming forum <[email protected]>
> Cc:
> Sent: Tuesday, October 7, 2014 11:30 AM
> Subject: Re: [Jprogramming] Project Euler 85, Python and J
>
> Hi -
>
> "countRects" seems like a bit of a leap.  I think I understand "4 %~"
> because you're overcounting by 4 rotations, but I don't comprehend the
> magic behind "*/@(,>:)".
>
> I see that "(,>:)" concatenates the shape to its increment, e.g. 2 3 3 4
> for the input 2 3, but what's the rationale behind this?
>
> Thanks,
>
> Devon
>
> On Tue, Oct 7, 2014 at 7:41 AM, Tikkanz <[email protected]> wrote:
>
> > Note that 200 x 200 is a bit of an overkill given 3x2 = 2x3
> > The following choses the lower triangular of a matrix of the different
> > sized rectangles to investigate.
> > getSizes=: ,@(>:/~) # [: ,/ ,"0/~
> > getSizes >: i. 5
> >
> > Given the sides of a rectangle you can count the number of rectangles as
> > follows:
> > countRects=: 4 %~ */@(, >:)
> > countRects 2 3
> >
> > Now get the index of the rectangle size with a count closest to 2million
> >
> > idxClosest=: (i. <./)@(2e6 |@:- ])
> >
> >
> > Putting it together
> >
> > */@({~ idxClosest@:(countRects"1)) getSizes >: i.200
> >
> >
> >
> > On Tue, Oct 7, 2014 at 5:37 PM, Jon Hough <[email protected]> wrote:
> >
> > > Project Euler 85: https://projecteuler.net/problem=85
> > > This problem is not really conceptually hard, but I am struggling with
> a
> > J
> > > solution.I have solved it in Python:
> > > =============================================
> > > def pe85(larg, rarg):   count = 0       llist = range(1, larg+1)
> > > rlist = range(1, rarg+1)
> > >         for l in llist:         for r in rlist:                 count
> +=
> > > l*r
> > >         return count
> > >
> > > if __name__ == "__main__":      # test for 2x3 grid, as in question.
>   k
> > > = pe85(2,3)   print "Test value: "+str(k)             l1 =
> range(1,200) #
> > > 200 lucky guess     l2 = range(1,200)       bestfit = 10000 # just a
> big
> > > number     area = 0        for i in l1:            for j in l2:
> > >          diff = abs(2000000 - pe85(i,j))                         if
> diff
> > <
> > > bestfit:                             area = i*j
> > >   bestfit = diff
> > >         print "AREA is "+str(area)
> > >
> > >
> > > ================================================The above script will
> > give
> > > the final area of the closest fit to 2 million. (The python code may
> not
> > be
> > > the best). Also I tested all possibilities up to 200x200, which was
> > chosen
> > > arbitrarily(~ish).
> > > Next my J. I go the inner calculation ok (i.e. see the function pe85
> > > above). In J I have:
> > > pe85 =: +/@:+/@:((>:@:i.@:[) *"(0 _) (>:@:i.@:]))
> > > NB. I know, too brackety. Any tips for improvement appreciated.
> > >
> > >
> > > But from here things get tricky. If I do the calculation over 200x200
> > > possibilities I end up with a big matrix, of which I have to find the
> > > closest value to 2 million, of which then I have to somehow get the
> (x,y)
> > > values of and then find the area by x*y.
> > >
> > > The main issue is getting the (x,y) from the best fit value of the
> array.
> > >
> > > i.e. If I do pe85"(0)/~ 200, I get a big array, and I know I can get
> the
> > > closest absolute value to 2 million but then I need to get the original
> > > values to multiply together to give the best fit area. Actually I have
> > > bumped into this issue many times. It is easy enough in a 1-d
> array,just
> > do:
> > > (I. somefunc ) { ])
> > >
> > > or similar to get the index. But for two indices the problem is beyond
> me
> > > at the moment. Any help appreciated.Regards,Jon
> > >
> > >
> > >
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> > >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
>
>
>
> --
> Devon McCormick, CFA
>
>
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>



-- 
Devon McCormick, CFA
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to