বর্ধিত কুইন


23

আপনার কাজটি এমন কোনও প্রোগ্রাম বা ফাংশন লিখতে হয় যা এর উত্স কোডের প্রথম অক্ষরটিকে, তারপরে দ্বিতীয়টি, তৃতীয়টি ... প্রতিবার চালিত হওয়ার পরে আউটপুট দেয়।

উদাহরণস্বরূপ, যদি আপনার প্রোগ্রামটি ফাইলের fooভাষায় barথাকে baz.barতবে আপনার এইরকম আউটপুট পাওয়া উচিত:

λ bar baz.bar
f
λ bar baz.bar
o
λ bar baz.bar
o

আপনার প্রোগ্রামটি এই ফ্যাশনে এর উত্স কোডটি মুদ্রণের পরে কিছু করতে পারে। আপনি ফাইলটির উত্স কোডটি পরিবর্তন করতে পারেন তবে মনে রাখবেন যে মুদ্রিত হওয়া উত্স কোডটি মূল উত্স কোড।

এটি একটি কোড-গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতে।


1
যদি আমরা ফাইলটির উত্স কোডটি সংশোধন করতে পারি তবে এর অর্থ কি আমরা এটিও পড়তে পারি?
ফ্লিপট্যাক

1
@ Flp.Tkc ভাল প্রশ্ন। সত্যিই আমার কোন ধারণা নেই। আমি চাই না আপনি উত্সটি পড়ে কুইনটি তৈরি করুন, তবে আপনি কেবল ফাইলটি পরিবর্তনের জন্য উত্সটি পড়লে আমি ঠিক আছি।
কনর ও'ব্রায়েন

উত্তর:


6

জেলি , 12 বাইট

“;⁾vṾ®ȯ©Ḣ”vṾ

এটি একটি নীলাদিক লিঙ্ক। এটি অনলাইন চেষ্টা করুন! (লিঙ্কটি বারো বার কল করার জন্য কোড অন্তর্ভুক্ত))

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

“;⁾vṾ®ȯ©Ḣ”vṾ  Niladic link.

“;⁾vṾ®ȯ©Ḣ”    Set the left argument and the return value to s =: ';⁾vṾ®ȯ©Ḣ'.
           Ṿ  Uneval; yield r =: '“;⁾vṾ®ȯ©Ḣ”', a string representation of s.
          v   Eval; execute s as a Jelly program with argument r.

 ⁾vV          Yield 'vṾ'.
;             Concatenate r and 'vṾ', yielding q =: '“;⁾vṾ®ȯ©Ḣ”vṾ'.
    ®ȯ        Take the flat logical OR of the register (initially 0) and q.
              This replaces 0 with q in the first run, but it will yield the
              content of the register in subsequent runs.
      ©       Copy the result to the register.
       Ḣ      Head; pop and yield the first character of the register.
              This modifies the string in the register, so it holds one fewer
              character after each call.

একটি যুক্ত বোনাস হিসাবে, যেহেতু নিবন্ধকটি বারো বারের পরে একটি খালি স্ট্রিং রাখবে, এটি আবার মিথ্যা এবং লিঙ্কটি শুরু হওয়ার জন্য প্রস্তুত। 24 বার লিঙ্কটি কল করা উত্স কোডটি দু'বার আউটপুট করবে, এটিকে তিনবার তিনবার কল করবে etc.


আমি জেলিকে চিনি না, তাই ফুটারটি কী করবে? কেন 17 ডলার?
কনর ও'ব্রায়েন

উপরের লিঙ্কটি কল করুন ( ¢), পরিচয় ফাংশন ( ¹, প্রথম কল করার পরে সত্যই প্রয়োজন নেই), রিটার্ন মান লাইনফিডে সেট করুন ( , অন্তর্ভুক্তভাবে পূর্ববর্তী রিটার্ন মানটি মুদ্রণ করে), পুনরাবৃত্তি করুন। ¹এবং উভয় সুপারস্ক্রিপ্ট, তবে এগুলি সম্পর্কিত নয়। আমি এগুলিকে কম বিভ্রান্তকারী ¢;¢;¢;¢;¢;¢;¢;¢;¢;¢;¢;¢(কল, কনটেনেটেট, পুনরাবৃত্তি) দিয়ে প্রতিস্থাপন করেছি ।
ডেনিস

12

জাভাস্ক্রিপ্ট - 26 বাইট

সংজ্ঞা f()দেয় যা উত্স কোড অক্ষর অক্ষর অনুসারে প্রদান করে।

n=0;f=x=>("n=0;f="+f)[n++]

এটির অক্ষর ফুরিয়ে যাওয়ার পরে অপরিবর্তিত ফিরে আসে।

n=0;f=x=>("n=0;f="+f)[n++]
for(i=0;i<30;i++){console.log(f())} //test harness


যদি আমি ভুল না হয়ে থাকেন তবে আপনাকে কোডের অংশ হিসাবে ফাংশন কলটি অন্তর্ভুক্ত করতে হবে।
মামা ফান রোল

প্রাসঙ্গিক মেটা পোস্টের সাথে @ মামাফুনরোল লিঙ্ক?
ডাউনওয়েট

আমি কারও সম্পর্কে জানি না: পি যাইহোক, আমি সবসময়ই ভেবেছিলাম যে ফাংশন কলটি খোদাইয়ের অংশ ছিল; আমি কি কিছু মিস করছি?
মামা ফান রোল

@ মামাফুনরল বিশেষভাবে ফাংশনগুলিকে মঞ্জুরি দেয় তাই কোনও কলের প্রয়োজন হবে না। যাইহোক, এই পার্টিশিকারি চ্যালেঞ্জের পক্ষে এটি তেমন কোনও অর্থবোধ করে না।
ডেনিস

ঠিক আছে, নিশ্চিত করা।
মামা ফান রোল

2

স্ট্যাকড , নন-কেপটিং, 34 বাইট

[tostr ':!' + execCounter # out]:!

স্ট্যান্ডার্ড কুইনে একটি প্রকরণ। এটি একটি সম্পূর্ণ প্রোগ্রাম। এটি execCounterএই প্রোগ্রামটি বিশেষত কতবার চালিত হয়েছিল তা পেতে ব্যবহার করে। সবকিছু আউটপুট দেওয়ার পরে ত্রুটি।

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


2

পিপ , 31 বাইট

{Y"{Y (yRsRPy++v)}"(yRsRPy++v)}

একটি বেনামে ফাংশন। এটি টিআইওতে পরীক্ষা করুন!

ব্যাখ্যা

এই স্ট্যান্ডার্ড পাইপ কুইন দিয়ে শুরু করুন:

Y"Y yRsRPy"yRsRPy
Y"Y yRsRPy"        Yank that string into y
           yRsRPy  In y, replace the space with repr(y)

এটিকে একটি ক্রিয়াকলাপ করতে এটিকে কোঁকড়ানো ধনুর্বন্ধনীগুলিতে মুড়িয়ে দিন। এখন, পুরো উত্সটি ফিরিয়ে দেওয়ার পরিবর্তে আমাদের এটির সূচি দেওয়া দরকার। সূচকের জন্য একটি বৈশ্বিক পরিবর্তনশীল ব্যবহার করা এবং প্রতিটি সময় বাড়ানো "প্রয়োজনীয় অক্ষর প্রত্যেক বার বলা হয়" পূরণ করবে। vএটি সেরা প্রার্থী কারণ এটি পূর্বনির্ধারিত -1। প্রথমবার এটি বাড়ানো 0পরবর্তী সময় 1ইত্যাদির একটি সূচক দেয় time

পিপে চক্রীয় সূচক রয়েছে, সুতরাং একবার ফাংশনটি তার শেষ চরিত্রটি মুদ্রণের পরে এটি শুরুতে শুরু হবে।


1

পাইথন, 90 বাইট

স্ট্যান্ডার্ড পাইথন কুইনে একটি এক্সটেনশন (গল্ফিং টিপস স্বাগত জানায়):

def f(n=0,s='def f(n=0,s=%r):\n while 1:yield(s%%s)[n];n+=1'):
 while 1:yield(s%s)[n];n+=1

এটি একটি অজগর জেনারেটর ফাংশন , এর অর্থ হল আপনি এটির উপরে পুনরাবৃত্তি করেন এবং প্রতিটি পুনরাবৃত্তি উত্স কোডে পরবর্তী অক্ষর সরবরাহ করে। সমস্ত চরিত্রগুলি যখন ফিরে আসবে তখন এটি ক্রাশ হয়ে যায় IndexError

পরীক্ষার জন্য, কেবল প্রোগ্রামের শেষে এই স্ক্রিপ্টটি যুক্ত করুন:

source = ''
try:
    # Call generator, add characters to the string
    for char in f():
        source += char
except IndexError:
    # Generator has reached end of source code
    pass

print(source)

অথবা এটি অনলাইন চেষ্টা করুন!


1

*> <> , 13 21 বাইট

" r:2+a1Fi1+:1F1+[ro;

\nসূচকের উপর নজর রাখতে নামক একটি ফাইল তৈরি করে ।

এটি আরও গল্ফ হতে সক্ষম হতে পারে তবে তত্ক্ষণাত্ আমার দিকে ঝাঁপিয়ে পড়ে ...

আউটপুট

$ starfish incrementalquine.sf 
"$ starfish incrementalquine.sf 
 $ starfish incrementalquine.sf 
r$ starfish incrementalquine.sf 
:$ starfish incrementalquine.sf 
2$ starfish incrementalquine.sf 
+$ starfish incrementalquine.sf 
a$ starfish incrementalquine.sf 
1$ starfish incrementalquine.sf 
F$ starfish incrementalquine.sf 
i$ starfish incrementalquine.sf 
1$ starfish incrementalquine.sf 
+$ starfish incrementalquine.sf 
:$ starfish incrementalquine.sf 
1$ starfish incrementalquine.sf 
F$ starfish incrementalquine.sf 
1$ starfish incrementalquine.sf 
+$ starfish incrementalquine.sf 
[$ starfish incrementalquine.sf 
r$ starfish incrementalquine.sf 
o$ starfish incrementalquine.sf 
;$ starfish incrementalquine.sf

ব্যাখ্যা

" r:2+                 build the quine
      a1F              open file named "\n"
         i1+:          read input, increment by 1, duplicate
             1F        save incremented input to file
               1+[     increment input, copy that many values to a new stack
                  ro   output the character at the beginning of the new stack
                    ;  end

বর্ধমান কুইন প্রতারণা

a1Fi1+:0go1F;

ব্যাখ্যা

a1F            open file named "\n"
   i1+         read input and add 1 to it
      :0g      push the value at (input,0) to the stack
         o     output the value
          1F   save the incremented input to the file
            ;  exit

হাহাহা, আপনি কোনও ফাইলের নাম "\ n" রাখতে পারবেন আমার ধারণা ছিল না। যদিও এই প্রযুক্তিগতভাবে উত্স কোডটি পড়ে, gনির্দেশ অনুসারে।
কনর ও'ব্রায়েন

@ কনরও ব্রায়ান, আহ যথেষ্ট ন্যায্য। হুম ...
রেড স্টারকোডার

*> <> এর কি কোনও ধরণের স্ট্যাক ইনডেক্সিং রয়েছে? নাকি কমান্ড পুনরাবৃত্তি? তারপরে, আপনি "your code goes here;> <> এর জন্য স্ট্যান্ডার্ড কুইন ফ্রেমওয়ার্ক ব্যবহার করতে পারেন , তারপরে স্ট্যাকের নবম সদস্যকে অ্যাক্সেস করুন
কনার ও'ব্রায়েন

@ কনরও ব্রায়েন হ্যাঁ টিল পেলিকান আমার অন্যান্য প্রতারণামূলক কুইনের উত্তরটিতে আমাকে এই রৌদ্ররূপটি দেখিয়েছেন :)।
রেডস্টারকোডার

1
@ রেডস্ট্রাকোডার আমি কুইনে আরও বেশি কাজ করে যাচ্ছি (হ্যাঁ!) এবং আমি একটি দুর্দান্ত কৌশল পেয়েছি, যদি আপনি # এর জন্য আর প্রতিস্থাপন করতে পারেন তবে: 1- দ্য # লাইক; #; বা [+ + 1F1 + 1iF1a-1: ইত্যাদি: "আমি এই মুহূর্তে এই পরীক্ষা করতে পারবেন না কিন্তু আমি বিশ্বাস করি আপনার কোড থেকে 1 বাইট মধ্যেও> <> quines মত #o <-1 করা যেতে পারে।": D:
টেল পেলিকান

1

গণিত, 91 বাইট

মন্তব্য খুব স্বাগত; আমি এখনও দড়িগুলি শিখছি যে কোয়াইনগুলি সঠিক রাইনগুলি।

(If[!NumberQ[q], q = 0]; StringTake[ToString[#0]<>FromCharacterCode[{91, 93}], {++q}]) & []

কোনও তর্ক ছাড়াই বারবার বলা একটি ফাংশন সংজ্ঞায়িত করে। 91 তম কল করার পরে এটি একটি বড় ত্রুটি ছুঁড়ে ফেলেছে এবং মূল্য ছাড়িয়ে দেয়।

কাটিয়ে উঠতে দুটি সমস্যা ছিল: প্রথমত, আমি কেবল ব্যবহার করতে চেয়েছিলাম StringTake[ToString[#0]<>"[]"], তবে ToString[]উদ্ধৃতি চিহ্নগুলি মুছে ফেলা হচ্ছে বলে মনে হচ্ছে; সুতরাং আমি "[]"দ্বারা প্রতিস্থাপন করতে হবে FromCharacterCode[{91, 93}]। দ্বিতীয়ত, গাণিতিক ভেরিয়েবলগুলি অবিবেচনাবিহীনভাবে শুরু হয়, সুতরাং সংজ্ঞায়িত ++qহওয়ার আগে আমি কল করতে পারি না q; এই কারণেই প্রাথমিক If[!NumberQ[q], q = 0]প্রয়োজন হয়।

অপ্রাসঙ্গিক চোদা: খোঁজ করার সময় NumberQআমি জানতে পারি যে ম্যাথামেটিকার একটি ফাংশন রয়েছে TrueQ... যা হ্যাঁ, Trueযদি যুক্তি হয় Trueএবং Falseযদি যুক্তি হয় তবে ফিরে আসে False! (ইউটিলিটিটি হ'ল এটি Falseঅন্যান্য সমস্ত যুক্তিতেও ফিরে আসে ))


1

মাইক্রোস্ক্রিপ্ট দ্বিতীয়, 40 33 বাইট

একটি কোড ব্লক আক্ষরিক, কোনও ফাংশনের কাছে ভাষার নিকটতম সমতুল্য:

{ss1K+>K>s#<v{o}sl*v!(123v)lKp<o}

দৌড়ানোর পরে, xআবার প্রার্থনা করা সহজ করার জন্য এটি নিজেকে আবার পিছনে ফেলে ।


0

বাশ (এবং zsh, ksh), 39-বাইট

a=`<$0`;pwd>>0;echo ${a:`wc -l<0`-1:1}

প্রোগ্রামটি একবার মুদ্রিত হওয়ার পরে এটি কোনও কিছুই মুদ্রণ করে না।

0বর্তমান ডিরেক্টরি এবং চালানোতে নিশ্চিত হওয়া যায় না:

bash iquine.bash

পিপিসিজিতে আপনাকে স্বাগতম! আপনার সূচক বাড়ানোর জন্য একটি চতুর ধারণা পেয়েছেন। দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে এই উত্তরটি নিজস্ব উত্স কোডটি পড়ে কাজ করে, যার অর্থ এটি আমাদের মানদণ্ডগুলির দ্বারা কোনও বৈধ কুইন নয় । যদি আপনি এটির নিজস্ব উত্স পড়া ছাড়া অন্য কুইন কৌশলগুলি ব্যবহার করার জন্য এটি পরিবর্তন করেন তবে এটির উত্তম উত্তর হবে।
ডিএলসাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.