यह कार्य प्रो। देवदास द्वारा एक एमआईटी व्याख्यान से लिया गया है जिसे आप मन पढ़ सकते हैं । लिंक में, या इस दस्तावेज़ में चाल की एक विस्तृत व्याख्या पाई जा सकती है । मैं इसे सरल शब्दों में समझाने की कोशिश करूँगा।
यह पता चला है कि यह 1930 के दशक में आविष्कार किया गया था, और "फिच चेनी के पांच-कार्ड चाल" के रूप में जाना जाता है ।
चाल इस प्रकार है:
- पांच यादृच्छिक कार्ड कार्ड के एक डेक से चुने जाते हैं। दर्शकों और आपके सहायक को उन्हें देखने के लिए मिलता है, लेकिन आप नहीं।
- आपके सहायक (जिनके साथ आपने अभ्यास किया है) उन कार्डों में से चार का चयन करेंगे और उन्हें एक विशिष्ट क्रम में आपको दिखाएंगे। ध्यान दें कि छिपे हुए कार्ड को 5 कार्डों से यादृच्छिक रूप से नहीं लिया गया है। सहायक एक / कार्ड लेता है जो चाल को काम करेगा।
- आप कटौती करेंगे, जानकारी के आधार पर आप चार कार्डों से इकट्ठा कर सकते हैं कि पांचवा कार्ड क्या है।
कैसे?
निम्नलिखित दो बिंदुओं को ध्यान में रखें:
5 यादृच्छिक कार्ड चुनते समय, आपको गारंटी दी जाती है कि कम से कम दो कार्डों में एक ही सूट 1 है ।
नीचे दी गई छवि सभी रैंकों के साथ एक सर्कल दिखाती है 2 । चूंकि यह एक चक्र है, इसलिए इसे गिनना संभव है: जे, क्यू, के, ए, 2, 3 (यानी मॉड्यूलर गिनती)। आपको गारंटी दी जाती है कि छिपे हुए कार्ड में पहले जैसा रैंक नहीं है, क्योंकि वे एक ही सूट के होंगे (नीचे समझाया गया है)। हमेशा पहला कार्ड और छिपे हुए कार्ड का चयन करना संभव होता है, जैसे कि छिपा हुआ कार्ड 1 और 6 रैंक के बीच पहले की तुलना में अधिक होता है (जब मंडलियों में गिनती होती है)। यदि पहला कार्ड 1 है , तो छिपा कार्ड 2,3,4,5,6 या 7 होगा । यदि पहला कार्ड जे है , तो छिपा कार्ड क्यू, के, ए, 2,3 या 4 और इसी तरह होगा।
एल्गोरिथ्म:
पहला कार्ड: इस कार्ड में छिपे कार्ड की तरह ही सूट होगा। कार्ड भी संदर्भ बिंदु होगा जिसका उपयोग आप छिपे हुए कार्ड की रैंक का पता लगाने के लिए करेंगे।
2, 3 और 4 के कार्ड समावेशी रेंज 1 ... 6 में एक मान को डिकोड करते हैं । हम तीन कार्ड S, M, L (सबसे छोटा कार्ड, मध्य कार्ड, सबसे बड़ा कार्ड) कहेंगे । मूल्यों को इस तरह से एन्कोड किया जाएगा (लेक्सिकोग्राफिक ऑर्डर):
S M L -> 1
S L M -> 2
M S L -> 3
M L S -> 4
L S M -> 5
L M S -> 6
इसलिए, यदि पहले कार्ड की रैंक 5 है , और शेष तीन कार्डों की रैंक 4 क्यू 7 (वे एसएलएम के आदेश दिए गए हैं ) हैं, तो अंतिम कार्ड की रैंक 5 + 2 = 7 है । आप चुन सकते हैं कि इक्का उच्चतम या निम्नतम कार्ड होना चाहिए, जब तक यह सुसंगत हो।
यदि कई कार्ड रैंक साझा करते हैं, तो सूट आदेश का निर्धारण करेगा, जहां सी <डी <एच <एस ।
इनपुट प्रारूप:
चार कार्ड H3 (तीन दिल), डीके (हीरे के राजा) और इतने पर दिए जाएंगे । आप इनपुट को 3H और KD के बजाय दूसरे तरीके से लेने का विकल्प चुन सकते हैं ।
इनपुट किसी भी सुविधाजनक प्रारूप पर हो सकता है, लेकिन आप एक चर में सूट की सूची और दूसरे में रैंक की सूची को जोड़ नहीं सकते। 'D5', 'H3' ..
और [['D',5],['H',3] ...
दोनों ठीक हैं, लेकिन 'DHCH',[5,3,1,5]
नहीं है। T को छोड़कर आप अक्षरों के बजाय संख्याओं का उपयोग नहीं कर सकते ।
उत्पादन
छिपे हुए कार्ड, इनपुट के समान प्रारूप में।
उदाहरण
चलो एक walkthrough करते हैं:
Input:
D3 S6 H3 H9
हम जानते हैं कि छिपा हुआ कार्ड एक हीरा है, क्योंकि पहला कार्ड एक हीरा है। हम यह भी जानते हैं कि रैंक है 4,5,6,7,8 या 9 के बाद से पहली कार्ड के रैंक है 3 ।
शेष कार्ड 6,3,9 ==> एम, एस, एल के आदेश दिए गए हैं , जो मान 3 को एन्कोड करता है । छिपा हुआ कार्ड इसलिए हीरे का 3 + 3 = 6 है, इस प्रकार आउटपुट डी 6 होना चाहिए ।
परीक्षण के मामलों:
C3 H6 C6 S2
C9 # The order is LMS (H6 > C6, and 2 < 6). 3+6=9
SQ S4 S3 ST # (ST = S10. Format is optional)
S2 # The order is MSL. 12+3=2
HA CA DA SA
H2 # The order is SML. 14+1=2
यह कोड-गोल्फ है , इसलिए प्रत्येक भाषा में सबसे कम समाधान जीतता है। स्पष्टीकरण को प्रोत्साहित किया जाता है!
1 चार सूट हैं ( C lubs, D iamonds, H earts and S pades)।
2 13 रैंक, 2,3,4,5,6,7,8,9,10, J, Q, K, A हैं । आप 10 के बजाय T का उपयोग करना चुन सकते हैं ।
92427**3
और संशोधितk+7
करने के लिएk+8
: 1 बाइट को बचाने के लिएa=>(k='A23456789TJQK'+92427**3)[[[r,s],...x]=a.map((c,i)=>[k.search(c[0])+10,c[1],i]),(r-k[x.sort().map(c=>k=k*2|c[2])|k+8])%13]+s