Both this approach and Raul's appear to answer your requirement, but I'm wondering
what result you require for this slightly altered input:
   l1 =: 0 _1 0 1 2 _1 4 5 _6

If you need maximally contiguous runs,  I'd have thought this would be a preferred solution:
   0 ; _1 0 1 2 ; _1 ; 4 5 ; _6
┌─┬────────┬──┬───┬──┐
│0│_1 0 1 2│_1│4 5│_6│
└─┴────────┴──┴───┴──┘
since the run _1 0 1 2 is of length 4.

However,  both suggested methods return this
   (<;.1~ (~:_,}:)@p) l1    NB. xash
┌─┬──┬─────┬──┬───┬──┐
│0│_1│0 1 2│_1│4 5│_6│
└─┴──┴─────┴──┴───┴──┘
   p F l1    NB. RM
┌─┬──┬─────┬──┬───┬──┐
│0│_1│0 1 2│_1│4 5│_6│
└─┴──┴─────┴──┴───┴──┘

I suppose my problem is that I don't see the point of property p !

Cheers,

Mike


On 07/01/2021 09:29, xash wrote:
l =: _1 _2 0 1 2 _1 4 5 _6
p =: <&0
(<;.1~ (~:_,}:)@p) l
┌─────┬─────┬──┬───┬──┐
│_1 _2│0 1 2│_1│4 5│_6│
└─────┴─────┴──┴───┴──┘


On Thu Jan 7, 2021 at 10:12 AM CET, Justin Paston-Cooper wrote:
I am sure this has been asked and formulated somewhere else. I don't
know what the name of it is.

Let G be a set of groups. Given a list `l =: l_1 ... l_2` and a
property `p` such that `p l_i` is in G, I would like a function `f`
which partitions `l` into the successive maximally contiguous runs
`r_1 ... r_k` such that for each `i`, `r_i` is a substring of `l`,
there exists one `g` in G such that all `p r_ij = g` and the
concatenation of `r_1 ... r_k` is equal to the original `l`.

Examples:

l = _1 _2 0 1 2 _1 4 5 _6`
p = <&0

f l = _1 _2 ; 0 1 2 ; _1 ; 4 5 ; _6

;. gets close, but one would need to specify where groups end possibly
by comparing successive pairs of applications of `p`. Those positions
would somehow need to be indicated as frets.

/. gets close, but concatenates separate runs within the same group.

Is this trivial, or should I write my own code for this?
----------------------------------------------------------------------
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 Avast antivirus software.
https://www.avast.com/antivirus

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

Reply via email to