आप एक बायोइंजीनियरिंग कंपनी के लिए काम करते हैं, जो इलाज से जुड़े समाधान विकसित करने में विशेषज्ञता रखती है।
आपकी टीम को अभी-अभी एक नया प्रोजेक्ट मिला है: कैंसर के एक दुर्लभ प्रकार के लिए टार्गेटेड थेरेपी विकसित करना।
यह सब बहुत जटिल है, लेकिन मूल बात यह है कि कभी-कभी लोगों का शरीर कोई खास प्रोटीन ज़रूरत से ज़्यादा बनाने लगता है। इससे कई तरह की गड़बड़ियाँ हो सकती हैं।
लेकिन अगर आप एक बहुत खास अणु बना सकें (जिसे micro-RNA कहते हैं), तो यह उस प्रोटीन को बनने से रोक सकता है।
इस तकनीक को RNA इंटरफ़ेरेंस कहते हैं।
आपको दी गई DNA शृंखला का RNA पूरक निकालना है।
DNA और RNA दोनों न्यूक्लियोटाइड की शृंखला होती हैं।
DNA में पाए जाने वाले चार न्यूक्लियोटाइड एडेनीन (A), साइटोसीन (C), ग्वानीन (G) और थाइमीन (T) हैं।
RNA में पाए जाने वाले चार न्यूक्लियोटाइड एडेनीन (A), साइटोसीन (C), ग्वानीन (G) और यूरासिल (U) हैं।
किसी DNA शृंखला से ट्रांसक्रिप्शन द्वारा उसकी RNA शृंखला बनती है, जिसमें हर न्यूक्लियोटाइड को उसके पूरक से बदल दिया जाता है:
G -> C
C -> G
T -> A
A -> U
अगर आप यह देखना चाहते हैं कि इनपुट और आउटपुट किस तरह बनाए गए हैं, तो टेस्ट सूट में दिए गए उदाहरणों पर एक नज़र डालिए।
स्ट्रक्चर में प्राइवेट फील्ड रखकर और Option या Result लौटाने वाले पब्लिक new फंक्शन बनाकर (जैसे यहाँ DNA::new और RNA::new हैं), हम पक्का कर सकते हैं कि DNA का अंदरूनी रूप सही रहता है। चूँकि हर मान्य DNA स्ट्रिंग के लिए एक मान्य RNA स्ट्रिंग होती है, इसलिए हमें into_rna से Result/Option लौटाने की ज़रूरत नहीं पड़ती।
टेस्ट में आपको जो टाइप सिग्नेचर दिखेंगे, उनकी वजह यही है।
DNA::new() और RNA::new() दोनों का रिटर्न टाइप Result<Self, usize> है, जिसमें एरर टाइप usize पहले अमान्य अक्षर का इंडेक्स बताता है (अक्षर का इंडेक्स, utf8 का नहीं)।