Trouver l'entier sérialisé


16

Tâche

Écrivez un programme qui prendra (en entrée) un entier positif. Il comptera ensuite à partir de 0, en ajoutant chaque entier à a String, en ne continuant que si la longueur de Stringest inférieure à la valeur de l'entrée.

Un entier sérialisé est défini comme l'entier entièrement formé avec la valeur maximale appartenant au String. Par "entièrement formé", l'entier ne devrait avoir aucun chiffre manquant (ce qui se produirait si la contrainte de longueur de la Stringest remplie).

La sortie du programme doit être l' entier sérialisé pour son entrée positive respective.


Règles

  • C'est le golf de code, donc la réponse la plus courte (en octets) gagne!
  • L'entrée sera toujours positive.
  • La sortie doit être un entier en base 10 (décimal).
  • Le programme doit être indexé 0.

Exemple d'entrée | Production

   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)

Remarques)


6
scénario de test suggéré:11
Rod

@Rod l'a ajouté, j'espère que cela le rendra plus facile à comprendre!
Jacob

L'ajout de guillemets à la chaîne dans les exemples peut faciliter la compréhension qu'il s'agit d'une chaîne.
isaacg

Donc, les premiers N-1chiffres de la constante de Champernowne , avec un 0préfixe?
Mego

Réponses:


8

JavaScript (ES6), 40 37 octets

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

Edit: enregistré 3 octets avec l'aide de @Arnauld.




5

Japt , 13 octets

1n@P±X l >U}a

Testez-le en ligne!

Explication

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

Gelée ,  11 10  9 octets

RD;\L€<⁸S

Un lien monadique prenant un entier positif et retournant un entier non négatif.

Essayez-le en ligne!

Comment?

édition ...

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 octets

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

Essayez-le en ligne!

  • 0 ...^ {...}est la séquence de nombres de zéro jusqu'à un de moins que le nombre pour lequel le bloc de code entre accolades renvoie vrai. ( ...sans le signe d'insertion retournerait le premier nombre pour lequel le bloc a renvoyé true.)
  • [~] 0 .. $^aest la concaténation des nombres du 0numéro actuel $^a(le paramètre au bloc de code).
  • .combest une liste de tous les caractères (chiffres) de la chaîne concaténée. Interprété comme un nombre, il évalue la longueur de la chaîne. .charsserait plus naturel à utiliser ici, car il évalue directement la longueur de la chaîne, mais le nom est un caractère plus long.
  • $_ est l'argument de la fonction de niveau supérieur.
  • [*-1] sélectionne le dernier élément de la liste générée.

2

QBIC , 34 octets

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

Explication

{           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 octets

(>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 octets

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

Ou de légères alternatives avec le même nombre d'octets:

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;}

Explication:

Essayez-le ici.

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

Rubis, 44 octets

Inspiré par la réponse JAVA de Kevin Cruijssen. -4 octets grâce à G B.

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

(i + = 1; t + = i.to_s) est identique à t + = "# {i + = 1}", seulement 4 octets de plus
GB

Et si vous faites cela, vous n'avez plus besoin de la variable t, vous pouvez soustraire la taille de n puis comparer avec 0.
GB

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.