Znajdź szeregową liczbę całkowitą


16

Zadanie

Napisz program, który weźmie (jako dane wejściowe) dodatnią liczbę całkowitą. Następnie odlicza 0, dodając każdą liczbę całkowitą do a String, kontynuując tylko, jeśli długość Stringjest mniejsza niż wartość wejściowa.

Odcinkach liczba całkowita jest określona jako w pełni uformowanej całkowitą o maksymalnej wartości należące doString . Przez „w pełni uformowany” liczba całkowita nie powinna zawierać brakujących cyfr (co mogłoby się zdarzyć, gdyby spełnione było ograniczenie długości String).

Wyjście programu powinno być serializowaną liczbą całkowitą dla jego odpowiedniego, dodatniego wejścia.


Zasady

  • To jest golf golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach)!
  • Dane wejściowe zawsze będą dodatnie.
  • Dane wyjściowe muszą być liczbami całkowitymi w bazie 10 (dziesiętne).
  • Program musi być indeksowany jako 0.

Przykładowe dane wejściowe | Wynik

   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)

Uwaga (y)


6
sugerowany przypadek testowy:11
Rod

@Rod Dodał go, mam nadzieję, że łatwiej to zrozumieć!
Jacob G.,

Dodanie znaków cudzysłowu do ciągu w przykładach może ułatwić zrozumienie, że jest to ciąg.
isaacg,

Więc pierwsze N-1cyfry stałej Champernowne , z 0dopisaną?
Mego

Odpowiedzi:


8

JavaScript (ES6), 40 37 bajtów

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

Edycja: Zapisano 3 bajty z pewną pomocą @Arnauld.


6

05AB1E , 10 7 bajtów

Pomysł na użycie prefiksów z odpowiedzi Jonathan's Jelly

LηJ€g›O

Wypróbuj online!

Wyjaśnienie

L         # range [1 ... input]
 η        # prefixes
  J       # join each to string
   €g     # get length of each string
     ›    # input is greater than string length
      O   # sum


5

Japt , 13 bajtów

1n@P±X l >U}a

Przetestuj online!

Wyjaśnienie

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

Galaretka ,  11 10  9 bajtów

RD;\L€<⁸S

Łącze monadyczne przyjmujące dodatnią liczbę całkowitą i zwracające nieujemną liczbę całkowitą.

Wypróbuj online!

W jaki sposób?

redagowanie...

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 bajtów

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

Wypróbuj online!

  • 0 ...^ {...}jest sekwencją liczb od zera do jednej mniejszej niż liczba, dla której blok kodu w nawiasach klamrowych zwraca wartość true. (... bez karetki zwróciłby pierwszą liczbę, dla której blok zwrócił wartość prawda).
  • [~] 0 .. $^ato konkatenacja liczb od 0bieżącej liczby $^a(parametr do bloku kodu).
  • .combto lista wszystkich znaków (cyfr) w połączonym ciągu. Zinterpretowany jako liczba, ocenia długość łańcucha. .charsbyłoby bardziej naturalne użycie tutaj, ponieważ oblicza bezpośrednio długość łańcucha, ale nazwa jest dłuższa o jeden znak.
  • $_ jest argumentem funkcji najwyższego poziomu.
  • [*-1] wybiera ostatni element wygenerowanej listy.

2

QBIC , 34 bajty

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

Wyjaśnienie

{           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 bajtów

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

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

Lub niewielkie alternatywy o tej samej liczbie bajtów:

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

Wyjaśnienie:

Wypróbuj tutaj.

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

Rubinowy, 44 bajty

Zainspirowany odpowiedzią JAVA Kevina Cruijssena. -4 bajty dzięki G B.

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

(i + = 1; t + = i.to_s) jest taki sam jak t + = "# {i + = 1}", tylko 4 bajty dłużej
GB

A jeśli to zrobisz, nie potrzebujesz już zmiennej t, możesz odjąć rozmiar od n, a następnie porównać z 0.
GB

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.