Wow! Raul & Ben both provided solutions to my Quora problem that were radically different from my original solution, and radically different from each other. Both solutions reduced the execution time & space by several orders of magnitude, when compared with my original solution. Also, both used different approaches that took advantage of features in J which I knew about, but had not used very much. A good learning experience.
Raul used a 'chain of dyadic verbs' (x F x F x F y) to solve the problem. I haven't ever tried this, where right-to-left execution is used to feed the result of one dyadic verb into the next one on the left. It was a bit confusing until I realized that the rightmost verb 'eats' its left argument, so that the verb result is passed to the next verb on the left, instead of the previous verb's left argument. This problem provides a good example of the use of this feature. I wonder if this linear 'chain of verbs' could be replaced with the hatco operator (^:)? Ben used the Anagram primitive (A.) to generate permutations of digits. Now I'm still trying to get my head around (parse) the two direct definitions Ben provided: all =: ,/ odds {{ }. x 1 3 7 9 } y 2 4 6 8 } '0oeoe5eoeo' }}"1/ evens all #~ (1+i.9) {{*./ 0 = x | ". x {."0 1 y }}"1 all If explained in detail, this example would make a good tutorial on how to use Direct Definition. This Quora problem shows the versatility of J primitives, and how J can provide multiple tools for different approaches to solve a specific problem. Skip Cave Cave Consulting LLC On Sun, Sep 10, 2023 at 1:01 PM Skip Cave <s...@caveconsulting.com> wrote: > Quora Question: Can you arrange the digits 1-9 to make a nine-digit number > such that the first digit is divisible by one, the first two digits are > divisible by two, the first three divisible by three and so on? > > My solution: > ea=.&.> > > at=.>10#.ea(a=.362880 9$1 to 9){.ea{n=.>:perm 9 > > {:"1 at#~*./"1[0=a|"1 at > > 381654729 > > > The answer is 381654729. > > > Check: > > ]m=.>10#.ea(;/1 to 9){.ea{sep 381654729 > > 3 38 381 3816 38165 381654 3816547 38165472 381654729 > > (1 to 9)| m > > 0 0 0 0 0 0 0 0 0 > > > There is only one answer. Is there a way to simplify or minimize the big > repetitive array 'a' to make the two J code lines more memory efficient & > succinct? > > > Skip Cave > Cave Consulting LLC > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm