जैसा कि आप जानते हैं, डीएनए में चार आधार होते हैं - एडेनिन ( A), साइटोसिन ( C), गुआनिन ( G) और थाइमिन ( T)। आमतौर पर Aके साथ बांड Tऔर Cसाथ बांड G, की "पायदान" बनाने डीएनए डबल हेलिक्स संरचना ।
हम एक आधार के पूरक को परिभाषित करते हैं कि यह किस आधार पर बंधता है - यानी का पूरक Aहै T, का पूरक Tहै A, का पूरक Cहै Gऔर का पूरक Gहै C। हम एक डीएनए स्ट्रिंग के पूरक को भी परिभाषित कर सकते हैं कि प्रत्येक आधार के साथ स्ट्रिंग हो, जैसे कि पूरक GATATCहै CTATAG।
डीएनए के दोहरे फंसे हुए ढांचे की वजह से, एक स्ट्रैंड के आधार दूसरे स्ट्रैंड के आधारों के पूरक हैं। हालाँकि डीएनए की एक दिशा होती है, और दो तरफ़ विपरीत दिशाओं में डीएनए ट्रांसक्रिप्शन होता है। इसलिए आणविक जीवविज्ञानी अक्सर डीएनए स्ट्रिंग के रिवर्स पूरक में रुचि रखते हैं - काफी शाब्दिक रूप से स्ट्रिंग के पूरक के रिवर्स।
हमारे पिछले उदाहरण का विस्तार करने के लिए, का उल्टा पूरक पीछे GATATCकी CTATAGओर है, इसलिए GATATC। जैसा कि आपने देखा होगा, इस उदाहरण में रिवर्स पूरक मूल स्ट्रिंग के बराबर है - हम ऐसे स्ट्रिंग को रिवर्स पैलिंड्रोम कहते हैं । *
डीएनए की एक स्ट्रिंग को देखते हुए, क्या आप सबसे लंबे प्रतिस्थापन को पा सकते हैं जो एक रिवर्स पैलिंड्रोम है?
* मैं रोज़लिंड से लिया गया "रिवर्स पलइंड्रोम" शब्द का उपयोग करता हूं , ताकि ताल के सामान्य अर्थ से अंतर किया जा सके।
इनपुट
इनपुट एक एकल स्ट्रिंग होगी जिसमें ACGTऊपरी मामले में केवल वर्ण होंगे । आप इस चुनौती के लिए एक कार्य या पूर्ण कार्यक्रम लिख सकते हैं।
उत्पादन
आप मुद्रण या रिटर्न के माध्यम से आउटपुट का चयन कर सकते हैं (बाद वाला विकल्प केवल फ़ंक्शन के मामले में उपलब्ध है)।
यदि कोई अनूठा समाधान है, तो आपके प्रोग्राम को इनपुट स्ट्रिंग के सबसे लंबे समय तक रिवर्स पैलिंड्रोमिक आउटपुट का उत्पादन करना चाहिए। यदि कई समाधान मौजूद हैं, तो आप उनमें से किसी एक को या सभी को (आपकी पसंद) आउटपुट कर सकते हैं। यदि आप उन सभी को आउटपुट करना चुनते हैं तो डुप्लिकेट ठीक है।
इनपुट की गारंटी है कि कम से कम लंबाई 2 का समाधान होना चाहिए।
काम का उदाहरण
ATGGATCCG -> GGATCC
का उल्टा पूरक GGATCCस्वयं ( GGATCC --complement--> CCTAGG --reverse--> GGATCC) है, इसलिए GGATCCएक उल्टा ताल है। GATCयह भी एक उल्टा ताल है, लेकिन यह सबसे लंबा नहीं है।
परीक्षण के मामलों
AT -> AT
CGT -> CG
AGCA -> GC
GATTACA -> AT, TA
ATGGATCCG -> GGATCC
CCCCCGGGGG -> CCCCCGGGGG
ACATATATAGACT -> ATATAT, TATATA
ATTCGATCTATGTAAAGAGG -> TCGA, GATC
CGCACGTCTACGTACCTACGTAG -> CTACGTAG
TCAATGCATGCGGGTCTATATGCAT -> ATGCAT, GCATGC [, ATGCAT]
CGCTGAACTTTGCCCGTTGGTAGAACGGACTGATGTGAACGAGTGACCCG -> CG, GC, TA, AT [, GC, CG, CG, CG, CG]
CTCGCGTTTGCATAACCGTACGGGCGGAACAGTCGGCGGTGCCTCCCAGG -> CCGTACGG
स्कोरिंग
यह कोड गोल्फ है, इसलिए सबसे कम बाइट्स में समाधान जीतता है।