@ Raul I'll pm you a script which best conveys what I'm driving at.
It's a little too long to embed in a Chat post. Though I have seen longer posts…(!) Maybe it will make a wiki essay if it does the job for you. On Mon, 21 Mar 2022 at 05:45, Raul Miller <[email protected]> wrote: > Hmm... > > https://en.wikipedia.org/wiki/Lehmer_code#Encoding_and_decoding > > lehmercode=: ({., $:^:(1<#@])@(}. - }. > {.))"1 > lehmerdecode=: ([,]+<:)/"1 > > lehmercode 1 5 0 6 3 4 2 > 1 4 0 3 1 1 0 > lehmerdecode 1 4 0 3 1 1 0 > 1 5 0 6 3 4 2 > > lehmercode (A.&i.~ !)3 > 0 0 0 > 0 1 0 > 1 0 0 > 1 1 0 > 2 0 0 > 2 1 0 > > And, > (1+i.-3) #. lehmercode (A.&i.~ !)3 > 0 1 2 3 4 5 > > Or, it looks like A. organizes its results in "ascending lehmercode order". > > So, I guess you are saying that to compute the A. left argument for a > given permutation, we could use: > > perm2A=: (1 + i.@-@#) #. lehmercode > > Testing that, it seems to work: > > 1299721 A. i.10 > 3 6 1 9 2 0 4 5 8 7 > perm2A 3 6 1 9 2 0 4 5 8 7 > 1299721 > > I was lost on this issue until you started dropping hints here. > > But... that's what the A. monad already does: > > A. 3 6 1 9 2 0 4 5 8 7 > 1299721 > > So I guess I am still feeling a bit lost. > > Any more hints you can throw out might jog my brain into gear... > > Thanks, > > -- > Raul > > On Mon, Mar 21, 2022 at 12:31 AM Ian Clark <[email protected]> wrote: > > > > Today I discovered from my archives that I'd revisited my old 1970 work > in > > 2018 and got much further with it than I recall. The code I wrote back > then > > has verbs which convert between (A.) and my 1970 treatment, as well as > > dissecting my algorithm in an explainable way, which doesn't invoke too > > much fancy group theory. > > > > It'll take me a few days to decipher what I did back then and compare it > > with the Wikipedia articles and Norman Thomson's Perming and Combing > > article in "Fifty Shades". I want to convince myself that I've simply > > re-invented the Lehmer wheel, in which case I'll cheerfully abandon my > > approach in favor of published descriptions based on Lehmer codes. I'll > > also consider if your (A.&i.&.|.~ !) sheds light on the problem of an > > efficient J implementation. The pattern it generates doesn't ring a bell > > with me, I fear. > > > > On Sun, 20 Mar 2022 at 23:19, Raul Miller <[email protected]> wrote: > > > > > After thinking about this, I am wondering whether this would match > > > your concept of Lehmer codes? > > > > > > (A.&i.&.|.~ !) 4 > > > 3 2 1 0 > > > 3 2 0 1 > > > 3 1 2 0 > > > 3 1 0 2 > > > 3 0 2 1 > > > 3 0 1 2 > > > 2 3 1 0 > > > 2 3 0 1 > > > 2 1 3 0 > > > 2 1 0 3 > > > 2 0 3 1 > > > 2 0 1 3 > > > 1 3 2 0 > > > 1 3 0 2 > > > 1 2 3 0 > > > 1 2 0 3 > > > 1 0 3 2 > > > 1 0 2 3 > > > 0 3 2 1 > > > 0 3 1 2 > > > 0 2 3 1 > > > 0 2 1 3 > > > 0 1 3 2 > > > 0 1 2 3 > > > > > > Thanks, > > > > > > -- > > > Raul > > > > > > On Sun, Mar 20, 2022 at 7:34 AM Ian Clark <[email protected]> > wrote: > > > > > > > > Raul wrote: > > > > > > > > > someone with a stronger background in permutations might be able to > > > describe > > > > some useful techniques. > > > > > > > > > > > > Ascending Radix numerals (aka the Factorial Number System) offer a > > > natural > > > > way of putting permutations in 1-1 correspondence with the positive > > > > integers. These articles explain how: > > > > > > > > [1] https://en.wikipedia.org/wiki/Permutation#Numbering_permutations > > > > > > > > [2] https://en.wikipedia.org/wiki/Lehmer_code > > > > > > > > [3] https://en.wikipedia.org/wiki/Factorial_number_system > > > > > > > > > > > > Let's define a permutation on 4 points to be equivalent to a > > > corresponding > > > > permutation on 5 points which fixes the 5th point. > > > > > > > > This is roughly analogous to saying the decimal numerals 3276 and > 03276 > > > > (say) are "equivalent". > > > > > > > > EXAMPLE: these permutations are equivalent: > > > > > > > > 3 2 1 0 > > > > > > > > 3 2 1 0 4 > > > > > > > > 3 2 1 0 4 5 > > > > > > > > 3 2 1 0 4 5 6 > > > > > > > > etc. > > > > > > > > > > > > Essentially (A.) follows the Lehmer approach, but does it back to > front. > > > > Lehmer gives the same integer for two "equivalent" permutations, > whereas > > > > (A.) doesn't… > > > > > > > > > > > > A. 3 2 1 0 > > > > > > > > 23 > > > > > > > > A. 3 2 1 0 4 > > > > > > > > 86 > > > > > > > > > > > > For this reason I feel the methods of [1], [2] and [3] offer a > > > > better-behaved way of enumerating permutations than (A.). > > > > > > > > > > > > Back in 1970 I worked on fast computer algorithms to do this on a > > > Burroughs > > > > B6700 and eventually stumbled on the Lehmer code myself, or something > > > very > > > > much like it, which I implemented in Algol. Alas the code is no > longer > > > > extant, but I still have the manual algorithm. I'm going to dust off > this > > > > old work, get my algorithm working as an explicit verb and derive a > tacit > > > > implementation. But someone with a fresher brain could doubtless > take [2] > > > > and implement Lehmer codes efficiently in J far quicker than I shall. > > > > > > > > On Mon, 14 Mar 2022 at 18:37, Raul Miller <[email protected]> > wrote: > > > > > > > > > Watching this, I got to thinking about your anagram index of the > "by > > > suit" > > > > > deck. > > > > > > > > > > We know that an anagram index is in some sense based on the > factorial > > > > > of the length of the sequence. > > > > > > > > > > But, also, we can use the indices of the sequence as a base for the > > > > > anagram index, if we toss the 0 and 1. For example: > > > > > > > > > > ((i.!4)A.i.4),._,.(_2}.i.-4)#:i.!4 > > > > > 0 1 2 3 _ 0 0 > > > > > 0 1 3 2 _ 0 1 > > > > > 0 2 1 3 _ 1 0 > > > > > 0 2 3 1 _ 1 1 > > > > > 0 3 1 2 _ 2 0 > > > > > 0 3 2 1 _ 2 1 > > > > > 1 0 2 3 _ 0 0 > > > > > 1 0 3 2 _ 0 1 > > > > > 1 2 0 3 _ 1 0 > > > > > 1 2 3 0 _ 1 1 > > > > > 1 3 0 2 _ 2 0 > > > > > 1 3 2 0 _ 2 1 > > > > > 2 0 1 3 _ 0 0 > > > > > 2 0 3 1 _ 0 1 > > > > > 2 1 0 3 _ 1 0 > > > > > 2 1 3 0 _ 1 1 > > > > > 2 3 0 1 _ 2 0 > > > > > 2 3 1 0 _ 2 1 > > > > > 3 0 1 2 _ 0 0 > > > > > 3 0 2 1 _ 0 1 > > > > > 3 1 0 2 _ 1 0 > > > > > 3 1 2 0 _ 1 1 > > > > > 3 2 0 1 _ 2 0 > > > > > 3 2 1 0 _ 2 1 > > > > > > > > > > We can see here that the swaps in the permutations (the numbers on > the > > > > > left) correspond in some way to the "anagram index in base 0 > 1-.~i.-#" > > > > > (the numbers on the right). Here, I guess we ignore the leftmost > and > > > > > rightmost values in the permutation, since they are fully > determined, > > > > > in the sense of swaps, by the other values. > > > > > > > > > > So, now we have a way of looking at the anagram index of the > > > > > transposed deck of cards: > > > > > > > > > > (_2}.i.-52)#:A.,|:i.4 13 > > > > > 12 24 36 0 11 22 33 0 10 20 30 0 9 18 27 0 8 16 24 0 7 14 21 0 6 > 12 18 > > > > > 0 5 10 15 0 4 8 12 0 3 6 9 0 2 4 6 0 1 2 3 0 0 0 > > > > > > > > > > At first, the pattern there doesn't really leap out at us. But, > after > > > > > a short look, it's obvious that these numbers occur in sequences of > > > > > four. So: > > > > > > > > > > _4]\(_2}.i.-52)#:A.,|:i.4 13 > > > > > 12 24 36 0 > > > > > 11 22 33 0 > > > > > 10 20 30 0 > > > > > 9 18 27 0 > > > > > 8 16 24 0 > > > > > 7 14 21 0 > > > > > 6 12 18 0 > > > > > 5 10 15 0 > > > > > 4 8 12 0 > > > > > 3 6 9 0 > > > > > 2 4 6 0 > > > > > 1 2 3 0 > > > > > > > > > > In other words, it's: > > > > > > > > > > _2}.,(i._13) */ 1|.i.4 > > > > > 12 24 36 0 11 22 33 0 10 20 30 0 9 18 27 0 8 16 24 0 7 14 21 0 6 > 12 18 > > > > > 0 5 10 15 0 4 8 12 0 3 6 9 0 2 4 6 0 1 2 3 0 0 0 > > > > > > > > > > Now... I should probably do some more experiments here, to see if I > > > > > could form a more general insight into how we might compute an > > > > > arbitrary anagram index. But there's definitely a pattern here, and > > > > > someone with a stronger background in permutations might be able to > > > > > describe some useful techniques. > > > > > > > > > > Thanks, > > > > > > > > > > -- > > > > > Raul > > > > > > > > > > On Sun, Mar 13, 2022 at 5:22 PM Michal Wallace < > > > [email protected]> > > > > > wrote: > > > > > > > > > > > > I made a short beginner video about dealing cards, using ? and > A. : > > > > > > > > > > > > https://www.youtube.com/watch?v=eXGKK8BkCkg > > > > > > > > > ---------------------------------------------------------------------- > > > > > > 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
