This is a working solution. Not pretty, but it gets the job done.

onesList =: (0<{.)`($:@}. + ((10 ^ <:@#) * 1<{.) + ((1 + 10 #. }.) * 1={.) + <:@# * {. * 10 ^ 2 -~ #)@.(1<#)
   ones =: 10 onesList@:(#.^:_1)"0 ]
   NB. tests
   ones 30 521
13 213

That was easy. Now for the “inverse:”

   dlog =: 10&^.
   flog =: <.&.dlog
   NB. no $: inside of DDs
   dekasect =: {{
  0 dekasect y;0;0;(* flog@<.@dlog) flog y
:
  'N offset start step' =: y
  if. step < 1 do. offset return. end.
  stips =. start + steps =. step * i. 11
  stops =. (x * steps) + ones stips
  totals =. stops + ones offset - start
  idx =. stops I. N
  if. idx < # steps do.
    if. N = idx { totals do. idx { stips return. end.
  end.
  (x + idx = 2) dekasect N; ((;~offset&+) (<:idx) { steps), < step % 10
}}

   NB. test
   dekasect 213
530

It doesn’t return the smallest/largest one but the earliest one found.

That’s been fun.


Am 17.01.22 um 20:18 schrieb Skip Cave:
If I want to find the number of '1' digits in an integer, I can design a
verb c1, (count ones) to do that:

*c1=.{{+/1=10#.^:_1]y}}"0*


Test it:

* c1 10*

*1*

* c1 11*

*2*

* c1 103416*

*2*

* c1 56161764121*

*4*

I can also find the total number of '1' digits in a list of sequential
integers from 1 to n:


* to=:[+i.@:>:@-~ *

* +/c1 1 to n=.30*

*13*

* +/c1 1 to n=.521*

*213*


My question is: Given the total number of 1s in a sequence from 1 to n,
what is n?

A verb F(x) should return the final integer n, in the sequential list 1 to
n, that contains x ones.


Using the previous results as an example:


* F 213 *NB. A sequence 1 to n has 213 ones. What is n?

*521 *NB. The sequence 1 to 521 has 213 ones


What are some options to design the verb F?

1) Explicit

2) Implicit

3) Iteration

4) Recursion

Skip Cave
Cave Consulting LLC
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm


--
----------------------
mail written using NEO
neo-layout.org

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to