try  primelist *,arr*

Don
On 10/10/2014 10:33 PM, Jon Hough wrote:
Using (2 ! >:) is clearly better than doing my double for-loop. I'm embarrassed 
I missed that.

The real meat of my confusion with multidimensional arrays is in not just 
finding the indices but doing something with the elements at the indices.

e.g. For a single dimension array, there could be a function to fund the primes 
less than 100.


primelist =: (I.@:(1&=)@:(1&p:)) { ]


and primelist >: i. 100


should spit out


2 3 5 ...  ...97


But what if instead of having >: i. 100

I had ( for some reason )

  arr =: 10 10 $ >: i. 100


So I have a 10 by 10 matrix of all positive ints up to 100.


primelist clearly will not work on arr. But if I want to return the list of 
primes, as a single dimensional list I'm not sure how to do that.


Or, for example, if I want to change the elements of arr to 1 if and only if 
the sum of the (i, j) indices are prime (just a random example).


In procedural python this could be quickly done with a double for-loop and a 
prime test. In J this type of problem still escapes me.



Date: Fri, 10 Oct 2014 19:35:26 -0400
From: devon...@gmail.com
To: programm...@jsoftware.com
Subject: Re: [Jprogramming] Project Euler 85, Python and J

    countRects=: */@(2 ! >:)             NB. How many pairs each of vertical
* horizontal lines
    getSizes=: ,@(>:/~) # [: ,/ ,"0/~    NB. All pairs of i. y
    idxClosest=: 4 : '(i. <./)@(x |@:- ])y'"(0 2)   NB. Index of mat y to
value x
    ({~ *2e6*&idxClosest@:(countRects"1)) getSizes >: i.200    NB. Closest
to 2e6
77 36
    ({~ *1e6*&idxClosest@:(countRects"1)) getSizes >: i.200    NB. Closest
to 1e6
63 31
    countRects"1 ] 63 31,:77 36     NB. How close is each?
999936 1999998


On Fri, Oct 10, 2014 at 1:14 PM, Linda Alvord <lindaalv...@verizon.net>
wrote:

What is the correct answerfor this problem?

Linda

-----Original Message-----
From: programming-boun...@forums.jsoftware.com
[mailto:programming-boun...@forums.jsoftware.com] On Behalf Of Stefano
Lanzavecchia
Sent: Friday, October 10, 2014 11:47 AM
To: programm...@jsoftware.com
Subject: Re: [Jprogramming] Project Euler 85, Python and J

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

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm



--
Devon McCormick, CFA
----------------------------------------------------------------------
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