> Further simplifications are possible, but since this is a one use > calculation this is probably good enough.
One could argue, for the same reason, that adequate performance is sufficient. So, my lazy random search effort is, o=. @: entry=. 0&{:: try=. 1&{:: ) sample=. (>: o ?~ o 9:) ; 1 + try NB. counting tries to avoid a premature convergence good=. (-: 0&*) o ((1+i.9) | 10&#:^:_1\) tries=. ', random tries ' , ": o try answer=. 'Answer ', ": o (10&#:^:_1) o entry while=. ^: (^:_) NB. parentheses are not necessary for the latest generation solve=. (answer , tries) o (sample while (-. o good o entry)) o (0 ;~ i. o 9:) f. solve'' Answer 381654729, random tries 295587 solve'' Answer 381654729, random tries 57369 solve'' Answer 381654729, random tries 222136 I called it lazy because I merely adapted previous code to solve a similar kind of puzzle On Sun, Sep 10, 2023 at 6:09 PM Raul Miller <rauldmil...@gmail.com> wrote: > > I guess to simplify it, I would filter the possibilities at each step. > > first digit divisible by 1: > N1=: 1+i.9 > > Second digit divisible by 2: > N2=: ;(10*N1)+each (<2*1+i.4)-.each N > > Third digit divisible by 3: > digits=: 10&#.inv > N3=: (#~ 0=3|]);(10*N2)+each (<1+i.9) (-. digits) each N2 > > And, so on... and since we're basically doing the same thing at each > step, we could encapsulate and parameterize this step as a function. > > F=: {{(#~ 0=x|]);(10*y)+each (<N1) (-. digits) each y}} > 9 F 8 F 7 F 6 F 5 F 4 F 3 F 2 F N1 > 381654729 > > timespacex '9 F 8 F 7 F 6 F 5 F 4 F 3 F 2 F N1' > 0.0006679 38400 > > So that took about a millisecond of machine time on this little laptop. > > Further simplifications are possible, but since this is a one use > calculation this is probably good enough. > > -- > Raul > > On Sun, Sep 10, 2023 at 2:02 PM 'Skip Cave' via Programming > <programm...@jsoftware.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 > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm