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

Reply via email to