The point is well-made, Roger. SP=: ' ' b2o=: }.@((<SP) ;@,. ]) b2q=: }:@((<SP) ;@,.~ ])
x=: (1e6 ?@$ 20) $&.> 'x' $ b2o x 10497510 timer 'b2o x' 0.189877 timer 'b2q x' 0.189789 Counter-intuitive, when I first saw it. But only to be expected, when I thought it through. s=: 1e7 $ 'x' timer '}. s' 0.0148418 timer '}: s' 0.014695 Dropping a char off the end of a string is apt to be cheaper than dropping it off the beginning, because chars will probably need to be shifted across word boundaries. On my Mac there's not a lot of difference in speed (which varies, no doubt due to the varying memory chunks available to malloc). But there is a difference, and it's reproducible. On Fri, Sep 7, 2012 at 6:00 AM, Roger Hui <[email protected]> wrote: > SP=: ' ' > b2o=: }.@((<SP) ;@,. ]) > b2q=: }:@((<SP) ;@,.~ ]) > > x=: (1e6 ?@$ 20) $&.> 'x' > > (b2o -: b2q) x > 1 > > timer 'b2o x' > 0.388007 > timer 'b2q x' > 0.262082 > > > > On Thu, Sep 6, 2012 at 4:07 PM, Ian Clark <[email protected]> wrote: > >> Quite right, Raul. And strings containing newlines do matter to me. A lot. >> >> I confess I only threw in bpv as a bit of a joke. It relies on 5!:5 >> converting boxed z to... >> <;._1 ' alpha bravo charlie' >> which it doesn't always. In fact, it returns your example without change >> ... >> >> z123=: '1';'2';'3' >> 5!:5 <'z123' >> '1';'2';'3' >> >> So I fear bpv doesn't merit close attention. >> >> (I suspect ;:inv will eventually let me down too, but I haven't fooled it >> yet!) >> >> b2o and its sister b2f do matter, however, as I propose to put serious >> weight on them, as g.p. utilities. >> >> b2o=: }.@((<SP) ;@,. ]) >> b2f=: }.@((<LF) ;@,. ]) >> >> so I'd be grateful to be notified of anyone making them misbehave. >> >> Possible gray areas to investigate: use of i{a. where i>127, utf-8, >> boxed scalars, strings with CRLF, 0{a. and other subasciis, uses of a: >> , etc, etc. >> >> On Thu, Sep 6, 2012 at 11:43 PM, Raul Miller <[email protected]> >> wrote: >> > Note that bpv would also have problems with boxed strings containing >> > spaces, and even worse problems with boxed strings containing >> > newlines. (It's not clear, though, if strings containing newlines >> > matter to you.) >> > >> > -- >> > Raul >> > >> > On Thu, Sep 6, 2012 at 6:39 PM, Ian Clark <[email protected]> wrote: >> >> Right you are. >> >> >> >> What I really want (but haven't said) is the fastest versions of b2o >> >> (boxed-to-open-string) and b2f (boxed-to-LF-separated-string), where >> >> b2f is b2o with ' ' (-:SP) replaced with LF. >> >> >> >> I think I've got them now, thanks to everyone. >> >> >> >> BTW solutions involving deb aren't general enough, esp for b2f, where >> >> the boxed strings may validly contain multiple spaces. >> >> >> >> On Thu, Sep 6, 2012 at 11:32 PM, Raul Miller <[email protected]> >> wrote: >> >>> I prefer >> >>> ;:inv z >> >>> >> >>> But note that >> >>> >> >>> deb,' ',.>z >> >>> >> >>> would work. (J6 users need require'strings' before this can work.) >> >>> >> >>> FYI, >> >>> >> >>> -- >> >>> Raul >> >>> >> >>> On Thu, Sep 6, 2012 at 6:21 PM, Ian Clark <[email protected]> >> wrote: >> >>>> Yes, but we need a string. >> >>>> You can ravel the 2D array to get a string, viz: >> >>>> ,> z >> >>>> but it gives you a varying number (0 or more) of separating spaces. >> >>>> >> >>>> On Thu, Sep 6, 2012 at 10:50 PM, km <[email protected]> wrote: >> >>>>> > 'alpha';'bravo';'charlie' >> >>>>> alpha >> >>>>> bravo >> >>>>> charlie >> >>>>> >> >>>>> I'm resending because the echo from Jsoftware to my iPad was >> incorrect. Hope this one shows my solution was to open the list of boxes. >> >>>>> >> >>>>> Sent from my iPad >> >>>>> >> >>>>> >> >>>>> On Sep 6, 2012, at 4:32 PM, km <[email protected]> wrote: >> >>>>> >> >>>>>>> 'alpha';'bravo';'charlie' >> >>>>>> alpha >> >>>>>> bravo >> >>>>>> charlie >> >>>>>> >> >>>>>> (shape 3 7) >> >>>>>> >> >>>>>> Sent from my iPad >> >>>>>> >> >>>>>> >> >>>>>> On Sep 6, 2012, at 11:38 AM, Ian Clark <[email protected]> >> wrote: >> >>>>>> >> >>>>>>> Kindergarten class... >> >>>>>>> >> >>>>>>> I have a list of boxed literals... >> >>>>>>> z=: 'alpha' ; 'bravo' ; 'charlie' >> >>>>>>> >> >>>>>>> I want to flatten it to a literal, but with spaces between. >> (Variant: >> >>>>>>> --with LF's). >> >>>>>>> >> >>>>>>> Raze (;) does indeed flatten the list... >> >>>>>>> ;z >> >>>>>>> alphabravocharlie >> >>>>>>> >> >>>>>>> There's got to be a really neat extended Raze which includes >> >>>>>>> separators. But the fastest I've been able to come up with is: >> >>>>>>> >> >>>>>>> b2o=: }.@((<' ') ;@,. ]) >> >>>>>>> b2o z >> >>>>>>> alpha bravo charlie >> >>>>>>> >> >>>>>>> Any advances? >> >>>>>>> >> ---------------------------------------------------------------------- >> >>>>>>> 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 >> >>>> ---------------------------------------------------------------------- >> >>>> 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 >> > ---------------------------------------------------------------------- >> > 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 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
