Thanks!
R.E. Boss > -----Oorspronkelijk bericht----- > Van: Programming <[email protected]> > Namens Louis de Forcrand > Verzonden: zondag 17 februari 2019 13:52 > Aan: [email protected] > Onderwerp: Re: [Jprogramming] nubsieve modulo rotation > > f=: |.~ 3 : 0 > ... (explicit code here) > > is simply a hook which acts the same as > > g= |.~ t > t=: 3 : 0 > ... > > I was also very surprised to see this could be done the first time I ran into > it! > > Cheers, > Louis > > > On 17 Feb 2019, at 13:03, R.E. Boss <[email protected]> wrote: > > > > I am embarrassed to admit I don't understand the construction (|.~ 3 : 0) . > > Even worse, I cannot find where it is documented. > > Please enlighten me. > > > > > > R.E. Boss > > > > > >> -----Oorspronkelijk bericht----- > >> Van: Programming <[email protected]> > >> Namens [email protected] > >> Verzonden: zaterdag 16 februari 2019 18:53 > >> Aan: [email protected] > >> Onderwerp: Re: [Jprogramming] nubsieve modulo rotation > >> > >> I rewrote two explicit and perhaps clearer versions of my sig verb. > >> Both work on the same principle as the original, but one uses a bit > >> vector and the other uses a list of indices, and the indices are a bit > >> faster > (pun probably intended). > >> I prefer the bit vector aesthetically though. > >> > >> Both basically store the set of indices where possible > >> lexicographically minimal rotations could start (b and i in the > >> verbs). On iteration n, the starting index of rotations whose nth > >> element is not minimal among the nth elements of all possibly minimal > >> rotations are removed from the aforementioned set. The iteration > >> continues until only one possible rotation is left, and for a maximum > >> of #y times, in which case all elements of y are identical and so any > rotation will do. > >> > >> If I am not mistaken (I might be, have to hurry and go now), since > >> there are a maximum of #y iterations and each includes at most #y > >> comparisons (= <./), the number of comparisons is at worst quadratic > >> in the length of y. This happens when 1=#~.y, but most of the time this > number is much smaller. > >> > >> sigb=: (|.~ 3 : 0)"1 > >> b=. 1"0 y > >> for. y do. > >> if. 1 = +/b do. break. end. > >> b=. (= <./)&.(b&#) y > >> y=. 1|.y > >> end. > >> b i. 1 > >> ) > >> > >> sigi=: (|.~ 3 : 0)"1 > >> i=. i.#y > >> for. y do. > >> if. 1 = #i do. break. end. > >> i=. i ((= <./)@:{ # [) y > >> y=. 1|.y > >> end. > >> i > >> ) > >> > >> Cheers, > >> Louis > >> --------------------------------------------------------------------- > >> - 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
