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