Temukan Integer Serialized

16

Tugas

Tulis program yang akan mengambil (sebagai masukan) bilangan bulat positif. Kemudian akan dihitung dari 0, menambahkan setiap bilangan bulat ke a String, hanya melanjutkan jika panjangnya Stringkurang dari nilai input.

Sebuah serial bilangan bulat didefinisikan sebagai bilangan bulat sepenuhnya terbentuk dengan nilai maksimum milik String. Dengan "sepenuhnya-terbentuk", bilangan bulat seharusnya tidak memiliki digit yang hilang (yang akan terjadi jika batasan panjang Stringterpenuhi).

Output dari program harus berupa integer berseri untuk masing-masing input positifnya.


Aturan

  • Ini kode golf, jadi jawaban tersingkat (dalam byte) menang!
  • Masukan akan selalu positif.
  • Output harus berupa bilangan bulat pada basis-10 (desimal).
  • Program harus diindeks 0.

Contoh Input | Keluaran

   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)

Catatan

Jacob G.
sumber
6
test case yang disarankan:11
Rod
@Rod menambahkannya, semoga ini membuatnya lebih mudah untuk dipahami!
Jacob G.
Menambahkan tanda kutip ke string dalam contoh mungkin membuatnya lebih mudah untuk memahami bahwa itu adalah string.
isaacg
Jadi N-1digit pertama dari Champernowne konstan , dengan yang di atas 0?
Mego

Jawaban:

8

JavaScript (ES6), 40 37 byte

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

Sunting: Disimpan 3 byte dengan bantuan dari @Arnauld.

Neil
sumber
6

05AB1E , 10 7 byte

Gagasan untuk menggunakan awalan dari jawaban Jonathan's Jelly

LηJ€g›O

Cobalah online!

Penjelasan

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

Japt , 13 byte

1n@P±X l >U}a

Uji secara online!

Penjelasan

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
Produksi ETH
sumber
4

Haskell , 55 53 50 byte

(n#x)a|l<-a++show x=last$x-1:[n#l$x+1|length l<=n]

Cobalah online!

Penggunaan adalah (1024#"") 0

H.Piz
sumber
4

Python 2 , 60 59 58 byte

  • Terima kasih @Felipe untuk 2 byte
i,j,k='',1,input()
while len(i+`j`)<k:i+=`j`;j+=1
print~-j

Cobalah online!

officialaimm
sumber
4

Jelly ,  11 10  9 byte

RD;\L€<⁸S

Tautan monadik mengambil bilangan bulat positif dan mengembalikan bilangan bulat non-negatif.

Cobalah online!

Bagaimana?

mengedit ...

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)
Jonathan Allan
sumber
4

Pyth, 8 7 byte

tf<Q=+d

Cobalah online. Suite uji.

PurkkaKoodari
sumber
Aku menyukainya! Menggunakan irisan sebagai perbandingan sangat brilian.
isaacg
@isaacg Ini salah satu fitur golf Pyth (on) yang bagus. Saya mendapat ide ketika saya melihat jawaban Neil (pengindeksan bukannya memotong, tetapi ide yang sama). < num seqjuga sangat membantu.
PurkkaKoodari
3

Perl 6 , 36 byte

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

Cobalah online!

  • 0 ...^ {...}adalah urutan angka dari nol sampai satu kurang dari angka yang blok kode dalam kurung kurawal mengembalikan true. ( ...Tanpa tanda sisipan akan mengembalikan angka pertama yang mana bloknya dikembalikan benar.)
  • [~] 0 .. $^aadalah gabungan angka dari 0hingga angka saat ini $^a(parameter ke blok kode).
  • .combadalah daftar semua karakter (digit) dalam string bersambung. Ditafsirkan sebagai angka, itu mengevaluasi panjang string. .charsakan lebih alami untuk digunakan di sini, karena mengevaluasi langsung ke panjang string, tetapi namanya lebih panjang satu karakter.
  • $_ adalah argumen untuk fungsi tingkat atas.
  • [*-1] memilih elemen terakhir dari daftar yang dihasilkan.
Sean
sumber
2

QBIC , 34 byte

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

Penjelasan

{           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
steenbergh
sumber
2

Python 2 , 44 byte

f=lambda k,i=0:-2*(k<0)or-~f(k-len(`i`),i+1)

Cobalah online!

Tidak
sumber
2

J, 26 byte

(>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
Eelvex
sumber
1

R , 43 byte

n=scan();sum(cumsum(floor(log10(1:n))+1)<n)

Cobalah online!

bocor Nun
sumber
0

WendyScript , 42 byte

<<f=>(x){<<n=""#i:0->x{n+=i?n.size>=x/>i}}

f(1024) // returns 377

Cobalah online!

Tidak Terkumpul:

let f => (x) {
  let n = ""
  for i : 0->x { 
    n+=i
    if n.size >= x 
    ret i
  }
  ret
}
Felix Guo
sumber
0

PHP, 41 byte

while(strlen($s.=+$i++)<=$argn);echo$i-2;

Cobalah online .

Titus
sumber
0

Java 8, 64 byte

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

Atau sedikit alternatif dengan byte-count yang sama:

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

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
0

Ruby , 39 byte

->n{~-(0..n).find{|x|0>n-="#{x}"=~/$/}}

Cobalah online!

GB
sumber
0

Ruby, 44 byte

Terinspirasi oleh jawaban JAVA Kevin Cruijssen. -4 byte terima kasih kepada G B.

->n{i,t=0,'';t+="#{i+=1}"while t.size<n;i-1}
nama tampilan
sumber
(i + = 1; t + = i.to_s) sama dengan t + = "# {i + = 1}", hanya 4 byte lebih lama
GB
Dan jika Anda melakukannya, Anda tidak perlu variabel t lagi, Anda dapat mengurangi ukuran dari n dan kemudian membandingkannya dengan 0.
GB
0

Perl 5 , 31 + 1 ( -p) = 32 byte

$".=++$\while$_>=length$"}{$\--

Cobalah online!

Xcali
sumber