(flashing I-am-bad-at-J disclaimer)

Consider:

   ]a=.i.20
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   _3[\ a
 0  1  2
 3  4  5
 6  7  8
 9 10 11
12 13 14
15 16 17
18 19  0

every third element's right there in the first column.

thus:

   th =: 1 : ',(u@:{."1 ,. }."1) (-x)[\y'

which reshapes the list, applies the verb to the first column, then
stitches the result of that to the other columns, then returns a list.

   3 (_"_) th a
_ 1 2 _ 4 5 _ 7 8 _ 10 11 _ 13 14 _ 16 17 _ 19 0
   4 (_"_) th a
_ 1 2 3 _ 5 6 7 _ 9 10 11 _ 13 14 15 _ 17 18 19
   5 (_"_) th a
_ 1 2 3 4 _ 6 7 8 9 _ 11 12 13 14 _ 16 17 18 19

The resulting list can be padded with zeroes, but since the passed verb
will never apply to those, you can just strip them back off:

   th =: 1 : '(#y) $ ,(u@:{."1 ,. }."1) (-x)[\y'
   19 (_"_) th a
_ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 _
   NB. ^^^not still padded with 18 zeroes

On Wed, 2020-01-15 at 20:30 -0600, Skip Cave wrote:
> How does one apply a monadic verb repetitively to every nth element
> of a
> one1-dimentional array?
> 
> For example:
> 
>    ]a=.i.20
> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
>   n=.3
> 
> NB. Design u to increment every nth integer in a:
> 
> 
>   u=.??:<??
>   n u a
> 1 1 2 4 4 5 7 7 8 10 10 11 13 13 14 16 16 17 19 19
> -------------------------------------------------------------------
> ---
> 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