oc2 =: +/@:="0 1"1

When I encounter a problem like this in real life, I always ask 'how fast does this program have to be?'  I think when you post the question you should indicate whether the program needs to run on large arguments.  Ric's oc is much faster on large arguments.

Henry Rich

On 11/4/2019 2:53 AM, Ric Sherlock wrote:
Here's one option...

    ]m=: 5 6  >:@:?@$ 6
2 3 6 3 6 2
6 1 3 3 6 4
2 1 5 2 4 6
1 2 4 6 3 1
4 1 6 6 4 6

   oc=: <:@([: #/.~ ,)"1

    (>:i.6) oc m
0 2 2 0 0 2
1 0 2 1 0 2
1 2 0 1 1 1
2 1 1 1 0 1
1 0 0 2 0 3

On Mon, 4 Nov 2019, 20:07 Skip Cave, <[email protected]> wrote:

NB. Generate multiple sets of 6 random integers from 1 to 6:

]m=:5 6$>:?30#6

2 2 1 6 6 5

6 5 6 6 6 6

3 4 3 3 5 2

1 2 6 4 3 1

5 6 1 3 2 4


NB. Use dyadic function oc (occurrence count) to calculate the occurrence
counts of

NB. the integers in the right (y) argument, using the reference integer set
in the left {x} argument:


(>:i.6) oc m

1 2 0 0 1 2

0 0 0 0 1 5

0 1 3 1 0 1

2 1 1 1 0 1

1 1 1 1 1 1


NB. If an integer in the x noun is not in the y noun, the result of oc will
be zero in that place.

NB. If there is an integer in the y noun that is not in the x noun, it is
ignored.

NB. What is oc? The verb 'oc' should allow for any length reference set (x
argument),

NB. any width right argument, and any number of items (rows)


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

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


--
This email has been checked for viruses by AVG.
https://www.avg.com

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

Reply via email to