Encuentra el entero serializado


16

Tarea

Escriba un programa que tome (como entrada) un número entero positivo. Luego contará desde 0, agregando cada número entero a a String, solo continuará si la longitud del valor Stringes menor que el valor de la entrada.

Un entero serializado se define como el entero completamente formado con el valor máximo que pertenece al String. Por "completamente formado", el entero no debería tener dígitos faltantes (lo que ocurriría si Stringse cumple la restricción de longitud del ).

La salida del programa debe ser el entero serializado para su respectiva entrada positiva.


Reglas

  • Es el código de golf, por lo que gana la respuesta más corta (en bytes).
  • La entrada siempre será positiva.
  • La salida debe ser un número entero en base-10 (decimal).
  • El programa debe estar indexado a 0.

Entrada de ejemplo | Salida

   5 | 4   (0 1 2 3 4              - Length of 5)
  11 | 9   (0 1 2 3 4 5 6 7 8 9 1  - Length of 11)
  12 | 10  (0 1 2 3 4 5 6 7 8 9 10 - Length of 12)
1024 | 377 (0 1 2 3 4 5 6 7 8 ...  - Length of 1024)

Nota (s)


66
caso de prueba sugerido:11
Rod

@ Rod lo agregó, ¡espero que lo haga más fácil de entender!
Jacob G.

Agregar comillas a la cadena en los ejemplos podría hacer que sea más fácil entender que es una cadena.
isaacg

Entonces, ¿los primeros N-1dígitos de la constante Champernowne , con un 0antecedente?
Mego

Respuestas:


8

JavaScript (ES6), 40 37 bytes

f=(n,i=s='0')=>(s+=++i)[n]?i-1:f(n,i)
<input type=number min=1 value=1 oninput=o.textContent=f(this.value)><pre id=o>0

Editar: guardado 3 bytes con algo de ayuda de @Arnauld.




5

Japt , 13 bytes

1n@P±X l >U}a

¡Pruébelo en línea!

Explicación

1n@ P± X l >U}a
1nX{P+=X l >U}a
                   Implicit: U = input integer, P = empty string
  X{         }a    Return the first integer X in [0, 1, 2, ...] that returns a truthy value:
    P+=X             Append X to P.
         l >U        Return P.length > U.
                   This returns the first integer that can't fit into the U-char string.
1n                 Subtract 1 from the result.
                   Implicit: output result of last expression




4

Gelatina ,  11 10  9 bytes

RD;\L€<⁸S

Un enlace monádico que toma un número entero positivo y devuelve un número entero no negativo.

Pruébalo en línea!

¿Cómo?

edición...

RD;\L€<⁸S - link: number n
R         - range -> [1,2,...10,11,...,n-1]
 D        - convert to decimal (vectorises) -> [[1],[2],...,[1,0],[1,1],...D(n-1)]
   \      - cumulative reduce by:
  ;       -   concatenation -> prefixes i.e.: [[1],[1,2],...,[1,2,...,1,0],[1,2,...,1,0,1,1],[1,2,...,1,0,1,1,...Flattened(D(n))]]
    L€    - length of €ach -> [1,2,3,...,11,13,...,length([1,2,...,1,0,1,1,...Flattened(D(n))])]
       ⁸  - chain's left argument, n
      <   - less than? (vectorises)
        S - sum (yields the number of prefixes that are less than or equal in length to n)
          -   Note: `0` is excluded from the range and all the prefixes, but including
          -         it would mean comparing to n+1 AND decrementing at the end (for a
          -         total cost of a byte)


3

Perl 6 , 36 bytes

{(0...^{([~] 0..$^a).comb>$_})[*-1]}

Pruébalo en línea!

  • 0 ...^ {...}es la secuencia de números desde cero hasta uno menos que el número para el cual el bloque de código entre llaves devuelve verdadero. ( ...sin el intercalado devolvería el primer número para el que el bloque devuelve verdadero).
  • [~] 0 .. $^aes la concatenación de números 0hasta el número actual $^a(el parámetro para el bloque de código).
  • .combes una lista de todos los caracteres (dígitos) en la cadena concatenada. Interpretado como un número, evalúa la longitud de la cadena. .charssería más natural de usar aquí, ya que se evalúa directamente a la longitud de la cadena, pero el nombre es un carácter más largo.
  • $_ es el argumento de la función de nivel superior.
  • [*-1] selecciona el último elemento de la lista generada.

2

QBIC , 34 bytes

{A=!p$~_lB+A|>:|_xp-1|\B=B+A]p=p+1

Explicación

{           DO infinitely
A=!p$       Set A$ to p cast to num
            Note that p starts out as 0.
~      >:   IF the input number is exceeded by
 _l   |     the length of
   B+A      A$ and B$ combined
_xp-1|      THEN QUIT, printing the last int successfully added to B$
            The _X operator quits, (possibly) printing something if followed by a-zA-Z
            _x is slightly different, it prints the expression between the operator _x and |
\B=B+A      ELSE add A$ to B$
]           END IF
p=p+1       Raise p, and rerun


2

J 26 bytes

(>i:1:)([:+/\[:>.10^.1+i.)

((>i:1:)([:+/\[:>.10^.1+i.))"0 ] 5 11 12 1024 2000 20000 100000 1000000
4 9 10 377 702 5276 22221 185184




0

Java 8, 64 bytes

n->{int i=0;for(String t="0";;t+=++i)if(t.length()>n)return~-i;}

O alternativas leves con el mismo número de bytes:

n->{int i=0;for(String t="";;t+=i++)if(t.length()>n)return i-2;}
n->{int i=-1;for(String t="";;t+=++i)if(t.length()>n)return~-i;}

Explicación:

Pruébalo aquí

n->{                  // Method with integer as both parameter and return-type
  int i=0;            //  Integer `i`, starting at 0
  for(String t="0";   //  String, starting at "0"
      ;               //  Loop indefinitely
       t+=++i)        //    After every iteration: append the String with `i+1`
                      //    by first increasing `i` by 1 with `++i`
    if(t.length()>n)  //   If the length of the String is larger than the input:
      return~-i;      //    Return `i-1`
                      //  End of loop (implicit / single-line body)
}                     // End of method


0

Ruby, 44 bytes

Inspirado por la respuesta JAVA de Kevin Cruijssen. -4 bytes gracias a G B.

->n{i,t=0,'';t+="#{i+=1}"while t.size<n;i-1}

(i + = 1; t + = i.to_s) es lo mismo que t + = "# {i + = 1}", solo 4 bytes más
GB

Y si hace eso, ya no necesita la variable t, puede restar el tamaño de ny luego comparar con 0.
GB

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.