To Linda, The question was to find the closest number of rectangles to 2 million, not 1 million. But for one million, I am not sure you answer is correct. I changed my Python code to test for 1 million and got the values to be 31 and 63, and the number of rectangles made from a rectangle of sides 31 x 63 is 999936.
I think the verb "all" is under-counting, as 2 all 3 should be 18, not 16. > From: lindaalv...@verizon.net > To: programm...@jsoftware.com > Date: Sat, 11 Oct 2014 02:28:18 -0400 > Subject: Re: [Jprogramming] Project Euler 85, Python and J > > 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 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm