गोल्फ तुम महान अच्छे के लिए एक विपर्यय!


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% मौका ठीक है?
PyRulez

@PyRulez विफलता? कोड माना जाता है कि इसका एक एनाग्राम (खुद को छोड़कर) बेतरतीब ढंग से चुना गया है, जिसमें से किसी भी एनाग्राम के समान अवसरों को आउटपुट किया जा सकता है। मुझे नहीं पता कि आपका "असफलता" से क्या मतलब है।
अर्जुन

जवाबों:


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}

यह स्वयं के द्वारा चलाए जाने पर एक कुनैन के रूप में देखा जा सकता है। यह भी मैं जानता हूँ कि ज्यादातर परिभाषाओं द्वारा एक उचित रानी है; यह अपने स्वयं के स्रोत को नहीं पढ़ता है (बल्कि, इसमें "eval" एड का शाब्दिक अर्थ होता है, और इसे एक तर्क के रूप में खुद की एक प्रति दी जाती है), यह पेलोड ले जा सकता है (जैसा कि यहां देखा गया है!), और vस्ट्रिंग के बाहर। शाब्दिक vअंदर से कूटबद्ध है ।

एक यादृच्छिक विपर्यय उठाओ

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

यह लंबे समय से एक स्ट्रिंग पर वास्तव में अक्षम है, इसलिए मैं इस कार्यक्रम को पूरी तरह से परीक्षण करने में सक्षम नहीं हुआ, लेकिन मैंने इसे छोटे तारों पर परीक्षण किया है और यह सही ढंग से काम करता है।


क्यों नहीं TIO पर काम करता है?
मिस्टर एक्सकोडर २३'१

@ Mr.Xcoder शायद यह 60 के दशक की समय सीमा को दरकिनार कर देता है।
द एग्रिकॉलफर

ओह हाँ, आप सही हो।
मिस्टर एक्सकोडर

जब आप इसे अपनी बाइट में गिनते हैं तो आपका कोड आवश्यक याद करता है Q। हालाँकि मुझे लगता है कि आप इस "सभी क्रमपरिवर्तन" विधि को एक "फेरबदल" के साथ बदल सकते हैं Ẋ⁼¿, एक बाइट को बचाते हुए , जबकि यह TIO पर काम करने की अनुमति देता है।
जोनाथन एलन

4

CJam , 17 बाइट्स

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

यह किसी भी समय जल्द ही समाप्त नहीं होने वाला है, इसलिए इस बार कोई TIO लिंक नहीं।

एक सांत्वना के रूप में, यहां एक 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 बाइट्स

आश्चर्यजनक रूप से यह समाधान मेरी अपेक्षा से कम है। स्रोत कोड को फेरबदल करता है, जब तक कि यह मूल से अलग न हो।

-2 बाइट्स, @ mbomb007
-3 बाइट्स के लिए, @Wondercricket को धन्यवाद

इसे ऑनलाइन आज़माएं

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)))

जहां R में सोर्सकोड होता है

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

ट्रिपल कोट्स की जरूरत थी क्योंकि मुझे कोड में वास्तविक लेनिकपैरेटर्स रखने के लिए मजबूर किया गया था। एनाग्रमों की वैसे भी 3 लाइनें होंगी।


1
exec sके बजायexec(s)
mbomb007

के बाद से एक strअपरिवर्तनीय है, तो आप ऐसा करने से एक बाइट को बचा सकता है L=Rऔर का उपयोग कर sampleपर Lबजाय का उपयोग कर shuffleपर listउत्तर देंइस Stackoverflow
Wondercricket

@Wondercricket नमूना वर्णों की सूची देता है, इसलिए इसकी तुलना R के परिणामों से होती है जो हमेशा गलत रिटर्न देंगे। लेकिन कुछ पुनर्व्यवस्थित मदद करता है, विचार के लिए धन्यवाद!
डेड पॉसम

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)यह सत्यापित करने के लिए कि आउटपुट वास्तव में कार्यक्रम के बराबर है:
इसे यहां आज़माएं।

स्पष्टीकरण:

  • 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

05AB1E , 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

जावास्क्रिप्ट (ईएस 6), 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

foldकोड को लाइनों में विभाजित करता है, लाइनों को shufफेरबदल करता है, और trकोड को वापस एक साथ रखता है

इसे खुद आउटपुट करने का मुद्दा तय किया, अब यह कभी भी खुद को आउटपुट नहीं देगा

इसे ऑनलाइन आज़माएं!


1
क्या इसमें बदलाव के बिना, कोड को स्वयं आउटपुट करने का मौका है?
डेड पॉसम

यह भी केवल लाइनों को फेरबदल करने के लिए लगता है, इसलिए सभी क्रमपरिवर्तन संभव नहीं हैं, विशेष रूप से कार्यक्रम में केवल एक ही लाइन है ...
मार्टिन एंडर

सभी क्रमपरिवर्तन संभव हैं, इसका परीक्षण करें। मैं इसकी समस्या को ठीक कर रहा हूँ शायद खुद को छोड़ दे
DrnglVrgs

1
ऐसा $0लगता है कि "आपके प्रोग्राम को कोई इनपुट नहीं लेना चाहिए।"
मैनटवर्क

मुझे पूरा यकीन है कि यह सिर्फ नाम है। इसलिए, यहां तक ​​कि अगर यह इनपुट नहीं था, तो यह एक धोखा है :(
कैलक्यूलेटरफिलीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.