में एक सूची दोहराएं मैं एक स्कैला नोब हूं। मैंने सामान्य रूप से भाषा और कार्यात्मक प्रोग्रामिंग सीखने के लिए पहले अभ्यास के रूप में एक स्पाइडर सॉलिटेयर सॉल्वर लिखने का निर्णय लिया है।स्कैला
मैं 1, 2, या 4 सूट वाले कार्ड के यादृच्छिक रूप से शफल डेक उत्पन्न करना चाहता हूं।
val numberOfSuits = 1
(List("clubs", "diamonds", "hearts", "spades").take(numberOfSuits) * 4).take(4)
जो
List("clubs", "clubs", "clubs", "clubs")
List("clubs", "diamonds", "clubs", "diamonds")
List("clubs", "diamonds", "hearts", "spades")
लौटना चाहिए numberOfSuits के मूल्य पर निर्भर करता है, को छोड़कर कोई सूची "गुणा" आपरेशन है कि मैं मिल सकती है: यहाँ है कि मैं क्या के साथ आया है। क्या मुझे याद आया? शफल होने से पहले पूरा डेक उत्पन्न करने का कोई बेहतर तरीका है?
बीटीडब्ल्यू, मैं सूट के लिए गणना का उपयोग करने की योजना बना रहा हूं, लेकिन स्ट्रिंग के साथ अपना प्रश्न टाइप करना आसान था। मैं ऊपर उत्पन्न सूची लेता हूं और समझ के लिए उपयोग करता हूं, सूट पर फिर से भरता हूं और एक पूर्ण डेक उत्पन्न करने के लिए कार्ड "रैंक" की एक समान सूची लेता हूं।
इस परियोजना का दिलचस्प हिस्सा झांकी (कार्ड के वर्तमान लेआउट) की अपरिवर्तनीय पीढ़ी बना देगा। मैं कानूनी चाल की सूची के लिए वर्तमान झुकाव से पूछता हूं, (स्रोत कॉलम, गंतव्य कॉलम, और स्रोत स्थिति) के tuples के रूप में लौटाया। मैं फिर "सर्वश्रेष्ठ" चाल खोजने के लिए किसी प्रकार के मिनी-अधिकतम एल्गोरिदम का उपयोग करके एक पुनरावर्ती फैशन में वर्तमान झुकाव में प्रत्येक को लागू करता हूं।मैं यह भी चाहता हूं कि कार्ड ऑब्जेक्ट अपरिवर्तनीय हो, इसलिए टेबलोज़ ("टेबलॉक्स?") को यह जानना होगा कि कार्ड का सामना करना है या नहीं। – Ralph