आपके पास एक सिक्का है जो पैदा करता है 0
या 1
। लेकिन आपको संदेह है कि सिक्का पक्षपाती हो सकता है , जिसका अर्थ है कि 0
(या 1
) की संभावना 1/2 नहीं है।
वॉन न्यूमैन द्वारा प्रस्तावित के रूप में एक पक्षपाती सिक्के को एक निष्पक्ष सिक्के (यानी समान रूप से संभावित परिणाम प्राप्त करने के लिए) में बदलने के लिए एक अच्छी तरह से ज्ञात प्रक्रिया इस प्रकार है। जब तक किसी ब्लॉक के दो मान अलग-अलग नहीं होते तब तक दो सिक्कों के ब्लॉक का उत्पादन (गैर-अतिव्यापी) ब्लॉक करें; और उस ब्लॉक में पहला मूल्य आउटपुट (दूसरा मूल्य भी होगा, लेकिन इस चुनौती के प्रयोजनों के लिए हम पहले चुनते हैं)। Intuitively, की तुलना में अधिक संभावना हो सकती है , लेकिन और समान रूप से की संभावना होगी।1
0
01
10
उदाहरण के लिए, इनपुट 1110...
पहले ब्लॉक को छोड़ देगा, फिर 1
दूसरे ब्लॉक से उत्पादन ...
यह प्रक्रिया महंगी है , क्योंकि एकल परिणाम उत्पन्न करने के लिए कई सिक्कों की खपत की जाती है।
चुनौती
शून्य और लोगों का एक परिमित अनुक्रम लें, मूल सिक्के के टॉस का प्रतिनिधित्व करते हैं, और उपरोक्त प्रक्रिया के अनुसार अधिकतम परिणाम उत्पन्न करते हैं , जब तक कि सभी इनपुट का उपभोग नहीं किया जाता है।
इनपुट मानों की संख्या विषम होने पर अंतिम ब्लॉक अधूरा हो सकता है। उदाहरण के लिए, इनपुट अनुक्रम 11111
कोई परिणाम नहीं देगा (पहले दो ब्लॉकों में समान मूल्य हैं, और तीसरा ब्लॉक अपूर्ण है)।
नियम
इनपुट में किसी भी तरह की गैर-नकारात्मक संख्या हो सकती है, जरूरी नहीं कि सकारात्मक या सम्मिलित हो।
इनपुट प्रारूप हो सकता है:
- शून्य और लोगों की एक सरणी;
- शून्य का एक स्ट्रिंग और एक वैकल्पिक विभाजक के साथ वाले।
आउटपुट स्वरूप हो सकता है:
- शून्य और लोगों की एक स्ट्रिंग, विभाजक के साथ या बिना;
- शून्य और लोगों की एक सरणी;
- एक एकल शून्य या एक से युक्त तार, जिसे न्यूलाइन्स द्वारा अलग किया जाता है;
- कोई भी समान, उचित प्रारूप जो आपकी भाषा के अनुकूल हो।
कोड गोल्फ। सबसे कम बाइट्स जीतता है।
परीक्षण के मामलों
इनपुट और आउटपुट को स्ट्रिंग्स माना जाता है।
Input --> Output
'1110' --> '1'
'11000110' --> '01'
'1100011' --> '0'
'00' --> ''
'1' --> ''
'' --> ''
'1101001' --> '0'
'1011101010' --> '1111'