To answer Jon's last question, if "nr" is my matrix of results from
"countRects", then this gives me the index of the lowest (closest to 2e6)
in the raveled matrix:
   (3 : '(] i. <./) ,y') 2e6(-|)nr
499

If we think of the indexes of a table as being a base ($table) number, we
can decode the vector index into the table co-ordinates this way:
   ($nr) #: (3 : '(] i. <./) ,y') 2e6(-|)nr
19 24

Assembling this using my "13 : " crutch to give a tacit answer:
   13 : '($y) #: ([: (] i. <./) ,) y'
$ #: [: (] i. <./) ,

Finally, testing it:
   ($ #: [: (] i. <./) ,) 2e6(-|)nr
19 24


On Tue, Oct 7, 2014 at 11:30 AM, Devon McCormick <devon...@gmail.com> wrote:

> 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 <tikk...@gmail.com> 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 <jgho...@outlook.com> 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
>
>


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

Reply via email to