First, a few caveats: - I didn't read the original question of the problem as stated on Project Euler
- The J code is a essentially mechanical transliteration of your Python code - It's also effectively untested - If you try it on your end, and it appears useful, I can write a detailed explanation of it later today (if/when I do, I suspect the only part you'll find surprising is the idiom ($ #: ,); the rest of the code arises from simple substitution of J's implicit looping structures for Python's explicit loops, which is the main attraction of J anyway) If all that seems a little worrisome, maybe I can allay your fears by telling you that all the caveats arise from the fact that I just woke up and picked up my phone, and have composed and played with both the J code and this email from a completely horizontal position*. pe85 =: [: +/@:, */&:>:&:i.&:>: 2e6 ($@:] #: (i.<./)@:|@:(-,)) pe85"0/~ 1+ i. 200 34 75 -Dan * In other words: I love the future! (And the J phone app.) Please excuse typos; sent from a phone. > On Oct 7, 2014, at 12:46 AM, Jon Hough <jgho...@outlook.com> wrote: > > 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