Я согласен, что /.
(Ключ) - это лучший общий метод применения глаголов к группам в J. Альтернативой в этом случае, когда нам нужно сгруппировать одинаковые последовательные числа, является двоичный ;.
(Cut):
1 1 0 0 1 0 1 <(;.1) 3 1 1 1 2 2 3
┌─┬─────┬───┬─┐
│3│1 1 1│2 2│3│
└─┴─────┴───┴─┘
Мы можем сформировать лады для использования в качестве левого аргумента следующим образом:
1 , 2 ~:/\ 3 1 1 1 2 2 3 NB. inserts ~: in the running sets of 2 numbers
1 1 0 0 1 0 1
Соединение двух вместе:
(] <;.1~ 1 , 2 ~:/\ ]) 3 1 1 1 2 2 3
┌─┬─────┬───┬─┐
│3│1 1 1│2 2│3│
└─┴─────┴───┴─┘
Использованиетот же механизм, что был предложен ранее:
,@(] (# , {.);.1~ 1 , 2 ~:/\ ]) 3 1 1 1 2 2 3
1 3 3 1 2 2 1 3
Если вы ищете красивую J-реализацию последовательности «посмотри и скажи», я бы предложил тот, что в Rosetta Code :
las=: ,@((# , {.);.1~ 1 , 2 ~:/\ ])&.(10x&#.inv)@]^:(1+i.@[)
5 las 1 NB. left arg is sequence length, right arg is starting number
11 21 1211 111221 312211