পারস্পরিক এক্সক্লুসিভ কুইন্স


27

আপনার চ্যালেঞ্জ সহজ। দুটি প্রোগ্রাম লিখুন যা কোনও অক্ষরকে ভাগ করে না যা একে অপরকে আউটপুট দেয়।

উদাহরণ

দুটি প্রোগ্রাম পি এবং কিউ পারস্পরিক একচেটিয়া কুইন যদি:

  1. পি আউটপুটস প্রশ্ন
  2. প্রশ্ন আউটপুট পি
  3. কোন অক্ষর সি নেই যা উভয়ই P এবং Q এর সাথে সম্পর্কিত
  4. প্রতিটি প্রোগ্রামের পি এবং কিউ হয় সঠিক quines
    1. এটি খালি কুইন এবং কুইনগুলি গণনা করে যা তাদের নিজস্ব (বা অন্যের) উত্স কোডটি অবৈধ বলে মনে করে

আরও নিয়ম

  • এই প্রোগ্রামগুলির সংক্ষিপ্ততম সম্মিলিত দৈর্ঘ্য জিতেছে। অর্থাৎ আকার ( পি ) + আকার ( কিউ ) হ'ল আপনার স্কোর এবং সর্বনিম্ন স্কোর জেতে।
  • উভয় প্রোগ্রাম একই ভাষায়
  • প্রতিটি প্রোগ্রাম একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন হতে পারে এবং সেগুলির এক হওয়ার দরকার নেই।
    • উদাহরণস্বরূপ, পি একটি সম্পূর্ণ প্রোগ্রাম হতে পারে এবং কিউ একটি ফাংশন হতে পারে।

প্রতিপাদন

এই এটি অনলাইন ব্যবহার করে দেখুন! এখানে স্নিপেট দুটি প্রোগ্রাম পারস্পরিক একচেটিয়া কিনা তা যাচাই করতে পারে। ইনপুটগুলি প্রথম দুটি আর্গুমেন্টে রাখা হয়।




3
আমি ধরে নেব যে একে অপরের উত্স পড়তে পারে এমন দুটি প্রোগ্রামও নিষিদ্ধ।
জিউসেপ

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

1
যদি আমি একই যুক্তিটি পাস করতে পারি তবে সেগুলি প্রোগ্রামগুলিতে নয়, তবে উভয় প্রোগ্রামের সংকলককে। সাধারণত সংকলক পতাকাগুলির জন্য যদি আপনি তাদের জন্য অর্থ প্রদান করেন তবে তা অনুমোদিত হলেও এই চ্যালেঞ্জের জন্য আপনি যুক্তি দিতে পারেন যে এটি পারস্পরিক একচেটিয়া বিধি বিপরীতে।
ব্ল্যাকক্যাপ

উত্তর:


37

> <> , স্কোর: 41 + 41 = 82

সম্পাদনা করুন: উভয় একটি 3. স্থির

'd3*}>a!o-!<<8:5@lI55>@z:5ll55>>q:>|q::|,

এবং

"r00gr40g44++bb+0p64++?b6+0.22#eW4s )Z

এটি অনলাইন চেষ্টা করুন! (অন্যান্য আউটপুট পেতে লাইনগুলি অদলবদল করুন) এবার যাচাইয়ের সাথে!

><>অক্ষর আউটপুট করার একমাত্র উপায় হ'ল কমান্ডটি এখানে ব্যবহার করার জন্য বিশেষত কঠোর ভাষা o। সৌভাগ্যবসত, আমরা ব্যবহার করতে পারি পি কমান্ড হিসাবে একটি স্থাপন করতে oআমার মধ্যে সম্পাদনের সময় সোর্স কোডে, মত একটি আদিম বিশ্বে প্রোগ্রামিং উত্তর।

এটি একটি অনেক পরীক্ষা এবং ত্রুটি নিয়েছিল । আমি দুটি পারস্পরিক একচেটিয়া প্রোগ্রাম দিয়ে শুরু করেছি:

'd3*}>N!o-!<<data

এবং

"r00gr40g8+X0pN+?Y0.data

প্রত্যেকে নিজের দ্বারা এবং এর ডেটা এন দ্বারা রূপান্তর করে, প্রথমটি বিয়োগ করে এবং দ্বিতীয়টি যুক্ত করে। এটি তখন বিপরীতে এটিকে আউটপুট করে। মুল বক্তব্যটি হ'ল প্রতিটি প্রোগ্রামের পরে থাকা ডেটা হ'ল বিপরীতে অন্য প্রোগ্রাম হয়, এন দ্বারা স্থানান্তরিত হয় ( Xপ্রোগ্রামটি এমন একটি সেল নম্বর যেখানে oওয়াই হ'ল যেখানে সেলটি যেখানে পয়েন্টারটি ফিরে আসে। ?সেখানে যেখানে oরাখা হয়) ।

উভয়ই একই কাঠামো অনুসরণ করে, বিভিন্ন উপায়ে প্রতিনিধিত্ব করে। তারা স্ট্যাকটিতে এটি যুক্ত করে পুরো কোডের উপরে একটি স্ট্রিং আক্ষরিক চালায়। তারা তাদের ব্যবহৃত স্ট্রিং আক্ষরিক কমান্ডটি পুনরায় তৈরি করে এবং স্ট্যাকের নীচে রাখে। তারা স্ট্যাকের উপরে লুপ করে প্রতিটি অক্ষরে এন যোগ করে / বিয়োগ করে এবং মুদ্রণ করে।

প্রথম প্রোগ্রামটি 'স্ট্রিংকে আক্ষরিক হিসাবে ব্যবহার করে এবং d3*}39 টি মান তৈরি করতে এবং স্ট্যাকের নীচে রেখে দেয়। দ্বিতীয়টি "একই ফাংশনটির সাথে স্ট্রিং আক্ষরিক হিসাবে ব্যবহার করে। এটি rস্ট্যাকটি everses, g0,0 ঘরে ক্যারেক্টারটি এট করে এবং আবার স্ট্যাকটি বিপরীত করে। এরপরে এটি gসেল 4,0 ( g) এ মূল্য নির্ধারণ করে এবং এটি পেতে এটিতে 8 যোগ করে এবং এটি oX এ রাখে

উভয় প্রোগ্রাম লুপিংয়ের একটি পৃথক পদ্ধতি ব্যবহার করে। প্রথম প্রোগ্রামটি স্কিপ কমান্ড ( !) ব্যবহার করে বামদিকে যাওয়ার সময় কেবলমাত্র অর্ধেক নির্দেশাবলী চালায়, দিকটি বিপরীত করে এবং অন্য অর্ধেকটি চালায়। দ্বিতীয়টি জাম্প কমান্ডটি ( .) ব্যবহার করে সেল ওয়াইয়ের লুপের শুরুতে পিছনে যেতে পারেন these

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

  1. ++1 = ,= --1
  2. .+2 = 0
  3. *= --3
  4. g+4 = k= o-4

প্রভৃতি

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


19

চতুর্থ (-৪-বিট লিটল-এডিয়ান গফর্ট) , 428 + 637 = 1065 বাইট

s"	:	l	bl	-	;	:	m	l	emit	;	:	s	space	;	:	z	m	m	m	m	s	;	:	p	.	't	'i	'm	'e	z	;	'e	'r	'e	'h	z	:	q	>r	char	l	bl	l	do	dup	@	.	'L	m	s	cell+	loop	r>	.	;	:	n	'e	'p	'y	't	z	;	q	;	's	p	'B	l	p	#tab	p	'p	'u	'd	'Q	char+	z	n	'B	l	p	n":	l	bl	-	;	:	m	l	emit	;	:	s	space	;	:	z	m	m	m	m	s	;	:	p	.	't	'i	'm	'e	z	;	'e	'r	'e	'h	z	:	q	>r	char	l	bl	l	do	dup	@	.	'L	m	s	cell+	loop	r>	.	;	:	n	'e	'p	'y	't	z	;	q	;	's	p	'B	l	p	#tab	p	'p	'u	'd	'Q	char+	z	n	'B	l	p	n
HERE 3245244174817823034 , 7784873317282429705 , 665135765556913417 , 7161128521877883194 , 682868438367668581 , 679209482717038957 , 680053688600562035 , 678116140452874542 , 682868623551327527 , 680649414991612219 , 682868636436227367 , 7136360695317203258 , 7809815063433470312 , 8458896374132993033 , 5487364764302575984 , 7810758020979846409 , 680166068077538156 , 4181938639603318386 , 8081438386390920713 , 8793687458429085449 , 2812844354006760201 , 7784826166316108147 , 676210045490917385 , 681493840106293616 , 7521866046790788135 , 679491013524025953 , 7928991804732031527 , 216 115 EMIT 34 EMIT 9 EMIT 2DUP TYPE 34 EMIT TYPE 

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

যাচাই স্ক্রিপ্ট

ফোরথ ব্যবহারের ধারণার জন্য @ নাথানিয়েলকে ধন্যবাদ - তিনি আমাকে মন্তব্যগুলিতে মনে করিয়ে দিয়েছিলেন যে ফোর্থ কেস-সংবেদনশীল নয় । তারপরে মেজাজের দোল আসে - আমি বার বার এই সমস্যার সমাধান করার পরে এটি কেন কাজ করবে না তার কারণগুলি সন্ধান করছি। আমার ইনডোর ট্রেনিং বাইকে কোনও ওভারসাইড এবং মিসহ্যাপড ফিজেট স্পিনারের মতো স্পিনিং করার সময় (আপনাকে কেবল হ্যান্ডেল বারের এক প্রান্তটি ধরে এটিকে কিছুটা কাত করতে হবে)।

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

ট্যাবগুলি অপ্রয়োজনীয় হওয়ায় আমি পরিবর্তে স্পেসটি ব্যাবহার করব।

প্রথম প্রোগ্রামটি ফর্মটির s" code"code- s"সূচনাটি একটি স্ট্রিং আক্ষরিক শুরু হয়, যা পরে কোডের দ্বিতীয় অনুলিপি দ্বারা প্রসেস করা হয় - একটি স্ট্যান্ডার্ড কুইন ফ্রেমওয়ার্ক। তবে এটির নিজস্ব উত্স কোড আউটপুট করার পরিবর্তে এটি অন্যান্য প্রোগ্রাম তৈরি করবে, যা দেখতে এটির মতো দেখাচ্ছে:

  • HERE
  • মূল স্ট্রিংয়ের প্রতিটি 8 বাইটের জন্য, 64-bit-number-literal ,
  • length-of-the-string
  • 115 EMIT 34 EMIT 9 EMIT 2DUP TYPE 34 EMIT TYPE

এটি ফোর্থের ডেটা স্পেস ব্যবহার করে। HEREবর্তমানে বরাদ্দকৃত ডেটা স্পেস ,এরিয়াটির শেষে পয়েন্টারটি ফিরিয়ে দেয় এবং এতে একটি সংখ্যায় পূর্ণ একটি ঘর সংযোজন করে। সুতরাং, প্রথম তিনটি বুলেট পয়েন্টগুলি ব্যবহার করে তৈরি স্ট্রিং আক্ষরিকের মতো দেখা যায় s"। দ্বিতীয় প্রোগ্রামটি শেষ করতে:

  • EMIT একটি অক্ষরকে তার ASCII মান প্রদান করে, সুতরাং:
    • 115 EMIT একটি ছোট হাতের মুদ্রণ s
    • 34 EMIT উদ্ধৃতি অক্ষর মুদ্রণ "
    • 9 EMIT একটি ট্যাব মুদ্রণ
  • 2DUPস্ট্যাকের উপরের দুটি উপাদানকে নকল করে ( a b -- a b a b ), এখানে এটি পয়েন্টার এবং স্ট্রিংয়ের দৈর্ঘ্য
  • TYPE কোডের প্রথম অনুলিপি আউটপুট করার জন্য একটি স্ট্রিং মুদ্রণ করে
  • 34 EMIT"শেষ অবধি মুদ্রণ করে , এবং শেষ পর্যন্ত
  • TYPE কোডের দ্বিতীয় কপি আউটপুট করে

আসুন দেখুন প্রথম প্রোগ্রামটি কীভাবে কাজ করে। অনেক ক্ষেত্রে সংখ্যাগুলি এড়াতে হয়, যা 'xচরিত্রের অক্ষরগুলির জন্য গফર્થ সিনট্যাক্স এক্সটেনশন ব্যবহার করে এবং কখনও কখনও স্থানের ASCII মানকে বিয়োগ করে থাকে যা ব্যবহার করে প্রাপ্ত হতে পারে bl:

s" ..."      \ the data
: l bl - ;   \ define a word, `l`, that subtracts 32
: m l emit ; \ define a word, `m`, that outputs a character. Because 32 is
             \ subtracted using `l`, lowercase characters are converted to
             \ uppercase, and uppercase characters are converted to some
             \ symbols, which will become useful later
: z m m m m space ; \ `z` outputs four characters using `m`, followed by a
                    \ space. This is very useful because all words used in the
                    \ second program are four characters long
: p . 't 'i 'm 'e z ; \ define a word, `p`, that, given a number, outputs that
                      \ number, followed by a space, `EMIT`, and another space
'e 'r 'e 'h z \ here is where outputting the second program starts - `HERE `
: q \ define a helper word, `q`, that will be called only once. This is done
    \ because loop constructs like do...loop can't be used outside of a word.
  >r \ q is called with the address and the length of the data string. >r saves
     \ the length on the return stack, because we don't need it right now. While
     \ it might seem like this is too complicated to be the best way of doing
     \ this for codegolf, just discaring the length would be done using four
     \ characters - `drop`, which would give you the same bytecount if you could
     \ get the length again in... 0 characters.
  char l \ get a character from after the call to q, which is `;`, with the
         \ ASCII value of $3B, subtract $20 to get $1B, the number of 64-bit
         \ literals necessary to encode the string in the second program.
  bl l \ a roundabout way to get 0
  do   \ iterate from 0 (inclusive) to $1B (exclusive)
    \ on the start of each iteration, the address of the cell we are currently
    \ processing is on the top of the stack.
    dup @ . \ print the value. The address is still on the stack.
    'L m space \ the ASCII value of L is exactly $20 larger than the one of ,
    cell+ \ go to the next cell
  loop
  r> . \ print the length of the string
;
: n 'e 'p 'y 't z ; \ define a word, `n`, that outputs `TYPE`
q ; \ call q, and provide the semicolon for `char` (used to encode the length
    \ of the string in 64-bit words). Changing this to an uppercase U should
    \ make this work on 32-bit systems, but I don't have one handy to check that
's p \ print the code that outputs the lowercase s
'B l p \ likewise, 'B l <=> $42 - $20 <=> $22 <=> the ASCII value of a comma
#tab p \ print the code that outputs a tab
'p 'u 'd 'Q char+ z \ char+ is the best way to add 1 without using any digits.
                    \ it is used here to change the Q to an R, which can't be
                    \ used because of `HERE` in the second program. R has an
                    \ ASCII value exactly $20 larger than the ASCII value of 2,
                    \ so this line outputs the `2DUP`.
n 'B l p n \ output TYPE 34 EMIT TYPE to finish the second program. Note the
           \ that the final `n` introduces a trailing space. Trying to remove
           \ it adds bytes.

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

: s s" ; s evaluate"s" : l bl - ; : m l emit ; : d here $b $a - allot c! ; : c here swap dup allot move ; : q bl l do #tab emit dup @ bl l u.r cell+ #tab emit 'L m loop ; here bl 'B l 's bl 's bl 'Z l d d d d d d d -rot c bl 'B l 's 'B l d d d d s c 'B l d c 'e 'r 'e 'h m m m m 'A q #tab emit 'e 'p 'y 't m m m m"; s evaluate

আপনি যদি আমার s" ..."...পদ্ধতির চেয়ে বেশি পরিমাণে গল্ফটি পরিচালনা করেন তবে এগিয়ে যান এবং এটি আপনার নিজের উত্তর হিসাবে পোস্ট করুন।


1
গ্রেট! আমি খুশি যে আমার মন্তব্যে এই সমাধানটি ছড়িয়ে পড়ে!
নাথানিয়েল

16

পার্ল, (311 + 630 = 941 বাইট) 190 + 198 = 388 বাইট

উভয় প্রোগ্রাম স্ট্যান্ডার্ড আউটপুট মুদ্রণ।

প্রথম পার্ল প্রোগ্রামে বেশিরভাগ মুদ্রণযোগ্য এএসসিআইআই অক্ষর এবং নিউলাইনগুলি থাকে এবং এটি ঠিক একটি নতুন লাইনে শেষ হয় তবে দুটি অক্ষর the নন-এসএসআইআই বাইট \ xFF উপস্থাপন করে:

@f='^"ÿ"x92;@f=(@f,chr)for 115,97,121,36,126,191,153,194,216,113;print@f[1..5,5,10,5..9,0,9,0,5]'^"ÿ"x92;@f=(@f,chr)for 115,97,121,36,126,191,153,194,216,113;print@f[1..5,5,10,5..9,0,9,0,5]

দ্বিতীয়টিতে বেশিরভাগ হাই-কন্ট্রোল অক্ষর রয়েছে যা এই পোস্টের তারকাদের দ্বারা প্রতিস্থাপন করা হয়েছে এবং নতুন কোনও লাইন নেই:

say$~~q~¿*ÂØ¡Ý*Ý*ÆÍÄ¿*Â׿*Ó***Ö***ßÎÎÊÓÆÈÓÎÍÎÓÌÉÓÎÍÉÓÎÆÎÓÎÊÌÓÎÆËÓÍÎÉÓÎÎÌÄ*****¿*¤ÎÑÑÊÓÊÓÎÏÓÊÑÑÆÓÏÓÆÓÏÓʢءÝ*Ý*ÆÍÄ¿*Â׿*Ó***Ö***ßÎÎÊÓÆÈÓÎÍÎÓÌÉÓÎÍÉÓÎÆÎÓÎÊÌÓÎÆËÓÍÎÉÓÎÎÌÄ*****¿*¤ÎÑÑÊÓÊÓÎÏÓÊÑÑÆÓÏÓÆÓÏÓÊ¢~

প্রথম প্রোগ্রামটির একটি হ্যাক্সডাম্প xxdহ'ল:

00000000: 4066 3d27 5e22 ff22 7839 323b 4066 3d28  @f='^"."x92;@f=(
00000010: 4066 2c63 6872 2966 6f72 2031 3135 2c39  @f,chr)for 115,9
00000020: 372c 3132 312c 3336 2c31 3236 2c31 3931  7,121,36,126,191
00000030: 2c31 3533 2c31 3934 2c32 3136 2c31 3133  ,153,194,216,113
00000040: 3b70 7269 6e74 4066 5b31 2e2e 352c 352c  ;print@f[1..5,5,
00000050: 3130 2c35 2e2e 392c 302c 392c 302c 355d  10,5..9,0,9,0,5]
00000060: 275e 22ff 2278 3932 3b40 663d 2840 662c  '^"."x92;@f=(@f,
00000070: 6368 7229 666f 7220 3131 352c 3937 2c31  chr)for 115,97,1
00000080: 3231 2c33 362c 3132 362c 3139 312c 3135  21,36,126,191,15
00000090: 332c 3139 342c 3231 362c 3131 333b 7072  3,194,216,113;pr
000000a0: 696e 7440 665b 312e 2e35 2c35 2c31 302c  int@f[1..5,5,10,
000000b0: 352e 2e39 2c30 2c39 2c30 2c35 5d0a       5..9,0,9,0,5].

এবং দ্বিতীয় প্রোগ্রামের একটি হ্যাক্সডাম্প হ'ল:

00000000: 7361 7924 7e7e 717e bf99 c2d8 a1dd 00dd  say$~~q~........
00000010: 87c6 cdc4 bf99 c2d7 bf99 d39c 978d d699  ................
00000020: 908d dfce ceca d3c6 c8d3 cecd ced3 ccc9  ................
00000030: d3ce cdc9 d3ce c6ce d3ce cacc d3ce c6cb  ................
00000040: d3cd cec9 d3ce cecc c48f 8d96 918b bf99  ................
00000050: a4ce d1d1 cad3 cad3 cecf d3ca d1d1 c6d3  ................
00000060: cfd3 c6d3 cfd3 caa2 d8a1 dd00 dd87 c6cd  ................
00000070: c4bf 99c2 d7bf 99d3 9c97 8dd6 9990 8ddf  ................
00000080: cece cad3 c6c8 d3ce cdce d3cc c9d3 cecd  ................
00000090: c9d3 cec6 ced3 ceca ccd3 cec6 cbd3 cdce  ................
000000a0: c9d3 cece ccc4 8f8d 9691 8bbf 99a4 ced1  ................
000000b0: d1ca d3ca d3ce cfd3 cad1 d1c6 d3cf d3c6  ................
000000c0: d3cf d3ca a27e                           .....~

দ্বিতীয় প্রোগ্রামে, উদ্ধৃত স্ট্রিং (১৮৯ বাইট দীর্ঘ, টিল্ডস দ্বারা বিস্মৃত) সম্পূর্ণ প্রথম প্রোগ্রামটি চূড়ান্ত নিউলাইন ছাড়া কেবল প্রতিটি বাইটকে বিটওয়াইজের পরিপূরক দ্বারা এনকোড করা হয়। দ্বিতীয় প্রোগ্রামটি প্রতিটি বাইটকে পরিপূরক করে স্ট্রিংটি ডিকোড করে, যা ~অপারেটর পার্লে করে। প্রোগ্রামটি ডিকোডেড স্ট্রিংয়ের পরে একটি নতুন লাইন ( sayপদ্ধতিটি একটি নতুন লাইন যুক্ত করে) মুদ্রণ করে ।

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

প্রথম প্রোগ্রামে, কুইন লজিক একটি 11 শব্দের দীর্ঘ অভিধান ব্যবহার করে @fএবং এই শব্দগুলি থেকে আউটপুট একত্রিত করে। প্রথম শব্দগুলির মধ্যে প্রথম প্রোগ্রামটির উত্স কোডটির পুনরাবৃত্তি ঘটে। বাকী শব্দগুলি নির্দিষ্ট একক অক্ষর। উদাহরণস্বরূপ, 5 শব্দটি একটি টিল্ড, যা দ্বিতীয় প্রোগ্রামের দুটি স্ট্রিং আক্ষরিকের জন্য ডিলিমিটার। বন্ধনীগুলির মধ্যে সংখ্যার তালিকার তালিকাটি কোন শব্দগুলিকে কোন ক্রমে মুদ্রণ করতে হবে recipe এটি কুইন্সগুলির জন্য একটি সাধারণ সাধারণ নির্মাণ পদ্ধতি, এক্ষেত্রে একমাত্র মোচড় হচ্ছে প্রথম অভিধানের শব্দগুলি তার বাইটগুলি বিটওয়াস পরিপূরক দিয়ে মুদ্রিত হয়।


14

হাস্কেল , 306 + 624 = 930 বাইট

প্রোগ্রাম 1: একটি বেনাম ফাংশন একটি ছদ্মবেশী যুক্তি গ্রহণ করে এবং একটি স্ট্রিং ফিরিয়ে দেয়।

(\b c()->foldr(\a->map pred)b(show()>>c)`mappend`show(map(map fromEnum)$tail(show c):pure b))"İĴİóđđđÝöÝâÝæÝääē××êääē××İēÀħđĮâħēĕóİóòòĮááħááđéêâéêēááĮÀħ""(\b c()->foldr(\a->map pred)b(show()>>c)`mappend`show(map(map fromEnum)$tail(show c):pure b))"

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

প্রোগ্রাম 2: q[[40,...]]শেষে একটি বেনাম ফাংশন যা একটি ছদ্মবেশী যুক্তি গ্রহণ করে এবং একটি স্ট্রিং ফিরিয়ে দেয়।

z~z=[[['@','0'..]!!4..]!!z]
q[x,q]_=z=<<x++q++[34,34]++x
q[[40,92,98,32,99,40,41,45,62,102,111,108,100,114,40,92,97,45,62,109,97,112,32,112,114,101,100,41,98,40,115,104,111,119,40,41,62,62,99,41,96,109,97,112,112,101,110,100,96,115,104,111,119,40,109,97,112,40,109,97,112,32,102,114,111,109,69,110,117,109,41,36,116,97,105,108,40,115,104,111,119,32,99,41,58,112,117,114,101,32,98,41,41,34],[304,308,304,243,273,273,273,221,246,221,226,221,230,221,228,228,275,215,215,234,228,228,275,215,215,304,275,192,295,273,302,226,295,275,277,243,304,243,242,242,302,225,225,295,225,225,273,233,234,226,233,234,275,225,225,302,192,295]]

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

অক্ষর সেট 1 (স্থান অন্তর্ভুক্ত):

 "$()-:>E\`abcdefhilmnoprstuw×ÝáâäæéêñòóöđēĕħĮİĴ

অক্ষর সেট 2 (নিউলাইন অন্তর্ভুক্ত):

!'+,.0123456789<=@[]_qxz~

যেহেতু কেবল সেট 1 এ অ-এসসিআইআই অক্ষর রয়েছে, তাই তাদের ইউটিএফ -8 বাইটগুলিও বিযুক্ত।

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

  • প্রোগ্রাম 1 সাধারণত ল্যাম্বডা এক্সপ্রেশন, স্পেস এবং প্রথম বন্ধনী, অন্তর্নির্মিত বর্ণানুক্রমিক ফাংশনগুলির বিনামূল্যে ব্যবহার এবং শেষে স্ট্রিং লিটারাল হিসাবে কোয়াইন ডেটা সহ লেখা হয়।

    • প্রোগ্রাম 1 এর নিজস্ব মূল কোডটি কেবলমাত্র উদ্ধৃতি চিহ্নের সাথে এটিকে ঘিরে স্ট্রিং আক্ষরিক ডেটাতে পরিণত হয়।
      • এটি সমর্থন করার জন্য, প্রতিটি ব্যাকস্ল্যাশ অনুসরণ করে aবা হয় b, যা বৈধ অব্যাহতি সিকোয়েন্সগুলি তৈরি করে যা রাউন্ডট্রিপ মাধ্যমে show
      • আরেকটি ছোট উপকার হয় a, bএবং cশুধুমাত্র ছোট হাতের অক্ষর যার ASCII কোড 100 এর চেয়ে কম হয়, সংখ্যাসূচক প্রোগ্রাম 2 দ্বারা ব্যবহৃত এনকোডিং একটি অঙ্ক সংরক্ষণ করা হয়।
    • প্রোগ্রাম 2 এর মূল কোডটির স্ট্রিং আক্ষরিক এনকোডিংটি নন-এএসসিআইআই ইউনিকোড ব্যবহার করে আরও বিচলিত হয়: মূল অক্ষরগুলির সাথে কোনও ওভারল্যাপ না রয়েছে তা নিশ্চিত করতে প্রতিটি চরিত্রের কোড পয়েন্টে 182 যুক্ত হয়েছে।
      • 182 ব্যবহৃত হত 128, যতক্ষণ না আমি বুঝতে পেরেছি যে প্রোগ্রামটির 1 এর কোডটির ডিকোডিংটি সংক্ষিপ্ত করার জন্য 182 স্ট্রিং আক্ষরিক দৈর্ঘ্যের দ্বিগুণ। (বোনাস হিসাবে, প্রোগ্রাম 2 নিউলাইনগুলি ব্যবহার করতে পারে))
  • প্রোগ্রাম 2 সাধারণত শীর্ষ স্তরের ফাংশন সমীকরণ (চূড়ান্ত বেনামে এক বাদে), অক্ষর আক্ষরিক এবং দশমিক সংখ্যা, তালিকা / পরিসীমা সিনট্যাক্স এবং অপারেটর এবং শেষে কোণের তালিকা হিসাবে কোয়েনের ডেটা সহ লেখা হয় Int

    • প্রোগ্রাম 1 এর মূল কোডটি তার কোড পয়েন্টগুলির একটি তালিকা হিসাবে একটি চূড়ান্ত ডাবল উদ্ধৃতি সহ এনকোড হয়েছে।
    • প্রোগ্রাম 2 এর মূল কোডটি প্রোগ্রাম 1 এ ব্যবহৃত স্ট্রিং আক্ষরিকের কোড পয়েন্টগুলির তালিকা হিসাবে এনকোড হয়েছে, এখনও 182 দ্বারা উপরে স্থানান্তরিত হয়েছে।

ওয়াকথ্রু, প্রোগ্রাম ২

  • bএবং cযথাক্রমে 2 এবং 1 প্রোগ্রামের স্ট্রিং লিটারেলের মানগুলি ল্যাম্বডা এক্সপ্রেশনকে চূড়ান্ত যুক্তি হিসাবে দেওয়া হয়। ()কেবলমাত্র পিপিসিজির নিয়মকে সন্তুষ্ট করার জন্য একটি ছদ্মবেশী যুক্তি যা প্রোগ্রামটির কোনও ক্রিয়া সংজ্ঞায়িত করা উচিত।
  • foldr(\a->map pred)b(show()>>c)বা 2 এর দৈর্ঘ্যের সমান সংখ্যক বার bপ্রয়োগ করে প্রোগ্রাম 2 এর মূল কোডটিতে স্ট্রিংটি ডিকোড করে ।map predshow()>>c == c++c182
  • tail(show c)cচূড়ান্ত ডাবল উদ্ধৃতি সংযোজন সহ স্ট্রিংটিকে প্রোগ্রাম 1 এর মূল কোডে রূপান্তর করে ।
  • :pure bস্ট্রিংয়ের সাথে তালিকায় এটি একত্রিত করে b
  • map(map fromEnum)$ স্ট্রিংগুলি কোড পয়েন্টের তালিকায় রূপান্তর করে।
  • `mappend`show(...) তালিকাগুলির ফলাফলের তালিকাটি ক্রমিক করে এবং শেষ পর্যন্ত প্রোগ্রাম 2 এর মূল কোডটিতে এটি যুক্ত করে।

ওয়াকথ্রু, প্রোগ্রাম 2

  • টপলেভেল z~z=[[['@','0'..]!!4..]!!z]হ'ল একটি ফাংশন যা কোডগুলিকে অক্ষরে ফিরিয়ে দেয় (লেখার জন্য প্রয়োজনীয় যা সমস্ত অক্ষর toEnumউপলব্ধ নয়)।
    • এর কোড পয়েন্ট আর্গুমেন্টও বলা হয় z~এই অবস্থানটিতে অলসতা চিহ্নিতকারীটির কোনও প্রভাব নেই তবে একটি স্থানের অক্ষর এড়ানো হয়।
    • ['@','0'..] ASCII কোড at৪ থেকে শুরু করে পিছনের দিকে এগিয়ে যাওয়ার তালিকার পরিসীমা, তারপরে প্রতিটি পদক্ষেপে ১ 16 টি লাফিয়ে।
    • এটি প্রয়োগ !!4একটি \NULচরিত্র দেয় ।
    • একটি [ ..]রেঞ্জের মোড়কে সমস্ত অক্ষরের একটি তালিকা দেয় যা !!zসূচকগুলি।
    • চরিত্রটি শেষ পর্যন্ত একটি সিঙ্গলটনের তালিকায় মুড়ে যায়। এই ফাংশনটি ম্যাপিং পারবেন zব্যবহার তালিকা উপর =<<অনুপলব্ধ পরিবর্তে mapএবং <$>
  • শীর্ষ স্তরটি q[x,q]_=z=<<x++q++[34,34]++xকোয়েনের ডেটা তালিকা থেকে একটি ফাংশন কনস্ট্রাক্টিং প্রোগ্রাম 1।
    • xপ্রোগ্রাম 1 কোর (ক চূড়ান্ত ডাবল উদ্ধৃতি সহ) জন্য তথ্য এবং ভিতরের qপ্রোগ্রাম 2. মূল জন্য সময়সীমার তথ্য _কেবলমাত্র চূড়ান্ত বেনামী ফাংশন শুধু একটি স্ট্রিং এর পরিবর্তে একটি ফাংশন করতে অন্য ডামি যুক্তি।
    • x++q++[34,34]++x ASCII কোড 34 সহ দুটি ডাবল উদ্ধৃতি চিহ্ন সহ টুকরোগুলিকে সংযুক্ত করে।
    • z=<<zকোড পয়েন্ট থেকে অক্ষরে রূপান্তর করতে কনটেক্সটকে ম্যাপিংয়ের মাধ্যমে প্রোগ্রাম 1 তৈরি করে ।
  • ফাইনালটি কোইন ডেটার সাথে মিলিত q[[40,...]]একটি বেনামি ফাংশন q

5

জেলি , 128 90 87 86 85 79 16 + 32 = 48 বাইট

“OṾ⁾ọṙŒs”OṾ⁾ọṙŒs

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

79,7806,8318,7885,7769,338,115ỌṘ

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

প্রথম প্রোগ্রামটি নিম্নলিখিতগুলি করে:

“OṾ⁾ọṙŒs”OṾ⁾ọṙŒs
“OṾ⁾ọṙŒs”          String literal: 'OṾ⁾ọṙŒs'
         O         ord: [79, 7806, 8318,...]
          Ṿ        Uneval. Returns '79,7806,8318,7885,7769,338,115'
           ⁾ọṙ     Two character string literal: 'ọṙ'
              Œs   Swap case the two char literal: 'ỌṘ'.

এটি স্ট্রিংগুলি ছেড়ে দেয় 79,7806,8318,7885,7769,338,115এবং ỌṘশৃঙ্খলার দুটি আর্গুমেন্ট হিসাবে এবং এগুলি স্পষ্টতই সংক্ষিপ্তভাবে এবং শেষে মুদ্রিত হয়।

দ্বিতীয় প্রোগ্রামটি সংখ্যার তালিকার chr( ) প্রদান করে যা প্রত্যাবর্তন করে OṾ⁾ọṙŒsমুদ্রণ “OṾ⁾ọṙŒs”(উদ্ধৃতি সহ) এবং “OṾ⁾ọṙŒs”OṾ⁾ọṙŒsসম্পূর্ণ আউটপুট হিসাবে রেখে ইনপুট ফেরত দেয় ।


5

গোল> <> , 23 + 23 = 46 22 + 22 = 44 20 + 20 = 40 বাইট

"lF{3+|3d*HqlJJJQpp2

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

'5ssTMMMotK-g6.6~Io

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

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

তারা কিভাবে কাজ করে

"lF{3+|3d*HqlJJJQpp2

"..."        Push everything to the stack
 lF{3+|      Add 3 to everything on the stack
       3d*   Push 39 `'`
          H  Print everything on the stack (from the top) and halt

'5ssTMMMotK-g6.6~Io

'...'        Push everything to the stack
 5ss         Push 37 (34 `"` + 3)
    T    t   Loop indefinitely...
     MMMo      Decrement 3 times, pop and print
               At the end, `o` tries to print charcode -3, which is fishy (thanks Jo King)
               Program terminates

জো কিং এর << উত্তর থেকে অভিযোজিত । আউটপুট এবং পুনরাবৃত্তির জন্য আরও অনেক বিকল্প কমান্ড থাকার কারণে, gবা প্রয়োজন ছিল না pএবং দুটি প্রধান সংস্থা আরও খাটো হয়ে উঠল।

আর একটি প্রধান পার্থক্য হ'ল আমি সরাসরি স্ট্যাকের শীর্ষে প্রতিপক্ষের উদ্ধৃতি উত্পন্ন করি। এইভাবে, এর আক্রমণকারী রাখা কিছুটা সহজ ছিল quote + my code + opponent code(reversed and shifted)

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