Plus a shade of elegance

~.,((1+2*=i.4)#"1 /])&.(10&#.inv) 1e3+i.9e3


R.E. Boss


-----Original Message-----
From: Programming <[email protected]> On Behalf Of Raul 
Miller
Sent: zondag 4 juli 2021 15:10
To: Programming forum <[email protected]>
Subject: Re: [Jprogramming] Cut

Jacobs' approach could also survive a bit of golf:

   $~.,10#.(1+2*=i.4)#"1/10#.inv 1e3+i.9e3
33219

Thanks,

-- 
Raul


On Sun, Jul 4, 2021 at 6:09 AM R.E. Boss <[email protected]> wrote:
>
>    ts 'ssd3 0'                  NB. Jacobs
> 0.0049295 4718752
>    $ ssd3 0
> 33219
>
>    ts '1e5+I.+./(3#"1":i.10 1) +./@E."1/  ":1e5+i.9e5 1'        NB. Miller
> 0.3565249 58725056
>   $ 1e5+I.+./(3#"1":i.10 1) +./@E."1/  ":1e5+i.9e5 1
> 33219
>
>    ts 'sn #~ 1 e."(1) 3 #@~.\"1] sn'            NB. Boss
> 0.5836545 34605056
>    $ sn #~ 1 e."(1) 3 #@~.\"1] sn
> 33219 6
>
>    ts '$(#~ triple"1) sn'                       NB. Fondren
> 0.7807501 3147712
>    $ (#~ triple"1) sn
> 33219 6
>
> Jacobs' solution is by far the fastest, almost 200 times the solution of 
> Fondren, which is the thinnest.
> No need for D
> Nice to see the different approaches.
>
>
> R.E. Boss
>
>
> -----Original Message-----
> From: Programming <[email protected]> On Behalf Of 
> 'Mike Day' via Programming
> Sent: zondag 4 juli 2021 10:50
> To: [email protected]
> Subject: Re: [Jprogramming] Cut
>
> ... prepend ...,  thanks to iPad spell correction!
> M
>
> Sent from my iPad
>
> > On 4 Jul 2021, at 09:24, Mike Day <[email protected]> wrote:
> >
> > That’s what I was thinking too,  or even take all 3-digit numbers & insert, 
> > pretend, append triples...
> > again, it’s better if you’re happy with quads etc.
> >
> > Cheers,
> >
> > Mike
> >
> > Sent from my iPad
> >
> >> On 4 Jul 2021, at 08:50, Jan-Pieter Jacobs <[email protected]> 
> >> wrote:
> >>
> >> Not using cut here, but I took a generative approach:
> >>
> >> ssd3=: 10#. [:~.[:,/(1 1 1 3 |."0 1~ i. 4) #"1/ (4#10)#:
> >> 1000+i.@9000"_
> >>
> >> It basically starts from all 4 digit numbers, repeats each digit in
> >> turn, then takes them all together and nubs it.
> >> I guess it's fine if your definition considers 3 or more repetitions
> >> as being fine.
> >>
> >> I didn't double check all, but a quick random check seems to confirm
> >> the
> >> outcome:
> >>
> >>   ({~ 20 ?@$ #) ssd3 0
> >> 333975 956664 529777 947772 886661 811175 666289 622212 858777 637773
> >> 843999 488844 506662 267779 577728 111463 418444 861119 916333 722214
> >>
> >> and it seems to run reasonably fast even on my phone:
> >>
> >>   30 timex 'ssd3 0'
> >> 0.020757
> >>
> >> Best regards,
> >>
> >> Jan-Pieter
> >>
> >>> On Sun, Jul 4, 2021, 05:53 Raul Miller <[email protected]> wrote:
> >>>
> >>> Oops, I should have replace i.9 1 with i.10 1
> >>>
> >>>  $1e5+I.+./(3#"1":i.10 1) +./@E."1/ ":1e5+i.9e5 1
> >>> 33219
> >>>
> >>> Sorry about that...
> >>>
> >>> --
> >>> Raul
> >>>
> >>>> On Sat, Jul 3, 2021 at 11:51 PM Raul Miller <[email protected]> 
> >>>> wrote:
> >>>>
> >>>> You did not include a definition for triple here, and I have no way
> >>>> of reproducing your result.
> >>>>
> >>>> This is a bit slower to execute (0.37 seconds on my laptop), but
> >>>> faster to implement:
> >>>>
> >>>>   $1e5+I.+./(3#"1":i.9 1) +./@E."1/ ":1e5+i.9e5 1
> >>>> 29816
> >>>>   (12345+i.10){1e5+I.+./(3#"1":i.9 1) +./@E."1/ ":1e5+i.9e5 1
> >>>> 444993 444994 444995 444996 444997 444998 444999 445000 445111
> >>>> 445222
> >>>>
> >>>> --
> >>>> Raul
> >>>>
> >>>> On Sat, Jul 3, 2021 at 7:59 PM Julian Fondren
> >>>> <[email protected]>
> >>> wrote:
> >>>>>
> >>>>> On Saturday, July 3rd, 2021 at 6:50 PM, Julian Fondren <
> >>> [email protected]> wrote:
> >>>>>> That takes about 80x as long as the attached method using the FFI
> >>>>>> and a quick library in D.
> >>>>>
> >>>>> That attachment got stripped? Well, it's nothing special.
> >>>>>
> >>>>> extern(C) void triples(int* xs, int len) @nogc {
> >>>>>    foreach (i; 0 .. len)
> >>>>>        xs[i] = triple(xs[i]);
> >>>>> }
> >>>>>
> >>>>>   triplesd =: './libtriple.so triples n *i i'&cd
> >>>>>   triples =: [: triplesd (; #)
> >>>>>   triples 123334 122344 121212 111222 112122 555432
> >>>>> +-+-----------+-+
> >>>>> |0|1 0 0 1 0 1|6|
> >>>>> +-+-----------+-+
> >>>>>   $(#~ triple"1) sn
> >>>>> 33219 6
> >>>>>   $(#~ 1 {:: triples) n
> >>>>> 33219
> >>>>>   30 timex '$(#~ triple"1) sn'
> >>>>> 0.869076
> >>>>>   30 timex '$(#~ 1 {:: triples) n'
> >>>>> 0.0100672
> >>>>>
> >>>>> ------------------------------------------------------------------
> >>>>> ---- 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