সিজেএম, ( 58 56 54 48 46 x 2) * 48% = 44.16
{`"_~"+{_,94\m2/S*a_+\*
N/23f/Wf%N*}_`'"#)!*}_~
যা প্রিন্ট করে
{`"_~"+{_,94\m2/S*a_+\*
N/23f/Wf%N*}_`'"#)!*}_~
প্রতিটি লাইনের ফাঁকা স্থান অক্ষর দুটি পারস্পরিক কুইনের মধ্যে একই থাকে।
তবে এখন সত্যিই মিষ্টি অংশ:
{`"_~"+{_,94\m2/S*a_+\*{`"_~"+{_,94\m2/S*a_+\*
N/23f/Wf%N*}_`'"#)!*}_~N/23f/Wf%N*}_`'"#)!*}_~
কুইন! :)
এটি এখানে পরীক্ষা করুন।
কিভাবে এটা কাজ করে
আমি আপনাকে প্রথমে আমার অন্যান্য জমা দেওয়ার ব্যাখ্যাটি পড়ার পরামর্শ দিচ্ছি, কারণ এটি সাধারণভাবে সিজেমে কুইনিংয়ের মূল বিষয়গুলি ব্যাখ্যা করে।
এটি একটি সামান্য কৌশলযুক্ত। মিউচুয়াল কুইনের জন্য, অন্য ক্ষেত্রে যেমন, আমি প্রতিটি লাইনের আগে বা পরে ফাঁকা স্থান যোগ করে ব্লকের স্ট্রিং উপস্থাপনাটি সংশোধন করে এবং একটি 0 দিয়ে 2 এর সাথে অদলবদল করি যাতে ফলস্বরূপ প্রোগ্রামটি বিপরীত প্রান্তে ফাঁকা স্থান রাখে।
মনে রাখবেন যে স্পেসগুলি পারস্পরিক কুইনগুলিকে মোটেই প্রভাবিত করে না। প্রথমটিতে, তারা একটি ব্লকে রয়েছে, যা সত্যই ব্যবহৃত হয় না এবং দ্বিতীয়টিতে তারা পুরো কোডের আশেপাশে থাকে।
উভয়কে একত্রিত করার সময় নিয়মিত কুইন পাওয়ার জন্য আমাদের সেই সমস্ত পরিবর্তনটি এড়াতে একটি উপায় খুঁজে বের করতে হবে। লক্ষ্য করুন যে সাদা স্থান এবং কোডের কাঠামোর অর্থ উভয়কে একত্রিত করে আমরা একটি কুইনের সম্পূর্ণতা অন্যটিতে intoোকাতে পারি। সুতরাং আমরা যদি পুরো সংশোধন কোডটিকে একটি ব্লকে রেখে দিই, আমরা সেই ব্লকটি এর প্রকৃত বিষয়বস্তুর উপর নির্ভর করে চালাতে পারি।
সুতরাং এখন আমি এই ব্লক পেয়েছি ... পারস্পরিক কুইনের জন্য, এটিতে কেবল কোডটি রয়েছে যা আমি আসলে চালাতে চাই। সম্মিলিত কুইনের জন্য, এটি আবার পুরো কুইনটিকে একটি এলোমেলো অবস্থানে ধারণ করে, যা কোনও অর্থ দেয় না ... তবে এটি যেহেতু এটি একটি ব্লক, এটি স্বয়ংক্রিয়ভাবে চালিত হয় না। সুতরাং আমরা নির্ধারণ করতে পারি যে সেই ব্লকের সামগ্রীর উপর ভিত্তি করে স্ট্রিংটি সংশোধন করতে হবে। তাতে কি_`'"#)!
জন্য। এটি ব্লকটিকে সদৃশ করে, একটি স্ট্রিতে রূপান্তর করে, অক্ষরের সন্ধান করে "
(যা পারস্পরিক কুইনে কেবলমাত্র ব্লকের বাইরে প্রদর্শিত হয় ) - -1
অক্ষরটি খুঁজে না পাওয়া সন্ধান এবং অন্যথায় ধনাত্মক পূর্ণসংখ্যার - ফলাফলকে বাড়িয়ে তোলে এবং যুক্তিযুক্তভাবে এটিকে অবহেলা করে। সুতরাং যদি "
এটির একটি পাওয়া যায় 0
অন্যথায় এটি ফলন দেয় 1
। এখন আমরা শুধু করি*
, যা ফল একবারে কার্যকর করে, যদি ফলাফল 1 হয় এবং অন্যথায় না হয়।
শেষ অবধি, পরিবর্তনকারী কোডটি এইভাবে কাজ করে:
_,94\m2/S*a_+\*N/23f/Wf%N*
_, "Duplicate the quine string and get its length.";
94\m "Subtract from 94.";
2/ "Divide by two.";
S* "Create a string with that many spaces. This will be
an empty string for the first mutual quine, and contain
23 spaces for the second mutual quine.";
a_+ "Create an array that contains this string twice.";
\* "Join the two copies together with the quine string.";
N/ "Split into lines.";
23f/ "Split each line into halves (23 bytes each).";
Wf% "Reverse the two halves of each line.";
N* "Join with a newline.";
দান দাবি, (12 x 10) * 48% = 57.6
দেখা যাচ্ছে যে কিছু কোড পরিবর্তন করে খুব সহজেই এই কোডটি আরও বেশি লাইনে বিভক্ত হতে পারে। একটি সারিতে 48 পেতে আমরা 2 টি অক্ষর যুক্ত করি, যা আমরা পরে 8 দিয়ে সহজেই বিভাজন করতে পারি, যাতে আমাদের কোডের 6 টি অক্ষর এবং 6 স্পেস সহ 8 টি লাইন থাকে। এটি করার জন্য আমাদের কয়েকটি সংখ্যার পরিবর্তন করতে হবে এবং একটি অপারেটর বা দুটি পুনরায় সাজানো দরকার, যাতে তারা উভয় লাইনে বিভক্ত হয় না। এটি আমাদের 12 x 8 আকারের একটি কাজের সংস্করণ দেয় ... প্রয়োজনের বাইরে off সুতরাং আমরা কেবল দুটি লাইন যুক্ত করেছি যা কিছুই করে না (একটি 1 টিপুন, একটি 1 চাপুন, 1 টি চাপুন, 1 পপ করুন ...), তাই 12 x 10 এ যান :
{`"_~"
+{129X
$,m2/S
*a_+\*
N/6f/1
;1;1;1
;1;1;1
;Wf%N*
}_`'"#
)!*}_~
আগেরটি হিসাবে এটি উত্পাদন করে
{`"_~"
+{129X
$,m2/S
*a_+\*
N/6f/1
;1;1;1
;1;1;1
;Wf%N*
}_`'"#
)!*}_~
(পার্শ্ব দ্রষ্টব্য: মধ্যবর্তী লাইনে বাম এবং ডানদিকে পরিবর্তন করার দরকার নেই, কেবল প্রথম এবং শেষ লাইনের অবস্থানই গুরুত্বপূর্ণ other অন্য সমস্ত লাইনের জন্য বাম এবং ডান নির্বিচারে চয়ন করা যেতে পারে))
এবং খাঁটি কাকতালীয় মাধ্যমে পুরো কুইন এখনও কাজ করে:
{`"_~"{`"_~"
+{129X+{129X
$,m2/S$,m2/S
*a_+\**a_+\*
N/6f/1N/6f/1
;1;1;1;1;1;1
;1;1;1;1;1;1
;Wf%N*;Wf%N*
}_`'"#}_`'"#
)!*}_~)!*}_~
(আমি কাকতালীয়ভাবে বলছি, কারণ যে অংশটি অভ্যন্তরীণ কোডটি সম্পাদন না করার বিষয়ে যত্নশীল তা এখন অন্য কুইনের সাথে অদ্ভুতভাবে ছেদ হয়ে যায়, তবে এটি এখনও কার্যকর হয়ে যায়))
বলা হচ্ছে, 1;
অনুগ্রহের প্রয়োজনীয়তা পূরণের জন্য আমি আমার আসল 12 x 10
জমাতে মাত্র 44 টি লাইন যুক্ত করতে পারলাম , তবে দেখতে অনেক সুন্দর। ;)
সম্পাদনা: হাহা, যখন আমি "খাঁটি কাকতালীয়" বললাম তখন আমি আরও স্পষ্ট হতে পারতাম না। আমি চূড়ান্ত কুইনটি আসলে কীভাবে কাজ করে তা দেখেছি এবং এটি একেবারেই হাস্যকর। এখানে তিনটি নেস্টেড ব্লক রয়েছে (4 প্রকৃতপক্ষে তবে অন্তর্নিহিতটি অপ্রাসঙ্গিক)। এই 3 টি ব্লকের অন্তর্দ্বারের একমাত্র গুরুত্বপূর্ণ অংশটি হ'ল এটিতে একটি রয়েছে "
(এবং এটি মূল জমা দেওয়ার ক্ষেত্রে একটি নয়, তবে '"
একই অক্ষরটি পরীক্ষা করার জন্য এটি শেষে ব্যবহৃত হয়)। সুতরাং কুইনের প্রাথমিক কাঠামোটি হ'ল:
{`"_~"{`"_~"+{___'"___}_`'"#)!*}_~)!*}_~
এর বিচ্ছেদ করা যাক:
{`"_~" }_~ "The standard CJam quine.";
{`"_~"+ }_~ "Another CJam quine. Provided it doesn't do
anything in the rest of that block, this
will leave this inner block as a string on
the stack.";
) "Slice the last character off the string.";
! "Negate... this yields 0.";
* "Repeat the string zero times.";
সুতরাং এটি প্রকৃতপক্ষে কিছু মজাদার যাদু করে না, তবে কারণ অভ্যন্তরীণ ব্লকটি স্ট্যাকের উপর একটি একক স্ট্রিং ফেলে, এটি )!*
একটি খালি স্ট্রিংয়ে পরিণত হয়। একমাত্র শর্ত হ'ল অভ্যন্তরীণ ব্লকের +
স্টাফগুলি স্ট্যাকের জন্য অন্য কিছু না করে, তাই আসুন এটি দেখুন:
{___'"___} "Push a block which happens to contain
quotes.";
_`'"#)!* "This is from the original code and just
removes the block if it does contain
quotes.";