एक शाम आपके हाथ एक पुरानी नोटबुक लगी, जिसमें समझ न आने वाली घसीट भरी थी, मानो कोई जुनून की हद तक किसी विचार का पीछा कर रहा हो। एक पेज पर एक ही सवाल सबसे अलग चमक रहा था: क्या हर संख्या 1 तक पहुँचने का रास्ता खोज ही लेती है? यह किसी कोलाट्ज़ अनुमान नाम की चीज़ से जुड़ा था, ऐसी पहेली जिसने दशकों से विचारकों को उलझाए रखा है।
नियम ऊपर से बहुत आसान लगते थे। कोई भी धनात्मक पूर्णांक चुनिए।
फिर इन्हीं चरणों को नतीजे पर दोहराइए, और यह क्रम इसी तरह अनंत तक चलता रहता है।
उत्सुक होकर आपने परखने के लिए संख्या 12 चुनी और यात्रा शुरू की:
12 ➜ 6 ➜ 3 ➜ 10 ➜ 5 ➜ 16 ➜ 8 ➜ 4 ➜ 2 ➜ 1
दूसरी संख्या (6) से गिनें तो 1 तक पहुँचने में 9 चरण लगे, और जितनी बार ये नियम दोहराए गए, संख्या बदलती चली गई। शुरू में यह क्रम अनुमान से परे लगा। कभी ऊपर उछलता, कभी नीचे, कभी इधर-उधर। फिर भी यह अनुमान कहता है कि शुरुआती संख्या कोई भी हो, हम हमेशा 1 पर ही पहुँचेंगे।
यह बहुत दिलचस्प था, पर साथ ही हैरान करने वाला भी। यह हर बार काम क्यों करता दिखता है? क्या कोई ऐसी संख्या हो सकती है जहाँ यह प्रक्रिया टूट जाए, जो हमेशा के लिए लूप में फँस जाए या अनंत में निकल जाए? नोटबुक में लिखा था कि शायद इसे सुलझाने से कोई बहुत गहरी बात सामने आए, और जो भी इसके राज़ खोल सकेगा, उसके लिए प्रसिद्धि, धन और इतिहास में एक जगह इंतज़ार कर रहे हैं।
एक धनात्मक पूर्णांक दिया गया हो, तो Collatz Conjecture के नियमों के अनुसार 1 तक पहुँचने में लगने वाले चरणों की संख्या लौटाइए।
इस अभ्यास में आपको ComputationError नाम का एक एरर सेट जोड़ना है, जिसमें IllegalArgument एरर शामिल हो।
इसे public बनाना न भूलें!
steps फंक्शन को तब ComputationError.IllegalArgument लौटाना चाहिए जब उसका इनपुट शून्य के बराबर हो।
आगे के अभ्यासों में आम तौर पर इस तरह के स्पष्ट निर्देश नहीं दिए जाएँगे। सामान्य तौर पर Exercism की अपेक्षा यह है कि आप अपना हल लिखते समय टेस्ट फाइल पढ़ें।
Zig में एरर के बारे में अधिक जानकारी के लिए देखिए:
Exercism पर साइन अप कीजिए और Zig को 104 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।