Wait, no, you haven't. I misread the version. I'll look into it. Henry Rich
On Thu, Feb 21, 2019, 12:42 PM 'Mike Day' via Programming < [email protected]> wrote: > Have I missed an update, then? > Thanks, > Mike > > > Sent from my iPad > > > On 21 Feb 2019, at 16:58, Henry Rich <[email protected]> wrote: > > > > The crash should be fixed in the latest released version, but I haven't > > verified that. > > > > Henry Rich > > > > On Thu, Feb 21, 2019, 5:40 AM 'Mike Day' via Programming < > > [email protected]> wrote: > > > >> Back to this thread... > >> > >> I've worked up an explicit variant, sig3, using I. and E. - fairly > >> simple-minded, > >> > >> but might be of interest. Also revisiting sig1 for comparison. sig3 is > >> not so good for > >> > >> space, but is reasonably fast for the example. > >> > >> NB. minmd =: (({.@:/:~)`(<./)@.(0-:{.@:(0&{.))) > >> minmd =: {.@:/:~ NB. this works for strings as well as numeric arrays > >> sig1 =: {.@(/:~)@:(|."0 1~) (I.@:= minmd) > >> > >> NB. rotate each occurrence of minimum pair to front > >> sig2 =: 13 : '{./:~ y |."0 1~ i#~ (=minmd) y {~ <: i =. I. y = minmd > y' > >> > >> sig3 =: 3 : 0 > >> b =. (,.~) y > >> NB. following replaces values by characters - assuming nub is small > enough! > >> NB. but it doesn't appear to save space! > >> NB. b =. (,.~) ((~.@:,) (a.{~i.) ]) y > >> 'm n' =. $y > >> bool =. m#1 > >> for_pad. }.i.<: m do. > >> 'a b' =. ({.;}.) b > >> if. bool{~<:pad do. > >> if. +/ i =. (n {.a) (+/@:E.)"1 b do. > >> bool =. 0 (pad + I.i) } bool > >> end. > >> end. > >> end. > >> bool > >> ) > >> > >> ts'~:sigb a' > >> > >> 0.000348269 6656 > >> > >> ts'~:sigi a' > >> > >> 0.000235419 6272 > >> > >> ts'~:sig3 a' > >> > >> 0.000233799 13248 > >> > >> ts'~:sig1"1 a' > >> > >> 0.000106371 7680 > >> > >> > >> Also, I can confirm that Henry's canonical shift crashes this version of > >> Jqt > >> > >> JVERSION > >> Engine: j807/j64/windows > >> Release-b: commercial/2019-01-22T18:51:16 > >> Library: 8.07.22 > >> Qt IDE: 1.7.9/5.9.6 > >> Platform: Win 64 > >> Installer: J807 install > >> InstallPath: c:/d/j807 > >> Contact: www.jsoftware.com > >> > >> Cheers, > >> > >> Mike > >> > >> > >> > >>> On 16/02/2019 17:52, [email protected] wrote: > >>> 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 > >> > >> > >> --- > >> 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 > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
