সাধারণীকরণ কুইন জেনারেটর


19

চ্যালেঞ্জ

এই চ্যালেঞ্জে আপনি একটি উত্স ভাষা S এবং একটি লক্ষ্য ভাষা নির্দিষ্ট করে T । আপনার কাজটি হ'ল নিম্নলিখিত প্রোগ্রামটি Pভাষায় লিখুন S। যদি Qভাষার কোনও বৈধ প্রোগ্রামকে Tইনপুট হিসাবে দেওয়া হয় P, তবে Rএটি ভাষায় একটি বৈধ প্রোগ্রাম আউটপুট দেবে Tযা কোনও ইনপুট এবং আউটপুট নেয় না Q(R), অর্থাৎ প্রোগ্রামটির Qউত্স কোডে প্রয়োগ হয় Rএছাড়াও , আপনার জবাবটিতে একটি অযৌক্তিক উদাহরণ প্রোগ্রাম উপস্থিত করা উচিত Q(আরও আকর্ষণীয়, আরও ভাল, যদিও আপনি এটির জন্য কোনও পয়েন্ট করেন না), ফলস্বরূপ প্রোগ্রাম Rএবং আউটপুট R। এটি কোড-গল্ফ, তাই Pজয়ের জন্য সংক্ষিপ্ততম কোড ।

অন্য কথায়, এটি "ইউনিভার্সাল কুইন কনস্ট্রাক্টর" লেখার বিষয়ে একটি চ্যালেঞ্জ যা স্বেচ্ছাসেবী জাতীয় কুইন্স তৈরি করতে পারে।

ব্যাখ্যা

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

একটি উদাহরণ

ধরুন আমি পাইথনকে আমার উত্স ভাষা হিসাবে বেছে নিয়েছি, এবং হাস্কেলকে আমার টার্গেট ল্যাঙ্গুয়েজ হিসাবে বেছে নিয়েছি এবং আমার আরও প্রয়োজন যে ইনপুট প্রোগ্রামটি একটি String -> Stringফাংশনটির একটি-লাইন সংজ্ঞা হওয়া উচিত f। আমি যদি স্ট্রিং-রিভার্সিং প্রোগ্রামটি দিই

f x = reverse x

আমার পাইথন প্রোগ্রামে ইনপুট হিসাবে Pএটি অন্য একটি হাস্কেল প্রোগ্রামের উত্স কোড আউটপুট দেবে R। এই প্রোগ্রামটি এর উত্স কোডটি বন্ধ করার জন্য প্রিন্ট করে Rতবে বিপরীত হয়। যদি Pপরিচয় ফাংশন দেওয়া হয়

f x = x

ইনপুট হিসাবে, আউটপুট প্রোগ্রাম Rএকটি quine।

উত্তর:


7

উত্স = লক্ষ্য = সিজেএম, 19 17 16 বাইট

{`"_~"+}`)q\"_~"

এটি ধরে নিয়েছে যে ইনপুট প্রোগ্রামটি Q(এসটিডিআইএন-তে দেওয়া) কিছু সিজেম স্নিপেট যা স্ট্যাকের শীর্ষে একটি স্ট্রিং আশা করে এবং স্ট্যাকের শীর্ষে অন্য স্ট্রিং ফেলে leaves

এটি এখানে পরীক্ষা করুন।

উদাহরণ

  1. পরিচয়টি খালি স্নিপেট হবে, সুতরাং STDIN খালি প্রিন্ট রেখে leaving

    {`"_~"+}_~
    

    কোনটি অতিরিক্ত সহ স্ট্যান্ডার্ড কুইন +

  2. সিজেমে কোনও স্ট্রিংকে বিপরীতে ফেলার জন্য আপনি ব্যবহার করতে পারেন W%, সুতরাং এটি এসটিডিনের উপর রেখে এই ফলন দেয়:

    {`"_~"+W%}_~
    

    যা আমরা পেতে চালাতে পারি

    ~_}%W+"~_"`{
    
  3. তৃতীয় উদাহরণ হিসাবে, বলতে আমরা একটি স্নিপেট যা ব্যবধান সহ একটি স্ট্রিং intersperses ব্যবহার করুন: ' *Pইনপুট হিসাবে যে সঙ্গে চালানো , আমরা পেতে

    {`"_~"+' *}_~
    

    যা ঘুরে মুদ্রণ

    { ` " _ ~ " + '   * } _ ~  
    
  4. Qলাইন ব্রেক রয়েছে (যদিও এটি সিজেমে কখনই প্রয়োজন হয় না) যদি এটি এখন কাজ করে । এখানে একটি লাইন ব্রেক সহ একটি প্রোগ্রাম রয়েছে, যা একটি স্ট্রিং থেকে সমস্ত লাইন বিরতি সরিয়ে দেয় (অপ্রয়োজনীয়ভাবে সংশ্লেষিত উপায়ে - লাইনে বিভক্ত করুন, তারপরে যোগ দিন):

    N/
    ""
    *
    

    এটি নিম্নলিখিত ফলাফল R:

    {`"_~"+N/
    ""
    *}_~
    

    যা ঘুরে মুদ্রণ

    {`"_~"+N/""*}_~
    

ব্যাখ্যা

প্রথমে উত্পাদিত আউটপুটটি দেখুন:

স্ট্যান্ডার্ড সিজেম কুইন

{`"_~"}_~

এটি নিম্নলিখিত হিসাবে কাজ করে:

  • ব্লকটি পুশ করুন {`"_~"}
  • এটির সাথে সদৃশ করুন _
  • সাথে অনুলিপি কার্যকর করুন ~
  • এখন ব্লকের ভিতরে, `প্রথম ব্লকটিকে তার স্ট্রিং উপস্থাপনায় পরিণত করে।
  • "_~" উত্সের দুটি অক্ষরকে চাপ দেয় যা ব্লকের অংশ নয় (এবং সুতরাং স্ট্রিং প্রতিনিধিত্ব থেকে অনুপস্থিত)।
  • দুটি স্ট্রিং প্রোগ্রাম শেষে ফিরে মুদ্রণ করা হয়।

বেসিক কুইনে এটি `অপ্রয়োজনীয়, কারণ আপনি যদি ব্লকটিকে যেমন রাখেন তবে প্রোগ্রামের শেষে এটি একইভাবে মুদ্রিত হয়।

আমার প্রোগ্রামটির আউটপুট Pহ'ল এই স্নিপেটের পরিবর্তিত সংস্করণ। প্রথমত, আমি +ব্লকে একটি যুক্ত করেছি , যা দুটি উত্সকে পুরো উত্সযুক্ত একটি স্ট্রিংয়ে যুক্ত করে। মনে রাখবেন যে ব্লকের ভিতরে আমি যা করি তা এই ব্যাপারেই সত্য হবে কারণ এটি সমস্তই প্রাপ্ত স্ট্রিংয়ের উপস্থাপনায় যুক্ত হবে `। এখন আমি সহজেই প্রোগ্রামটির / স্নিপেটটি Qব্লকের ভিতরে রেখে দিতে পারি +, যাতে এটি মুদ্রণের আগে উত্সের স্ট্রিংটি পরিবর্তন করতে পারে। আবার, যেহেতু Qব্লকের ভিতরে যায় তাই এটি উত্সযুক্ত স্ট্রিংয়ের অংশ হবে।

সংক্ষেপে, Pপ্রিন্ট

{`"_~"+Q}_~

এখন, আমি কীভাবে এই আউটপুটটি নির্মাণ করতে যাচ্ছি P:

{`"_~"+}         "Push the block without Q.";
        `        "Turn it into a string. This is shorter than writing a string right away,
                  because I'd have to escape the quotes, and I'd need two quotes instead of
                  one backtick.";
         )       "Pop off the last character (the brace) and push it on the stack.";
          q      "Read input Q.";
           \     "Swap Q with the brace.";
            "_~" "Push the final two characters.";

চারটি স্ট্রিং প্রোগ্রাম শেষে স্বয়ংক্রিয়ভাবে (পিছনে থেকে) মুদ্রিত হয়।


1
আচ্ছা, এই দ্রুত ছিল! এবং অবশ্যই বীট হার্ড। ব্যাখ্যাটিও খুব সুন্দর।
জাগারব

আপনি কোথায় শিখলেন যে ডাব্লু% বিপরীত হয়? dl.rodboxusercontent.com/u/15495351/cjam.pdf এর নেই
ফারাজ মাসরুর

পদ্ধতির আরও একটি সম্পূর্ণ তালিকা আছে?
ফারাজ মাসরুর

@FarazMasroor sourceforge.net/p/cjam/wiki/Basic%20operators/#percent (কোন। 3) ... এটি একটি বৈশিষ্ট্য GolfScript থেকে কিছু পয়েন্ট কাউকে দেখে ধার এর আমাকে বলছে যে এটা কিভাবে GolfScript কাজ করে। এটি এমন একটি প্রচলিত প্রথা বলে মনে হয় যা প্রতিটি সিজেএম / জিএস ব্যবহারকারীর কাছে কিছু অদ্ভুত অন্তর্নিহিত জ্ঞান তবে যা আসলে অনেক জায়গায় ব্যাখ্যা করা যায় না। (আরও না অপারেটার পুঙ্খানুপুঙ্খভাবে নথিভুক্ত জন্য, দেখুন sourceforge.net/p/cjam/wiki/Operators )
মার্টিন Ender

3

হাস্কেল এক্সপ্রেশন → হাসেল এক্সপ্রেশন, 41 বাইট

((++)<*>show).('(':).(++")$(++)<*>show$")

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

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

P $ "Q"= ((++)<*>show).('(':).(++")$(++)<*>show$") $ "Q"নির্মান "R"দ্বারা

  1. (++")$(++)<*>show$"): স্ট্রিং সংযোজন ")$(++)<*>show$",
  2. ('(':): চরিত্রটি প্রিপেন্ডিং '(', এবং
  3. (++)<*>show(= \x->x++show x): এর একটি উদ্ধৃত সংস্করণ সংযোজন,

ফলে "R"= "(Q)$(++)<*>show$\"(Q)$(++)<*>show$\""

R= (Q)$(++)<*>show$"(Q)$(++)<*>show$"দ্বারা কাজ করে

  1. স্ট্রিং গ্রহণ "(Q)$(++)<*>show$",
  2. (++)<*>show: এর একটি উদ্ধৃত সংস্করণ সংযোজন,
  3. এটি প্রয়োগ Q,

ফলে Q "(Q)$(++)<*>show$\"(Q)$(++)<*>show$\""= Q "R"

(আশেপাশের প্যারেনগুলি Qপ্রয়োজনীয় কারণ Qসম্ভবত $এটি সহজেই থাকতে পারে Rএবং $দুর্ভাগ্যক্রমে ডান-অ্যাসোসিয়েটিভ))

ডেমো

λ> putStrLn $ ((++)<*>show).('(':).(++")$(++)<*>show$") $ "id"
(id)$(++)<*>show$"(id)$(++)<*>show$"
λ> putStrLn $ (id)$(++)<*>show$"(id)$(++)<*>show$"
(id)$(++)<*>show$"(id)$(++)<*>show$"
λ> putStrLn $ ((++)<*>show).('(':).(++")$(++)<*>show$") $ "reverse"
(reverse)$(++)<*>show$"(reverse)$(++)<*>show$"
λ> putStrLn $ (reverse)$(++)<*>show$"(reverse)$(++)<*>show$"
"$wohs>*<)++($)esrever("$wohs>*<)++($)esrever(
λ> putStrLn $ ((++)<*>show).('(':).(++")$(++)<*>show$") $ "length"
(length)$(++)<*>show$"(length)$(++)<*>show$"
λ> print $ (length)$(++)<*>show$"(length)$(++)<*>show$"
44

নেই শুধু $প্রথম বন্ধনী প্রয়োজন, কিন্তু trailing let, doবা ল্যামডা এক্সপ্রেশন।
janrjan জোহানসেন

@ আরজান জোহানসেন রাইট, তবে আমি এমন একটি ভাষা উপসেট সংজ্ঞায়িত করতে পারতাম যা অপ্রতীকৃত ল্যাম্বদা / let/ if/ case/ কে doআমি নিজেই নির্গত না করি তা অস্বীকার করে। সম্ভবত এটি আমার ঠিক মতো হয়নি।
অ্যান্ডারস ক্যাসরগ

2

উত্স = লক্ষ্য = জাভাস্ক্রিপ্ট, 66 66

console.log("function a(){console.log("+prompt()+"(a+'a()'))}a()")

প্রশ্ন জন্য অনুমান:

  • Q স্ট্রিং-থেকে-স্ট্রিং জাভাস্ক্রিপ্ট অনামী ফাংশন হওয়া উচিত।

উদাহরণ:

  • বিপরীত । প্রশ্ন =function(s) { return s.split('').reverse().join(''); }

এই ক্ষেত্রে, P(Q)(বা R) হবে function a(){console.log(function(s) { return s.split('').reverse().join(''); }(a+'a()'))}a():, এবং এটি কার্যকর করে আমরা পেয়ে যাব: )(a}))')(a'+a(} ;)''(nioj.)(esrever.)''(tilps.s nruter { )s(noitcnuf(gol.elosnoc{)(a noitcnufযা হ'ল ঠিক তেমন Q(R)

  • পরিচয় । প্রশ্ন =function(s) { return s; }

এই ক্ষেত্রে P(Q)(বা R) হবে: function a(){console.log(function(s) { return s; }(a+'a()'))}a()যা একটি জাভাস্ক্রিপ্ট কুইন । বলা বাহুল্য, Q(R)একই হবে, যেহেতু প্রশ্ন হল আইডেন্টিটি ফাংশন।


কিছু নোট:

জাভাস্ক্রিপ্টে এসটিডিন traditionতিহ্যগতভাবে prompt(), তবে, আমি alert()কপি-পেস্ট ব্যবহার করে প্রগ্রেম হিসাবে রান আউটপুট প্রক্রিয়াটিকে আরও সহজ করার জন্য, নিজেকে এসটিডিআউট হিসাবে রীতি থেকে বিরত থাকতে দিয়েছিলাম । (আমি বুঝতে পারি যে পরিবর্তন করার সময় আমি 12 টি চরিত্র পর্যন্ত সঞ্চয় করতে পারি alert())।

আমি ES6 এ জিনিসগুলি আরও ছোট করতে পারি তবে আমি আপাতত নেটিভ জাভাস্ক্রিপ্টের সাথে থাকতে চাই। আমি কেবল অভিজ্ঞতার জন্য, ভবিষ্যতে একটি এস = স্কালা, টি = ইসিএমএ 6 উত্তর জমা দেওয়ার বিষয়ে বিবেচনা করছি।

আমিও বুঝতে পারছি জাভাস্ক্রিপ্ট প্রায় বীট না করতে পারেন CJam মধ্যে , কিন্তু আমি এই চ্যালেঞ্জ নিতে ছিল! এটি ছিল মজাদার এক।


ধন্যবাদ! এটি বিভিন্ন উত্স এবং লক্ষ্য ভাষাগুলির সাথে একটি এন্ট্রি পেয়ে সত্যই শীতল হবে।
জাগারব

2

জেলি7 , 9 বাইট

“ṚƓ^ṾṂ’³3

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

কিউ একটি 7 ফাংশন (যেমন এটি শীর্ষ স্ট্যাক উপাদানটির বাইরে দেখায় না, এবং স্ট্যাকের মাধ্যমে I / O করে) এবং কমান্ড-লাইন আর্গুমেন্ট হিসাবে দেওয়া হয়।

ব্যাখ্যা

7 প্রোগ্রাম

আমি এখানে যে সার্বজনীন কুইন নির্মাতা ব্যবহার করি তা হ'ল:

717162234430…3

প্রথমটি লক্ষণীয় যে নেতৃস্থানীয় 7 হ'ল নেতৃস্থানীয় হোয়াইটস্পেসের সমতুল্য, এবং প্রোগ্রামটিতে তার কোনও প্রভাব নেই। এটির একমাত্র কারণ হ'ল আক্ষরিক-কেবল কুইনগুলির বিরুদ্ধে পিপিসিজির নিয়ম মেনে চলা (এটি নিজের 1চেয়ে প্রোগ্রামটিতে দ্বিতীয় দ্বারা এনকোড করা হয়েছে)।

প্রোগ্রামটির বাকি অংশগুলি একটি একক স্ট্যাক উপাদান (এটিতে সুষম 76গুলি রয়েছে), যা রান করার সময় নিম্নলিখিতটি করে:

717162234430…3
 1716           Push a stack element "7" onto the stack
     2          Copy it
      23        Pop and output one of the copies (selecting format 7)
        4430    Prepend it to the top of stack
             3  Output it

অন্য কথায়, এই স্ট্যাক উপাদানটি এমন একটি প্রোগ্রাম যা 7আউটপুট ফর্ম্যাট 7 (যার অর্থ "আক্ষরিকভাবে মুদ্রণ করা, উত্স কোড হিসাবে একই এনকোডিং ব্যবহার করে", স্ট্যাকের শীর্ষটি মুদ্রণ করে এবং এটি স্পষ্টতই সেরা এনকোডিং হয় quines)। এখানে মোটামুটি ভাগ্যবান যে আমরা 7দুটি উদ্দেশ্যে আক্ষরিক পুনরায় ব্যবহার করতে পারি (আউটপুট ফর্ম্যাট এবং শীর্ষস্থানীয় সাদা অংশ) স্পষ্টতই, ফাইনালের ঠিক আগে কিছু সন্নিবেশ করে 3আমরা 7কেবল আউটপুট 7এবং এর চেয়ে + ইনপুট একটি ফাংশন আউটপুট করতে পারি সরাসরি ইনপুট।

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

জেলি প্রোগ্রাম

এটি সম্ভবত আমি লিখেছি জেলি-জাতীয় জেলি প্রোগ্রামগুলির মধ্যে একটি; তিন nilads (নিয়ে গঠিত “ṚƓ^ṾṂ’, ³, 3), যা ক্রমানুসারে মাত্র আউটপুট কারণ কোন অপারেশন তাদের উপর সঞ্চালিত হয়। 3সুস্পষ্ট যথেষ্ট, শুধু একটি পূর্ণসংখ্যা ধ্রুবক হচ্ছে। ³যদি আপনি জেলি জানেন এছাড়াও সহজ: এটি প্রথম কম্যান্ড-লাইন যুক্তি জন্য জেলি এর স্পষ্ট নোটেশন (যা যেখানে জেলি সাধারণত তার ইনপুট নেয়) আছে। জেলি প্রোগ্রামের বাকী অংশগুলি আমার 7 সার্বজনীন কুইন কনস্ট্রাক্টরের বাল্ককে উপস্থাপন করে: 7 এর সমস্ত কমান্ডগুলি ASCII সংখ্যা ব্যবহার করে উপস্থাপন করা যেতে পারে এই সত্যটি কাজে লাগিয়ে আমরা ব্যাখ্যা করতে পারি717162234430কমান্ডের একটি সিরিজ, বা এমনকি অষ্টাল সংখ্যা হিসাবে এটি নয় (যেমন এটি ধারণাগতভাবে হয়), তবে দশমিক সংখ্যা হিসাবে, যার অর্থ আউটপুটটির জন্য আমাদের কোনও বিশেষ বিন্যাসের প্রয়োজন নেই। দশমিক সংখ্যাটি “ṚƓ^ṾṂ’জেলির সংকীর্ণ পূর্ণসংখ্যার স্বরলিপিতে পরিণত হয়।

উদাহরণ

আমরা 24053প্রোগ্রাম কিউ হিসাবে দিলে, আমরা নিম্নলিখিত আউটপুট পাবেন:

717162234430240533

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

2405 শীর্ষস্থানীয় স্ট্যাক উপাদানটিকে নিজের কাছে যুক্ত করে:

2405   Stack   Explanation
       x
2      x|x     Duplicate top of stack
 4     x||x    Swap two stack elements, with an empty element between
  0    x|(X)   Escape the top stack element, then concatenate the top two
   5   xx      Execute the top stack element

(শেষ পদক্ষেপটি কিছুটা বিভ্রান্তিকর লাগতে পারে; কী হচ্ছে তা হ'ল স্ট্যাক উপাদান থেকে বেরিয়ে আসা প্রতিটি কমান্ডকে "এই কমান্ডটি চালান" থেকে "এই কমান্ডটি স্ট্যাকের শীর্ষে সংযুক্ত করে" রূপান্তরিত করে, সুতরাং প্রতিটি কমান্ড নিজেকে মূলের সাথে সংযুক্ত করে) শীর্ষ স্ট্যাক উপাদান হিসাবে এটি চালায়।)

এর ফলে, ফলাফলের প্রোগ্রামটি চালানো আর আমাদের দুটি কপি দেয়:

7171622344302405371716223443024053

2

সিজে্যাম → সিজোম, 13 বাইট

{`"_~"+7}_~qt

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

ইনপুটটি Qএমন একটি কোড স্নিপেট হওয়া উচিত যা স্ট্যাকের একমাত্র স্ট্রিংকে পরিবর্তন করে। Qস্টিডিন থেকে পড়া হয়।

উদাহরণ

ইনপুট:

S*W%

এটি প্রতি দুটি অক্ষরের মধ্যে একটি স্থান যুক্ত করে এবং স্ট্রিংটিকে বিপরীত করে।

আউটপুট:

{`"_~"+S*W%}_~

সাধারণীকৃত কুইনের আউটপুট:

~ _ } % W * S + " ~ _ " ` {

ব্যাখ্যা

{`"_~"+7}_~      e# Evaluate a generalized quine in CJam that only appends a 7.
q                e# Read the input.
t                e# Replace the 7th character (0-based) with the input.

এটি প্রথমত কুইনকে মূল্যায়ন করে, তাই আমরা অকারণে ডাবল উদ্ধৃতি ছাড়াই এর স্ট্রিং প্রতিনিধিত্ব পেতে পারি। তারপরে পেডলোডটি ইনপুট দিয়ে প্রতিস্থাপন করুন।

এটি {`"_~"+ }_~7qtজায়গা যেখানে পে-লোডের স্থানধারক হতে পারে । কিন্তু বেল্ড 7সাশ্রয় করে পেডলোড পরিবর্তন করা ।


1

কাঠকয়লাপার্ল (5), 29 33 বাইট

A$_=q(αA);evalβαS"\α$_β\n";printβ

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

পার্ল প্রোগ্রাম কিউয়ের একটি স্নিপেট ফেরত দেওয়া উচিত যা ডান হাতের স্ট্রিং হিসাবে ইনপুট নেয় এবং ভেরিয়েবলের আউটপুট সরবরাহ করে $_। (স্বেচ্ছাসেবী পার্ল ফাংশনগুলি এগুলি মোড়ানো মাধ্যমে এই ফর্মটিতে রূপান্তর করা যেতে পারে sub x {…}; $_=xmost বেশিরভাগ ক্ষেত্রে পার্লের বাক্য গঠনটি বোঝায় যে কোনও মোড়কের প্রয়োজন নেই))

ব্যাখ্যা

পার্ল

সর্বজনীন পার্ল কুইন নির্মাণকারী দেখতে দেখতে এখানে:

$_=q(…"\$_=q($_);eval";print);eval

(বেশিরভাগ ক্ষেত্রে আপনি এটিকে গল্ফ করতে চান $_=q(say…"\$_=q($_);eval");evalতবে আমি নিশ্চিত নই যে আপনি সেখানে নির্বিচারে পার্ল কোডটি ফিট করতে পারেন ))

অন্য কথায়, আমাদের একটি বাইরের র‍্যাপার রয়েছে $_=q(…);evalযা একটি স্ট্রিং বরাদ্দ করে $_এবং তারপরে এটি মূল্যায়ন করে। মোড়কের অভ্যন্তরে "\$_=q($_);eval"অর্থাত্, আমরা যে পরিমাণ মান সংরক্ষণ করি $_তাতে ব্যবহারকারীর দ্বারা উল্লিখিত কোড কিউ, এবং printআউটপুট প্রিন্ট করার মাধ্যমে তার সামগ্রীর সাথে মোড়কের পুনর্নির্মাণ । (দুর্ভাগ্যক্রমে আমরা ব্যবহার করতে পারি না say; এটি একটি নতুন লাইন যুক্ত করে এবং এটি কুইনে প্রাসঙ্গিক)

কাঠকয়লা

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

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

যদিও (সামান্য) আরও খাটো করা সম্ভব। পার্ল ইউনিভার্সাল কুইন কনস্ট্রাক্টর দুটি মোটামুটি দীর্ঘ পুনরাবৃত্তি বিভাগ রয়েছে। আমরা এইভাবে ব্যবহার করতে পারেন ভেরিয়েবল তাদের দায়িত্ব অর্পণ করা (যেমন কমান্ড A…αপরিবর্তনশীল নির্ধারণ α), এবং কেবল তাদের নাম ব্যবহার মাধ্যমে স্ট্রিং করছি মুদ্রণ মধ্যে ভেরিয়েবল ঢুকান। এটি কেবল আক্ষরিকভাবে স্ট্রিং লিখে কিছু বাইট সংরক্ষণ করে।

দুর্ভাগ্যক্রমে, চারকোল প্রোগ্রামটিতে একটি নতুন লাইনও যুক্ত করে, তবে এটি কোনও বিশাল চুক্তি নয়; \nখুব সহজেই Q এর ইনপুটটিতে সেই নতুন লাইনটি যুক্ত করতে এটির জন্য দুটি বাইট ব্যয় হয়।

উদাহরণ

আমরা যদি ইনপুট দিই $_=reverse(যা একটি স্ট্রিংকে বিপরীত করে), আমরা নিম্নলিখিত আউটপুটটি পাই:

$_=q($_=reverse"\$_=q($_);eval\n";print);eval

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

যা একটি কুইন-লাইক যা প্রত্যাশার মতো তার উত্সটি পিছনের দিকে প্রিন্ট করে।


1

জেলিআন্ডারলোড , 15 বাইট

“(a(:^)*“S):^”j

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

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

ব্যাখ্যা

আন্ডারলোড

আন্ডারলোড সর্বজনীন কুইন নির্মাতা এখানে ব্যবহৃত হয়:

(a(:^)*…S):^

প্রোগ্রামটির বেশিরভাগটি একক আক্ষরিক। আমরা এটি অনুসরণ করি :^, যা এটি অনুলিপি করে, তারপরে একটি অনুলিপি মূল্যায়ন করে (অন্য অনুলিপিটিকে স্ট্যাকের মধ্যে রেখে)।

আক্ষরিক মূল্যায়ন শুরু করা হলে, আমরা দৌড়ে যাই a(পালানো, যা এটি আবার আসল প্রোগ্রামএ হিসাবে আবার একই আকারে নিয়ে আসে) এবং (:^)*(যা সংযোজন করে :^), সুতরাং পুরো প্রোগ্রামটির উত্স কোডটি পুনর্গঠন করে। এরপরে আমরা এটিকে একটি স্বেচ্ছাচারিত উপায়ে রূপান্তর করতে Q ফাংশনটি চালাতে পারি এবং এর সাথে ফলাফলটি মুদ্রণ করতে পারি S

জেলি

আমি এই সময় চারকোল ব্যবহার করতে পারছি না কারণ প্রোগ্রামটির কোনও নতুন লাইন দিয়ে শেষ হয়ে গেলে প্রোগ্রামের শেষে একটি বৈধতাযুক্ত আন্ডারলোড দোভাষীকে ক্র্যাশ করা হয়। (কিছু আন্ডারলোড দোভাষী, যেমন টিআইও-তে থাকা একজন, এই নিয়মটি প্রয়োগ করেন না, তবে আমি সঠিকভাবে পোর্টেবল হতে চাইতাম)) দুর্ভাগ্যক্রমে, চারকোল স্বাভাবিকভাবেই এর আউটপুটটিতে ট্রেলিং করা নিউলাইনগুলি যুক্ত করে। পরিবর্তে, আমি জেলি ব্যবহার করেছিলাম, এটি প্রায় এর মতো সাধারণ ক্ষেত্রে প্রায় বিরল; প্রোগ্রামটিতে দুটি উপাদান ( ““”) সহ আক্ষরিক একটি তালিকা থাকে এবং তাদের ইনপুট ( j) এ যোগ দেয় , সুতরাং প্রোগ্রামে ব্যবহারকারী ইনপুটকে সংযুক্ত করে।

উদাহরণ

ইনপুটটি ব্যবহার করে :S^(একটি অনুলিপি মুদ্রণ করুন , তারপরে মূলটি মূল্যায়ন করুন), আমরা নিম্নলিখিত আন্ডারলোড প্রোগ্রামটি পাই:

(a(:^)*:S^S):^

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

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


কাঠকয়লা আর ট্রেলিং করা নিউলাইন যোগ করে না (হ্যাঁ)
ASCII-

1

আরপিগ্রোএন 2 , 11 বাইট

'{`{.%s}{'F

প্রোগ্রাম এক্সপ্লিনেশন

'{`{.%s}{'F
'{`{.%s}{'  # Push the string "{`{.%s}{" to the stack.
          F # Format the input with the top of the stack as a template. Which produces {`{.<INPUT>}{

কুইন এক্সপ্লিনেশন

উত্পন্ন কুইনটি সহজ, তবুও আরপিগ্রোএন 2-তে মিল নেই এমন একটি ফাংশন হ্যান্ডলারের কার্যকারিতা একটি সংক্ষিপ্ত এবং মিষ্টি কুইন তৈরি করতে, যাকে "লুপিং" কুইন বলা হয়। এটি একটি <> <কুইনের সাথে আশ্চর্যজনকরকম ধারণা।

{`{.}{
{`{.}   # Push the function {`{.} to the stack.
     {  # Try to define a new function, fail, loop back to index 1. (Which in turn, skips the function definition.)
 `{     # Push the string "{" to the stack.
   .    # Concatenate the top two values of the stack, which stringifies the function, then appends { to it.
    }   # Try to terminate a function, fail quietly, and terminate the program.

অবশ্যই, এই কুইনের কাঠামোর কারণে, সত্যিকারের নো-অপস (যা স্ট্রিংফাইড হয় না) কিছুই বাদে কাজ করা যাবে না, এবং

কিছু কুইনস

  • {`{.i}{: আউটপুটস {}i.{`{iএটি কেবল "বিপরীত" ফাংশন, সুতরাং এই প্রোগ্রামটি নিজেকে বিপরীত রূপ দেয়।
  • {`{.S§.}{: আউটপুটস ..S`{{{}§Sস্ট্রিংটিকে অক্ষরগুলির স্ট্যাকে রূপান্তরিত করে, §স্ট্যাকটি লেক্সোগ্রাফিকভাবে সাজান, তারপরে .এটিকে আবার একত্রিত করে আউটপুট স্বয়ংক্রিয়ভাবে সাজানো হয়।

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

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