diamond=: r&.|:@ (r=.],}.@|.)@: (|."1)@ diag
({~ diam...@#) '*abcdef'
*****a*****
****b*b****
***c***c***
**d*****d**
*e*******e*
f*********f
*e*******e*
**d*****d**
***c***c***
****b*b****
*****a*****
R.E. Boss
> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens R.E. Boss
> Verzonden: vrijdag 24 april 2009 19:26
> Aan: 'Programming forum'
> Onderwerp: Re: [Jprogramming] diagonal arrays
>
> 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
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm