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

Reply via email to