मैं स्रोत को गुणा करता हूं, आप (शायद) आउटपुट को गुणा करते हैं!


18

कार्य

कार्य एक प्रोग्राम लिखना है जो एक सुसंगत लेकिन अन्यथा मनमाने ढंग से सकारात्मक पूर्णांक x आउटपुट करता है (इसलिए सख्ती से 0 से अधिक)। यहाँ पकड़ है: जब स्रोत दोहराया है N बार (कोड जोड़ दिया जाता है / concatenated में ही करने के लिए), कार्यक्रम एक होना चाहिए outputting की संभावना एन एक्स और के शेष संभावना एन - 1N11NNxN1Nआउटपुटएक्सका एन अपरिवर्तित होना।

उदाहरण

मान लें कि आपका प्रारंभिक स्रोत है XYZऔर पूर्णांक बनाता है 3। फिर:

  • के लिए एन=2 : XYZXYZचाहिए उत्पादन 3 की एक संभावना के साथ 12 (समय की 50%) और23=6की एक संभावना के साथ12साथ ही 2 (समय का 50%)।

  • के लिए एन=3 : XYZXYZXYZचाहिए उत्पादन 3 की एक संभावना के साथ 23 (समय की 66.666%) और33=9की एक संभावना के साथ13 (33.333% समय)

  • के लिए एन=4 : XYZXYZXYZXYZचाहिए उत्पादन 3 की एक संभावना के साथ 34 (समय की 75%) और43=12 के एक संभावना के साथ14 (समय का 25%)

और इसी तरह....

नियम

  • आपको एक पूर्ण कार्यक्रम बनाना चाहिए । आउटपुट को STDOUT पर प्रिंट करना होगा।

  • आपका कार्यक्रम, सिद्धांत में, ऊपर बताई गई संभावनाओं के साथ प्रत्येक संभावित मूल्य का उत्पादन करना चाहिए, लेकिन यादृच्छिक के कार्यान्वयन के कारण इससे थोड़ा विचलन ठीक है ( बशर्ते कि कार्यान्वयन एक अलग वितरण का नहीं है - आप एक का उपयोग नहीं कर सकते हैं बाइट्स को बचाने के लिए सामान्य वितरण )

  • कार्यक्रम को (फिर, सिद्धांत रूप में) एन एक अनियंत्रित रूप से बड़े मूल्य के लिए काम करना चाहिए , लेकिन परिशुद्धता के कारण तकनीकी सीमाएं बड़े एन लिए ठीक हैं ।

  • आउटपुट बेस 10 में होना चाहिए (किसी अन्य आधार पर या वैज्ञानिक संकेतन के साथ आउटपुट निषिद्ध है)। ट्रेलिंग / अग्रणी स्थान और अग्रणी शून्य की अनुमति है।

  • प्रारंभिक स्रोत (निश्चित रूप से) कम से कम 1 बाइट लंबा होना चाहिए। आप अपने स्रोत की प्रतियों के बीच एक नई पंक्ति नहीं मान सकते हैं । कार्यक्रम को इनपुट नहीं लेना चाहिए (या अप्रयुक्त, खाली इनपुट) होना चाहिए।

  • यह , इसलिए उत्तर का स्कोर बाइट्स में (मूल) स्रोत की लंबाई है, जिसमें कम स्कोर बेहतर है।

नोट: यह चुनौती एक (बहुत) की कठिन संस्करण है इस एक


क्या प्रोग्राम अपना सोर्स कोड पढ़ सकता है?
मेरा सर्वनाम

3
@someone हाँ, इसकी अनुमति है।
मिस्टर एक्सकोडर

जवाबों:


16

आर , 66 35 बाइट्स

-29 बाइट्स digEmAll के लिए धन्यवाद ।

-2 बाइट्स ग्यूसेप के लिए धन्यवाद ।

+0->A
x=!0:F
F=F+1
sample(F*x+!x,1)

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

N = 4 के वितरण की जाँच करें।

कुंजी सही असाइनमेंट है -> । जब कोड एन गुणा किया जाता है , तो पहले एन-1 कॉल को sampleअसाइन किया जाएगा A, और केवल आखिरी कॉल प्रिंट की जाएगी।

मूल, अधिक दृढ़ समाधान:

आर , 66 बाइट्स

T->TT
F=F+1
TT=0
`?`=function(x)if(x)sample(c(1,F),1,,c(1,F-1))
?T

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

इसे ऑनलाइन आज़माएं (3 बार दोहराया गया)!

दो तरकीबों का उपयोग करता है: 1) ब्याज के मुख्य कार्य को कॉल करें ?, ताकि हम इसे ब्रैकेट के साथ प्रोग्राम को समाप्त किए बिना कॉल कर सकें, और 2) चर का उपयोग करें Tऔर TT, कोड के साथ शुरू होता है Tऔर जिसके साथ समाप्त होता है ?T

Fपुनरावृत्ति काउंटर है। ?एक समारोह जो एक बूलियन तर्क लेता के रूप में नए सिरे से परिभाषित किया गया है: अगर के इनपुट ?है TRUE(या T), यह आवश्यक यादृच्छिक नमूना करता है, यदि इनपुट FALSE(या 0) है, तो यह कुछ भी नहीं करता है। के मान के TTरूप में परिभाषित किया गया है 0, ताकि ?Tनमूना करता है, लेकिन ?TTकुछ भी नहीं करता है।

जब स्रोत दोहराया जाता है, तो यह इस तरह दिखता है:

T->TT
F=F+1
TT=0
`?`=function(x)if(x)sample(c(1,F),1,,c(1,F-1))
?TT->TT
F=F+1
TT=0
`?`=function(x)if(x)sample(c(1,F),1,,c(1,F-1))
?T

इसलिए मध्य कॉल ?TTकुछ भी नहीं है लेकिन अंतिम कॉल ?Tयादृच्छिक परिणाम उत्पन्न करता है।


5
मुझे नहीं लगता कि मैंने कभी ->ऐसी स्थिति में कोड गोल्फ में इस्तेमाल किया है जहां <-नहीं हो सकता है; यह बहुत अच्छा है!!
ग्यूसेप

पुनश्च मैं एक बिंदु पर यह एक इनाम देने वाला हूँ।
Giuseppe

2
पूर्ण रूप से बहुत अच्छा!
digEmAll


@digEmAll बहुत कुछ, धन्यवाद!
रॉबिन राइडर

11

पायथन 3 , 81 79 बाइट्स

+0if[]else 1
from random import*
try:n+=1
except:n=1
print([1,n][random()*n<1])

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

-1 बाइट @ निशिओका को धन्यवाद

यह एक पायथन 3 समाधान है जो सीधे कार्यक्रम स्रोत तक नहीं पहुंचता है। पायथन 3 में ऐसा करना पायथन 2 की तुलना में अधिक चुनौतीपूर्ण है क्योंकि सामान्य प्रिंटिंग स्टेटमेंट एक समापन कोष्ठक के साथ समाप्त होते हैं इसलिए प्रारंभिक स्रोत के अगले ब्लॉक में इसके व्यवहार को बदलने के लिए कई विकल्प नहीं हैं। पायथन 3 में अधिक रचनात्मक समाधान देखना दिलचस्प होगा।


-1 बाइट:+0 if[]else 1
निशीओका

@ निशिओका धन्यवाद। अपडेट किया गया।
जोएल

11

बैश , 31 बाइट्स

trap echo\ $[RANDOM%++n?1:n] 0;

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

trap ... 0बाहर निकलने पर निहित कोड चलाएगा। बार-बार trapपुराने को अधिलेखित करेगा। $[arithmetic expansion]हर बार एक नया जाल सेट होने पर अयोग्य घोषित हो जाता है।


Zsh के साथ एक बाइट बचा सकता है <<<:

trap "<<<$[RANDOM%++n?1:n]" 0;



4

पायथन 3 , 78 76 75 बाइट्स

जिस लिंक को पोस्ट किया गया था उसी चाल का उपयोग करके , यहां एक पायथन एक (x = 1 के साथ) है।

from random import*;n=len(*open(__file__))//75;print(1+~-n*(random()<1/n))#

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

-2 बाइट्स अपने (n-1)फॉर्मूले के लिए मिस्टर एक्सकोडर को धन्यवाद देते हैं, ~-nजिनके पास निशीओका की तुलना में *
-1 बाइट की तुलना में अधिक पूर्वता है


1
मुझे ठीक लगता है! import random;n=len(*open(__file__))//76;print(1+~-n*(random.random()<1/n))#-2 बाइट्स के लिए काम करना चाहिए
मिस्टर एक्सकोडर

1
मैंने n-1 करने का यह तरीका कभी नहीं देखा था! मुझे यह पसंद है, धन्यवाद :)
प्रशस्त डौडी


एक अन्य -1 बाइट लेकिन थोड़ा अलग दृष्टिकोण के साथ: tio.run/##K6gsycjPM/7/...
निशियोका

हाँ, मैं random()<1/n;-) की वजह से करता हूं
Prisris Douady




3

रूबी , 40 बाइट्स

1
n||=@x=0
n+=1
puts 1>rand(n)?n:1 if @x

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

इसे ऑनलाइन आज़माएं (3 बार कॉपी किया गया)!

इस पायथन जवाब का एक रूबी बंदरगाह ।

रूबी , 38 बाइट्स

फ़ाइल को पढ़कर 2 बाइट बचाई गईं:

n=File.size($0)/38;puts 1>rand(n)?n:1#

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


2

रूनिक एनकाउंटर , 31 बाइट्स

UwR'10<;$\
I+:'RA0)?/1$;
1
l;
y

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

इस संरचना का उपयोग इस उत्तर को गिनने के लिए करता है कि स्रोत को कितनी बार दोहराया गया है:

निष्पादन प्रवाह

किसी सूची में nth नंबर आउटपुट करने के बजाय, हम उस मान का उपयोग बेतरतीब ढंग से एक संख्या उत्पन्न करने के लिए करते हैं, यदि परिणाम 0 नहीं है, तो 1 प्रिंट करें, अन्यथा उस नंबर को प्रिंट करें।


2

Japt , 9 8 बाइट्स

(°Tö)ΪT

टेस्ट करो | दोगुना हो गया | 10 पुनरावृत्तियों के बाद 10000 रनों के वितरण को तीन गुना
सत्यापित करें

(°Tö)ΪT
(            :Prevent the operator that follows from being implicitly applied to the first input variable, U
 °T          :Increment T (initially 0) by 1
   ö         :Random element in the range [0,T)
    )        :Closing the parentheses here instead of after the T saves a byte as there would need to be a space here to close the random method
     Î       :Sign - 0 (falsey) or 1 (truthy)
      ªT     :Logical OR with current value of T

मूल, १३ ११ १० ९ बाइट्स

ट्रेलिंग स्थान पर ध्यान दें।

NoÎp°T ö 

टेस्ट करो | दोगुना हो गया | 10 पुनरावृत्तियों के बाद 10000 रनों के वितरण को तीन गुना
सत्यापित करें

NoÎp°T ö 
N             :Initially, the (empty) array of inputs
 o            :Replace the last element with
  Î           :  Its sign (always 1)
   p          :Push
    °T        :  T (initially 0) incremented
       ö      :Random element of N

2

जावास्क्रिप्ट ( जावास्क्रिप्ट खोल 71 ), 78 बाइट्स

(async x=>x)().then(x=>f((''+f).length/78));f=x=>print(1-~x*Math.random()|0)//

कोई टियो लिंक नहीं, टियो पर स्पाइडरमोंकी बहुत पुरानी है ...

Firefox (Spidermonkey) टिप्पणी को फ़ंक्शन का एक हिस्सा मानता है f। नतीजतन, (''+f).lengthहो जाएगा b+79nजहां ख <78, और (n + 1) दोहराया स्रोत कोड के समय है।

यह छोटी गाड़ी ( मुझे यकीन नहीं है। मैं पसंद करूंगा कि यह किसी विशेष दुभाषिया के बजाय जावास्क्रिप्ट विनिर्देश का एक बग है ) व्यवहार इस जवाब के बाद किसी और द्वारा बीएमओ को प्रस्तुत किया गया था: https://bugzilla.mozilla.org/ show_bug.cgi? id = 1,579,792 । (न तो बमो धागे और न ही ट्वीट मेरे द्वारा पोस्ट किया गया है।)


क्या साथ है (async x=>x)()? यह async क्यों है?
टॉम ज़ातो -

@ TomášZato यह शाब्दिक asyncविचित्र है। इसलिए x=>f(...)फ़ंक्शन fपरिभाषित होने के बाद कॉलबैक को लागू किया जाएगा ।
tsh

1

सी # (विज़ुअल सी # इंटरएक्टिव कंपाइलर) , 133 114 112 बाइट्स

यह पहली (और उम्मीद के आखिरी) समय है जब मैंने कभी C # प्रीप्रोसेसर निर्देशों का उपयोग किया है।

#if!I
#define I
static int i;
class p{~p()=>Console.Write(new Random().Next(i)<1?i:1);}p s=new p();
#endif
i++;

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


1

चारकोल , 12 बाइट्स

⎚I⎇‽L⊞Oυω¹Lυ

इसे ऑनलाइन आज़माएं! जुड़े सवाल के मेरे जवाब के आधार पर। nसंभावना के साथ आउटपुट ¹/ₙ, अन्यथा 1। स्पष्टीकरण:

⎚               Remove output from previous iterations
       υ        Initially empty list
        ω       Empty string
     ⊞O         Push
    L           Length
   ‽            Random integer [0..length)
  ⎇             Ternary
         ¹      If nonzero then literal 1
          Lυ    If zero then the new length
 I              Cast to string for implicit print
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.