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
