Kolmogorov जटिलता एक स्ट्रिंग के एस कम से कम कार्यक्रम की लंबाई है पी , कुछ प्रोग्रामिंग भाषा में लिखा एल , जिसका उत्पादन ठीक है एस ।
(हां, वास्तविक परिभाषा अधिक औपचारिक है लेकिन यह चुनौती के लिए पर्याप्त होगा।)
इस चुनौती में आपका काम सबसे कम संभव "कोलमोगोरोव जटिलता सॉल्वर" लिखना है, जो कि एल में ही लिखा गया एक प्रोग्राम है जो एक स्ट्रिंग एस में लेता है और एल में लिखे गए सबसे छोटे पी को रिटर्न करता है जो एस आउटपुट करता है ।
इसके लिए भोली दृष्टिकोण सभी लंबाई 1 कार्यक्रमों पर चलना है, फिर सभी लंबाई 2 कार्यक्रमों, फिर सभी लंबाई 3 कार्यक्रमों, और इसी तरह, उनमें से प्रत्येक को चलाने और आउटपुट को मापने वाले प्रोग्राम तक एस को मिला है। इस दृष्टिकोण के साथ मुद्दा यह है कि इनमें से कुछ कार्यक्रम कभी भी चलना बंद नहीं हो सकते हैं, जिसका अर्थ है कि सॉल्वर स्वयं कभी नहीं रुक सकता है। और रुकने की समस्या के कारण उन कार्यक्रमों से बचने का कोई निश्चित तरीका नहीं है जो बंद नहीं करते हैं।
एक सरल, हालांकि अपूर्ण समाधान प्रत्येक संभावित P के निष्पादन समय पर एक समय सीमा लगाना है । ऐसे कार्यक्रम जो समय पर रुकने के लिए नहीं होते हैं, उन्हें खत्म किया जा सकता है, लेकिन सॉल्वर निश्चित रूप से बंद हो जाएगा (यह मानते हुए कि एल में एक कार्यक्रम वास्तव में समय सीमा के भीतर एस उत्पादन कर सकता है)।
चुनौती
अपने सॉल्वर को एक प्रोग्राम या फ़ंक्शन के रूप में लिखें जो तीन चीजों में लेता है:
- स्ट्रिंग एस ।
- एक सकारात्मक पूर्णांक T जो सेकंड या कुछ छोटे समय अवधि (जैसे मिलीसेकंड) में समय सीमा है।
- एक स्ट्रिंग एक क्षमता के लिए उपयोग करने के लिए वर्णों की वर्णमाला के पी 'है।
और सबसे छोटा P आउटपुट करता है जिसमें केवल A में अक्षर होते हैं , T समय इकाइयों से कम में चलता है , और S आउटपुट करता है ।
यह सामान्य छद्म कोड है:
Function KolmogorovComplexitySolver(S, T, A):
Assign N to 0
Loop until function returns:
In any order, iterate over all strings of length N that only contain characters from *A*. Call the current string P:
Execute P, saving the output to O, stopping the execution if it takes longer than time T
If (P did not throw any errors) and (P did not timeout) and (O and S are identical):
Return P
Add 1 to N
विवरण
- आप यह मान सकते हैं कि A में वर्णों से बना P हमेशा होगा जो T को आउटपुट S से चलाता है ।
- आप यह मान सकते हैं कि संभावित P के निष्पादन के साइड इफेक्ट्स नहीं होंगे जो सॉल्वर को सही तरीके से चलने या काम करने से रोकते हैं (जैसे सॉल्वर की आवंटित मेमोरी के साथ खिलवाड़ करना)।
- आप यह नहीं मान सकते हैं कि संभावित P 'त्रुटि मुक्त हैं। निष्पादन कॉल के आसपास
try
/catch
ब्लॉक या जो भी लागू हो, को शामिल करना सुनिश्चित करें। - यदि पी के सबसे छोटे हैं , तो कोई भी पर्याप्त होगा। "लघुता" को बाइट्स वाले वर्णों में मापा जाता है।
- संभावित P के आउटपुट को stdout (या आपकी भाषा के सामान्य आउटपुट क्षेत्र) पर मुद्रित किया जाता है। खाली स्ट्रिंग एक संभावित P है ।
- आदर्श रूप से आपका सॉल्वर A को किसी भी वर्ण को रखने की अनुमति देगा । एक कम से कम होना चाहिए शामिल करने के लिए सक्षम होने के लिए प्रिंट योग्य ASCII वर्ण के साथ साथ टैब और नई-पंक्तियों।
- इनपुट फ़ाइल / स्टडिन / कमांड लाइन / फंक्शन आर्ग्स से आ सकता है। आउटपुट स्टडआउट या समान के लिए जाता है, या यदि आपने एक फ़ंक्शन लिखा है, तो इसे स्ट्रिंग के रूप में वापस किया जा सकता है।
स्कोरिंग
सबसे कम बाइट्स के साथ सबमिशन जीत जाता है। टाईब्रेकर जल्द से जल्द प्रस्तुत करने के लिए जाता है।