ক্রেজি গ্রন্থাগারকের আকর্ষণীয় প্রাইম পারমুটেশন সূচি নম্বর জেনারেটর


13

আপনি আপনার প্রাইম সিকোয়েন্স কোডটি দিয়ে দিনটি বাঁচিয়েছিলেন , এবং গণিত শিক্ষক এটি পছন্দ করেছিলেন। এত বেশি যে গ্রন্থাগারিকদের কাছে একটি নতুন চ্যালেঞ্জ উত্থাপিত হয়েছিল (এ / কে / এ, আপনার বস) অভিনন্দন, আপনি সমাধানটি কোড করতে পারেন যাতে গ্রন্থাগারিক আবার গণিত শিক্ষককে মুগ্ধ করতে পারে।

বেস -10, এন -এ প্রাকৃতিক সংখ্যার ক্রম দিয়ে শুরু করুন

0, 1, 2, 3, 4, 5, 6 ...

বাদ দিয়ে 0এবং 1এই অনুক্রমের প্রতিটি সংখ্যা হয় প্রধান, পি

2, 3, 5, 7, 11, 13 ...

বা যৌগিক, সি

4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20 ...

কিভাবে থেকে একটি সংখ্যা দশমিক সম্প্রসারণ মধ্যে একটি পূর্ণসংখ্যা অঙ্ক সন্নিবেশ করতে গ্রন্থাগারিক চিন্তার নিয়ে গভীরভাবে চিন্তা করা পি , গণিত শিক্ষক পরিবর্তে একটি ফাংশন নির্মিত g (x, Y) যা নম্বর লাগে xথেকে এন সঙ্গে 1 <= x <= 9এবং একটি সংখ্যা yথেকে সি এবং টিপে xমধ্যে yবাম থেকে ডানে ক্রমে প্রতিটি অবস্থানের দশমিক বিস্তৃতি , কেবলমাত্র অনন্য সংখ্যা নির্বাচন করে।

উদাহরণস্বরূপ, জি (3,14) হ'ল 314, 134, 143। যাইহোক, জি (1,14) শুধুমাত্র 114, 141, যেমন কিনা পূর্বে লিখুন বা সন্নিবেশ 1মধ্যে 14একই সংখ্যা 114উৎপন্ন হয়।

গণিতের শিক্ষক বিস্মিত হয়েছিলেন যে আপনি যদি ক্রমবর্ধমান ক্রম গ্রহণ করেন তবে আপনি পি তে একটি নম্বর পাওয়ার আগে আপনাকে কতবার এই অনুমতিগুলি করতে হবে x। গণিত শিক্ষক এটিকে একটি সংখ্যার সমন্বিত -প্রধান সূচক বলেছিলেন এবং এটি সিপিআই (y) হিসাবে লিখেছিলেন ।

উদাহরণস্বরূপ, 4মাত্র দুবার সম্পন্ন করা প্রয়োজন: 14, 41যেহেতু 41প্রধানমন্ত্রী, তাই সি পি আই (4) হয় 2। যাইহোক, 86 বার কাজ করতে হবে, দরকার 18, 81, 28, 82, 38, 83উপনীত হওয়ার আগে 83, একটি মৌলিক সংখ্যা তাই সি পি আই (8) হয় 6

আপনার কাজটি এমন কোড লিখন যা এই ইনপুট নম্বরটি দিয়ে এই সংমিশ্রণ-প্রাইম সূচকটি আউটপুট দেয় ।

ইনপুট

  • একটি একক পূর্ণসংখ্যা y, যেমন যে yহয় সি , ফাংশন আর্গুমেন্ট, stdin, বা সমমানের মাধ্যমে ইনপুট।
  • গণনার উদ্দেশ্যে, আপনি ধরে নিতে পারেন যে yযথাক্রমে পূর্ণসংখ্যার ব্যাপ্তিগুলি উপযুক্ত হবে (উদাহরণস্বরূপ, উপরের সীমানা হিসাবে 2 31 -1 ধরে নেওয়া )।
  • সি তেy না থাকার আচরণটি অপরিজ্ঞাত।

আউটপুট

উপরে বর্ণিত হিসাবে গণনা করা ফলাফল কম্পোজিট-প্রাইম সূচক , দুটি ব্যতিক্রম ব্যতীত STDOUT বা সমমানের আউটপুট:

  • যদি শেষ বিন্যাস (অর্থাত, সংযোজন 9করার y) অন্যতম একটি মৌলিক ফলাফল, আউটপুট -1। একটি উদাহরণ, নীচে প্রসারিত, হয় y=14
  • যদি কোনও অনুগমন না হয় (যেমন, জি (x, y) সকলের জন্য সি এর একটি উপসেট 1 <= x <= 9), আউটপুট 0। একটি উদাহরণ, নীচে প্রসারিত, হয় y=20

উদাহরণ

 y -> operations             : output
 4 -> 14, 41                 : 2
 6 -> 16, 61                 : 2
 8 -> 18, 81, 28, 82, 38, 83 : 6
 9 -> 19                     : 1
10 -> 110, 101               : 2
12 -> 112, 121, 212, 122, 312, 132, 123, 412, 142, 124, 512, 152, 125, 612, 162, 126, 712, 172, 127 : 19
14 -> 114, 141, 214, 124, 142, 314, 134, 143, 414, 144, 514, 154, 145, 614, 164, 146, 714, 174, 147, 814, 184, 148, 914, 194, 149 : -1
15 -> 115, 151               : 2
16 -> 116, 161, 216, 126, 162, 316, 136, 163 : 8
18 -> 118, 181               : 2
20 -> 120, 210, 201, 220, 202, 320, 230, 203, 420, 240, 204, 520, 250, 205, 620, 260, 206, 720, 270, 207, 820, 280, 208, 920, 290, 209 : 0

বিধিনিষেধ

  • এটি কোড-গল্ফ, যেহেতু আপনার এটি সূচি কার্ডে প্রতিলিপি করা দরকার যাতে গ্রন্থাগারিক গণিত শিক্ষককে এবং আপনার হাতের ক্র্যাম্পগুলি সহজেই প্রদর্শন করতে পারে।
  • স্ট্যান্ডার্ড লুফোলের বিধিনিষেধগুলি প্রযোজ্য। গ্রন্থাগারিক প্রতারকদের সহ্য করে না।

লিডারবোর্ড


9 এর জন্য, 19প্রধান, তাই আউটপুট 1 হওয়া উচিত নয়?
isaacg

বাহ, দুর্দান্ত উত্তর চার্ট!
ক্যাসকেডিং-স্টাইল

1
@ ক্যাসকেডিং-স্টাইল যদি আপনি লিডারবোর্ডটি বোঝেন তবে এটি মূলত মার্টিনের হাতের কাজ
অ্যাডমবর্কবার্ক

উত্তর:



2

হাস্কেল, 166 161 বাইট

p n=mod(product[1..n-1]^2)n>0
q=p.read
n#c=[h++c:t|i<-[0..length n],(h,t)<-[splitAt i n]]
[y]%i|q y= -1|1<2=0
(y:z)%i|q y=i|1<2=z%(i+1)
f n=((n#)=<<['1'..'9'])%1 

ব্যবহারের উদাহরণ: f "8"-> 6, f "14"-> -1, f "20"-> 0

এটি কীভাবে কাজ করে: pহ'ল আদিমত্ব পরীক্ষা ( একটি ভিন্ন চ্যালেঞ্জের @ মরিসের উত্তর থেকে চুরি হয়েছে )। স্ট্রিং থেকে পূর্ণসংখ্যায় প্রকার রূপান্তর করতে qএকটি মোড়ক p। প্রতিটি অবস্থানে n # cসন্নিবেশ করান । সংখ্যার একটি তালিকা এবং একটি সূচক নেয় । তালিকার প্রথম উপাদানটি যখন প্রধান হয়, ফিরে আসুন, অন্যথায় তালিকার লেজটি সহ পুনরুদ্ধার করুন । যখন কোনও একক উপাদান বাকি আছে তখন থামুন এবং যদি এটি প্রধান এবং অন্যথায় ফিরে আসে ।cn%iii+1-10


1

মিনকোলাং 0.11 , 85 বাইট

n1(l*$d`)d9[i3G(0c2c$%$r2c*l*2c3c1+*++2gl:d2G)2gx1c2G3gx]r3XS(2M4&I)N.ikI1-4&1~N.1+N.

এখানে চেষ্টা করুন।

ব্যাখ্যা (শীঘ্রই আসছে)

n            Take integer from input (say, n)
1(           Calculate smallest power of 10 greater than n (say, a)
  l*         Multiply by 10
    $d`      Duplicate stack and push n>a
       )     Close while loop (ends when n<=a)
        d    Duplicates a (let's call it b)

9[                                                 For loop that runs 9 times 
  i1+                                              Loop counter + 1 (say, i)
     3G                                            Puts the loop counter in position 3
       (                                           Opens while loop
        0c2c$%                                     Copies n and b and pushes n//b, n%b
              $r                                   Swaps top two elements of stack
                2c*l*                              Copies b and multiplies by 10
                     2c3c*                         Copies b and i and multiplies them
                          ++                       Adds it all together (inserts i)
                            2gl:                   Gets b and divides by 10
                                d2G                Duplicates and puts one copy back
                                   )               Closes while loop (breaks when b=0)
                                    2gx            Gets and dumps b
                                       1c2G        Copies a and puts it in b's place
                                           3gx     Get and dumps i
                                              ]    Close for loop

r       Reverses stack
 3X     Dumps the top three elements (namely, n, a, and b)
   S    Removes duplicates

(                           Opens while loop
 2M                         Pushes 1 if top of stack is prime, 0 otherwise
   4&                       Jump four spaces if prime
     I)N.                   If the loop actually finishes, then all were composite,
                             so output 0 and stop.
         ik                 Pushes loop counter and breaks
           I1-              Pushes length of stack minus 1 (0 if last one was prime)
              4&1~N.        If this is 0, pushes -1, outputs as integer, and stops.
                    1+N.    Adds 1, outputs as integer, and stops.

1

জাভাস্ক্রিপ্ট, 324 বাইট

y=>(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0,u=a=>a.filter((c,i)=>a.indexOf(c)==i),g=(x,y)=>u(((x,y,z)=>z.map((c,i)=>z.slice(0,i).join("")+x+z.slice(i).join("")).concat(y+x))(x,y,y.split(''))),h=(x,y)=>g(x,y).concat(x==9?[]:h(++x,y)),i=h(1,y).reduce((r,c,i)=>r?r:p(c,2)?i+1:0,0),console.log(p(y,2)||y<2?'':i==h(1,y).length?-1:i))

যদি y সি তে না থাকে তবে STDOUT আউটপুট খালি থাকে।

ব্যাখ্যা

y=>(
    //Prime Test function
    p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0,

    //Unique function
    u=a=>a.filter((c,i)=>a.indexOf(c)==i),

    //Generates numbers from a couple x and y
    g=(x,y)=>u(((x,y,z)=>z.map((c,i)=>z.slice(0,i).join("")+x+z.slice(i).join("")).concat(y+x))(x,y,y.split(''))),

    //Generates all possible numbers from y using recusion
    h=(x,y)=>g(x,y).concat(x==9?[]:h(++x,y)),

    //Check if any prime in the generated numbers
    i=h(1,y).reduce((r,c,i)=>r?r:p(c,2)?i+1:0,0),

    console.log(
        //Is Y in C ?
        p(y,2)||y<2?
            ''
            :
            // Check if the answer is not the last one
            i==h(1,y).length?-1:i)
    )

এই মন্তব্য খুব দেরী হতে পারে, কিন্তু আপনি প্রতিস্থাপন কয়েক বাইট সংরক্ষণ করতে পারি নি n%c!=0সঙ্গে n%c; c>=n-1সঙ্গে c>n-2; এবং x==9সাথে x-9?
জাকারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.