ট্রাই-ইন্টারকাইন - তিনটি প্রোগ্রাম যা একে অপরেরকে একটি লুপে আউটপুট দেয়


10

সম্পর্কিত: ইন্টারকাইন

প্রোগ্রাম চলাকালীন প্রোগ্রাম আউটপুট প্রোগ্রাম বি এর কোড এবং বি সি এর উত্স এবং আউটপুট এ এর ​​উত্স দেয়।

এবার আপনি দুটি অক্ষর বিনিময় এবং আবার বিনিময় করতে পারবেন না :)

প্রয়োজনীয়তা:

  • সমস্ত প্রোগ্রাম জুড়ে শুধুমাত্র একটি ভাষা
  • স্ট্যান্ডার্ড লুফোলস সীমাবদ্ধতা প্রযোজ্য
  • সমস্ত প্রোগ্রাম আলাদা। একটি প্রোগ্রাম যা ফলাফল নিজেই যোগ্যতা অর্জন করে না। দুটি যে আউটপুট একে অপরকেও যোগ্যতা অর্জন করে না।
  • সমস্ত প্রোগ্রাম খালি নয়, বা দৈর্ঘ্যে কমপক্ষে 1 বাইট।
  • পড়ার মতো কিছুই নেই কারণ স্টিডিনের সাথে সংযুক্ত রয়েছে /dev/null(আপনি যদি পারেন তবে এই বিধিটিকে অপব্যবহার করতে পারেন )। আউটপুট stdout যায়।
  • এলোমেলো ফলাফল উত্পন্ন ফাংশন ব্যবহার করবেন না।

অতিরিক্ত:

  • সম্ভব হলে ব্যাখ্যা দিন

স্কোর হল সবচেয়ে কম এক দৈর্ঘ্য (আপনি একটি সংক্ষিপ্ত এক থেকে একটি দীর্ঘ প্রোগ্রাম তৈরি করতে পারেন?)। সমস্ত প্রোগ্রামের দৈর্ঘ্য লিখুন এবং ক্ষুদ্রতম সংখ্যা হাইলাইট করুন। ট্রেলিং নিউলাইন গণনা করে না। সর্বনিম্ন স্কোর জয়


2
সম্পর্কিত। (একই জিনিস, বিভিন্ন ভাষা।)
মার্টিন ইন্ডার

উত্তর:


19

পাইথন 3 , 50 বাইট

s='s=%r;print(s%%(s,%i*2%%7))';print(s%(s,1*2%7))

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

গত অভিব্যক্তি থেকে যায় 1*2%7থেকে 2*2%7থেকে 4*2%7তারপর ফিরে 1*2%7


6
এন-ইন্টারকুইনের সর্বজনীন সমাধানের মতো দেখায়। আপনার কেবল 7 টি (2 ^ n) -1 দিয়ে প্রতিস্থাপন করতে হবে।
iBug

4
পাইথন 2-এ ম্যাপিংটি 1-2/_একটি 3-চক্র তৈরি করে (1,-1,3), যা পালানোর প্রয়োজনের দরকার না করে একটি বাইট সংরক্ষণ করে %
xnor

@iBug বা বড় এমনকি খাটো n, s='s=%r;print(s%%(s,-~%i%%3))';print(s%(s,-~1%3))প্রতিস্থাপন 3সঙ্গেn
PurkkaKoodari

4

RProgN 2 , 12 8 বাইট

1
«\2*7%

ব্যাখ্যা

1   # Push the digit to the stack.

«\2*7%
«       # Define a function from here to the matching ». As there is no matching », define it from here to the end of the program, and continue running.
 \      # Flip the function under the constant number.
  2*    # Multiply by 2.
    7%  # Modulo 7.

কীভাবে ডিগ্রিআলপিআরপিএন ডিফল্টভাবে আউটপুট দেয়, তার সুবিধাজনক প্রকৃতির কারণে এটি এই সংখ্যাটি ছেড়ে দেয় যা প্রথম লাইনে 1, 2 এবং 4 এর মধ্যে লুপ করে এবং দ্বিতীয়টিতে ফাংশনের স্ট্রিংফাইড সংস্করণ। @LeakyNun এর পাইথন উত্তর দ্বারা অনুপ্রাণিত

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


4

সিজেম , 17 বাইট

{sZZe\6Ye\"_~"}_~

{s6Ze\ZYe\"_~"}_~

{sZ6e\ZYe\"_~"}_~

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

সম্ভবত অনুকূল নয়, তবে এটি একটি পরিবর্তন এটি পূর্ববর্তী চ্যালেঞ্জের ক্ষেত্রে আমার পদ্ধতির

বুনিয়াদি ধারণাটি একই, তবে আমরা দুটি অদলবদল সম্পাদন করি যার মধ্যে একটি সর্বদা একটি অনিচ্ছুক। আক্রান্ত সূচকের হয় 2, 3এবং 6:

1:     {sZZe\6Ye\"_~"}_~
ZZe\             does nothing
       {sZZe\6Ye\"_~"}_~
6Ye\     \   /
          \ /
           X
          / \
         /   \
2:     {s6Ze\ZYe\"_~"}_~
6Ze\      \  /
           \/    doesn't really do anything
           /\
          /  \
       {s6Ze\ZYe\"_~"}_~
ZYe\     \/
         /\
3:     {sZ6e\ZYe\"_~"}_~
Z6e\      \  /
           \/
           /\
          /  \
       {sZZe\6Ye\"_~"}_~
ZYe\     \/      doesn't really do anything 
         /\
1:     {sZZe\6Ye\"_~"}_~

3

সিজেম , 14 বাইট

{_]3/W="_~"}_~

{_]3/W="_~"}{_]3/W="_~"}_~

{_]3/W="_~"}{_]3/W="_~"}{_]3/W="_~"}_~

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

অন্যান্য প্রোগ্রামগুলি যথাক্রমে 26 এবং 38 বাইট দীর্ঘ।

ব্যাখ্যা

তবুও আরেকটি পন্থা!

{       e# Again, the usual quine framework. In this case, there might
        e# be one or two additional copies of the block on the stack.
  _     e#   Duplicate the top copy of the block.
  ]     e#   Wrap all copies in an array.
  3/    e#   Split into chunks of 3. For the first two programs, this will
        e#   just wrap all of them in an array. For the third program, this
        e#   splits the fourth copy off from the first three.
  W=    e#   Select the last chunk. So `3/W=` does nothing for the first
        e#   two programs, but discards three copies once we get to four.
  "_~"  e#   Push the remainder of the program.
}_~


2

পাইথন 3, 127, 127 এবং 127 বাইট

a='a=%r;b=%r;c=%r;print(b%%(b,a,c))';b='b=%r;a=%r;c=%r;print(c%%(c,a,b))';c='c=%r;a=%r;b=%r;print(a%%(a,b,c))';print(b%(b,a,c))

কপি করে প্রিন্ট

b='b=%r;a=%r;c=%r;print(c%%(c,a,b))';a='a=%r;b=%r;c=%r;print(b%%(b,a,c))';c='c=%r;a=%r;b=%r;print(a%%(a,b,c))';print(c%(c,a,b))

কপি করে প্রিন্ট

c='c=%r;a=%r;b=%r;print(a%%(a,b,c))';a='a=%r;b=%r;c=%r;print(b%%(b,a,c))';b='b=%r;a=%r;c=%r;print(c%%(c,a,b))';print(a%(a,b,c))

এটি ইন্টারকাইন প্রশ্নের উত্তরটির উপর ভিত্তি করে, যা একটি সাধারণ পাইথন কুইনের উপর ভিত্তি করে। এবং আমি জানি যখন আমরা কোয়াড-ইন্টারকাইন প্রশ্নটি পাই তখন কি করতে হবে;)


1

সিজেম , 14 বাইট

0{\)3%\"_~"}_~

1{\)3%\"_~"}_~

2{\)3%\"_~"}_~

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

ব্যাখ্যা

0{      e# Again, the standard CJam quine framework, but this time we have a zero
        e# at the bottom of the stack.
  \     e#   Bring the 0 to the top.
  )     e#   Increment.
  3%    e#   Mod 3 to loop from 2 back to 0.
  \     e#   Put the result underneath the block again.
  "_~"  e#   Push the remainder of the source.
}_~

1

জাভাস্ক্রিপ্ট (ES6), 63 55 বাইট

eval(c="`eval(c=${JSON.stringify(c)},n=${++n%3})`",n=0)
eval(c="`eval(c=${JSON.stringify(c)},n=${++n%3})`",n=1)
eval(c="`eval(c=${JSON.stringify(c)},n=${++n%3})`",n=2)

o1.innerText = eval(c="`eval(c=${JSON.stringify(c)},n=${++n%3})`",n=0) 
o2.innerText = eval(c="`eval(c=${JSON.stringify(c)},n=${++n%3})`",n=1)
o3.innerText = eval(c="`eval(c=${JSON.stringify(c)},n=${++n%3})`",n=2)
<pre id="o1"></pre>
<pre id="o2"></pre>
<pre id="o3"></pre>

বিকল্প সমাধান Function.prototype.toString(প্রতারণামূলক, 30 বাইট) ব্যবহার করে

(f=n=>`(f=${f})(${++n%3})`)(1)

1

ল্যাম্বদা ক্যালকুলাস , 38 টি অক্ষর, 44 বাইট

সমস্ত কুইনের মাতার উপর ভিত্তি করে একটি সহজ সমাধান: y- সংযুক্তকারী :

(λx.(λy.y)(λz.z)xx)(λx.(λy.y)(λz.z)xx)

বিটা হ্রাস ব্যবহার করে আমরা দেখতে পাচ্ছি যে এটি প্রকৃতপক্ষে একটি ত্রি-আন্তঃজাতীয়:

(λx.(λy.y)(λz.z)xx)(λx.(λy.y)(λz.z)xx)
(λy.y)(λz.z)(λx.(λy.y)(λz.z)xx)(λx.(λy.y)(λz.z)xx)
(λz.z)(λx.(λy.y)(λz.z)xx)(λx.(λy.y)(λz.z)xx)
(λx.(λy.y)(λz.z)xx)(λx.(λy.y)(λz.z)xx)
etc.

0

জাভা 8, 118 বাইট

v->{int i=0;String s="v->{int i=%d;String s=%c%s%2$c;return s.format(s,++i%%3,34,s);}";return s.format(s,++i%3,34,s);}

কেবলমাত্র int i=0;ফাংশন / আউটপুটগুলির মধ্যে পার্থক্য (এটি হয় হয় 0, 1অথবা 2)।

ব্যাখ্যা:

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

v->{                       // Method with empty unused parameter and String return-type
  int i=0;                 //  Integer, starting at 0, 1 or 2 depending on the version
                           //  (this is the only variation between the functions/outputs)
  String s="v->{int i=%d;String s=%c%s%2$c;return s.format(s,++i%%3,34,s);}";
                           //  String containing the unformatted source code
  return s.format(s,++i%3,s);}
                           //  Quine to get the source code, which we return as result
                           //  ++i%3 is used to cycle 0→1→2→0

অতিরিক্ত ব্যাখ্যা:

:

  • String s অরূপিত উত্স কোড রয়েছে contains
  • %s এই স্ট্রিংটি নিজের মধ্যে রাখার জন্য ব্যবহৃত হয় s.format(...)
  • %c, %2$cএবং 34ডাবল-কোটগুলি ফর্ম্যাট করতে ব্যবহৃত হয় ( ")
  • %% মডুলো-সাইন ফর্ম্যাট করতে ব্যবহৃত হয় (% )
  • s.format(s,...,34,s) সব একসাথে রাখে

আউটপুট / ফাংশনগুলির পার্থক্য:

অন্যান্য উত্তর হিসাবে একই পদ্ধতির:

  • int iহয় শুরু হয় 0, 1বা2
  • ++i%3পরবর্তী এই রূপান্তরিত ( 0→1; 1→2; 2→0)

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