> 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

Reply via email to