(* +./\"1@(0&~:))
----- Original Message ----- From: Roger Hui <[email protected]> Date: Saturday, August 28, 2010 8:26 Subject: Re: [Jprogramming] Splitting an integer into its digits To: Programming forum <[email protected]> > I expect the following to be faster: > > Apply "digits" to the whole array at once, and also > apply (+!) to the result of that. But before you apply > +/"1, do something about the elements corresponding > to leading 0 digits, e.g. (* -.@:(*/\"1)@:(0&=)) . > > > > ----- Original Message ----- > From: "Sherlock, Ric" <[email protected]> > Date: Saturday, August 28, 2010 7:37 > Subject: Re: [Jprogramming] Splitting an integer into its digits > To: Programming forum <[email protected]> > > > > From: Alex Gian > > > Sent: Sunday, 29 August 2010 02:01 > > > > > > Thanks a lot for that Ric. > > > > > > I actually managed to get as far as this: > > > digits =. 10&#.inv > > > fp1 =. +! > > > spsum =. +/ @ |: @ fp1 @ digits > > > special =. = spsum > > > (#~ special)i.100000 > > > > > > which gave me 85837 correctly > > > also, > > > (#~ special)i.1000000 > > > 41086 408297 > > > gives the correct larger number in very acceptable time, the lower > > > number is incorrect because of the leading-zero prob already > > mentioned.> > > > I really hate what I had to do with the transpose to get the sum, > > > though, so I'll be studying your example rigorously. > > Seems to > > > eliminate all these probs. > > > > If you add the "0 to digits, you don't need to use the > transpose > > because +/ is only ever getting fed a list (rank 1). > > > > digits=: 10&#.^:_1"0 > > fp1=: + ! > > spsum=: +/@f...@digits > > special=: = spsum > > (#~ special) 1974 123 85837 408297 > > 85837 408297 > > > > special f. > > = +/@(+ !)@(10&#.^:_1"0) > > > > IOW a one-liner for special would be: > > special2=: = +/@(+ !)@(10&#.^:_1"0) > > (#~ special2) 1974 123 85837 408297 > > 85837 408297 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
