पायथ, 73 बाइट्स
eo_S+*-5l@\AN}SPMJ+NZSM.:+\AT5+-4l{eMJlM.gPkJ-sM*=T+`M}2Tc4"JQKA""hscd"=Zc
यह बहुत भयानक है। कार्डों को पार्स करना, मूल्यों को क्रमबद्ध करना, ... सब कुछ बहुत सारे चार्ट लेता है। लेकिन दृष्टिकोण दिलचस्प है।
इसे ऑनलाइन आज़माएँ: प्रदर्शन या टेस्ट सूट
स्पष्टीकरण:
मैं सभी 52 कार्ड उत्पन्न करता हूं, इनपुट के चार कार्ड निकालता हूं, प्रत्येक कार्ड (हाथ का स्कोर) के लिए एक अंक उत्पन्न करता हूं, और अधिकतम स्कोर के साथ कार्ड प्रिंट करता हूं।
स्कोर थोड़ा अजीब है। अगर मैं दो अलग-अलग हाथों के स्कोर की तुलना करता हूं, तो यह गलत विजेता को चुन सकता है। जैसे एक सीधा 4 इक्के मारता है। लेकिन यह काम करता है, अगर पहले 4 कार्ड दोनों हाथों में समान हैं। और मेरा गणना स्कोर वास्तव में एक मूल्य नहीं है, लेकिन मूल्यों की एक सूची है:
- जी: पहले मैं 5 कार्डों को रैंक करके समूह बनाता हूं और लंबाई लेता हूं:
5h 5d 6c 5s Jd
->
[3, 1, 1]
- F: फिर मैं इस सूची में विभिन्न ऋणों की संख्या 4 घटा देता हूं।
Flush
->
3
जोड़ा जाता है,not flush
->
2/1/0
जाता है।
- S: एक और नंबर जोड़ें।
0
अगर यह सीधा नहीं है, 4
अगर यह सीधा है A2345
, या 5
अगर यह अधिक सीधा है।
4-7 नंबर की ये सूची घटते क्रम में क्रमबद्ध हो जाती है और अधिकतम मान वाली सूची चुन ली जाती है।
यह काम क्यों करता है? यहां आप सभी प्रकार के लिए संभव कॉन्फ़िगरेशन देखते हैं। संख्याओं के साथ पत्र, आपको बताता है कि यह संख्या किस नियम से उत्पन्न हुई है।
- सीधे फ्लश:
[5S, 3F, 1G, 1G, 1G, 1G, 1G]
या[4S, 3F, 1G, 1G, 1G, 1G, 1G]
- एक तरह के चार:
[4G, 1G, 0F, 0S]
- पूरा घर:
[3G, 2G, 1F, 0S]
या[3G, 2G, 0F, 0S]
- फ्लश:
[3F, 1G, 1G, 1G, 1G, 1G, 0S]
- सीधे:
[5S, 2F, 1G, 1G, 1G, 1G, 1G]
, [5S, 1F, 1G, 1G, 1G, 1G, 1G]
, [5S, 1G, 1G, 1G, 1G, 1G, 0F]
, [4S, 2F, 1G, 1G, 1G, 1G, 1G]
, [4S, 1F, 1G, 1G, 1G, 1G, 1G]
,[4S, 1G, 1G, 1G, 1G, 1G, 0F]
- एक तरह के तीन:
[3G, 1G, 1G, 1F, 0S]
,[3G, 1G, 1G, 0F, 0S]
- दो जोड़ी:
[2G, 2G, 2F, 1G, 0S]
, [2G, 2G, 1F, 1G, 0S]
,[2G, 2G, 1G, 0F, 0S]
- एक जोड़ी:
[2G, 2F, 1G, 1G, 1G, 0S]
, [2G, 1G, 1G, 1G, 1F, 0S]
,[2G, 1G, 1G, 1G, 0F, 0S]
- उच्च कार्ड:
[2F, 1G, 1G, 1G, 1G, 1G, 0S]
, [1F, 1G, 1G, 1G, 1G, 1G, 0S]
,[1G, 1G, 1G, 1G, 1G, 0S, 0F]
पाइथ सूची-तत्व की तुलना करता है। तो यह स्पष्ट है कि स्ट्रेट फ्लश हमेशा एक तरह के फोर को हरा देगा। इन सूचियों के साथ अधिकांश विशिष्ट पोकर नियम स्पष्ट हैं। कुछ परस्पर विरोधी लगते हैं।
- एक स्ट्रेट चार या एक पूर्ण हाउस के खिलाफ जीतेगा: कोई समस्या नहीं है। यदि आपके पास नदी कार्ड के साथ एक तरह का चार / पूर्ण घर प्राप्त करने का मौका है, तो आप एक ही समय में सीधे नहीं पहुंच सकते हैं (क्योंकि आपके पास पहले से ही 2 या 3 अलग-अलग सूट आपके हाथ में हैं)।
- एक सीधा एक फ्लश के खिलाफ जीत जाएगा। यदि आप एक फ्लश और नदी कार्ड के साथ सीधे पहुंच सकते हैं, तो आप एक सीधी फ्लश तक भी पहुंच सकते हैं। और स्ट्रेट फ्लश में स्ट्रेट और फ्लश दोनों की तुलना में बेहतर स्कोर होता है।
- एक जोड़ा
[2G, 2F, 1G, 1G, 1G, 0S]
कुछ दो जोड़ी हाथों के खिलाफ जीतेगी। इसके अलावा कोई समस्या नहीं है। यदि आपको नदी कार्ड के साथ दो जोड़ी मिलती है, तो आपके पास नदी से पहले कम से कम एक जोड़ी थी। लेकिन इसका मतलब है, कि आप तीन तरह से सुधार कर सकते हैं, जो बेहतर है। तो एक दो जोड़ी वास्तव में कभी जवाब नहीं होगी।
- उच्च कार्ड
[2F, 1G, 1G, 1G, 1G, 1G, 0S]
कुछ एक जोड़ी हाथों के खिलाफ जीत जाएगा। यदि यह सबसे अच्छा स्कोर है, तो आप नदी तक पहुँचने से पहले आपके पास एक सुइट के 3 कार्ड और एक अलग सूट के एक कार्ड होंगे। लेकिन फिर आप इन दो सुइट्स में से एक के साथ कार्ड चुन सकते हैं और पहले से ही दिखाई देने वाले मूल्य के साथ, और आप स्कोर के साथ समाप्त हो जाएंगे [2F, 2G, ...]
, जो बेहतर भी है।
तो यह सही प्रकार का समाधान चुनता है। लेकिन मुझे सबसे अच्छी एक-जोड़ी (4 संभावनाओं में से) कैसे मिलती है, मैं सबसे अच्छा सीधे कैसे चुनूं, ...? क्योंकि दो अलग-अलग एक-जोड़ी समाधानों में समान स्कोर हो सकता है।
यह आसान है। Pyth स्थिर छँटाई (अधिकतम लेने पर) की गारंटी देता है। तो मैं सरल क्रम में कार्ड उत्पन्न करता हूं 2h 2s 2c 2d 3h 3s ... Ad
। तो उच्चतम मूल्य वाला कार्ड स्वचालित रूप से अधिकतम होगा।
कार्यान्वयन का विवरण
=Zc
इनपुट स्ट्रिंग को विभाजित करता है और इसमें कार्ड की सूची संग्रहीत करता है Z
।
=T+`M}2Tc4"JQKA"
रैंकों की सूची तैयार करता है ['2', ..., '10', 'J', 'Q', 'K', 'A']
और उन्हें स्टोर करता है T
। -sM*T..."hscd"Z
सुइट्स के साथ रैंक के प्रत्येक संयोजन को उत्पन्न करता है, और के कार्ड निकालता है Z
।
o...
इन शेष कार्डों का आदेश देता है: lM.gPkJ
रैंकों के समूहों का हिस्सा, +-4l{eMJlM
4 - लंबाई (सूट) को +*-5l@\AN}SPMJ+NZSM.:+\AT5
जोड़ता है , सूट के आधार पर 0/4/5 जोड़ता है (प्रत्येक "A" + T की लंबाई 5 की सबटाइटर उत्पन्न करता है, अगर हाथ की जाँच करें उनमें से एक (हाथ की छंटाई और सभी सबसेट को छांटने की आवश्यकता है), कार्ड में 5 - "ए" की संख्या से गुणा करें,_S
सूची को कम कर दें।
e
अधिकतम चुनें और प्रिंट करें।