Ugly as hell (but my J doesn't get any better without practicing): cross =.(((1 {. 0 # ]), ]) {~ (>:*(|.+.])@(=/~))@i.@#) NB. Works for strings with replicated entries cross 'aabbcdeabcde' a a b b c c d d ee aa b b c c d d e e NB. Works for empty argument $cross '' 0 0 NB. Works for scalar argument (but it generates a matrix... should it?) cross 'a' a NB. Works for numbers cross a.i.'aabbcdeabcde' 97 0 0 0 0 0 0 0 0 0 0 97 0 97 0 0 0 0 0 0 0 0 97 0 0 0 98 0 0 0 0 0 0 98 0 0 0 0 0 98 0 0 0 0 98 0 0 0 0 0 0 0 99 0 0 99 0 0 0 0 0 0 0 0 0 100 100 0 0 0 0 0 0 0 0 0 0 101 101 0 0 0 0 0 0 0 0 0 97 0 0 97 0 0 0 0 0 0 0 98 0 0 0 0 98 0 0 0 0 0 99 0 0 0 0 0 0 99 0 0 0 100 0 0 0 0 0 0 0 0 100 0 101 0 0 0 0 0 0 0 0 0 0 101 NB. Works for boxed cross 'one';'two';'three';'four' -----T-----T-----T----┐ │one │ │ │one │ +----+-----+-----+----+ │ │two │two │ │ +----+-----+-----+----+ │ │three│three│ │ +----+-----+-----+----+ │four│ │ │four│ L----+-----+-----+-----
-- Stefano "WildHeart" Lanzavecchia - mailto:s...@apl.it [ "To know oneself, one should assert oneself." --- Albert Camus ] ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm