Actuary the use of ravel and antibase is common practice to solve
certain problems in APL and isn't considered cheating. So I wouldn't
say it's "not nice" but I would definitely go for antibase instead of
a combination of floored-divide and modulus. As a bonus, a solution
based on antibase would scale to problems of any rank and not just 2d
matrices.

Have fun!
-- 
Stefano

> On 10/ott/2014, at 17:35, Sebastiano Tronto <sebastiano.tro...@gmail.com> 
> wrote:
>
> Hi,
> A dirty trick to get the job done would be to ravel the matrix ( , ), solve
> the 1d version of the problem and then get the "true" indexes with
> something like (<.@%&200 , 200&|).
> For example, if you needed to just find the max:
> (<.@%&200 , 200&|) (i. >./) , m
> where m is your matrix.
>
> I know this isn't a nice way to solve the problem, but it should work.
>
> Sebastiano
>
> 2014-10-07 6:37 GMT+02:00 Jon Hough <jgho...@outlook.com>:
>
>> 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

Reply via email to