Chuỗi các số tự chứa


22

Chúng ta hãy định nghĩa một số tự chứa là một số nguyên dương, có các chữ số xuất hiện theo các chiều dài chỉ bằng chính chúng. Nói cách khác, bất kỳ chữ số thập phân d (không bao gồm 0 ) chỉ xảy ra trong các lần chạy có độ dài chính xác d .

Bài tập

Bạn có thể chọn bất kỳ phương pháp nào trong ba phương pháp được liệt kê dưới đây:

  • Cho một số nguyên n , xuất ra số tự chứa thứ n (0 hoặc 1 được lập chỉ mục).
  • Cho một số nguyên n , xuất ra n số tự chứa đầu tiên .
  • In trình tự vô thời hạn.

Ví dụ

  • 133322 là một số tự chứa vì 3 xuất hiện trong một lần chạy ba 3 , 1 là đơn và 2 xảy ra trong một lần chạy 2 2 giây.

  • Mặt khác, 35553355 thì không, bởi vì, mặc dù 53 xảy ra lần lượt năm và ba lần, chúng không tạo thành các chữ số liền kề.

  • 44422 không khép kín, vì 4 chỉ xảy ra ba lần.

  • 12222333 cũng không, bởi vì 2 xuất hiện trong một loạt bốn 2 giây và nó không thể được coi là hai lần chạy riêng biệt của hai 2 giây.

Không có gì đáng ngạc nhiên, đây là OEIS A140057 , và một vài thuật ngữ đầu tiên của nó là:

1, 22, 122, 221, 333, 1221, 1333, 3331, 4444, 13331, 14444, 22122, 22333, 33322, 44441, 55555, 122122, 122333, 133322, 144441, 155555

Bạn có thể nhận đầu vào và cung cấp đầu ra thông qua bất kỳ phương thức tiêu chuẩn nào , trong bất kỳ ngôn ngữ lập trình nào , trong khi lưu ý rằng các lỗ hổng này bị cấm theo mặc định. Đây là mã golf, vì vậy mã ngắn nhất tính bằng byte (bằng mọi ngôn ngữ) sẽ thắng.

Câu trả lời:


8

Python 2 , 104 94 83 byte

-10 byte nhờ ông Xcoder
-11 byte nhờ Jonathan Allan

i=0
while 1:
 if`i`==''.join(d*int(d)for c,d in zip(`-i`,`i`)if d!=c):print i
 i+=1

Hãy thử trực tuyến!


... thực sự điều này có thể chấp nhận được, vì nó sẽ rơi một lần itrở thành dài ? Nó có thể là cần thiết để sử dụngstr (mặc dù tôi không bao giờ thực sự chắc chắn về những điều này).
Jonathan Allan

1
@Jonathan ALLan đó là một câu hỏi thú vị. Thông thường, chúng tôi được phép giả định rằng nó nằm trong loại số nguyên tiêu chuẩn , không dài , nhưng Python không làm rõ sự khác biệt này ...
FlipTack

6

Toán học, 66 byte

In trình tự vô thời hạn

Do[##&&Print@t&@@(#==Tr[1^{##}]&@@@Split@IntegerDigits@t),{t,∞}]

Hãy thử trực tuyến!

Trong TIO, bạn phải chấm dứt thực thi để xem kết quả nhưng trong Mathicala hoạt động tốt.

-12 byte từ Martin Ender


6

05AB1E , 9 byte

Trả về số hạng thứ n của chuỗi, được lập chỉ mục 1.

µNÔNγ€gJQ

Hãy thử trực tuyến!

Giải trình

µ           # loop over increasing N until counter equals input
 NÔ         # push N with consecutive equal elements deduplicated
   Nγ       # push N grouped into runs of consecutive equal elements
     €g     # get the length of each run
       J    # join to a number
        Q   # check for equality
            # if true, implicitly increment counter

Một nguồn cảm hứng khả thi từ cách tiếp cận 10 byte của tôi:µNγD€gs€ÙQ
Ông Xcoder

6

JavaScript (ES6), 76 71 68 byte

Trả về số hạng thứ n của chuỗi, được lập chỉ mục 0.

f=(n,k)=>+(k+'').replace(/(.)\1*/g,s=>s.length^s[0])||n--?f(n,-~k):k

Lưu ý : Như mọi khi với các hàm đệ quy, phạm vi đầu vào phụ thuộc vào hỗ trợ Tối ưu hóa Cuộc gọi Đuôi và kích thước ngăn xếp của động cơ của bạn.

Bản giới thiệu


Alt. phiên bản, 65 byte

Không có đầu vào và in kết quả cùng alert()một lúc.

f=k=>f(-~k,+(k+'').replace(/(.)\1*/g,s=>s.length^s[0])||alert(k))

Hãy thử trực tuyến! (Dừng ngay khi vượt quá kích thước ngăn xếp tối đa.)



2

CJam , 20 byte

1{_Abe`::=:*{_p}&)}h

Hãy thử trực tuyến!

Giải trình:

1                       push 1
 {                }h    while TOS is truthy (i.e. forever):            example iteration: 14444
  _                       duplicate                                                       14444 14444       
   Ab                     convert to base 10 (get decimal digits)                         14444 [1 4 4 4 4]
     e`                   run-length encode (array of two-element arrays)                 14444 [[1 1] [4 4]]
       :                  map over the array:
        :                   fold between the two array elements with:
         =                    equality                                                    14444 [1 1]
          :               fold between the array elements with:
           *                multiplication (a.k.a. logical AND for 1 or 0)                14444 1
            {  }&         if this yields a result of 1:
             _              duplicate the number and                                      14444 14444
              p             print it                                                      14444 (output 14444)
                 )        increment the number                                            14445


2

Brachylog , 10 byte

≜ℕẹḅ⟨l=h⟩ᵐ

Hãy thử trực tuyến!

Hoàn toàn tạo ra các phần tử của chuỗi thông qua biến đầu vào của nó. (Nếu nó thực sự phải tự in, hãy nối thêm &ẉ⊥.) Đây thực chất là mã để giải tương ứng với một giải pháp được áp dụng trước cho các giải pháp nhỏ nhất:

        ᵐ    For every
  ḅ          run of
 ẹ           digits in
             the input variable
ℕ            (which is a non-negative integer),
   ⟨l  ⟩     its length
   ⟨  h⟩     and its first element
   ⟨ = ⟩     are equal.

Tôi dự kiến ​​điều này chỉ mất 9 byte, nhưng dường như đòi hỏi một sự rõ ràng để tách các chữ số của một số thành các lần chạy.


1

JavaScript 4, 83 80 byte

for(i=0;;)+(++i+'').replace(/(.)\1*/g,function(x,y){return y^x.length})||alert(i)

for(i=0;i<1000;)+(++i+'').replace(/(.)\1*/g,function(x,y){return y^x.length})||alert(i)


"Javascript 1"? Có một tên ngôn ngữ như vậy?
dùng202729

Ý tôi là nó hoạt động kể từ khi JavaScript xuất hiện, không chắc tên đó có phải là correwct hay không
l4m2

xin lỗi có vẻ như không hoạt động trong js1. Tôi đã đọc và không tìm thấy gì thay thế
l4m2


1

R , 56 byte

function(n)all((r=rle(el(strsplit(c(n,''),''))))$l==r$v)

Hãy thử trực tuyến!

Làm cho việc sử dụng mã hóa chiều dài chạy trên số phân chia. Trả về true nếu tất cả các độ dài bằng các giá trị.

Lưu ý: Tôi đã tải methodsthư viện trong TIO để đi ellàm.


1

Stax , 10 byte

Ç≡∟Öz≈¢αV¢

Chạy và gỡ lỗi nó

Chương trình này lọc tất cả các số nguyên dương với một bộ lọc. Các chữ số được mã hóa chiều dài chạy. Đối với mỗi lần chạy, chữ số phải bằng chiều dài chạy.




0

Java 10, 121 byte

Một lambda từ intđến int. Hàm lấy một chỉ số n và trả về giá trị chuỗi thứ n (1-index).

n->{int x=0,m=1;for(;n>0;n-=m,m=1)for(var p:(++x+"").split("(?<=(.))(?!\\1)"))m=p.length()==p.charAt(0)-48?m:0;return x;}

Dùng thử trực tuyến

Bị đánh cắp

n -> {
    int x = 0, m = 1;
    for (; n > 0; n -= m, m = 1)
        for (var p : (++x + "").split("(?<=(.))(?!\\1)"))
            m = p.length() == p.charAt(0) - 48 ? m : 0;
    return x;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.