Here is yet another "slightly cleaner" version:

byLevel=: 4 :0
 mask=. </~i.{:$y
 reflect=. 0&< * ] -"1"1 2 x *"2 1 ]
 keep=. (0 < ^&mask"2) >&(*./"1) =&0
 weights=. currentLevel=.,:y
 while.#currentLevel =. (keep  #&(,/) ]) reflect currentLevel
   do.weights=. weights, currentLevel
 end.
)

Usage:
   A =: 2-4|6<.|(-|:)i.4 4
   A byLevel 1 1 1 1

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

Reply via email to