Also,

Also, why doesn't this work:

F=.{{{.n#~y=+/\c1 n=.>:i.100}}

F 19

F(19)




Skip Cave
Cave Consulting LLC


On Sat, Jan 22, 2022 at 11:50 PM Skip Cave <s...@caveconsulting.com> wrote:

> Thanks for all the examples. I thought that the solution would be pretty
> straightforward.
>
> c1 gives the number of ones in an integer:
> * c1=.{{+/1=10#.^:_1]y}}"0*
>
>
> Test it:
>
> * c1 211*
>
> *2*
>
>
> So the number of ones from 1 to 81 is:
>
> * +/c1 i.>:81*
>
> *19*
>
> To develop the inverse verb F, we can get a running sum of ones:
>  *  +/\c1 >:i.100*
>
> * 1 1 1 1 1 1 1 1 1 2 4 5 6 7 8 9 10 11 12 12 13 13 13 13 13 13 13 13 13
> 13 14 14 14 14 14 14 14 14 14 14 15 15 15 15 15 15 15 15 15 15 16 16 16 16
> 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 18 18 18 18 18 18 18 18 18
> 18 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 21*
>
>
> So to find the integer where the sum of ones equals 19:
>
> *F=.3 :'{.n#~y=+/\c1 n=.>:i.100'*
>
> * F 19*
>
> *81*
>
> This works great, except that I need to make sure that the running sum
> index n, is larger than the expected answer. In this case, the integers
> from one to 100 were sufficient, but that was discovered by trial and error.
>
>
> Ideally, the running sum could be defined as an iterative process that
> terminates in an integer, when the running sum iteration reaches or exceeds
> the required count. Then the output of F is that integer.
>
>
> So I was mainly wanting to see how to define a verb F that iterates on a
> running sum of one counts until the sum reaches the right argument of F,
> then returns the integer that terminates the ones count.
>
> So I just want to know how to modify:
>
> *F=.3 :'{.n#~y=+/\c1 n=.>:i.100'*
>
> to a running-sum iteration which terminates & returns the final integer
> that matches the ones count input, and does not have to predefine the index
> count.
>
> Skip Cave
> Cave Consulting LLC
>
>
> On Tue, Jan 18, 2022 at 3:58 AM Raul Miller <rauldmil...@gmail.com> wrote:
>
>> I should have removed from 'seno' the line that says:
>>      assert. hi<1000
>>
>> The purpose of that line was to save me from having to use jbrk if I
>> hit an infinite loop from getting my conditions backwards. It's not a
>> useful mechanism, and should have been removed before I posted the
>> implementation.
>>
>> FYI,
>>
>> --
>> Raul
>>
>> On Tue, Jan 18, 2022 at 2:27 AM Hauke Rehr <hauke.r...@uni-jena.de>
>> wrote:
>> >
>> > I didn’t do it much differently, conceptually.
>> > But instead of binary search (bisection)
>> > I split it up in ten buckets (dekasect).
>> > Apologies for the bad naming:
>> > another greek-latin hybrid, oh my …
>> >
>> > I split that way because I wanted to evaluate
>> > ones more often on small inputs than large.
>> > Didn’t measure if it atcually helps, though.
>> > And maybe I should have added an M. in order
>> > to memoize?
>> >
>> > But seno definitively reads better.
>> >
>> > Am 18.01.22 um 02:54 schrieb Raul Miller:
>> > > Your 'ones' is a bit more efficient than the routine I had come up
>> > > with, so I'll stick with your implementation here.
>> > >
>> > > Meanwhile, it's perhaps worth noting
>> > >
>> > >     I.213=ones i.1000
>> > > 521 522 523 524 525 526 527 528 529 530
>> > >
>> > > So, building the inverse... it's typical for there to be ten numbers
>> > > who had n "one digits in the sequence". But, for example, there's no
>> > > number which has exactly 3 "one digits in the sequence". Ten has 2,
>> > > eleven has four. But we can find the minimum value which had at least
>> > > n preceding one digits.
>> > >
>> > > Personally, I'd use a binary search here:
>> > >
>> > > seno=:{{
>> > >     if.y=ones y do.y return.end.hi=.2*lo=.y
>> > >     while.y>ones hi do. hi=.2*lo=.hi end.
>> > >     while.hi>lo do.
>> > >       assert. hi<1000
>> > >       select.*y-ones mid=.<.-:lo+hi+1
>> > >         case._1 do.if.hi=mid do.lo=.hi break.end.hi=.mid
>> > >         case.0 do.lo=.hi=.mid break.
>> > >         case.1 do.lo=.mid
>> > >      end.
>> > >    end.
>> > >    while.y <: ones lo do.lo=.<:hi=.lo end. NB.  maybe too crude...
>> > >    hi
>> > > }}
>> > >
>> > >     seno 213
>> > > 521
>> > >     ones 521
>> > > 213
>> > >
>> > > FYI,
>> > >
>> >
>> > --
>> > ----------------------
>> > mail written using NEO
>> > neo-layout.org
>> >
>> > ----------------------------------------------------------------------
>> > 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