হোল 2 - প্রাইম কুইন


9

এখানে হোল 1 খুঁজুন ।

এমন একটি কুইন তৈরি করুন যা চালানোর সময় তার নিজস্ব উত্স কোডটি ব্লককে একাধিকবার আউটপুট দেয়। আসলে এটি অবশ্যই এন বার আউটপুট করতে হবে, যেখানে পরবর্তী মৌলিক সংখ্যায় এন n

আমি মনে করি একটি উদাহরণ এটি সেরা দেখায়।

[MY QUINE][MY QUINE]
[MY QUINE][MY QUINE][MY QUINE]
[MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE]
[MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE]
[MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE][MY QUINE]

প্রতিটি প্রোগ্রাম তার বেস "ব্লক" (সুতরাং [আমার কুইন]) পরবর্তী মৌলিক সংখ্যা বার আউটপুট হবে ।

কোনও সংখ্যা প্রাইম, (যেমন একটি প্রাইম ফাংশনের মতো), বা পরবর্তী প্রাইম নির্ধারণ করতে (পরবর্তী প্রাইম () ফাংশনের মতো) অনুমোদিত নয় কিনা তা গণনা করতে ফাংশনে অন্তর্নির্মিত।

  • এর অর্থ হ'ল বিভক্তির সংখ্যা তালিকাভুক্ত ফাংশনগুলিকে অনুমোদিত নয়
  • মূল কার্যকারিতা ফিরিয়ে ফেলা ফাংশনগুলি একইভাবে অনুমোদিত নয়

এটি সত্যিকারের কুইন হওয়া উচিত (কিছুটা বাদে, পরবর্তী পয়েন্টটি দেখুন), সুতরাং আপনার নিজের উত্স কোডটি পড়া উচিত নয়।

যেহেতু জাভা এবং সি # এর মতো ভাষা ইতিমধ্যে অসুবিধায় রয়েছে, আপনার সম্পূর্ণ কার্যকর কোডিংয়ের দরকার নেই need যদি এটি কোনও ফাংশনে রাখা যায় (যাকে বলা হয়) এবং পরবর্তী কুইন আউটপুট দেয় তবে আপনি ভাল।

এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম কোড জয়!


গর্ত 1 এর উত্তর কেউই দেয় নি, সুতরাং এর উত্তর দেওয়া প্রত্যেকে প্রথম ছিদ্রটির জন্য কী স্কোর পাবে?
অপ্টিমাইজার

1
আপনি কি প্রধান কার্যাদি দিয়ে অংশটি পরিষ্কার করতে পারবেন? আমরা সেগুলি ব্যবহার করতে পারি বা আমরা সেগুলি ব্যবহার করতে পারি না?
মার্টিন ইন্ডার

3
প্রাইম চেকিংকে কী বিবেচনা করা হয় এবং কী নয়? এই ধরণের যদি কোনও কুইন ব্যবহার করে প্রাইম চেকিং তৈরি করা যায় তা বিবেচনা করে, বিধিগুলি যথেষ্ট পরিষ্কার নয়
গর্বিত হাসেলেলার

@ অপ্টিমাইজার: প্রথম গর্তটির জন্য প্রত্যেকের স্কোর 0 রয়েছে যতক্ষণ না কেউ উত্তর দেয়।
স্ট্রেচ পাগল

2
@ স্ট্রেচমনিয়াক আপনার প্রশ্নের মধ্যে পরিষ্কারভাবে উল্লেখ করা উচিত যে প্রধান ফ্যাক্টরীকরণ পদ্ধতির তালিকা এবং বিভাজক পদ্ধতির তালিকা উভয়েরই অনুমোদিত নয়। দয়া করে পরের বার স্যান্ডবক্সে প্রশ্ন পোস্ট করুন।
অপ্টিমাইজার

উত্তর:


5

সিজেম, 31 বাইট

{'_'~]-3>U):U{)__,1>:*)\%}g*}_~

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

ধারণা

প্রাথমিকতা পরীক্ষা করার জন্য, আমরা উইলসনের উপপাদ্যটি ব্যবহার করব , যা উল্লেখ করে যে একটি পূর্ণসংখ্যা n> 1 প্রধান এবং যদি কেবল (এন - 1) হয়! ≡ -1 (মোড এন) , যা সত্য এবং যদি কেবল (এন - 1) হয়! + 1% n == 0

কোড

{                           }_~ e# Define a block and execute a copy.
                                e# The original block will be on top of the stack.
 '_'~]                          e# Push those characters and wrap the stack in an array.
      -3>                       e# Keep only the last three elements (QUINE).
         U):U                   e# Increment U (initially 0).
             {           }g     e# Do-while loop:
              )__               e# Increment the integer I on the stack (initially U).
                 ,1>            e#   Push [1 ... I-1].
                    :*          e#   Multiply all to push factorial(I-1).
                      )\%       e#   Push factorial(I-1) + 1 % I.
                                e# While the result is non-zero, repeat.
                                e# This pushes the next prime after U.
                           *    e# Repeat QUINE that many times.

প্রাইম ওও যাচাই করার সেই পদ্ধতিটি আপনি কীভাবে খুঁজে পেয়েছেন
অপ্টিমাইজার

3
মনে রাখা আরো সঠিক হবে। এটি উইলসনের উপপাদ্য হিসাবে পরিচিত।
ডেনিস

mp(প্রাইম?) এখন বিদ্যমান, সুতরাং সিজেমের সর্বশেষতম সংস্করণে, কেউ এটিকে আরও কিছুটা গল্ফ করতে পারে।
লিন

1
@ মরিস এটি প্রথম সর্বজনীন সংস্করণ আইআইআরসি-তে বিদ্যমান ছিল। তবে, প্রশ্নটি প্রাইম এবং ফ্যাক্টরাইজেশন অপারেটরগুলিতে নির্মিত নিষিদ্ধ।
ডেনিস

1

সিজেম, 36 35 বাইট

{]W="_~"]U):U{)_,{)1$\%!},,2>}g*}_~

এটি অবশ্যই আরও গল্ফ করা যেতে পারে।

কিভাবে এটা কাজ করে:

{                               }_~   "Copy this code block and execute the copy";
 ]W=                                  "Take just the last element from the stack";
                                      "The other thing on stack is the block from above";
    "_~"]                             "Put "_~" on stack and wrap the 2 things in an array";
                                      "At this point, the string representation of stack"
                                      "elements is identical to the source code";
         U):U                         "Increment U and update U's value. This  variable"
                                      "actually counts the number of [Quine] blocks";
             {)_,{)1$\%!},,2>}g       "Find the next prime number"
                               *      "Repeat the array that many times, thus repeat the"
                                      "[Quine] block, the next prime times";

]W=কৌতুক আমাকে স্মরণ করিয়ে দেওয়ার জন্য মার্টিনকে ধন্যবাদ :)

এটি এখানে অনলাইনে চেষ্টা করুন


1

গণিত, 248 222 বাইট

সম্পাদনা: প্রাইম-সম্পর্কিত ফাংশনটির ব্যবহার স্থির করে, তবে কুইনিংকে কিছুটা উন্নতি করেছে।

সম্পাদনা: উইলসনের উপপাদ্যে আমাকে পরিচয় করানোর জন্য ডেনিসকে ধন্যবাদ

1;n=If[ValueQ@n,n+1,1];StringJoin@Array[#<>ToString[1##,InputForm]<>#2&@@\("1;n=If[ValueQ@n,n+1,1];StringJoin@Array[#<>ToString[1##,InputForm]<>#\2&@@("*"&,For[i=n,Mod[++i!/i+1,i]>0,0];i]")&,For[i=n,Mod[++i!/i+1,i]>0,0];i]

এটি ধরে নিয়েছে যে কর্নেলটি পরবর্তী রানের (বা কমপক্ষে nপুনরায় সেট করা) রানের মধ্যে ছেড়ে যাবে , কারণ এটি nপ্রথম [MyQuine]দৌড়ানোর আগে অপরিজ্ঞাত হওয়ার উপর নির্ভর করে ।

এটি সম্ভবত অনেকগুলি সংক্ষিপ্ত করা যেতে পারে তবে কুইনদের সাথে আমার খুব বেশি অভিজ্ঞতা নেই, বিশেষত ম্যাথমেটিকায়।

এখানে একটি ব্যাখ্যা:

1;

এটি কিছুই করে না, তবে যদি পূর্বের কুইনের শেষের দিকে একত্রিত হয় তবে এটি সর্বশেষ অভিব্যক্তির ফলাফলকে 1(যা কোনও অপশক্তি) দ্বারা বহুগুণ করে এবং সেমিকোলন আউটপুটকে দমন করে। এটি নিশ্চিত করে যে [MyQuine]কোনও কিছু প্রিন্টের শেষ কপি ।

n=If[ValueQ@n,n+1,1];

এটি প্রথম কপির প্রথম দিকে সূচনা nকরে এবং তারপরে প্রতিটি অনুলিপিতে এটি বাড়িয়ে তোলে - অর্থাত এটি কেবল কয়টি অনুলিপি রয়েছে তা গণনা করে ।1[MyQuine]1n

এখনই শেষ দিকে যান:

For[i=n,Mod[++i!/i+1,i]>0,0];i

এটি উইলসনের উপপাদ্যটি ব্যবহার করে পরবর্তী প্রধানমন্ত্রীটি আবিষ্কার করে ।

StringJoin@Array[#<>ToString[1##,InputForm]<>#2&@@\("QUINE_PREFIX"*"QUINE_SUFFIX")&,NEXTPRIME[n]]

এটিই আসল কুইন। এটি NextPrime@nকোডের নিজস্ব অনুলিপি তৈরি করে। এটিও কিছুটা অদ্ভুত। হ্যাঁ, আমি সেখানে দুটি স্ট্রিং গুণ করছি এবং এর কোনও অর্থবহ ফলাফল নেই। QUINE_PREFIXদুটি স্ট্রিংয়ের আগে সমস্ত কোড QUINE_SUFFIXরয়েছে এবং দুটি স্ট্রিংয়ের পরে সমস্ত কোড রয়েছে। এখন আপনি সাধারণত যুক্তিগুলির একটি সিরিজে একটি তালিকা পরিণত করতে Apply(বা @@) ব্যবহার করেন । তবে আপনি এর Headসাথে যে কোনও Apply- প্রতিলিপি প্রতিস্থাপন করতে পারেন । সুতরাং এটি একটি পণ্য হওয়া সত্ত্বেও আমি এখনও এটিকে আমার ফাংশনে দুটি যুক্তিতে পরিণত করতে পারি। এই ফাংশনটি করে:

#<>ToString[1##,InputForm]<>#2

কোথায় #প্রথম যুক্তি (প্রিফিক্স স্ট্রিং), #2দ্বিতীয় যুক্তি (প্রত্যয় STRING) হয়, ##উভয় আর্গুমেন্ট একটি ক্রম। 1গুণটি সংরক্ষণের জন্য আমাকে প্রিপেন্ড করতে ##হবে - অন্যথায় যুক্তি তালিকায় স্প্লিট হবে ToString। যাইহোক, ToString[1##,InputForm]&@@("abc"*"def")ফিরে "abc"*"def"... ঠিক আমার যা প্রয়োজন!

আমি মনে করি কোয়েনের চারপাশে আমার প্রয়োজনীয় সমস্ত জিনিসপত্রের সাথে এখানে ভিত্তিযুক্ত evalকুইন আরও উপযুক্ত হবে। আমি পরে বা কাল এটি দেখতে হবে।


@ মার্টিনব্যাটনার প্রশ্নটি সম্পাদনা করা উচিত
গর্বিত হাসেলেলার

হেই, আমি ডেনিসের সাথে আমার এন্ট্রি আনার জন্য উইলসনের উপপাদ্যও ব্যবহার করতে পারি ';)
অপ্টিমাইজার

@ অপ্টিমাইজার তবে আমার ক্ষেত্রে কাউকে আপত্তি করার কোনও আশঙ্কা ছিল না কারণ আমি এখনও আপনার দুজনের চেয়ে 7 গুণ বেশি বাইট ব্যবহার করছি;)
মার্টিন এন্ডার

@ মার্টিনবাটনার আমি জানি: ডি যে কারণে আমি এটি ব্যবহার করিনি :)
অপ্টিমাইজার

0

জে - 60 চর

অন্যান্য উত্তরের মতো পরবর্তী-প্রধান পদ্ধতি ব্যবহার করে। (এটাই 4 p:বিট।)

((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''

খুব সুন্দর জে ট্রিকটি হ'ল যখন একটি যুক্তি দেওয়া হয় এবং কখন দুটি দেওয়া হয় f :glike সুতরাং, যদি আপনি লেখেন, তবে বলুন যে এটির মতো কাজ করে , যা দুর্দান্ত কারণ কারণ এটি একটি বাক্সযুক্ত তালিকা যার আইটেমগুলি এবং যার দৈর্ঘ্য সংখ্যার সংখ্যা।fgf :;'a'f :;'a'f :;'a'f'a';'a';'a''a'

সুতরাং আমরা এটি একটি কুইনি সাজানো জিনিস মধ্যে উত্তোলন করতে পারেন। fমনে হচ্ছে আমরা কেমন লাগে ব্যবহার (foo $~ bar), যেখানে fooস্ট্রিং অংশ যে আমরা বহুবার পুনরাবৃত্তি নির্মান, barপরবর্তী মৌলিক সংখ্যা এবং 60 দ্বারা তা বৃদ্ধি পায় তা মধ্যে স্ট্রিং এর দৈর্ঘ্য খুঁজে বের করে foo

   ((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''
((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''
   # ((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''
180
   ((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''
((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''
   # ((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''((58&$,2#{:)@;$~60*4 p:#) :;'((58&$,2#{:)@;$~60*4 p:#) :;'''
300

নতুন চশমাগুলি পূরণের জন্য আপনি কি আপনার কোডটি সংশোধন করতে পারবেন? পরবর্তী প্রাইমকে আউটপুট দেওয়ার পদ্ধতিগুলি অনুমোদিত নয় not ধন্যবাদ।
স্ট্রেচ পাগল

0

পাইথন 2.7, 214

from sys import*;R,s=range,chr(35)
def N(n):
 if n<3:return n+1
 for p in R(n+1,n+n):
    for i in R(2, p):
     if p%i==0:break
     else:return p
P=file(argv[0]).read();print(P.split(s)[0]+s)*N(P.count(chr(37)));exit(0)
#
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.