একটি অন্তর্বর্তী কুইন তৈরি করুন


17

আপনার কাজটি এমন একটি প্রোগ্রাম তৈরি করা যা চালিত হলে, আউটপুট হিসাবে নিজেকে ফিরিয়ে দেয় (এটি কোয়াইন হিসাবে পরিচিত)। যাইহোক, এই কুইনটি অবশ্যই, যখন এটি অনুলিপি করা হয়, যখন nকুইনটি ফেরত দেয় তবে এর প্রতিটি অক্ষর স্থানের nসময়ে নকল হয় , যেখানে nইতিবাচক পূর্ণসংখ্য হয় is

যদি আপনার মূল প্রোগ্রামটি হয় Derp:

Derp -> Derp (must return itself as output to be a quine)

DerpDerp -> DDeerrpp
(the "Derp" is copied twice, so each character in the output has to be copied twice)

DerpDerpDerp -> DDDeeerrrppp
etc. etc.

মনে রাখবেন যে আপনার "বেস" প্রোগ্রামটিতে আপনাকে শ্বেতক্ষেত্র থাকার অনুমতি দেওয়া হয়েছে, তবে "আন্তঃবিবাহ" করার সময় সেগুলি গণনা করা হয়। আপনার প্রোগ্রামটি বলুন

Derp 
{newline}

(নিউলাইনটি একটি অনুবর্তনযোগ্য নতুন লাইনটিকে ইঙ্গিত করে এবং এর পরেও একটি অতিরিক্ত জায়গা থাকে Derp)। নকল হয়ে গেলে

Derp 
Derp 
{newline}

আপনি আউটপুট অবশ্যই

DDeerrpp  
{newline}
{newline}

মনে রাখবেন যে এর 2পরে অতিরিক্ত জায়গা রয়েছে DDeerrpp

বিধি এবং চশমা:

  • আপনার প্রোগ্রামে কমপক্ষে দুটি স্বতন্ত্র অক্ষর থাকতে হবে (যা বোঝায় যে আপনার কোডটি কমপক্ষে 2 বাইট দীর্ঘ হতে হবে)।
  • স্ট্যান্ডার্ড কুইন বিধি প্রযোজ্য।

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোড!


1
"স্ট্যান্ডার্ড বিধিগুলি প্রযোজ্য" - এর অর্থ কি উত্স কোডটি না পড়া?
ফ্লিপট্যাক

@ ফ্লিপট্যাক এর অর্থ এই নয় যে - আরও তথ্যের জন্য লিঙ্কটি পড়ুন।
ক্লিমেজিক

উত্তর:


12

বিদারণ , 6 বাইট

'!+OR"

এটি অনলাইন চেষ্টা করুন! দুটি অনুলিপি চেষ্টা করুন! তিনটি চেষ্টা করুন!

ব্যাখ্যা

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

সম্পূর্ণতার জন্য আমি খুব শীঘ্রই পুনরায় বলব যে প্রোগ্রামটি কীভাবে কাজ করে। আমরা প্রোগ্রামটির পুনরাবৃত্তি করি বা না যাইও না (উদাঃ '!+OR"'!+OR"'!+OR"), প্রতিটি পরমাণু নিম্নলিখিত কোডটি দেখে:

R"'!+OR"'!+O

"টগল স্ট্রিং মুদ্রণ মোড, যাতে প্রোগ্রাম মুদ্রণ শুরু করা '!+ORstdout- এ, সমস্ত উদ্ধৃতি ছাড়া quine হয় যা সরাসরি। তারপরে '!পরমাণুর ভরকে অক্ষর কোডের কোড সেট করে !, +এটি বৃদ্ধি করে, যা দেয় "এবং Oপ্রিন্ট করে একই সাথে অণু ধ্বংস করার সময়। প্রোগ্রামটি শেষ হয়ে যায় কারণ কোনও পরমাণু অবশিষ্ট নেই।


11

পাইথন 2.7, 377 310 304 194 191 বাইট!

এটি আমার প্রথম গল্ফ, তাই আমি এটি খুব ভাল হওয়ার আশা করিনি। তবে আমি ভেবেছিলাম যে সমাধানটির সাথে আমি যে সমাধানটি এলাম তাতে ধারণাটি কিছুটা মজার ছিল, তাই আমি যাইহোক পোস্ট করছি।

def f():
 import threading as T,inspect as i;global t,a,i
 try:t.cancel()
 except:a=0
 a+=1;t=T.Timer(1,d);t.start()
def d():print''.join(c*a for c in i.getsource(f)+i.getsource(d)+"f()")
f()

প্রকৃতপক্ষে, এটি একটি কুইন; আপনি পারেন এটি এখানে চেষ্টা । এটি পরিদর্শন মডিউলটি বেশ শক্তভাবে গালি দেয়।

যদি আমরা এটি একই উত্স কোড x2 দিয়ে চালানোর চেষ্টা করি তবে আমরা সঠিক আউটপুটও পাই; আপনি পারেন এখানে চেষ্টা । এক্স 3, এক্স 4 ইত্যাদি সমস্ত প্রত্যাশার মতো কাজ করে।

ব্যাখ্যার সাথে নিরবচ্ছিন্ন:

def f():                                   # Defines a central function f
    import threading as T,inspect as i     # Imports threading and inspect
    global t,a,i                           # Global vars
    try:
        t.cancel()                         # Tries to cancel Timer from previous code
    except:
        a = 0                              # Reached when code is 1st copy; initializes a.
    a += 1                                 # a++; this is the number of copies thus far.
    t = T.Timer(1,d)               # Creates, then starts a timer to call function
    t.start()                              # d in 1 second.

def d():                                   # Prints out the source code; the quine part.
    print''.join(c*a for c in i.getsource(f)+i.getsource(d)+"f()")

f()                                        # Calls f()!

এটি কি কোনও প্রতারণামূলক কুইন নয়, কারণ এটি নিজস্ব ফাংশনগুলির ব্যবহারের উত্স কোডটি পড়ে inspect? ( প্রাসঙ্গিক মেটা পোস্ট দেখুন )। পিপিসিগিতে আমাদের কী কী রাইনকে বৈধ করে তোলে তার সুনির্দিষ্ট সংজ্ঞা রয়েছে এবং 'উত্স পড়া' সাধারণত প্রতারণা হিসাবে বিবেচিত হয়।
ফ্লিপট্যাক

@ ফ্লিপট্যাক আমি নিশ্চিত না কোনও ফাংশন পরিদর্শন করা উত্স কোডটি পড়ার সমান same জাভাস্ক্রিপ্ট এবং স্ট্যাক-ভিত্তিক ভাষার কুইনগুলি সর্বদা এটি করে।
ডেনিস

ঠিক আছে :). আমি আপনার পোস্টের জন্য সিনট্যাক্স হাইলাইট যুক্ত করেছি। থ্রেডিং ব্যবহার করে দুর্দান্ত ধারণা!
ফ্লিপট্যাক

import threading,inspect as iহতে পারেimport threading as T,inspect as i
nedla2004

@ ফ্লিপট্যাক ওফস, আপনাকে ধন্যবাদ
Calconym

3

সিজেম , 19 বাইট

{]W=s"_~"+T):Te*}_~

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

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

{               }_~  Define an anonymous code block (function).
                 _~  Push a copy, and execute the copy.
 ]W=                 Wrap the entire stack in an array and select its last element.
                     This discards whatever was on the stack before the original
                     code block, which is needed for subsequent iterations.
    s"_~"+           Cast the code block to string, push "_~", and concatenate.
                     This pushes the stringified source code on the stack.
          T):T       Push T (initially 0), increment it, and save the result in T.
              e*     Repeat each character in the stringified source code T times.

কী ... কীভাবে ... এত তাড়াতাড়ি ... দয়া করে কোডটি ব্যাখ্যা করুন, যাতে আপনি আমাকে সিজেমের উপায়গুলি শিখিয়ে দিতে পারেন।
ক্লিমেজিক

@ কিওয়ার্প-ডের্প আমি একটি ব্যাখ্যা যুক্ত করেছি।
ডেনিস

3

আরপিগ্রন , 66 বাইট

তাৎপর্যপূর্ণ হোয়াইটস্পেস আমার মৃত্যু হোক

[ "[ %q ] F 0 1 + `0 = `. { 0 m } R " ] F 0 1 + `0 = `. { 0 m } R 

ব্যাখ্যা

[ "[ %q ] F 0 1 + `0 = `. { 0 m } R " ] F 0 1 + `0 = `. { 0 m } R   #
[                                                                   # Pop whatever is already on the stack, if anything.
  "[ %q ] F 0 1 + `0 = `. { 0 m } R "                               # This string contains basically the entire function.
                                      ] F                           # ] F duplicates the string, and then F formats it, which in this case puts the first string into the second at %q, surrounded by qoutes.
                                          0 1 + `0 =                # I needed an Incrementer, so I chose 0. 0, is conveniently, pre initilized at 0. And because RProgN is horrifying, you can remap the number functions as they're just more variables. So this increments 0 every time the group is called.
                                                     `. { 0 m } R   # Replace each character with itself repeated '0' times. Because '0' is an incrementer, each time the script is called, the amount of times the characters are repeated increase.

শুভ প্রভু আমি একটি দানব ...

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


এছাড়াও, যদিও ~["[%q]F01+`0=`.{0m}R"]F01+`0=`.{0m}Rসাধারণভাবে সূক্ষ্মভাবে কাজ করে, এটি কোনও বৈধ সমাধান নয়, কারণ জেডএসএস চিহ্নিতকারীটির প্রতিরূপ করার কোনও উপায় নেই।
এটাকো


2

পাইথন 3 , 122 121 112 বাইট

s='try:from atexit import*;n+=1\nexcept:n=1;register(lambda:[print(end=c*n)for c in"s=%r;exec(s);"%s])';exec(s);

এটি অনলাইনে চেষ্টা করুন: একটি অনুলিপি | দুটি কপি | তিন কপি | চারটি অনুলিপি, স্বয়ংক্রিয় যাচাইকরণ সহ

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

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

কোড STRING হয়ে মৃত্যুদন্ড কার্যকর করা হয় যে গুলি নিম্নোক্ত।

try:from atexit import*;n+=1
except:n=1;register(lambda:[print(end=c*n)for c in"s=%r;exec(s);"%s])

প্রথম লাইনটি নিঃশর্তভাবে অ্যাক্সিট মডিউল আমদানি করে , যা আমাদের একটি প্রস্থান হ্যান্ডলার নিবন্ধন করতে দেয়। একই মডিউলটি একাধিকবার আমদানির চেষ্টা করা কোনওভাবেই স্ক্রিপ্টকে প্রভাবিত করে না। তারপরে এটি উত্স কোডটি কপি করে কতগুলি অনুলিপি কার্যকর হয়েছিল তা ধরে রাখার জন্য ভেরিয়েবল এন বাড়ানোর চেষ্টা করে

দ্বিতীয় লাইনটি কেবল তখনই কার্যকর করা হয় যদি প্রথম একটিতে ত্রুটি থাকে। এটি প্রথম পুনরাবৃত্তির ক্ষেত্রে হবে, যেহেতু এন এখনও অপরিজ্ঞাত। এই ক্ষেত্রে, আমরা n হিসাবে 1 হিসাবে আরম্ভ করি এবং একটি ল্যাম্বডা নিবন্ধভুক্ত করি যা আসল যাদু করে।

নিবন্ধিত প্রস্থান হ্যান্ডলার

lambda:[print(end=c*n)for c in"s=%r;exec(s);"%s]

প্রোগ্রাম শেষ হওয়ার আগেই ডাকা হবে। ল্যামডা নিজেই স্ট্রিং তৈরি করে "s=%r;exec(s);"%s- %rডান যুক্তি (একটি স্ট্রিং উপস্থাপনা তৈরি করে গুলি তারপর তার অক্ষর উপর iterates -), যা একক কোট এবং কোট নিজেদের মধ্যে সবকিছু অন্তর্ভুক্ত করা হয়েছে। প্রতিটি অক্ষরের সি জন্য , আমরা কেবল সি এর এন কপি প্রিন্ট করি । পাসিং নামে আর্গুমেন্ট হিসাবে থেকেc*nendprint অর্থ কোনও লাইনফিড সংযোজন করা হবে না।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.