Tìm các số trong hằng số Ereland của Copeland


17

Lý lịch

Các Copeland-Erdős liên tục là nối của "0." với các biểu diễn cơ sở 10 của các số nguyên tố theo thứ tự. Giá trị của nó là

0.23571113171923293137414...

Xem thêm OEIS A033308 .

Copeland và Erdős đã chứng minh rằng đây là một con số bình thường . Điều này ngụ ý rằng mọi số tự nhiên có thể được tìm thấy tại một số điểm trong phần mở rộng thập phân của hằng số Copeland-Erdős.

Các thách thức

Cho một số nguyên dương, biểu thị nó trong cơ sở 10 (không có các số 0 đứng đầu) và đưa ra chỉ số xuất hiện đầu tiên của nó trong chuỗi các chữ số thập phân của hằng số Ereland Cop Erd Ers.

Bất kỳ định dạng đầu vào và đầu ra hợp lý đều được cho phép, nhưng đầu vào và đầu ra phải ở cơ sở 10. Đặc biệt, đầu vào có thể được đọc dưới dạng một chuỗi; và trong trường hợp đó, nó có thể được coi là không chứa các số 0 đứng đầu.

Đầu ra có thể dựa trên 0 hoặc dựa trên 1, bắt đầu từ số thập phân đầu tiên của hằng số.

Các kết quả thực tế có thể bị giới hạn bởi loại dữ liệu, bộ nhớ hoặc khả năng tính toán, và do đó chương trình có thể thất bại đối với một số trường hợp thử nghiệm. Nhưng:

  • Nó nên hoạt động trên lý thuyết (nghĩa là không tính đến những hạn chế đó) cho bất kỳ đầu vào nào.
  • Nó sẽ hoạt động trong thực tế trong ít nhất bốn trường hợp đầu tiên, và đối với mỗi trường hợp, kết quả sẽ được tạo ra trong vòng chưa đầy một phút.

Các trường hợp thử nghiệm

Đầu ra ở đây được đưa ra là 1 dựa trên.

13       -->         7   # Any prime is of course easy to find
997      -->        44   # ... and seems to always appear at a position less than itself
999      -->      1013   # Of course some numbers do appear later than themselves
314      -->       219   # Approximations to pi are also present
31416    -->     67858   # ... although one may have to go deep to find them
33308    -->     16304   # Number of the referred OEIS sequence: check
36398    -->     39386   # My PPCG ID. Hey, the result is a permutation of the input!
1234567  -->  11047265   # This one may take a while to find


Được rồi, vậy tiêu chí chiến thắng là gì?
dùng8397947

Xem xét các quy tắc chi tiết liên quan đến I / O, tôi sẽ cho rằng đây là mã golf và áp dụng thẻ. Tôi hy vọng đây là những gì bạn có trong tâm trí.
Dennis

@Dennis Vâng, xin lỗi, tôi quên. Cảm ơn bạn đã chỉnh sửa
Luis Mendo

Câu trả lời:


6

05AB1E , 14 byte

Sử dụng đầu ra 0 chỉ mục . Các chức năng chính trong osabie rất kém hiệu quả. Mã số:

[NØJD¹å#]¹.Oð¢

Giải trình:

[       ]        # Infinite loop...
 N               # Get the iteration value
  Ø              # Get the nth prime
   J             # Join the stack
    D            # Duplicate this value
     ¹å#         # If the input is in this string, break out of the loop
         ¹.O     # Overlap function (due to a bug, I couldn't use the index command)
            ð¢   # Count spaces and implicitly print

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến! .


7

Python 2, 64 byte

f=lambda n,k=2,m=1,s='':-~s.find(`n`)or f(n,k+1,m*k*k,s+m%k*`k`)

Trả về chỉ số dựa trên 1. Kiểm tra nó trên Ideone .


5

Thạch , 17 byte

ÆRDFṡL}i
Ḥçßç?
çD

Trả về chỉ số dựa trên 1. Hãy thử trực tuyến! hoặc xác minh hầu hết các trường hợp thử nghiệm .

Tôi đã xác minh trường hợp thử nghiệm cuối cùng tại địa phương; mất 8 phút 48 giây.

Làm thế nào nó hoạt động

çD        Main link. Argument: n (integer)

 D        Decimal; yield A, the array of base 10 digits of n.
ç         Call the second helper link with arguments n and A.


Ḥçßç?     Second helper link. Left argument: n. Right argument: A.

Ḥ         Unhalve; yield 2n.
    ?     If...
   ç        the first helper link called with 2n and A returns a non-zero integer:
 ç            Return that integer.
          Else:
  ß           Recursively call the second helper link with arguments 2n and A.


ÆRDFṡL}i  First helper link. Left argument: k. Right argument: A.

ÆR        Prime range; yield the array of all primes up to k.
  DF      Convert each prime to base 10 and flatten the resulting nested array.
     L}   Yield l, the length of A.
    ṡ     Split the flattened array into overlapping slices of length l.
       i  Find the 1-based index of A in the result (0 if not found).

Phiên bản thay thế, 11 byte (không cạnh tranh)

ÆRVw³
ḤÇßÇ?

Nguyên wtử không tồn tại khi thử thách này được đăng. Hãy thử trực tuyến!

Làm thế nào nó hoạt động

ḤÇßÇ?  Main link. Argument: n (integer)

Ḥ      Unhalve; yield 2n.
    ?  If...
   Ç     the helper link called with argument 2n returns a non-zero integer:
 Ç         Return that integer.
       Else:
  ß      Recursively call the main link with argument 2n.


ÆRVw³  Helper link. Argument: k (integer)

ÆR     Prime range; yield the array of all primes up to k.
  V    Eval; concatenate all primes, forming a single integer.
    ³  Yield the first command-line argument (original value of n).
   w   Windowed index of; find the 1-based index of the digits of the result to
       the right in the digits of the result to the left (0 if not found).

4

Trên thực tế, 19 byte

╗1`r♂Pεj╜@íu`;)╓i@ƒ

Lấy một chuỗi làm đầu vào và đầu ra chỉ mục dựa trên 1 của chuỗi con

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

Giải trình:

╗1`r♂Pεj╜@íu`;)╓i@ƒ
╗                    push input to register 0
  `r♂Pεj╜@íu`;)      push this function twice, moving one copy to the bottom of the stack:
   r♂Pεj               concatenate primes from 0 to n-1 (inclusive)
        ╜@íu           1-based index of input, 0 if not found
1              ╓     find first value of n (starting from n = 0) where the function returns a truthy value
                i@   flatten the list and move the other copy of the function on top
                  ƒ  call the function again to get the 1-based index

3

Julia, 55 byte

\(n,s="$n",r=searchindex(n|>primes|>join,s))=r>0?r:3n\s

Trả về chỉ số dựa trên 1. Hoàn thành tất cả các trường hợp thử nghiệm trong một giây. Hãy thử trực tuyến!


Có một lý do tại sao bạn thay đổi các số nguyên tố trên bị ràng buộc bởi 3và không ví dụ bởi 2? Ngoài ra, có cách nào để mở rộng nó hoạt động với 0đầu vào ngắn hơn ...=r>0?r:3(n+9)\skhông?
charlie

3nhanh hơn một chút so với 2các thử nghiệm của tôi và không tăng số byte. Đối với đầu vào 0, bạn có thể sử dụng -~nthay thế, nhưng nó sẽ chậm hơn rất nhiều.
Dennis

Cảm ơn, -~3n\s(== (3n+1)\s) là đủ tốt.
charlie


2

J , 37 byte

(0{":@[I.@E.[:;<@":@p:@i.@]) ::($:+:)

Đầu vào được đưa ra dưới dạng số nguyên 10 cơ sở và đầu ra sử dụng lập chỉ mục dựa trên số không.

Sử dụng

   f =: (0{":@[I.@E.[:;<@":@p:@i.@]) ::($:+:)
   f 1
4
   f 13
6
   f 31416
67857

Giải trình

Cuộc gọi đầu tiên này coi động từ là một đơn nguyên, tuy nhiên các cuộc gọi tiếp theo có thể xảy ra đệ quy coi nó như một con đê.

0{":@[I.@E.[:;<@":@p:@i.@]  Input: n on LHS, k on RHS
                         ]  Get k
                      i.@   Get the range [0, 1, ..., k-1]
                   p:@      Get the kth prime of each
                ":@         Convert each to a string
              <@            Box each string
           [:;              Unbox each and concatenate to get a string of primes
     [                      Get n
  ":@                       Convert n to a string
      I.@E.                 Find the indices where the string n appears in
                            the string of primes
0{                          Take the first result and return it - This will cause an error
                            if there are no matches

(...) ::($:+:)  Input: n on RHS, k on LHS
(...)           Execute the above on n and k
      ::(    )  If there is an error, execute this instead
           +:   Double k
         $:     Call recursively on n and 2k

1
Bạn có thể chứng minh rằng điều này làm việc?
Rò rỉ Nun

@LeakyNun Ồ đúng vậy, về mặt kỹ thuật nó chỉ hoạt động cho các trường hợp thử nghiệm nhưng nó có thể không được tìm thấy trong n số nguyên tố đầu tiên .
dặm

Nó không làm việc cho n = 1 kể từ khi nguyên tố đầu tiên là 2 và bạn cần lăm số nguyên tố đầu tiên để có được sự xuất hiện đầu tiên của một 1.
dặm

1

PowerShell v2 +, 90 byte

for($a="0.";!($b=$a.IndexOf($args)+1)){for(;'1'*++$i-match'^(?!(..+)\1+$)..'){$a+=$i}}$b-2

Kết hợp logic của Tìm số của tôi trong câu trả lời hằng số Champernowne , kết hợp với phương thức tạo nguyên tố của In số nguyên tố thứ n của tôi có chứa n câu trả lời, sau đó trừ đi 2để đưa ra chỉ số một cách thích hợp (nghĩa là không tính 0.lúc bắt đầu).

Đưa đầu vào dưới dạng một chuỗi. Tìm thấy 999cái này trong khoảng bảy giây trên máy của tôi, nhưng cái đó 33308dài hơn một chút ( chỉnh sửa - Tôi đã bỏ cuộc sau 90 phút ). Về mặt lý thuyết nên hoạt động cho bất kỳ giá trị nào lên tới chỉ mục [Int32]::Maxvalueaka 2147483647, vì đó là độ dài tối đa của chuỗi .NET. Tuy nhiên, rất có thể sẽ gặp vấn đề về bộ nhớ trước khi điều đó xảy ra.

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.