Seri Tamsayıyı Bulma


16

Görev

Pozitif bir tam sayı alacak bir program yazın (girdi olarak). Daha sonra 0, her bir tamsayıyı a'ya ekleyerek sayılacaktır String, ancakString giriş değerinden küçük edecektir.

Bir seri tamsayı maksimum değeri ait tam oluşturulmuş tamsayı olarak tanımlanır String. "Tam olarak biçimlendirilmiş" ile, tamsayı eksik bir basamağa sahip olmamalıdır (uzunluğunun kısıtlaması Stringkarşılandığında oluşur).

Programın çıktısı , ilgili pozitif girişi için serileştirilmiş tamsayı olmalıdır .


kurallar

  • Bu kod golf, yani en kısa cevap (bayt cinsinden) kazanır!
  • Girdi her zaman pozitif olacaktır.
  • Çıktı, taban-10'da (ondalık) bir tamsayı olmalıdır.
  • Program 0 dizinli olmalıdır.

Örnek Giriş | Çıktı

   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)

Not (lar)


6
Önerilen test örneği:11
Rod

@Rod Ekledi, umarım anlaşılmasını kolaylaştırır!
Jacob G.

Örneklerde dizeye tırnak işareti eklemek, dizenin anlaşılmasını kolaylaştırabilir.
isaacg

İlk Yani N-1bir basamağı Champernowne sabiti bir ile, 0de başa?
Mego

Yanıtlar:


8

JavaScript (ES6), 40 37 bayt

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

Düzenleme: @Arnauld yardımı ile 3 bayt kaydedildi.




5

Japt , 13 bayt

1n@P±X l >U}a

Çevrimiçi test edin!

açıklama

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

Jöle ,  11 10  9 bayt

RD;\L€<⁸S

Pozitif bir tamsayı alan ve negatif olmayan bir tamsayı döndüren monadik bir bağlantı.

Çevrimiçi deneyin!

Nasıl?

düzenleme ...

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 bayt

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

Çevrimiçi deneyin!

  • 0 ...^ {...}sıfırdan parantez içindeki kod bloğunun true değerinden birinden daha azına kadar olan sayı dizisidir. (... düzeltme işareti olmadan blok doğru döndürülen ilk sayıyı döndürür.)
  • [~] 0 .. $^a sayıların birleştirilmesi 0 geçerli sayıya kadar bir araya getirilmesidir$^a (kod bloğunun parametresi) .
  • .combbirleştirilmiş dizgideki tüm karakterlerin (rakamların) listesidir. Sayı olarak yorumlandığında, dizenin uzunluğunu değerlendirir. .charsdoğrudan dizenin uzunluğunu değerlendirdiğinden, burada kullanmak daha doğal olurdu, ancak ad bir karakter daha uzundur.
  • $_ üst düzey işlevin bağımsız değişkenidir.
  • [*-1] oluşturulan listenin son öğesini seçer.

2

QBIC , 34 bayt

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

açıklama

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

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

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

Veya aynı bayt sayısına sahip hafif alternatifler:

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

Açıklama:

Burada deneyin.

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 bayt

Kevin Cruijssen'in JAVA yanıtından esinlenildi. -G B sayesinde 4 bayt.

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

(i + = 1; t + = i.to_s) t + = "# {i + = 1}" ile aynı, sadece 4 bayt daha uzun
GB

Bunu yaparsanız, artık t değişkenine ihtiyacınız yoktur, n'yi n'den çıkarabilir ve 0 ile karşılaştırabilirsiniz.
GB

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.