एक मोनोटोनिक फ़ंक्शन उत्पन्न करें


12

अवलोकन

इस चुनौती में, आपका काम बेतरतीब ढंग से दो सेटों के बीच एक मोनोटोनिक गणितीय कार्य उत्पन्न करना है ।

इनपुट

आपका आदानों दो धनात्मक पूर्णांक होते हैं sऔर n

इन इनपुट मिलने के बाद, अपने कार्यक्रम के एक उत्पन्न करेगा यादृच्छिक गणितीय समारोह fसेट से करने के लिए । दूसरे शब्दों में, एक "नियम" है जो पूर्णांकों के बीच में और इसमें एक पूर्णांक बनाता है । इसके अतिरिक्त, निम्नलिखित अर्थ में एकरस होना चाहिए । यदि और दो- टुपल्स ऐसे हैं जो हर समन्वय के लिए हैं , तो ।{0,1,...,s-1}n{0,1,...,s-1}fn0s-1fABnA[i] ≥ B[i]if(A) ≥ f(B)

मोनोटोनिक फ़ंक्शंस का सटीक वितरण fकोई फर्क नहीं पड़ता, जब तक कि इस तरह के प्रत्येक फ़ंक्शन को उत्पन्न होने की एक सकारात्मक संभावना होती है (एक सही आरएनजी को मानकर)।

उत्पादन

आपका आउटपुट इनपुट्स और आउटपुट के लिए गणना करना होगा f। इसमें nपूर्णांकों के बीच 0- बीच में और s-1कुछ क्रम में, हर एक के बाद इसी आउटपुट के साथ होना चाहिए f। सटीक आउटपुट प्रारूप लचीला (कारण के भीतर) है।

उदाहरण

इनपुट s = 3और n = 2आउटपुट का उत्पादन कर सकते हैं

(0, 0) 0
(0, 1) 1
(0, 2) 2
(1, 0) 0
(1, 1) 1
(1, 2) 2
(2, 0) 1
(2, 1) 1
(2, 2) 2

इसमें सेट पर सभी जोड़े {0, 1, 2}बिल्कुल एक बार शामिल होते हैं, और प्रत्येक को इसके f-वल्यू के बाद किया जाता है । एकरसता की स्थिति भी संतुष्ट है। टुपल्स को लेक्सोग्राफिक क्रम में यहां दिया गया है, लेकिन यह आवश्यक नहीं है।

एक अन्य उदाहरण के रूप में, s = 2और n = 4उत्पादन कर सकते हैं

(0, 0, 0, 0) 0
(0, 0, 0, 1) 0
(0, 0, 1, 0) 0
(0, 0, 1, 1) 0
(0, 1, 0, 0) 1
(0, 1, 0, 1) 1
(0, 1, 1, 0) 1
(0, 1, 1, 1) 1
(1, 0, 0, 0) 0
(1, 0, 0, 1) 1
(1, 0, 1, 0) 0
(1, 0, 1, 1) 1
(1, 1, 0, 0) 1
(1, 1, 0, 1) 1
(1, 1, 1, 0) 1
(1, 1, 1, 1) 1

निम्नलिखित s = 2और n = 2(टुपल्स को फिर से व्यवस्थित करने के लिए) सभी संभावित आउटपुट हैं ; आपके कार्यक्रम को बेतरतीब ढंग से उनमें से एक का उत्पादन करना चाहिए:

(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 0
-------
(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 0
(1,0) 1
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 1
(1,1) 1
-------
(0,0) 1
(0,1) 1
(1,0) 1
(1,1) 1

नियम और स्कोरिंग

आप एक पूर्ण कार्यक्रम या एक फ़ंक्शन लिख सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है। स्पष्टीकरण के साथ कोड पसंद किया जाता है।

समय जटिलता पर कोई प्रतिबंध नहीं है, लेकिन मैं -15% का बोनस दूंगा यदि आपका समाधान हमेशा एक निश्चित समय में समाप्त होने की गारंटी है (इनपुट के आधार पर, और निरंतर समय में चलने वाले एक सही आरएनजी को मानकर) ।


यह मदद कर सकता है यदि आप एक छोटे मामले जैसे s = 2 n = 2 के लिए सभी संभावित कार्यों की पूरी तरह से गणना करते हैं। मुझे इस विवरण को पढ़ने के लिए कुछ समय समझाना पड़ा कि कैसे यादृच्छिकता खेलने में आएगी।
27

@ सपर अच्छा विचार; संपादित।
18

सीमा क्रमबद्धता एक आवश्यकता है? मैं एक समाधान पर विचार कर रहा हूं जो यादृच्छिक कार्यों का उत्पादन करता है जब तक कि यह एक मोनोटोनिक एक न मिले।
18

@ मुझे लगता है कि मैं बंधे हुए रनटाइम के लिए एक बोनस जोड़ूंगा, इसलिए ऐसा कोई समाधान अयोग्य नहीं होगा।
19

@ ज़र्ज़ब - शायद आपको समाधान के लिए एक बड़ा बोनस बनाना चाहिए जो कि एक घंटे के भीतर समाप्त होने की संभावना है।
ग्लेन ओ

जवाबों:


4

पायथ, 35 बाइट्स (38 - 15% = 31.45 अधिक नीचे)

#I!sm><FhMds<MCeMd^JC,mOQK^UQvzK2JB

प्रदर्शन

इनपुट प्रारूप में है:

n
s

आउटपुट प्रारूप में है:

[[value, tuple], [value, tuple], ...]

बस यादृच्छिक संभावनाओं को उत्पन्न करता है और उनका परीक्षण करता है।


वैकल्पिक 37 बाइट संस्करण जो मुझे लगता है कि बोनस के लिए योग्य है:

Of!sm><FhMds<MCeMd^T2mC,d^UQvz^UQ^Qvz

प्रदर्शन

यह सभी संभव मोनोटोनिक कार्यों को उत्पन्न करने से शुरू होता है, फिर एक यादृच्छिक पर आउटपुट करता है। यह बहुत धीमा है, और सबसे ऊपर है 2,2


इनपुट के साथ अच्छा उदाहरण 3, 2। दुर्भाग्य से, मुझे 3, 3ऑनलाइन pyth निष्पादक के लिए भी कोई प्रतिक्रिया नहीं मिली । क्या इस संयोजन के लिए एक अंतहीन लूप है ?!
बोबेल

@bobbel ऑनलाइन निष्पादक का एक टाइमआउट है, मुझे लगता है। मैं इसे स्थानीय स्तर पर आजमाता हूं।
isaacg

@bobbel यह इतना ज्यादा नहीं है कि इनफिटि लूप की गति बहुत धीमी है। यह भी काम करता है 2, 4, लेकिन बहुत कुछ नहीं।
isaacg

@bobbel मैंने कुछ धीमा भी जोड़ा।
isaacg

1

CJam, 40 बाइट्स - 15% = 34 बाइट्स

q~1$\m*\1$,m*{W$\.+2m*{:.<2b}%1&!},mR]zp

यह दृष्टिकोण सभी वैध कार्यों को उत्पन्न करता है और फिर यादृच्छिक पर चयन करता है। रन टाइम कम से कम O (s 2s n ) है , लेकिन किसी दिए गए इनपुट के लिए स्थिर है।

मुझे संदेह है कि यह ओपी के मन में क्या था, लेकिन यह एक निश्चित समय में समाप्त होने की गारंटी है (इनपुट के आधार पर [...]) और इसलिए बोनस के लिए योग्य है।

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।


1

जूलिया, 64 बाइट्स (-15% = 54.4)

g(s,n)=(K=rand(0:s-1,ntuple(n,i->s));for i=1:n K=sort(K,i)end;K)

Ungolfed:

function g(s,n)
  # Generates a random n-dimensional array with s per dimension
  # and all values being integers between 0 and s-1
  K=rand(0:s-1,ntuple(n,i->s))
  # Loop over the various dimensions
  for i=1:n
    # Sort in the current dimension
    K=sort(K,i)
  end
  return K
end

यह जल्दी से चलेगा, एकमात्र संभव मुद्दा स्मृति के साथ बड़े पर्याप्त एस और एन (जी (10,10) के लिए 10 ^ 10 सरणी का उत्पादन करना है, इसलिए स्पष्ट रूप से यह स्मृति से बाहर निकलने वाला है - भले ही प्रत्येक संख्या हो एक बाइट, यह 10 गीगाबाइट डेटा है)।

आउटपुट 1-आधारित अनुक्रमण है, इसलिए किसी दिए गए इनपुट के लिए परिणाम निर्धारित करने के लिए, आपको प्रत्येक इनपुट मान में एक जोड़ना होगा। उदाहरण के लिए, f (1,2,6,0,3) को खोजने के लिए, आपको जांच करने की आवश्यकता है K[2,3,7,1,4]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.