हफ्तों भर की उत्सुकता के बाद, आप और आपके दोस्त पहली बार Dungeons & Dragons (D&D) खेलने के लिए इकट्ठा हुए। चूँकि यह खेल का पहला ही दौर है, हर खिलाड़ी को अपने लिए एक पात्र बनाना होता है। पात्र की क्षमताएँ छह फलकों वाला पासा फेंककर तय की जाती हैं। लेकिन पासे कहाँ हैं?
आपको झटका तब लगता है जब पता चलता है कि आपके दोस्त पासे जुटाने के लिए आपका ही इंतज़ार कर रहे हैं। D&D खेलने का विचार तो आपका ही था!
घबराहट में आपको याद आता है कि आप पासे लाना भूल ही गए हैं। और पासे न हों, तो D&D का खेल नहीं हो पाएगा। चूँकि आपको कोडिंग की थोड़ी बुनियादी जानकारी है, आप तुरंत एक हल निकाल लेते हैं: आप एक प्रोग्राम लिखेंगे जो पासा फेंकने की नकल करेगा।
Dungeons & Dragons के खेल में हर खिलाड़ी सबसे पहले एक पात्र बनाता है और फिर उसी के साथ खेलता है। इस पात्र में और भी कई चीज़ें होती हैं, जिनमें छह क्षमताएँ भी हैं: strength, dexterity, constitution, intelligence, wisdom और charisma। इन छह क्षमताओं के स्कोर यादृच्छिक तरीके से तय होते हैं। इसके लिए आप छह फलकों वाले चार पासे फेंकते हैं और सबसे बड़े तीन पासों का जोड़ लिख लेते हैं। ऐसा आप छह बार करते हैं, हर क्षमता के लिए एक बार।
खेल की शुरुआत में आपके पात्र के hitpoints 10 में उसके constitution मॉडिफायर को जोड़कर निकलते हैं। अपने पात्र का constitution मॉडिफायर निकालने के लिए उसके constitution में से 10 घटाइए, फिर 2 से भाग दीजिए और नीचे की ओर पूर्णांकित कीजिए।
ऊपर बताए नियमों का पालन करने वाला एक यादृच्छिक पात्र जनरेटर लिखिए।
उदाहरण के लिए, चार पासों को छह बार फेंकने पर नतीजे कुछ ऐसे आ सकते हैं:
चूँकि constitution 3 है, इसलिए constitution मॉडिफायर -4 होता है और hitpoints 6 होते हैं।
अधिकांश प्रोग्रामिंग भाषाओं में (छद्म-)यादृच्छिक जनरेटर होते हैं, लेकिन कम ही प्रोग्रामिंग भाषाएँ पासा फेंकने के लिए बनाई गई हैं। ऐसी ही एक भाषा Troll है।
Zig की स्टैंडर्ड लाइब्रेरी छिपी हुई ग्लोबल स्थिति नहीं रखती। इसलिए आपको अपना रैंडम नंबर जनरेटर बनाए रखने की ज़रूरत नहीं है। इसके बजाय आपके फंक्शन को एक std.Random इंटरफ़ेस मिलता है, जिससे वे वैल्यू निकालते हैं।
टेस्ट एक ऐसा जनरेटर देते हैं जिसे std.testing.random_seed से सीड किया गया होता है, और फिर जाँचते हैं कि एक ही सीड वाले जनरेटर एक जैसे किरदार बनाते हैं।
आपके एबिलिटी स्कोर का वितरण p < 0.0001 के महत्व स्तर पर काई-स्क्वेयर टेस्ट से जाँचा जाता है:
ability जो स्कोर लौटाता है, उनकी तुलना अपेक्षित वितरण से की जाती है;एक सही इम्प्लीमेंटेशन के हर टेस्ट में फेल होने की संभावना 0.01% से कम होती है।
एबिलिटी स्कोर क्या होता है, इसकी परिभाषा ऊपर दिए निर्देशों में देखिए।
Exercism पर साइन अप कीजिए और Zig को 104 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
हम देखेंगे कि (दिखने में) बेतरतीब पासे कैसे रोल किए जाएँ। आप सीड, स्यूडो रैंडम संख्याओं और कुछ आम गलतियों के बारे में जानेंगे। अंत में, हम देखेंगे कि बेतरतीब वैल्यू लौटाने वाले फंक्शन की जाँच के लिए प्रॉपर्टी-आधारित टेस्टिंग बढ़िया है।