ความทรงจำที่น่าประทับใจของช่วงเวลาที่ผ่านมา


34

พิจารณาจำนวนเฉพาะพีเขียนในฐาน 10 หน่วยความจำของพีถูกกำหนดให้เป็นจำนวนเฉพาะที่แตกต่างกันอย่างเคร่งครัดน้อยกว่าพีที่มีอยู่เป็นสตริงของพี

ท้าทาย

ได้รับไม่ใช่เชิงลบจำนวนเต็มnเป็น input พบนายกเล็กที่สุดหน้าดังกล่าวว่าPมีหน่วยความจำn นั่นคือค้นหาไพรม์ที่เล็กที่สุดที่มีnเฉพาะที่ต่างกันน้อยกว่าอย่างเคร่งครัดเหมือนกับสตริงย่อย

อินพุต

สามารถป้อนข้อมูลผ่านรูปแบบมาตรฐานใด ๆ คุณต้องรองรับอินพุตจนถึงnมากที่สุดซึ่งเอาต์พุตจะไม่ล้น สำหรับการอ้างอิง 4294967291 เป็นนายกที่ใหญ่ที่สุดใน 32 บิต

เอาท์พุต

เอาต์พุตอาจถูกเขียนไปยัง STDOUT หรือส่งคืนจากฟังก์ชัน

ตัวอย่าง

หมายเลข 2 มีหน่วยความจำ 0 เนื่องจากไม่มีช่วงเวลาที่แน่นอนน้อยกว่าในฐานะสตริงย่อย

จำนวน 113 เป็นไพรม์ที่เล็กที่สุดพร้อมหน่วยความจำ 3 ตัวเลข 3, 13, และ 11 เป็นซับไพรม์เดี่ยวเท่านั้นและไม่มีไพร์มที่เล็กกว่า 113 มี 3 primes เหมือนกับซับสติ้ง

10 คำแรกของลำดับที่เริ่มต้นด้วยn = 0 คือ

2, 13, 23, 113, 137, 1237, 1733, 1373, 12373, 11317

บันทึก

นี่คือA079397ใน OEIS

ลีดเดอร์บอร์ด

var QUESTION_ID=55406,OVERRIDE_USER=20469;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>


มีการ จำกัด เวลาทำงานหรือไม่?
เบต้า

@BetaDecay Nope
Alex A.

คำตอบ:


8

Pyth, 22 ไบต์

f&}TPTqQlf}YPY{sMP.:`T

สาธิต , เทียมทดสอบ

คำอธิบาย:

f&}TPTqQlf}YPY{sMP.:`T
                          Implicit: Q = eval(input())
f                         Starting at T=1 and counting up, return the first T where
                    `T    repr(T)
                  .:      all substrings
                 P        except T itself
               sM         converted to integers
              {           unique examples only
         f                filter on
          }YPY            Y is in the prime factorization of Y, e.g. Y is prime.
      qQl                 Q == len of the above, that is, T has memory Q,
 &}TPT                    and T is prime, (is in its prime factorization.)

คุณไม่สามารถใช้P_YและP_Tแทนที่จะเป็น}YPYและ}TPTกลับมาแล้วใช่ไหม
Erik the Outgolfer

7

CJam, 33 31 30 ไบต์

1{)__mp*{_mp2$s@s#)*},,easi^}g

นี่เป็นโปรแกรมเต็มรูปแบบที่อ่านอินพุตเป็นอาร์กิวเมนต์บรรทัดคำสั่ง

ลองใช้ออนไลน์ในล่าม CJam

ทดสอบการทำงาน

$ time cjam <(echo '1{)__mp*,{_mp2$s@s#)*},,easi^}g') 9
11317
real    0m3.562s
user    0m4.065s
sys     0m0.177s

มันทำงานอย่างไร

1       e# Push I := 1 on the stack.
{       e# Do:
  )__   e#   Increment I and push two copies.
  mp*   e#   Check the last copy for primality and multiply with the first copy.
        e#   This pushes R := I if I is prime and R := 0 if it is composite.
  {     e#   Filter; for each J in [0 ... R-1]:
    _mp e#     Push a copy of J and check for primality.
    2$s e#     Push a copy of I and cast to string.
    @s  e#     Rotate the original J on top of the stack and cast to string.
    #   e#     Find the index (-1 if not found) of the latter in the former.
    )*  e#     Increment the index and multiply it with the result from `mp'.
        e#     This yields 0 iff J is composite or not a subtring of I.
  },    e#   Keep J if the product is non-zero.
  ,     e#   Push the length of the filtered range.
  easi  e#   Cast the array of command-line arguments to string, then to integer.
  ^     e#   XOR it with the length of the filtered range.
}g      e# Repeat while theresult is non-zero.

6

CJam, 40 ไบต์

li2sa{_)\{1$\#)},,3$-}{i{)_mp!}gsa+}w]W=

ลองออนไลน์

ฉันแน่ใจว่าสิ่งนี้มาเป็นสิ่งที่น่าตกใจมาก แต่จริงๆแล้วมันยาวกว่าวิธีที่เดนนิสโพสต์ ไม่ใช่เพราะฉันไม่ได้มีความหวังสูงมาก แต่ฉันต้องการที่จะให้มันยิงต่อไป และเนื่องจากมันใช้งานได้ดูสมเหตุสมผลสำหรับฉันและฉันเชื่อว่ามันแตกต่างกันพอสมควรอย่างน้อยก็มีความสนใจฉันจึงคิดว่าฉันจะโพสต์ต่อไป

แนวคิดพื้นฐานที่นี่คือฉันสร้างรายการหมายเลขเฉพาะในลูปเพิ่มหมายเลขเฉพาะที่ใหญ่กว่าถัดไปลงในรายการในแต่ละขั้นตอน เพื่อตรวจสอบการเลิกจ้างฉันนับจำนวนองค์ประกอบอื่นที่ไม่ใช่องค์ประกอบสุดท้ายในรายการเป็นสตริงย่อยขององค์ประกอบสุดท้าย หากการนับนี้เท่ากับอินพุทnเราก็เสร็จแล้ว

คำอธิบาย:

li    Get input and convert to integer.
2sa   Seed list of primes with ["2"]. The primes are stored as strings to make
      the later substring search more streamlined.
{     Start of while loop condition.
  _   Copy list of primes.
  )     Pop off last prime from list.
  \     Swap remaining list to top.
  {     Start of filter block for substring matches with all smaller primes.
    1$    Copy test prime to top.
    \     Swap the smaller prime to top to get correct order for substring search.
    #     Search.
    )     Increment to get truthy value (Search returns -1 if not found).
  },    End of filter. We have a list of smaller primes that are substrings now.
  ,     Count list entries.
  3$    Copy input n to top.
  -     Subtract the two for comparison. If they are different, continue loop.
}     End of while loop condition.
{     Start of while loop body. We need to generate the next prime.
  i     The largest prime so far is still on the stack, but as string.
        Convert it to integer.
  {     Start of loop for prime candidates.
    )     Increment current candidate value.
    _mp   Check if it is prime.
    !     Negate, loop needs to continue if it is not a prime.
  }g    End loop for prime candidates. On exit, next prime is found.
  sa+   Convert it to string, and add it to list of primes.
}w    End of while loop body.
]W=   Solution is at top of stack. Discard other stack entries.

4

Pyth - 25 ไบต์

ตัวกรองแบบซ้อนภายในเพื่อคำนวณหน่วยความจำด้านนอกเพื่อค้นหาอันดับแรกที่มีหน่วยความจำที่ต้องการ

f&!tPTqlf&!tPY}`Y`TtStTQ2

Test Suite


r2TแทนtStT
Jakube


2

JavaScript ES6, 106 ไบต์

n=>{for(a=[],i=2;a.filter(c=>(''+i).search(c)+1).length-n-1;a.push(i))while(!a.every(c=>i%c))i++;return i}

นี่คือรุ่นที่ไม่ได้แต่งแต้มพร้อมคำอธิบาย:

n=>{
  /**
   * a = list of primes
   * i = current integer
   * Iterate until number of members in a that are substring of i == n-1
   * After each iteration push the current value of i onto a
   */
  for(a=[],i=2; a.filter(c=>(''+i).search(c)+1).length-n-1; a.push(i)) {
    // Iterate until no member of a exactly divides i and increment i per iteration
    while(!a.every(c=>i%c)) i++;
  }
  return i;
}

ของหลักสูตรนี้ได้รับช้าอย่างน่ากลัวค่อนข้างเร็ว อย่างไรก็ตาม OP ได้ระบุว่าไม่มีการ จำกัด เวลา


วิธีแก้ปัญหาที่ดีการใช้งานที่ชาญฉลาดaและi%cเพื่อตรวจสอบคุณสมบัติที่ดีเยี่ยม คุณสามารถบันทึกสองไบต์โดยเปลี่ยน{return i}else{a.push(i)}เป็นreturn i;else a.push(i)ฉันเชื่อว่าฟังก์ชั่นที่ไม่ระบุชื่อได้รับอนุญาตเช่นกันซึ่งจะช่วยเพิ่มสองไบต์ที่จุดเริ่มต้น
ETHproductions

@ETHproductions ขอบคุณไม่คิดอย่างนั้น แม้ว่าฉันจะสามารถโกนทิ้งได้ถึง 7 ไบต์และลบif...elseตรรกะทั้งหมดด้วยการพันในวง
George Reith

ว้าวนั่นมันฉลาด! ถ้าคุณรวมi++กับi%c?
ETHproductions

@ETHproductions จะไม่ทำงานเพราะนั่นจะวนซ้ำสำหรับทุกค่าaและการโทรครั้งต่อไปจะผิดiเช่นเมื่อเราพบ 10 ครั้งมันจะวนซ้ำ 10 ครั้งสำหรับการวนซ้ำรอบนอกแต่ละครั้ง
George Reith

@ETHproductions อ่าใช่ตอนแรกฉันต้องการใช้การเรียกซ้ำ แต่ถึงขีด จำกัด สแต็กก่อนที่จะไปถึงข้อกำหนดขั้นต่ำของ OP ทีนี้มันกลับมาเป็นเหมือนเดิมมันน่าจะเป็นไปได้ ... บนมัน ...
George Reith

2

Brachylog (2), 12 ไบต์ท้าทาย postdates ภาษา

~{ṗ≜{sṗ}ᵘkl}

ลองออนไลน์!

ก่อนหน้านี้มีการใช้งาน 13 ไบต์ᶠdแต่ตอนนี้ได้รับตัวย่อแล้วตัดลงเหลือ 12 เนื่องจากภาษาดังกล่าวยังคงท้าทายอยู่ต่อไปและคุณลักษณะนี้เป็นคุณสมบัติที่ไม่ได้เพิ่มเข้ามาสำหรับความท้าทายนี้โดยเฉพาะฉันก็เช่นกัน ใช้มัน.

ตามปกติใน Brachylog นี่คือฟังก์ชั่นไม่ใช่โปรแกรมเต็มรูปแบบ

คำอธิบาย

~{ṗ≜{sṗ}ᵘkl}
~{         }  Find a value for which the following is true:
  ṗ             The value is prime;
   ≜            (evaluation strategy hint; avoids an infinite loop)
    {  }ᵘ       The set of unique
     sṗ         substrings which are prime
          l     has a length equal to {the input}
         k      when one element is removed.

สิ่งนี้ทำให้เรามีขนาดเล็กที่สุดพร้อมด้วยคุณสมบัติที่เราต้องการเพราะตรวจสอบค่าใกล้ 0 ก่อน


1

Python 2, 163 154 Bytes

ฉันเหนื่อยเกินกว่าจะเล่นกอล์ฟ .. หวังว่าเมื่อฉันตื่นขึ้นมาในวันพรุ่งนี้ฉันจะสามารถปรับปรุงมันได้

p=lambda n:all(n%x for x in range(2,n))
g=input()
s=2
while not(p(s)and len([l for l in[str(x)for x in range(2,s)if p(x)]if l in str(s)])==g):s+=1
print s

1

Julia, 86 ไบต์

n->for i=1:~0>>>1 isprime(i)&&sum(j->contains("$i","$j"),primes(i-1))==n&&return i;end

มันอธิบายได้ด้วยตนเองในทางปฏิบัติ วนซ้ำจำนวนเต็มบวกทั้งหมดและทุกครั้งที่พบจำนวนผลรวมจะเป็นชุดบูลีนที่ระบุว่าชุดของจำนวนเฉพาะน้อยกว่าชุดปัจจุบันเป็นสตริงย่อยของชุดปัจจุบัน หากพบรายการที่มีจำนวนการจับคู่ที่จำเป็นให้ส่งคืนค่านั้น

เวลาทำงานช้าลงสำหรับ n = 11 และน่าจะเป็นเพราะค่าส่วนใหญ่สูงกว่า 11 - โดยเฉพาะบนแล็ปท็อปของฉัน n = 11 ใช้เวลาประมาณ 33 วินาที


วิธีการที่สะอาดและสง่างามแม้ว่าจะใช้งานได้กับระบบ 64 บิตเท่านั้น (ตำหนิระบบประเภท Julia สำหรับที่ - บนแพลตฟอร์ม 32 บิต2^63ประเมิน0ว่าเป็น Julia จะใช้ค่าเริ่มต้นInt32สำหรับตัวอักษรจำนวนเต็มบนระบบ 32 บิต - sic!) สำนวนสั้นที่สุดที่จะทำให้การแก้ปัญหาทำงานบนระบบ 32- บิตfor i=1:uint(-1)นั้น แต่มันมีค่ามากกว่า 2 ไบต์ อย่างไรก็ตามมันเป็นเรื่องยากที่จะต้องมีการทดสอบวิธีแก้ไขปัญหากอล์ฟในทุกแพลตฟอร์มดังนั้น +1
pawel.boczarski

@ pawel.boczarski - ฉันสามารถแก้ไขได้โดยใช้การขยับบิต มีรูปลักษณ์ที่ ...
เกลน O

ฉันยังลบ "แผนที่" เพราะมันซ้ำซ้อนภายในผลรวมเนื่องจากผลรวมสามารถใช้ฟังก์ชันที่ใช้กับแต่ละคำก่อนรวม
เกลน O

0

Haskell, 149 147 144 ไบต์

(127 ไบต์ไม่นับการimportประกาศ)

import Data.List
i x=x`elem`nubBy(((>1).).gcd)[2..x]
f n=[p|p<-[2..],i p,n==length(nub[x|x<-[read b|a<-tails$show p,b<-tail$inits a],i x])-1]!!0

โหมโรงข้อมูลรายการ> แผนที่ f [0..20]
[2,13,23,113,137,1237,1733,1373,1373,12373,11317,23719 ขัดจังหวะ

เอาต์พุตข้างต้นถูกสร้างขึ้นพร้อมคำจำกัดความที่ยาวขึ้น

i x=and$[x>1]++[rem x n>0|n<-[2..x-1]]

ใหม่สั้นลง 3 ตัวอักษรคำจำกัดความช้ากว่ามากฉันจะได้เพียง 5 หมายเลขแรกตามลำดับก่อนที่จะหมดความอดทนและยกเลิก



0

PHP, 124 ไบต์

for($p=1;;){for($i=$c=0;$i-1;)for($i=++$p;$p%--$i;);$m[]=$p;foreach($m as$q)$c+=!!strstr($p,"$q");$c-1-$argv[1]?:die("$p");}

รับอินพุตจากอาร์กิวเมนต์บรรทัดคำสั่ง -rทำงานด้วย

ทำให้พังถล่ม

for($p=1;;)
{
    for($i=$c=0;$i-1;)for($i=++$p;$p%--$i;);    // find prime $p
    $m[]=$p;                                    // remember that prime
    foreach($m as$q)$c+=!!strstr($p,"$q");      // count memory primes
    $c-1-$argv[1]?:die("$p");                   // if memory==N, exit
}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.