एल्गोरिदम को सॉर्ट करने के लिए यहां एक बहुत ही सामान्य पैटर्न है:
def sort(l):
while not is_sorted(l):
choose indices i, j
assert i < j
if l[i] > l[j]:
l[i], l[j] = l[j], l[i]
इन एल्गोरिदम क्योंकि सूचकांक अच्छी तरह से काम i
और j
सूची की स्थिति पर आधारित है, ध्यान से चुना जाता है l
।
हालाँकि, क्या होगा अगर हम नहीं देख सकते हैं l
, और बस आँख बंद करके चुनना था? कितनी तेजी से हम सूची को क्रमबद्ध कर सकते हैं?
आपकी चुनौती एक ऐसे फ़ंक्शन को लिखना है जो केवल लंबाई के आधार पर सूचकांकों की एक यादृच्छिक जोड़ी को आउटपुट करता है l
। विशेष रूप से, आपको दो सूचकांकों के i, j
साथ आउटपुट करना होगा 0 <= i < j < len(l)
। आपका फ़ंक्शन किसी भी लंबाई की सूची पर काम करना चाहिए, लेकिन यह लंबाई 100 की सूची में बनाया जाएगा।
आपका स्कोर उपरोक्त पैटर्न के अनुसार समान रूप से बेतरतीब ढंग से सूचीबद्ध सूची को सॉर्ट करने के लिए आवश्यक अनुक्रमणिका विकल्पों की औसत संख्या है, जहां सूचकांकों को आपके फ़ंक्शन के अनुसार चुना जाता है।
मैं सबमिशन स्कोर करूंगा, बिना किसी क्रमबद्ध प्रविष्टियों के साथ लंबाई 100 की समान रूप से फेरबदल सूची पर 1000 परीक्षणों पर सूचकांक विकल्पों की औसत संख्या ले रहा है।
मैं कम परीक्षणों को चलाने का अधिकार सुरक्षित रखता हूं यदि सबमिशन स्पष्ट रूप से गैर-प्रतिस्पर्धी है या समाप्त नहीं होता है, और मैं एक एकल विजेता को खोजने के लिए शीर्ष प्रतियोगियों को अलग करने के लिए अधिक परीक्षण चलाऊंगा। यदि मेरे कम्प्यूटेशनल संसाधनों की सीमा में त्रुटि के मार्जिन के भीतर कई शीर्ष सबमिशन रहते हैं, तो मैं पहले वाले सबमिशन को विजेता घोषित करूंगा, जब तक कि आगे कम्प्यूटेशनल संसाधनों को सहन करने के लिए नहीं लाया जा सकता।
यहाँ पायथन में एक उदाहरण स्कोरिंग कार्यक्रम है:
import random
def is_sorted(l):
for x in range(len(l)-1):
if l[x] > l[x+1]:
return False
return True
def score(length, index_chooser):
steps = 0
l = list(range(length))
random.shuffle(l)
while not is_sorted(l):
i, j = index_chooser(length)
assert (i < j)
if l[i] > l[j]:
l[i], l[j] = l[j], l[i]
steps += 1
return steps
आपका फ़ंक्शन किसी भी परिवर्तनशील स्थिति को बनाए नहीं रख सकता है, वैश्विक चर के साथ बातचीत कर सकता है, सूची को प्रभावित कर सकता है l
, आदि। आपके फ़ंक्शन का एकमात्र इनपुट सूची की लंबाई होना चाहिए l
, और इसे श्रेणी में पूर्णांकों की एक जोड़ी का उत्पादन करना होगा [0, len(l)-1]
(या आपकी भाषा के लिए उपयुक्त) सूची अनुक्रमण)। पूछने के लिए स्वतंत्र महसूस करें कि क्या टिप्पणियों में कुछ की अनुमति है।
प्रस्तुतियाँ किसी भी मुक्त-उपयोग भाषा में हो सकती हैं। कृपया एक स्कोरिंग हार्नेस शामिल करें यदि कोई आपकी भाषा के लिए पहले से पोस्ट नहीं किया गया है। आप एक अनंतिम स्कोर पोस्ट कर सकते हैं, लेकिन मैं आधिकारिक स्कोर के साथ एक टिप्पणी छोड़ दूंगा।
स्कोरिंग 100 की लंबाई की समान रूप से बेतरतीब ढंग से सूची में छँटाई सूची की औसत संख्या है। शुभकामनाएँ।