Nice solution.
The original post had a question which I interpret as "How do I find the
index list of the largest number in a multidimensional array?"
($ #: (i. >./)@:,) array
($ #: (i. >./)@:,) 3 1 4 1 5 9 6
5
($ #: (i. >./)@:,) 3 3 $ 0 0 0 9 0 0 0 0 0
1 0
Henry Rich
On 10/7/2014 7:41 AM, Tikkanz 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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm