प्रसंग
स्ट्रॉ पोल एक वेबसाइट है जो सरल / अनौपचारिक चुनावों के निर्माण के लिए है। विकल्पों की एक सूची के साथ, उपयोगकर्ता अपनी पसंद का चयन कर सकता है, और वोट अधिक हो जाते हैं। एक स्ट्रॉ पोल की दो बहुत महत्वपूर्ण विशेषताएं हैं:
- मतदान से पहले वर्तमान परिणामों को देखना संभव है
- कई विकल्पों का चयन करना अक्सर संभव होता है, जिस तरह से व्यवहार किया जाता है जैसे कि आपने कई बार वोट किया, प्रत्येक विकल्प के लिए।
स्ट्रॉ पोल बनाने की तुलना में एक चीज जो अधिक मजेदार है वह परिणामों के साथ खिलवाड़ कर रही है। व्यवधान के दो मुख्य प्रकार हैं:
- सरल व्यवधान, जिसमें आप सभी विकल्पों के लिए मतदान करते हैं
- उन्नत व्यवधान, जिसमें आप रणनीतिक रूप से उठाते हैं कि प्रभाव को अधिकतम करने के लिए वोट करने के लिए कौन से विकल्प हैं।
इस चुनौती में, आप उन्नत व्यवधान के लिए एक कार्यक्रम लिखेंगे ।
गणित
गणितीय रूप से चीजों को कहने के लिए, हम कह सकते हैं कि वोटों की एन्ट्रापी जितनी अधिक होती है, एक मतदान उतना ही बाधित होता है। इसका मतलब यह है कि एक सर्वेक्षण जहां एक एकल विकल्प में सभी वोटों को बाधित नहीं किया जाता है, जबकि एक ऐसा सर्वेक्षण जिसमें हर विकल्प के बराबर वोट होते हैं, अधिकतम रूप से बाधित होता है (यह अंतिम लक्ष्य है)।
संख्याओं की सूची की एन्ट्रापी [x1, x2, ..., xn]विकिपीडिया से निम्नलिखित समीकरण द्वारा दी गई है। P(xi)की संभावना है xi, जो है xi / total_num_of_votes। यदि किसी विकल्प को अब तक शून्य वोट प्राप्त हुए हैं, तो यह केवल संक्षेप में शामिल नहीं है (बचने के लिए log(0))। हमारे उद्देश्यों के लिए, लघुगणक आपकी पसंद के किसी भी आधार में हो सकता है।
एक उदाहरण के रूप में , बेस ई का उपयोग करते हुए, एन्ट्रापी [3,2,1,1]लगभग है ।1.277
अगला चरण यह निर्धारित करना है कि वोटिंग पैटर्न एंट्रोपी में सबसे बड़ी वृद्धि की ओर जाता है। मैं विकल्पों के किसी भी सबसेट के लिए वोट कर सकता हूं, इसलिए उदाहरण के लिए मेरा वोट हो सकता है [1,0,1,0]। अगर ये मेरे वोट थे, तो फाइनल टैली है [4,2,2,1]। एन्ट्रापी को पुनर्गणना देता है 1.273, एन्ट्रापी में कमी देता है , जिसका अर्थ है कि यह व्यवधान का एक भयानक प्रयास है। यहाँ कुछ अन्य विकल्प दिए गए हैं:
don't vote
[3,2,1,1] -> 1.277
vote for everything
[4,3,2,2] -> 1.342
vote for the 1s
[3,2,2,2] -> 1.369
vote for the 2 and 1s
[3,3,2,2] -> 1.366
इससे, हम यह निष्कर्ष निकाल सकते हैं कि इष्टतम मतदान पैटर्न है [0,0,1,1]क्योंकि यह एंट्रोपी में सबसे बड़ी वृद्धि देता है।
इनपुट
इनपुट गैर-बढ़ती, गैर-नकारात्मक पूर्णांक की एक गैर-रिक्त सूची है। उदाहरणों में शामिल हैं [3,3,2,1,0,0], [123,23,1]या यहां तक कि [4]। कोई भी उचित प्रारूप स्वीकार्य है।
उत्पादन
आउटपुट सत्य और असत्य मूल्यों की एक सूची (इनपुट के समान लंबाई) है, जहां सत्य उन विकल्पों का प्रतिनिधित्व करते हैं जिनके लिए मुझे वोट देना चाहिए अगर मैं अधिकतम विघटन का कारण बनना चाहता हूं। यदि एक से अधिक मतदान पैटर्न एक ही एन्ट्रापी देता है, तो कोई भी आउटपुट हो सकता है।
जीत का मानदंड
यह कोड-गोल्फ है, कम बाइट्स बेहतर हैं।
परीक्षण के मामलों
[3,2,1,1] -> [0,0,1,1] (from 1.227 to 1.369)
[3,3,2,1,0,0] -> [0,0,0,1,1,1] (from 1.311 to 1.705)
[123,23,1] -> [0,1,1] (from 0.473 to 0.510)
[4] -> [0] OR [1] (from 0 to 0)
[7,7,6,6,5] -> [0,0,1,1,1] (from 1.602 to 1.608)
[100,50,1,1] -> [0,1,1,1] (from 0.707 to 0.761)
