With

   diag 7
1 0 0 0 0 0
0 2 0 0 0 0
0 0 3 0 0 0
0 0 0 4 0 0
0 0 0 0 5 0
0 0 0 0 0 6

one could have a fill = first item, also in the upper triangle:

   ({~ d...@#) '*abcdef' 
a*****
*b****
**c***
***d**
****e*
*****f

diag=: {.~&....@}.@i.


R.E. Boss


> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens Gilles Kirouac
> Verzonden: donderdag 23 april 2009 17:43
> Aan: Programming forum
> Onderwerp: Re: [Jprogramming] diagonal arrays
> 
> 
>   I just read this thread of last October.
> 
>   The following phrase based on Take is type independent, accepts
> duplicates and fill elements. It does not "manipulate" data with
> * or /: or move it around with $ . It also handles an empty argument.
> Concise enough? a matter of compromise.
> 
>    diagonal =: ( {."_1~ -@:>:@:i.@:# )
> 
>    diagonal  99 1x1 0 _1j1 99
> 99       0 0    0  0
>  0 2.71828 0    0  0
>  0       0 0    0  0
>  0       0 0 _1j1  0
>  0       0 0    0 99
> 
>    <diagonal 'a b c d '  NB. suitable for text-diamond 2009/04/17
> +--------+
> |a       |
> |        |
> |  b     |
> |        |
> |    c   |
> |        |
> |      d |
> |        |
> +--------+
> 
>    diagonal (<s: ' tra'),<"0] 99 1x1 0 _1j1 99
> +----+--+-------+-+----+--+
> |`tra|  |       | |    |  |
> +----+--+-------+-+----+--+
> |    |99|       | |    |  |
> +----+--+-------+-+----+--+
> |    |  |2.71828| |    |  |
> +----+--+-------+-+----+--+
> |    |  |       |0|    |  |
> +----+--+-------+-+----+--+
> |    |  |       | |_1j1|  |
> +----+--+-------+-+----+--+
> |    |  |       | |    |99|
> +----+--+-------+-+----+--+
> 
>    diagonal a:,3#<+`-
> ++-----+-----+-----+
> ||     |     |     |
> ++-----+-----+-----+
> ||+-+-+|     |     |
> |||+|-||     |     |
> ||+-+-+|     |     |
> ++-----+-----+-----+
> ||     |+-+-+|     |
> ||     ||+|-||     |
> ||     |+-+-+|     |
> ++-----+-----+-----+
> ||     |     |+-+-+|
> ||     |     ||+|-||
> ||     |     |+-+-+|
> ++-----+-----+-----+
> 
>    $diagonal ''
> 0 0
> 
>   The lower triangle can be filled with a constant fill atom
> (type dependent):
> 
>    ( {.!.'.'"_1~ -@:>:@:i.@:# )'abcdef'
> a
> .b
> ..c
> ...d
> ....e
> .....f
>    or with a variable fill atom (but not tacitly in this form I think):
>    '*'( 4 : '(->:i.# y) {.!.x "_1 y' ) 'abcdef'
> a
> *b
> **c
> ***d
> ****e
> *****f
> 
>  ~ Gilles
> 
> ---------- Original Message -----------
> From: "Raul Miller" <[email protected]>
> To: "Programming forum" <[email protected]>
> Sent: Sat, 11 Oct 2008 14:40:18 -0400
> Subject: [Jprogramming] diagonal arrays
> 
> > Given a vector, put it on the diagonal of an array:
> >
> >    (<0 1)&|:inv 2 7 9 20
> > |index error
> >    (+/ .*(e.(<0 1 2 )&|:)@i.@(3##)) 2 7 9 20
> > 2 0 0  0
> > 0 7 0  0
> > 0 0 9  0
> > 0 0 0 20
> >    (, $~ 2##)@(,"0 1*&0)2 7 9 20
> > 2 0 0  0
> > 0 7 0  0
> > 0 0 9  0
> > 0 0 0 20
> >
> > Are there more concise approaches, that work?
> >
> > Thanks,
> >
> > --
> > Raul
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ------- End of Original Message -------
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

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

Reply via email to