I have not followed the Python solution development. However, I would appreciate it if you could explain what I am missing in the way I went about solving the problem. My answer is 93 is under and 94 is over,
Thanks Linda -----Original Message----- From: programming-boun...@forums.jsoftware.com [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Linda Alvord Sent: Tuesday, October 07, 2014 4:34 AM To: programm...@jsoftware.com Subject: Re: [Jprogramming] Project Euler 85, Python and J This fits in nicely somewhere in the elementary school years! I hope that 93 by 93 is rhe largest rectangle that will have a number under 1 million rectangles. I would introduce these functions in a math class. It would be after they reach multiplication, f=: 13 :'(>:i.x) */>:i.y' g=: 13 :'(i.x<.y)<:/i.x>.y' all=: 13 :'+/,((x<.y) g x>.y) * (x<. y) f x >.y' A testing phase: 2 f 3 1 2 3 2 4 6 3 f 2 1 2 2 4 3 6 3 f 3 1 2 3 2 4 6 3 6 9 2 g 3 1 1 1 0 1 1 3 g 2 1 1 1 0 1 1 3 g 3 1 1 1 0 1 1 0 0 1 2 ALL 3 16 3 ALL 2 16 3 ALL 3 25 93 ALL 93 9689050 93 ALL 94 10099924 94 ALL 94 10108760 When computer science appears in elementary school, these functions could be revealed. f ([: >: [: i. [) */ [: >: [: i. ] g ([: i. <.) <:/ [: i. >. all [: +/ [: , (<. g >.) * <. f >. f=: 13 :'(>:i.x) */>:i.y' g=: 13 :'(i.x<.y)<:/i.x>.y' all=: 13 :'+/,((x<.y) g x>.y) * (x<. y) f x >.y' I don't think in the language of your question, so I can't help you much there. Linda -----Original Message----- From: programming-boun...@forums.jsoftware.com [mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Jon Hough Sent: Tuesday, October 07, 2014 12:46 AM To: programm...@jsoftware.com Subject: Re: [Jprogramming] Project Euler 85, Python and J Sorry, my line breaks got deleted in the email. Her is my Python code: 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 str(k) l1 = range(1,200) l2 = range(1,200) bestfit = 10000 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) > From: jgho...@outlook.com > To: programm...@jsoftware.com > Date: Tue, 7 Oct 2014 05:37:27 +0100 > Subject: [Jprogramming] Project Euler 85, Python and J > > 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 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm