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