और विशेष रूप से दूसरा कानून : समय के साथ एक अलग प्रणाली की एन्ट्रापी बढ़ जाती है ।
इस चुनौती के लिए,
- एक " पृथक प्रणाली " को एक कार्यक्रम या फ़ंक्शन (अब से "कार्यक्रम" के रूप में संक्षिप्त रूप) लिया जाएगा;
- " समय " का पारित होना कार्यक्रम के आउटपुट के पुनरावृत्त निष्पादन के अनुरूप होगा , जिसे एक नया कार्यक्रम माना जाता है;
- " एन्ट्रॉपी " को शैनन की पहली-ऑर्डर एन्ट्रॉपी (नीचे परिभाषित होने के लिए) के रूप में लिया जाएगा , जो इस बात का माप है कि स्ट्रिंग के वर्ण कितने विविध हैं।
चुनौती
आपके प्रोग्राम को एक गैर-रिक्त स्ट्रिंग का उत्पादन करना चाहिए जब एक ही भाषा में प्रोग्राम के रूप में निष्पादित किया जाता है, तो पिछले एक की तुलना में अधिक एन्ट्रॉपी के साथ एक स्ट्रिंग का उत्पादन होता है। वास्तव में इस निष्पादित-आउटपुट प्रक्रिया को पुनरावृत्त करने के लिए एन्ट्रापी मूल्यों का सख्ती से बढ़ते क्रम का उत्पादन करना चाहिए ।
स्ट्रिंग्स में कोई भी यूनिकोड 9.0 वर्ण हो सकते हैं । तार का अनुक्रम नियतात्मक होना चाहिए (यादृच्छिक के विपरीत)।
एन्ट्रापी एक दिया स्ट्रिंग के लिए इस प्रकार परिभाषित किया जाएगा। स्ट्रिंग में इसके अनूठे पात्रों और उनकी घटनाओं की संख्या की पहचान करें। आवृत्ति पी मैं की मैं मई के अद्वितीय चरित्र है कि चरित्र स्ट्रिंग की लंबाई से विभाजित की पुनरावृत्ति की संख्या है। एन्ट्रापी तो है
जहां स्ट्रिंग के सभी अनूठे अक्षर खत्म हो गए हैं। तकनीकी रूप से, यह स्ट्रिंग में देखे गए आवृत्तियों द्वारा दिए गए वितरण के साथ असतत यादृच्छिक चर के एन्ट्रापी से मेल खाती है ।
चलो एच कश्मीर निरूपित स्ट्रिंग द्वारा उत्पादित की एन्ट्रापी कश्मीर वें कार्यक्रम, और एच 0 निरूपित प्रारंभिक कार्यक्रम के कोड की एन्ट्रापी। इसके अलावा, L 0 वर्णों में प्रारंभिक कार्यक्रम की लंबाई को निरूपित करें। अनुक्रम { एच के } चुनौती की आवश्यकताओं के अनुसार एकरस है, और बाध्य है (क्योंकि मौजूदा वर्णों की संख्या परिमित है)। इसलिए यह एक सीमा होती है, एच ∞ ।
स्कोर एक प्रस्तुत करने के लिए किया जाएगा ( एच ∞ - एच 0 ) / एल 0 :
- अंश, H ∞ - H 0 , यह दर्शाता है कि आपका कोड किस सीमा तक अनंत समय अवधि में एन्ट्रापी बढ़ाने के नियम का "पालन" करता है।
- डोनोनिमेटर, एल 0 , वर्णों में प्रारंभिक कोड की लंबाई है (बाइट्स में नहीं)।
उच्चतम स्कोर के साथ कोड जीतता है । टाई को जल्द से जल्द जमा करने / संपादित करने के पक्ष में हल किया जाएगा।
एक स्ट्रिंग की एन्ट्रॉपी की गणना करने के लिए, आप इस पोस्ट के अंत में जावास्क्रिप्ट स्निपेट ( @flawr के सौजन्य से और @ डेनिस और @ETHproductions द्वारा सुधार के साथ ) का उपयोग कर सकते हैं ।
यदि आपके विशिष्ट मामले में H ∞ की सीमा प्राप्त करना मुश्किल है, तो आप स्कोर की गणना करने के लिए H 20 का उपयोग कर सकते हैं , (इसलिए आप 20 ( H 20 - H 0 ) / L 0 ) की गणना करेंगे । लेकिन किसी भी मामले में, एन्ट्रापी के अनंत अनुक्रम को सख्ती से बढ़ाना चाहिए।
कृपया एक स्पष्टीकरण या संक्षिप्त प्रमाण शामिल करें कि एंट्रॉपी का क्रम बढ़ रहा है, अगर यह स्पष्ट नहीं है।
उदाहरण
एक काल्पनिक भाषा में, उस कोड पर विचार करें aabcab
, जो चलाने पर स्ट्रिंग का cdefgh
उत्पादन करता है cdefghi
, जो चलाने पर उत्पादन करता है , जो ...
मूल कोड के अद्वितीय वर्ण हैं a
, b
और c
, संबंधित आवृत्तियों 3/6, 2/6 और 1/6 के साथ। इसकी एन्ट्रापी 1.4591 है। यह H 0 है ।
स्ट्रिंग cdefgh
की तुलना में अधिक एन्ट्रापी है aabcab
। हम इसे कंप्यूटिंग के बिना जान सकते हैं क्योंकि किसी वर्ण की संख्या के लिए एन्ट्रापी को अधिकतम किया जाता है जब सभी आवृत्तियाँ समान होती हैं। दरअसल, एन्ट्रापी एच 1 2.5850 है।
cdefghi
पिछले एक की तुलना में स्ट्रिंग में फिर से अधिक एन्ट्रॉपी है। हम अब कंप्यूटिंग के बिना कर सकते हैं क्योंकि गैर-मौजूदा चरित्र को जोड़ने से हमेशा एन्ट्रापी बढ़ती है। दरअसल, एच 2 2.8074 है।
यदि अगली स्ट्रिंग थी 42
तो श्रृंखला अमान्य होगी, क्योंकि H 3 1 होगा, 2.8074 से छोटा।
अगर, दूसरे हाथ पर, अनुक्रम सीमा के साथ बढ़ रही है एन्ट्रापी के तार के उत्पादन पर चला गया एच ∞ = 3, स्कोर होगा (3-1.4597) / 6 = 0,2567।
स्वीकृतियाँ
करने के लिए धन्यवाद
@xnor ने चुनौती को बेहतर बनाने में मदद के लिए, और विशेष रूप से मुझे यह समझाने के लिए कि पुनरावृत्त निष्पादन से प्राप्त एंट्रोपी बढ़ाने की अनंत श्रृंखलाएं वास्तव में संभव हैं;
कई सुझावों के लिए @flawr , जिसमें स्कोर फ़ंक्शन को संशोधित करना और बहुत उपयोगी स्निपेट लिखना शामिल है;
@ स्कोर फ़ंक्शन की पिछली परिभाषा में एक आवश्यक कमी को इंगित करने के लिए;
स्निपेट में एक और सुधार के लिए @ETHproductions ;
@PeterTaylor एन्ट्रापी की परिभाषा में सुधार के लिए।