গল্ফ আপনি একটি ভাল জন্য মহান!


12

কাজটি

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


বিবরণাদি

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


ইনপুট

আপনার প্রোগ্রাম অবশ্যই কোন ইনপুট গ্রহণ করা উচিত। তবে, যদি আপনার ভাষার প্রয়োজন হিসাবে ইনপুট দরকার হয় তবে আপনি ধরে নিতে পারেন যে এটি ছোট হাতের দেওয়া হবে a। আপনার অবশ্যই কোনওভাবে ইনপুট ব্যবহার করবেন না।


আউটপুট

আপনার প্রোগ্রামটি ভেরিয়েবলে লেখা ব্যতীত যে কোনও উপায়ে আউটপুট দিতে পারে। ফাইল, কনসোল, স্ক্রিন ইত্যাদিতে লেখার অনুমতি রয়েছে। ফাংশন returnপাশাপাশি অনুমতি দেওয়া হয়।


অতিরিক্ত বিধি

  • আপনার প্রোগ্রামের সোর্স কোডটিতে কমপক্ষে 3 টি অক্ষর (3 বাইট নয়) থাকতে হবে।

  • আপনার প্রোগ্রামের উত্স কোডটিতে কমপক্ষে 3 টি সম্ভাব্য অ্যানগ্রাম থাকতে হবে (নিজে বাদে)। উদাহরণস্বরূপ, aabবৈধ জমা হিসাবে গণ্য হয় না কারণ aabকেবল aab( baaএবং aba) ব্যতীত দুটি অ্যানগ্রগ্রাম রয়েছে ।

  • আপনার প্রোগ্রাম অবশ্যই কোন ত্রুটি উত্পাদন করা উচিত।

  • আপনার প্রোগ্রামটির সঠিকভাবে তার অ্যানাগ্রামগুলি আউটপুট করা উচিত ।

  • স্ট্যান্ডার্ড লুফোলস এবং স্ট্যান্ডার্ড কুইন বিধি প্রযোজ্য।


উদাহরণ

মনে করুন আপনার প্রোগ্রামটির উত্স কোডটি abc। এটি এলোমেলোভাবে নিম্নলিখিত যেকোন একটি আউটপুট করা উচিত (অভিন্ন বিতরণ সহ):

  1. acb
  2. bca
  3. bac
  4. cba
  5. cab

এবং, এটি কখনই আউটপুট করা উচিত নয় abc


বিজয়ী মানদণ্ড

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী! টাই হওয়ার ক্ষেত্রে এর আগে যে সমাধানটি পোস্ট করা হয়েছিল তা জয়ী হয়!



এটির গ্যারান্টি দেওয়া দরকার যে এটি সঠিকভাবে আচরণ করে, বা কেবল সম্ভাব্য 1 দিয়ে?
পাইরুলেজ

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

@ আর্জুন তাই ব্যর্থতার 0% সুযোগ কি ঠিক আছে?
পাইরুলেজ

@ পাইরুলেজ ব্যর্থতা? কোডটি তার কোনও একটি এনগ্রামের আউটপুট দেওয়ার কথা বলেছে (নিজে বাদে) তার এন্ডগ্রামের আউটপুট হওয়ার সমান সম্ভাবনা সহ এলোমেলোভাবে বেছে নেওয়া হয়েছে। "ব্যর্থতা" বলতে কী বোঝাতে চেয়েছি তা আমি জানি না।
অর্জুন

উত্তর:


5

জেলি , 15 বাইট

“v0¡µṾ;ḢŒ!QḊX”v

শুধু জিনিস শুরু করতে; এটি প্রায় অবশ্যই প্রহারযোগ্য। এটি মূলত সর্বজনীন কুইন কনস্ট্রাক্টরের সংমিশ্রণ এবং একটি "ইনপুট ব্যতীত এলোমেলো ক্রম ছাড়ুন" ফাংশন; পরেরটি অভাবনীয় হতে পারে, পূর্বেরটি প্রায় অবশ্যই।

ব্যাখ্যা

সর্বজনীন কুইন নির্মাতা

“v0¡µṾ;Ḣ”v
“       ”v   Evaluate the following, given {itself} as argument:
 v0¡µ          No-op (which starts with "v")
     Ṿ         Escape string
      ;Ḣ       Append first character of {the argument}

এটি নিজেই চালানো হলে এটিকে কুইন হিসাবে দেখা যেতে পারে। আমি জানি বেশিরভাগ সংজ্ঞা দ্বারা এটি একটি সঠিক কুইন; এটি তার নিজস্ব উত্স পড়েনি (বরং এটিতে একটি আক্ষরিক যা "ইভাল" এড রয়েছে এবং এটি একটি আর্গুমেন্ট হিসাবে নিজের একটি অনুলিপি দেওয়া হয়েছে), এটি একটি বেতনের ভার বহন করতে পারে (এখানে যেমন দেখা যাচ্ছে!), এবং vস্ট্রিংয়ের বাইরের অংশটি বহন করতে পারে আক্ষরিক vভিতরে ভিতরে এনকোড করা হয় ।

একটি এলোমেলোভাবে বেছে নিন

Œ!QḊX
Œ!     All permutations
  Q    Discard duplicates
   Ḋ   Discard the first (i.e. the string itself)
    X  Choose random element

এটি দীর্ঘকালীন একটি স্ট্রিংয়ের পক্ষে সত্যিই অদক্ষ, সুতরাং আমি পুরো প্রোগ্রামটি পরীক্ষা করতে সক্ষম হয়ে উঠিনি, তবে আমি এটি আরও ছোট স্ট্রিংয়ে পরীক্ষা করেছি এবং এটি সঠিকভাবে কাজ করছে বলে মনে হচ্ছে।


পাতলা টিআইওতে কাজ করে না কেন?
মিঃ এক্সকোডার

@ মিঃ এক্সকোডার এটি সম্ভবত 60 এর সময়সীমা বাইপাস করে।
এরিক আউটগল্ফার

ওহ, হ্যাঁ, আপনি ঠিক বলেছেন।
মিঃ এক্সকোডার

আপনার বাইটে এটি থাকা অবস্থায় আপনার কোডটি প্রয়োজনীয় মিস করে Q। তবে আমি মনে করি আপনি টিআইওতে কাজ করার অনুমতি দেওয়ার সাথে সাথে একটি বাইট সংরক্ষণ করে "শফল" ব্যবহার করে এই "সমস্ত অনুমতি" পদ্ধতিটি পরিবর্তন করতে পারেন Ẋ⁼¿
জোনাথন অ্যালান

4

সিজেম , 17 বাইট

{`"_~"+m!(a-mR}_~

এটি শীঘ্রই কোনও সময় শেষ করতে যাচ্ছে না, তাই এবার টিআইওর কোনও লিঙ্ক নেই।

সান্ত্বনা হিসাবে, এখানে একটি 20 বাইট সমাধান রয়েছে যা খুব দ্রুত শেষ হয়:

{`"_~"+:S{mr_S=}h}_~

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

ব্যাখ্যা

{`"_~"+   e# Standard quine framework, leaves a string equal to the source
          e# code on the stack.
  m!      e# Get all permutations. The first one will always be the original order.
  (a      e# Remove that copy of the source code and wrap it in a new list.
  -       e# Remove all copies of the source code from the list of permutations.
  mR      e# Pick a random permutation.
}_~

20 টি বাইট সমাধান পরিবর্তে উত্স কোডটিকে আসল থেকে আলাদা না হওয়া পর্যন্ত এটি পরিবর্তন করে।


4

পাইথন 2, 117 বাইট

আশ্চর্যজনকভাবে এই সমাধানটি আমার প্রত্যাশার চেয়ে কম orter উত্স কোডটি শফলেস, যতক্ষণ না এটি আসল থেকে আলাদা হয়।

-২ বাইটস, @ এমবম্ব ২০০7
-৩ বাইটসকে ধন্যবাদ, ওয়ানড্রক্রিটকে ধন্যবাদ

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

s=r"""from random import*;R='s=r\"""'+s+'\"""'+';exec s';L=R
while L==R:L=''.join(sample(R,len(R)))
print L""";exec s

পাইথনের এটি মৌলিক কাইনগুলির মধ্যে একটি, যা আমি সংশোধন করেছি

s = r"print 's = r\"' + s + '\"' + '\nexec(s)'"
exec(s)

এন্ডগ্রাম তৈরি করা এলোমেলো মডিউল দ্বারা সম্পন্ন হয়

L=R
while L==R:L=''.join(sample(L,len(L)))

যেখানে আর রয়েছে সোর্সকোড

s=...
R='s=r\"""'+s+'\"""'+'\nexec s'

ট্রিপল কোটগুলির দরকার ছিল কারণ আমি বাধ্য হয়ে প্রকৃত লিনিস্পারেটরগুলিকে রাখতে পারি। আনগ্রামগুলিতে যাইহোক 3 লাইন থাকবে।


1
exec sপরিবর্তেexec(s)
mbomb007

যেহেতু একটা strঅপরিবর্তনীয় হয়, তাহলে আপনি করছেন দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন L=Rএবং ব্যবহার sampleউপর Lবদলে ব্যবহার shuffleউপর listrepl.it । ধারণাটি এই
স্ট্যাকওভারফ্লো

@ ওয়ানড্রিকেট নমুনা অক্ষরের তালিকার তালিকা দেয়, সুতরাং এর ফলাফলগুলির সাথে আর এর তুলনা করা সর্বদা মিথ্যা প্রত্যাবর্তন করে। তবে কিছু পুনর্বিন্যাস সাহায্য করে, ধারণাটির জন্য ধন্যবাদ!
ডেড পসসাম

3

জাভা 7, 376 428 426 428 বাইট

import java.util.*;class M{public static void main(String[]a){String s="import java.util.*;class M{public static void main(String[]a){String s=%c%s%1$c,x=s=s.format(s,34,s);for(List l=Arrays.asList(x.split(%1$c%1$c));x.equals(s);s=s.join(%1$c%1$c,l))Collections.shuffle(l);System.out.print(s);}}",x=s=s.format(s,34,s);for(List l=Arrays.asList(x.split(""));x.equals(s);s=s.join("",l))Collections.shuffle(l);System.out.print(s);}}

দুটি বাগ-ফিক্সের জন্য +52 এবং +2 বাইটস .. এলোমেলোভাবে উত্পাদিত স্ট্রিংটি মূল উত্স-কোডের সমান হলে আমি (সঠিকভাবে) চেক করছিলাম না। এর সম্ভাবনাগুলি জড়িত চরিত্রের পরিমাণ বিবেচনা করে জ্যোতির্বিজ্ঞানগতভাবে সামান্য, তবে চ্যালেঞ্জের নিয়ম মেনে নির্বিশেষে আমাকে এটিকে বৈধ করতে হবে।

জাভাতে আমার প্রথম উত্তর ..
এটি এখানে চেষ্টা করে দেখুন।

আপনি উভয় মুছে ফেলতে Collections.shuffle(l)এবং উভয়ের !সামনে যুক্ত করতে পারেন x.equals(s)যাচাই করতে যে আউটপুটটি আসলে প্রোগ্রামটির সমান:
এটি এখানে চেষ্টা করে দেখুন Try

ব্যাখ্যা:

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

এবং কোডের এই অংশটি এলোমেলোভাবে আনগ্রাম আউটপুট দেওয়ার জন্য দায়ী:

// Strings `s` and `x` now both contain the source-code:
x=s=s.format(s,34,s);

// Create a list with the characters of this source-code-String and loop
for(List l=Arrays.asList(x.split(""));
    // as long as String `x` equals String `s`
    x.equals(s);
    // Shuffle the list, and set it to `s` in every iteration of the loop:
    s=s.join("",l))Collections.shuffle(l);
// End of loop (implicit / single-line body)

// And then print the random anagram to STDOUT:
System.out.print(x);

1

05 এ বি 1 ই , 22 বাইট

"34çìDJœ¦.R"34çìDJœ¦.R

এটি টিআইওর পক্ষে খুব বড় একটি তালিকা তৈরি করে, তাই লিঙ্কটি একটি ছোট স্ট্রিং ব্যবহার করে, তবে ধারণাটি একই।

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

"34çìDJœ¦.R"           # Push this string
            34ç        # Push "
               ì       # Prepend
                DJ     # Duplicate and join 
                  œ¦   # Push all permutations except the original
                    .R # Pick a random element

1

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

!function a(){b="!"+a+"()",c=b.split(""),c.sort(()=>Math.round(Math.random())-.5),c!=b.split("")?console.log(c.join("")):a()}();

আউটপুট বদল করতে বাছাই () এলোমেলো করে -1,0, বা 1 ব্যবহার করে।


0

বাশ, 27 96 বাইট

i=`cat $0`&&e=`fold -w1 $0|shuf|tr -d '\n'`&&while [ "$e" = "$i" ]; do `$0`; exit; done&&echo $e

foldshufকোডগুলিকে লাইনে ভাগ করে দেয়, লাইনগুলিকে পরিবর্তন করে এবং trকোডটি আবার একসাথে রেখে দেয়

এটির ফলাফল নিজেই আউটপুট করে ফিক্স করে, এখন এটি কখনও আউটপুট হবে না

অনলাইনে চেষ্টা করে দেখুন!


1
কোনও কোড পরিবর্তন না করে নিজেই কোড আউটপুট করার সুযোগ রয়েছে কি?
ডেড পসসাম

এটি কেবলমাত্র লাইনগুলিকে বদলাতে পারে বলে মনে হয়, সুতরাং সমস্ত অনুমতি দেওয়া সম্ভব হয় না, বিশেষত যেহেতু প্রোগ্রামটির কেবল একটি লাইন থাকে ...
মার্টিন ইন্ডার

সমস্ত অনুমতি দেওয়া সম্ভব, এটি পরীক্ষা করুন। আমি এটির সমস্যাটি সম্ভবত নিজেরাই আউটপুট করে
ফিক্স করছি

1
এটি $0"আপনার প্রোগ্রামের কোনও ইনপুট নেওয়া উচিত নয়" লঙ্ঘনের মতো বলে মনে হচ্ছে।
manatwork

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