Interesting... I always wondered if "special code" always works or justs sometimes in specific situations? If the special code always works when encountered, then [:/:/: sould be equivalent to /:@/: as they are otherewise equivalent.
Linda -----Original Message----- From: Programming [mailto:[email protected]] On Behalf Of Mike Day Sent: Wednesday, January 20, 2016 7:50 AM To: [email protected] Subject: Re: [Jprogramming] A Different Less? I wasn't advocating /:/: . I prefer using @ but the 13 : ' .... ' had produced [:/:/: . Conicidentally, Linda appears to favour the [:u v idiom to u@v . So, for Linda's benefit, does [:/:/: not also benefit from special code? Mike On 20/01/2016 12:29, Henry Rich wrote: > Note: /:@/: y is better than /: /: y (special code) > > Henry Rich > > On 1/20/2016 5:45 AM, Mike Day wrote: >> Maybe simpler but it requires evaluation of /:/:y twice, whereas >> Raul's oc manages to make rank the right hand argument to (] - {) . >> >> This tacitisation might be what you're looking for: >> 13 :'r-(i.~ y){ r =./:/:y' >> >> i.~ (] - {) [: /: /: >> >> >> It reproduces oc except for using [: rather than @ ! >> >> Mike >> >> On 20/01/2016 10:27, Linda A Alvord wrote: >>> A simpler f: >>> >>> f=: 13 :'(/:/:y)-(i.~ y){/:/:y' >>> f >>> ([: /: /:) - i.~ { [: /: /: >>> >>> Linda >>> -----Original Message----- >>> From: Programming [mailto:[email protected]] >>> On Behalf Of Linda A Alvord >>> Sent: Wednesday, January 20, 2016 3:15 AM >>> To: [email protected] >>> Subject: Re: [Jprogramming] A Different Less? >>> >>> Here's another way to write the code that so far is the fastest. How >>> does it compare? >>> >>> A=:'abcabbe' >>> B=:'babe' >>> f=: 13 :'(/:/:y)-(y i. y){/:/:y' >>> g=: 13 :'((f x)>: (( ~.y)i.x){(#/.~y),0: y)#x' >>> A g B >>> cab >>> f >>> ([: /: /:) - i.~ { [: /: /: >>> g >>> [ #~ ([: f [) >: ([ i.~ [: ~. ]) { ([: #/.~ ]) , [: 0: ] >>> >>> Linda >>> >>> -----Original Message----- >>> From: Programming [mailto:[email protected]] >>> On Behalf Of Raul Miller >>> Sent: Monday, January 18, 2016 12:51 PM >>> To: Programming forum >>> Subject: Re: [Jprogramming] A Different Less? >>> >>> Hmm... >>> >>> A bugfixed version of my previous implementation (it broke when x -. >>> y was empty) performs approximately the same, for me: >>> >>> cle=: ,~ #~ i.@#@,~ e. [: ; (2*#/.~@]) (}.&.>~ #@[ {. ])~ (]i.,~) >>> </. i.@#@,~ >>> >>> I say approximately, because timing variations mean that when I test >>> on the same data, sometimes it's faster and sometimes it's slower >>> than >>> >>> oc=: i.~ (] - {) /:@/: >>> cless =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@] >>> >>> That said, Boss's implementation is clearly more concise... >>> >>> Thanks, >>> >>> -- >>> Raul >>> >>> >>> >>> On Mon, Jan 18, 2016 at 12:17 PM, Marshall Lochbaum >>> <[email protected]> wrote: >>>> That's a very cool solution, and much quicker than the one based on >>>> progressive index-of. Instead of taking the occurrence count of >>>> both x and y, it just takes the count for x and compares it to the >>>> total number of occurrences in y, given by (#/.~). >>>> >>>> Here's a comparison of the two methods. It turns out in the version >>>> based on progressive index-of, the desired verb can be obtained >>>> just from replacing (i.) with (-.) and then using the first column >>>> of the result to select from x, so I've used that version. >>>> >>>> NB. Shared verb for occurrence count >>>> oc=: i.~ (] - {) /:@/: >>>> NB. Simplified form of what Roger and I posted >>>> cless1 =: [ {~ [: {."1 #@[ ({. -.&(,.oc) }.) [ i. , >>>> NB. Tacitized R.E. Boss solution >>>> cless2 =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@] >>>> >>>> NB. test data >>>> 'a b' =. 500 ({.;~}.) +&(1e5 ?@$ 26)&.(a.&i.) 'a' >>>> 10 (6!:2) 'a cless1 b' >>>> 0.0178952 >>>> 10 (6!:2) 'a cless2 b' >>>> 0.0063745 >>>> a (cless1 -: cless2) b >>>> 1 >>>> >>>> To summarize, here's the fastest solution so far: >>>> oc=: i.~ (] - {) /:@/: >>>> cless =: [ #~ oc@:[ >: (i.~~.) { (#/.~,0:)@] >>>> >>>> Marshall >>>> >>>> On Mon, Jan 18, 2016 at 03:49:46PM +0000, R.E. Boss wrote: >>>>> I'm getting old, but still remember my solution, improved by Hui: >>>>> >>>>> http://www.jsoftware.com/pipermail/general/2004-May/017503.html >>>>> >>>>> 'abcabbe' strikeb2 'babe' >>>>> cab >>>>> >>>>> Curious how it performs compared to the other solutions. >>>>> >>>>> >>>>> R.E. Boss >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: Programming >>>>>> [mailto:[email protected]] >>>>>> On Behalf Of June Kim (???) >>>>>> Sent: maandag 18 januari 2016 5:19 >>>>>> To: Programming forum <[email protected]> >>>>>> Subject: [Jprogramming] A Different Less? >>>>>> >>>>>> Hello >>>>>> >>>>>> I am looking for a verb(cless) that does something similar to >>>>>> Less(-.) but counting the elimination, for example: >>>>>> >>>>>> 'abcabbe' -. 'abbe' >>>>>> >>>>>> c >>>>>> >>>>>> 'abcabbe' cless 'babe' NB. get rid of y letters counting the >>>>>> occurrences >>>>>> >>>>>> 'cab' >>>>>> >>>>>> >>>>>> It is easier to define such a verb recursively: 'abcabbe' cless >>>>>> 'babe' >>>>>> equald to 'e' cless~ 'b' cless~ 'a' cless~ 'b' cless~ 'abcabbe' >>>>>> >>>>>> >>>>>> I think recursive definition isn't a usual J-ic approach. >>>>>> >>>>>> >>>>>> How would you implement such a verb elegantly(with which I mean >>>>>> short)? >>>>>> >>>>>> >>>>>> June >>>>>> ----------------------------------------------------------------- >>>>>> -- >>>>>> --- 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 >> >> >> --- >> This email has been checked for viruses by Avast antivirus software. >> https://www.avast.com/antivirus >> >> --------------------------------------------------------------------- >> - For information about J forums see >> http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
