Copeland-Erd constants sabiti içindeki sayıları bulma


17

Arka fon

Copeland-erdos sabiti "0" birleşimidir asal sayıların temel 10 temsili ile. Değeri

0.23571113171923293137414...

Ayrıca bkz . OEIS A033308 .

Copeland ve Erdős bunun normal bir sayı . Bu, her doğal sayının Copeland-Erdő sabitinin ondalık genişlemesinde bir noktada bulunabileceği anlamına gelir.

Meydan okuma

Pozitif bir tamsayı verildiğinde, bunu taban 10'da (baştaki sıfırlar olmadan) ifade edin ve ilk görünümünün dizinini Copeland-Erd constant sabitinin ondalık basamakları dizisi içinde çıktılayın.

Herhangi bir makul giriş ve çıkış formatına izin verilir, ancak giriş ve çıkış 10 tabanında olmalıdır. Özellikle, giriş bir dize olarak okunabilir; ve bu durumda baştaki sıfır içermediği varsayılabilir.

Çıktı, sabitin ilk ondalık basamağından başlayarak 0 veya 1 tabanlı olabilir.

Gerçek sonuçlar veri tipi, bellek veya bilgi işlem gücü ile sınırlı olabilir ve bu nedenle program bazı test durumlarında başarısız olabilir. Fakat:

  • Herhangi bir girdi için teoride çalışmalıdır (yani bu sınırlamaları dikkate almamak).
  • Uygulamada en az ilk dört vaka için çalışmalı ve her biri için sonuç bir dakikadan daha kısa sürede üretilmelidir.

Test senaryoları

Çıktı burada 1 tabanlı olarak verilmektedir.

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


Tamam, kazanan kriter nedir?
user8397947

I / O ile ilgili ayrıntılı kurallar göz önüne alındığında, bunun kod golf olduğunu varsayacağım ve etiketi uygulayacağım. Umarım aklındaki budur.
Dennis

@Dennis Evet, üzgünüm, unuttum.
Düzenlediğiniz

Yanıtlar:


6

05AB1E , 14 bayt

0 dizinli çıktı kullanır . Osabie'deki ana fonksiyonlar çok verimsizdir. Kod:

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

Açıklama:

[       ]        # 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 kodlamasını kullanır . Çevrimiçi deneyin! .


7

Python 2, 64 bayt

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

1 tabanlı dizini döndürür. Ideone üzerinde test edin .


5

Jöle , 17 bayt

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

1 tabanlı dizini döndürür. Çevrimiçi deneyin! veya çoğu test vakasını doğrulayın .

Son test vakasını yerel olarak doğruladım; 8 dakika 48 saniye sürdü.

Nasıl çalışır

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

Alternatif sürüm, 11 bayt (rakip olmayan)

ÆRVw³
ḤÇßÇ?

wBu meydan okuma ne zaman gönderildiğini atomu yoktu.Çevrimiçi deneyin!

Nasıl çalışır

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

Aslında 19 bayt

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

Bir dizgiyi girdi olarak alır ve alt dizenin 1 tabanlı dizinini çıkarır

Çevrimiçi deneyin!

Açıklama:

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

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

1 tabanlı dizini döndürür. Tüm test senaryolarını bir saniyeden kısa sürede tamamlar. Çevrimiçi deneyin!


Asal primerleri üst sınırdan kaydırmanızın bir nedeni var mı, 3örneğin değil 2mi? Ayrıca, 0girişten daha kısa bir süre boyunca çalışacak şekilde genişletmenin bir yolu var ...=r>0?r:3(n+9)\smı?
charlie

32testlerimden biraz daha hızlıydı ve bayt sayısını artırmadı. Girişi için 0şunu kullanabilirsiniz -~nyerine, ama çok yavaş olacaktır.
Dennis

Teşekkürler, -~3n\s(== (3n+1)\s) yeterince iyi.
charlie


2

J , 37 bayt

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

Giriş temel 10 tamsayı olarak verilir ve çıkış sıfır tabanlı indeksleme kullanır.

kullanım

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

açıklama

Bu ilk çağrı fiili bir monad olarak ele alır, ancak müteakip çağrılar yinelemeli olarak bir ikili olarak kabul edilir.

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
Bunun işe yaradığını kanıtlayabilir misiniz?
Leaky Nun

@LeakyNun Oh evet bu doğru, teknik olarak sadece test senaryoları için çalışıyor, ancak ilk n primerinde bulunmayabilir .
mil

İlk asal 2 olduğu için n = 1 için işe yaramaz ve 1'in ilk oluşumunu elde etmek için ilk beş astara ihtiyacınız vardır.
mil

1

PowerShell v2 +, 90 bayt

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

Champernowne sabit cevabında bul numaramın mantığını birleştirerek, n cevabını içeren nci baskıyı yazdırın , ardından 2indeksi uygun şekilde (yani 0.başlangıçta saymamakla) çıktı almak için çıkar.

Girişi dize olarak alır. Makinemde 999yaklaşık yedi saniye içinde olanı bulur , ancak 33308biraz daha uzun olanı ( düzenle - 90 dakika sonra vazgeçtim ). Teorik olarak [Int32]::MaxvalueDizin'e kadar herhangi bir değer için çalışmalıdır 2147483647, çünkü .NET dizelerinin maksimum uzunluğu. Ancak, bu gerçekleşmeden çok önce hafıza sorunlarıyla karşılaşacaktır.

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.