আপনি মেটা কুইন করতে পারেন?


25

অন্যান্য কুইন ধাঁধাগুলির মতো (আরও সুনির্দিষ্টভাবে এটি একটি ), এমন একটি প্রোগ্রাম লিখুন যা নিজের জন্য উত্স তৈরি করে।

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

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


নিয়ম

  1. আপনার কোডটি অবশ্যই একটি ভাষায় উত্পন্ন করা উচিত। (একাধিক জমা, প্রতিটি ভাষার জন্য একটি পুরোপুরি গ্রহণযোগ্য))
  2. আপনার বিভিন্ন কোড সংস্করণগুলি অবশ্যই সিনট্যাক্টিক্যালি স্বতন্ত্র হওয়া উচিত। অন্য কথায়, যদি আপনি আপনার কোডের জন্য একটি বিমূর্ত সিনট্যাক্স ট্রি আঁকেন তবে কমপক্ষে একটি নোড আলাদা থাকতে হবে।
    • একটি এএসটি সরবরাহ করা প্রয়োজন হবে না, তবে আপনি যদি আপনার প্রতিটি প্রোগ্রামের জন্য একটি সরবরাহ করার ঝোঁক অনুভব করেন তবে এটি বিচারে সহায়তা করবে
  3. আপনি যতক্ষণ ইচ্ছে তেমন পুনরাবৃত্তি তৈরি করতে পারেন যতক্ষণ না এগুলি সমস্ত সিনট্যাক্টিকালি আলাদা থাকে। (আরও আপনার স্কোর সাহায্য করবে, নীচে দেখুন।)

স্কোরিং

আপনার চূড়ান্ত স্কোরটি আপনার সমস্ত প্রোগ্রামের গড় দৈর্ঘ্য হবে, প্রোগ্রাম সংখ্যা দ্বারা বিভক্ত।

উদাহরণ 1:

একটি (বি এর উত্স) = 50 টি অক্ষর
বি ( এটির উত্স) = 75 টি অক্ষর
চূড়ান্ত স্কোর = 31.25

উদাহরণ 2:

এ (বি এর উত্স) = 50 টি অক্ষর
বি (সি এর উত্স) = 75 টি বর্ণ
সি (এটির উত্স) = 100 টি অক্ষর
চূড়ান্ত স্কোর = 25


18
আমি একবার মাইন কুইন।
মেল্লামোকব

1
@ মেল্লামোকব হার হার ;-)
গাফি

এটি আসলে এই কুইন চ্যালেঞ্জের আরও একটি সাধারণ সংস্করণ , এবং সেখানে দেওয়া উত্তরগুলি এখানেও জিতবে।
জবাবদিহি করা বন্ধ করে দিয়েছে

@ লেফটারাউন্ডেবাট, সিনট্যাক্টিক পার্থক্যের জন্য প্রয়োজনীয়তা একটি 'ঘূর্ণায়মান কুইন' অবৈধ করে তোলে, সুতরাং এটি আরও সাধারণ নয়।
বুথবি

2
কখনও মেটা কুইন আমার পছন্দ হয়নি।
স্ট্যাক ট্রেসার

উত্তর:


35

পাইথন, 0 (সীমা (68 + 3 এন ) / (16 এন ))

দুটি বিমূর্ত সিনট্যাক্স গাছের যদি পৃথক ধ্রুবক থাকে তবে তারা পৃথক,

r='r=%r;n=(0x%XL+1)%%0x10...0L;print r%%(r,n)';n=(0xF...FL+1)%0x10...0L;print r%(r,n)

সেখানে 16 হয় এন সবচেয়ে 68 + + 3N এ দৈর্ঘ্যের প্রোগ্রাম, 0 মধ্যে asymptotic স্কোর দেয়।

আপনি যদি ভেরিয়েবল স্ট্রাকচার সহ প্রোগ্রামগুলি চান তবে আমরা এন বিটসে একটি বাইনারি অ্যাড্ডার প্রয়োগ করতে পারি । এখানে, সেখানে 2 হয় এন দৈর্ঘ্যের প্রোগ্রাম হে ( 2 )। বিট কমানোর কারণে একটি চক্রের দিকে যায়।

s="""
print 's='+'"'+'"'+'"'+s+'"'+'"'+'"'
n=lambda m:reduce(lambda (s,c),y:(s+(c^y,),c&y),m,((),1))[0]
print s[:112]
t=n(t)
print "t=(%s,)+(0,)*%s"%(t[0],len(t)-1)
for i in range(len(t)-1):
    print i*' '+'for i in range(2):'
    print ' '+i*' '+['pass','t=n(t)'][t[i+1]]
print s[113:-1]
"""

print 's='+'"'+'"'+'"'+s+'"'+'"'+'"'
n=lambda m:reduce(lambda (s,c),y:(s+(c^y,),c&y),m,((),1))[0]
print s[:112]
t=(0,)+(0,)*10
for i in range(2):
 t=n(t)
 for i in range(2):
  t=n(t)
  for i in range(2):
   t=n(t)
   for i in range(2):
    t=n(t)
    for i in range(2):
     pass
     for i in range(2):
      t=n(t)
      for i in range(2):
       pass
       for i in range(2):
        pass
        for i in range(2):
         pass
         for i in range(2):
          t=n(t)
t=n(t)
print "t=(%s,)+(0,)*%s"%(t[0],len(t)-1)
for i in range(len(t)-1):
    print i*' '+'for i in range(2):'
    print ' '+i*' '+['pass','t=n(t)'][t[i+1]]
print s[113:-1]

আমি কি বিভ্রান্ত হতে পারি? দেখে মনে হচ্ছে আউটপুট উত্সটির সাথে অভিন্ন (এই চ্যালেঞ্জের উদ্দেশ্য নয়)?
গাফি 18

নেস্টেড ব্লকের দিকে তাকান। সমস্ত 2 comb n সংমিশ্রণে এবং পিছনে passপরিবর্তন হবে t=n(t)
বুথবি

আমি এখন এটি দেখতে না। তুমি আমাকে সমস্ত পুনরাবৃত্তি দিয়ে বিভ্রান্ত করেছ!
গাফি 2

22
কোনও কারণে, আমি ক্ষুদ্র স্কোরগুলির সাথে খুব দীর্ঘ গল্ফ সমাধান পছন্দ করি।
বুথবি

বাহ, আপনি যে সম্পূর্ণ মালিকানা! খুব সুন্দর.
ক্লাদিউ

4

পার্ল, 110.25 এর স্কোর

আমাকে স্বীকার করতে হবে, আমি কুইন্সে খুব ভাল নই। আমি 100% নিশ্চিত যে উন্নতির সুযোগ আছে। সমাধানটি নীচের উপাদানটির একই নীতিটির ভিত্তিতে তৈরি।

প্রথম প্রোগ্রামটি 264 টি অক্ষর।

$s='$a=chr(39);print"\$s=$a$s$a;";$s=reverse$s;for(1..87){chop$s}$s=reverse$s;print$s;$f++;if($f==0){$a=chr(39);print"\$s=$a$s$a;$s"}';$a=chr(39);print"\$s=$a$s$a;";$s=reverse$s;for(1..87){chop$s}$s=reverse$s;print$s;$f++;if($f==0){$a=chr(39);print"\$s=$a$s$a;$s"}

দ্বিতীয় প্রোগ্রামটি 177 টি অক্ষর।

$s='$a=chr(39);print"\$s=$a$s$a;";$s=reverse$s;for(1..87){chop$s}$s=reverse$s;print$s;$f++;if($f==0){$a=chr(39);print"\$s=$a$s$a;$s"}';if($f==0){$a=chr(39);print"\$s=$a$s$a;$s"}

আমি এই এন্ট্রি (এবং এলিমেন্ট এন্ট্রি) এর জন্য এএসটিতে কাজ করছি working


উপাদান , 47.25 এর স্কোর

প্রথম প্রোগ্রামটি 105 টি অক্ষর।

\ \3\:\$\'\[\\\\\`\(\`\]\#\2\1\'\[\(\#\]\`\ \3\:\$\'\[\\\\\`\(\`\]\#\` 3:$'[\\`(`]#21'[(#]` 3:$'[\\`(`]#`

দ্বিতীয় প্রোগ্রামটি 84 টি অক্ষর।

\ \3\:\$\'\[\\\\\`\(\`\]\#\2\1\'\[\(\#\]\`\ \3\:\$\'\[\\\\\`\(\`\]\#\` 3:$'[\\`(`]#`

আমি নিশ্চিত যে উন্নতির জন্য অনেক জায়গা আছে।

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

দ্বিতীয় প্রোগ্রামটি একই স্ট্রিং এর পরে অংশ বি বি পার্ট বি সরল কুইনের ভিত্তিতে তৈরি; এটি এর পালিয়ে যাওয়া সংস্করণের আগে একটি স্ট্রিং মুদ্রণ করে। এর অর্থ এটি স্ট্রিং প্রিন্ট করে এবং উভয় অংশ এ এবং বি।


আমি মনে করি এটি নির্বিশেষে কোনও সন্দেহের বাইরেও একটি প্রোগ্রামিং ভাষা হিসাবে এলিমেন্টের বৈধতা প্রমাণ করে। এটি ব্যবহার করা এত সহজ যে আমি, এত অনভিজ্ঞ যে আমি কেবলমাত্র এলিমেন্টের জন্য একজন সম্পূর্ণ দোভাষী লিখতে পেরেছি, planet,০০,০০,০০০ লোকের পুরো গ্রহের কোনও অন্য ব্যক্তির আগে এই প্রশ্নের উত্তর দিতে সক্ষম হয়েছি। এলিমেন্টের "একটি চরিত্র, একটি ফাংশন, সর্বকালের" দৃষ্টান্তের অর্থ সমস্ত কোড পুরোপুরি দ্ব্যর্থহীন। ভাষা বহুমুখী: ব্যতীত[]{} কোনও সিন্ট্যাক্স ত্রুটি না করে কোনও প্রোগ্রামকে পুরো প্রোগ্রামের যে কোনও জায়গায় কমান্ড দেওয়া যেতে পারে। ইহা যথাযথ.
PhiNotPi

4
কিছুটা পক্ষপাতদুষ্ট, আমরা কি? ;-)
গাফি 18

3

ভিবিএ: (251 + 216) / 2/2 = 116.75

251

Sub a()
r=vbCrLf:c="If b.Lines(4, 4) = c Then"&r &"b.InsertLines 8, d"&r &"b.DeleteLines 4, 4"&r &"End If":d="b.InsertLines 6, c"&r &"b.DeleteLines 4, 2"
Set b=Modules("Q")
If b.Lines(4, 4) = c Then
b.InsertLines 8, d
b.DeleteLines 4, 4
End If
End Sub

216

Sub a()
r=vbCrLf:c="If b.Lines(4, 4) = c Then"&r &"b.InsertLines 8, d"&r &"b.DeleteLines 4, 4"&r &"End If":d="b.InsertLines 6, c"&r &"b.DeleteLines 4, 2"
Set b=Modules("Q")
b.InsertLines 6,c
b.DeleteLines 4,2
End Sub

এটি চালানো হয় Moduleবস্তুর ব্যবহার করতে এমএসএ্যাক্সেসে । মডিউলটির নাম দেওয়া "Q"হয়েছে গল্ফ করার জন্য। সংশ্লেষের পার্থক্যটি If ... Thenসংক্ষিপ্ত সংস্করণ থেকে অনুপস্থিত থেকে আসে ।


আপনি সম্ভবত পরিবর্তন vbCrLFকরে vbCr
টেলর স্কট

3

সি ++, 0.734194 এর স্কোর

নিম্নলিখিত উত্স কোড কনসোলে 999 অর্ডার একটি মেটা কুইন মুদ্রণ করে (নীচে ব্যাখ্যা):

#define X 1*(1+1)
#include<iostream>
#include<vector>
#define Q(S)auto q=#S;S
Q( \
  main() \
  { \
      using namespace std; \
      cout<<"#define X 1"; \
      int x=X==2?1000:X-1; \
      vector<int> factors; \
      for ( int p = 2; p <= x; ++p) \
      { \
        while ( x % p == 0 ) \
        { \
          factors.push_back( p ); \
          x /= p; \
        } \
      } \
      for ( int factor : factors ) \
      { \
        cout<<"*(1"; \
        for ( int i=1;i<factor;++i) \
          cout<<"+1"; \
        cout<<")"; \
      } \
      cout<<"\n#include<iostream>\n#include<vector>\n#define Q(S)auto q=#S;S\nQ("<<q<<")"; \
  })

একমাত্র লাইন যা প্রথম লাইনটি পরিবর্তিত হয়। মুল্যX হবে 1000, 999, 998, ..., 3, 2 এবং তারপরে এটি আবার শুরু হবে। যাইহোক, প্রতি বার বিভিন্ন সিনট্যাক্স গাছ পেতে, Xতার প্রধান ফ্যাক্টেরাইজেশন হিসাবে প্রতিনিধিত্ব করা হয়, যেখানে প্রতিটি মৌলিক 1গুলি এর যোগফল হিসাবে লেখা হয় । এএসটিগুলি পৃথক, কারণ প্রতিটি মানের জন্য পূর্ণসংখ্যার প্রাথমিক গুণনীয়করণ পৃথক।

প্রোগ্রামটি নিজেই মুদ্রণ করবে, ব্যতীত প্রথম লাইনটি পরিবর্তিত হবে এবং এর মধ্যে থাকা ব্যাকস্ল্যাশ, লাইন ব্রেক এবং ইন্ডেন্টেশনগুলি Q(...)সরানো হবে।

নিম্নলিখিত প্রোগ্রামটি আমার উত্তরের স্কোর গণনা করে:

#include <iostream>

const int n = 1000;

int getProgramLength( int n )
{
  int sum = 442;
  for ( int p = 2; p*p <= n; ++p )
  {
    while ( n % p == 0 )
    {
      sum += 2 * ( 1 + p );
      n /= p;
    }
  }
  if ( n > 1 )
    sum += 2 * ( 1 + n );
  return sum;
}

int main()
{
  int sum = 0;
  for ( int i = 2; i <= n; ++i )
    sum += getProgramLength( i );
  std::cout << (double)sum/(n-1)/(n-1) << '\n';
}

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


2

জাভাস্ক্রিপ্ট, 84.5 64 61

দুটি প্রোগ্রাম, উভয় দৈর্ঘ্য 169 128 122।

(function c(){alert(/*
2/*/1/**/);return ('('+c+')()').replace(/\/([/\*])/,function(m,a){return a=='*'?'/\/':'/\*'});
})()

আমি এটি দেখার আগে, আপনার দেখার আনন্দের জন্য:

(function c() {
    var r = /\/([/\*])/;
    var f = function(m, a) { return a === '*' ? '/\/' : '/\*' };
    var p = '(' + c + ')();';
    p = p.replace(r, f);
    /* This is just a comment!
    console.log('Quine, part two!'); /*/
    console.log('Quine, part one!'); /**/
    return p;
})();

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


না, এগুলি সিনট্যাটিকভাবে আলাদা। একবার আপনি নিউলাইনগুলি যুক্ত করুন, এটি।
রাই-

2

জে - (24 + 30) / 2/2 = 13.5 পিটিএস

লক্ষ্য করুন জে মধ্যে স্ট্রিং ব্যাকস্ল্যাশ-পলান হয় না, কিন্তু একটি লা পাসকাল মূল্যউদ্ধৃতি-পলান: 'I can''t breathe!'

30$(,5#{.)'''30$(,5#{.)'         NB. program 1, 24 char
'30$(,5#{.)''''''30$(,5#{.)'''   NB. program 2, 30 char

প্রোগ্রাম 1 এএসটি noun verb hook nounএবং প্রোগ্রাম 2 এএসটি রয়েছে noun। প্রোগ্রাম 2 হ'ল প্রোগ্রাম 1 এর উদ্ধৃত সংস্করণ, যা রান করার সময় 1 টি প্রোগ্রাম ফিরে আসবে, সুতরাং এই পদ্ধতিটি সহজেই তিনটি অনুলিপিগুলিতে প্রসারিত করা যায় না: পি

প্রোগ্রাম 1 সূত্রের কোড অংশের একটি অনুলিপি, সম্মুখের অংশে সংযুক্ত একটি উদ্ধৃতি সহ এবং এর শেষে পাঁচটি কোট যুক্ত করে পরিচালনা করে (,5#{.)। তারপরে, এটি চক্রাকারে এই 16-অক্ষরের স্ট্রিং থেকে 30 টি অক্ষর নেয়, যা ফলস্বরূপ 2 টি প্রোগ্রাম দেয়।

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