Here's a version that is a bit cleaner:

byLevel=: 3 :0
  'w A maxLevel'=. y
  weights=. currentLevel=.,:w
  mask=. -. +./\ =i.{:$w
  reflect=. 0&< * ] -"1"1 2 A *"2 1 ]
  keep=. (0 < ^&mask"2) >&(*./"1) =&0
  for.i.maxLevel do.
    currentLevel=. (keep  #&(,/) ]) reflect currentLevel
    weights=. weights, currentLevel
  end.
)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to