在Copeland–Erdős常数中查找数字


17

背景

所述克柏兰-尔杜斯常数是“0”的串联 以10为底的质数表示法。它的值是

0.23571113171923293137414...

另请参阅OEIS A033308

Copeland和Erdős证明这是一个正常数。这意味着可以在Copeland-Erdős常数的十进制扩展的某个点上找到每个自然数。

挑战

给定一个正整数,将其以10为基数(不带前导零)并输出其在Copeland-Erdős常数的十进制数字序列中的第一个出现的索引。

允许使用任何合理的输入和输出格式,但输入和输出应以10为底。在这种情况下,可以假定不包含前导零。

从常量的第一个小数开始,输出可以是从0开始或从1开始。

实际结果可能会受到数据类型,内存或计算能力的限制,因此该程序在某些测试案例中可能会失败。但:

  • 理论上,任何输入都应该工作(即不考虑这些限制)。
  • 实际上,它至少应在前四个案例中起作用,并且每个案例的结果都应在不到一分钟的时间内得出。

测试用例

输出在此基于1给出。

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


好吧,那么获奖标准是什么?
user8397947 '16

考虑到有关I / O的详细规则,我将假定这是代码高尔夫,并应用标签。我希望这就是您的想法。
丹尼斯

@丹尼斯是的,对不起,我忘了。感谢编辑
路易斯Mendo

Answers:


6

05AB1E,14个字节

使用0索引的输出。在osabie总理功能是非常低效的。码:

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

说明:

[       ]        # 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

使用CP-1252编码。在线尝试!


7

Python 2,64字节

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

返回从1开始的索引。测试一下 Ideone测试


5

果冻,17 个字节

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

返回从1开始的索引。在线尝试!要么验证大多数测试用例

我已经在本地验证了最后一个测试用例;花了8分48秒。

怎么运行的

ç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).

备用版本,11字节(无竞争)

ÆRVw³
ḤÇßÇ?

w发布此挑战时,原子不存在。在线尝试!

怎么运行的

ḤÇßÇ?  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

其实是19个位元组

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

将字符串作为输入并输出子字符串的从1开始的索引

在线尝试!

说明:

╗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

朱莉娅55字节

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

返回从1开始的索引。在一秒钟内完成所有测试用例。在线尝试!


您是否有理由将素数上限移动3而不是例如2?此外,是否有一种方法可以扩展它以使其适用0于比输入短的输入...=r>0?r:3(n+9)\s
查理

32我的测试稍快,并且没有增加字节数。对于input 0,您可以改用-~n它,但是它会慢很多。
丹尼斯

谢谢,-~3n\s(== (3n+1)\s)足够好。
查理


2

J,37个字节

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

输入以10为基数的整数给出,输出使用从零开始的索引。

用法

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

说明

该第一个调用将动词视为单子,但是随后可能递归发生的调用将其视为双子。

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
你能证明这行得通吗?
Leaky Nun

@LeakyNun哦,是的,从技术上讲,它仅适用于测试用例,但可能在前n个素数中找不到。
2016年

n = 1无效,因为第一个素数为2,并且您需要前五个素数才能首次出现
英里

1

PowerShell v2 +,90字节

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

结合我的Champnowne常数答案中“查找数字”的逻辑,再结合我的Print的质数生成方法,将包含n个答案的n个素数进行求和,然后减去2以适当地输出索引(即,不计算0.在开始时)。

将输入作为字符串。999在我的机器上大约7秒钟内找到一个,但是33308要花更长的时间(编辑-90分钟后我放弃了)。从理论上讲,它应该可用于索引[Int32]::Maxvalueaka 之前的任何值2147483647,因为那是.NET字符串的最大长度。但是,很可能会在很久以前就遇到内存问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.