मिशन
जैसा कि सर्वविदित है, पृथ्वी पर सभी ज्ञात प्राणियों की आनुवंशिक सामग्री डीएनए में एन्कोडेड है; चार न्यूक्लियोटाइड्स एडेनिन, थाइमिन, साइटोसिन और गुआनिन का उपयोग करना। (आमतौर पर ATGC द्वारा प्रतिनिधित्व)।
एक bioinformaticist एक पूरे जीनोम स्टोर करने के लिए बधाई देने के लिए बिल्कुल नहीं, ASCII के रूप में इस स्टोर करने के लिए है क्योंकि प्रत्येक विकल्प मात्र दो बिट्स द्वारा दर्शाया जा सकता चाहेगा!
विशेष विवरण
आपका मिशन, आप इसे स्वीकार करने के लिए चुनना चाहिए, एक द्विआधारी प्रतिनिधित्व और वापस करने के लिए एक ASCII प्रतिनिधित्व कन्वर्ट करने के लिए कार्यक्रम, कार्य या तरीकों की एक जोड़ी लिखने के लिए है, का प्रतिनिधित्व A
के रूप में b00
, T
के रूप में b01
, G
के रूप में b10
, और C
के रूप में b11
(इसके बाद से "इकाइयों")।
इसके अलावा, प्रत्येक बाइट के उच्च बिट बाइट में इकाइयों की गिनती को शामिल करना चाहिए, प्रत्येक बाइट एक त्रिक प्रतिनिधित्व करते हैं बना रही है।
उदाहरण के लिए: "GATTACCA"
हो जाता है b11 100001 b11 010011 b10 1100xx
।
ASCII में बाइनरी इनपुट, स्पेस, टैब और न्यूलाइन्स को नजरअंदाज करना चाहिए। किसी भी वर्ण के सेट में [ \r\n\tATGC]
कोई त्रुटि नहीं है और या तो अनदेखा किया जा सकता है या प्रसंस्करण को समाप्त कर सकता है।
ASCII इनपुट के लिए बाइनरी में, बाइट्स जिनके दो उच्च बिट्स को b00
अनदेखा किया जा सकता है।
ASCII उत्पादन खाली स्थान के हो सकती है; लेकिन प्लस द्विआधारी इनपुट से अधिक 4 बार आकार में लंबे समय के एक बाइट कभी नहीं होना चाहिए, और एक नई पंक्ति के साथ समाप्त होना चाहिए।
बाइनरी आउटपुट में b00xxxxxx
"नियंत्रण" बाइट्स की एक मनमानी संख्या हो सकती है ; लेकिन ASCII इनपुट से अधिक समय कभी नहीं होना चाहिए।
प्रत्येक रूपांतरण कार्यक्रम मनमाना लंबाई के इनपुट का समर्थन करना चाहिए; और एन्कोडिंग या लगभग रैखिक समय में डिकोडिंग पूरा करना चाहिए।
ट्विस्ट
जिसे आप इस कार्य प्रदर्शन कर रहे हैं के लिए bioinformaticist के लिए दुर्भाग्य से, वह है किसी तरह से आप, गलत एक व्यक्तिगत अभी तक शायद क्षुद्र स्तर पर।
शायद वह एक बार अपनी बहन के साथ बाहर गया, और कभी उसे फिर से बुलाया। शायद वह अपने कुत्ते की पूंछ पर कदम रखा। बारीकियों वास्तव में महत्वपूर्ण नहीं हैं।
क्या महत्वपूर्ण है कि आप कर्ज उतारने के लिए एक मौका है कि है!
विवरण
प्रत्येक रूपांतरण को एक छोटी त्रुटि दर पेश करनी चाहिए; संसाधित की गई दस हजार प्रति दस हजार में से एक त्रुटि के आदेश पर।
एक त्रुटि निम्नलिखित में से एक हो सकती है:
- डुप्लीकेशन एरर:
"GAT TAC CA"
बन जाता है"GAT TAA CCA"
- विलोपन त्रुटियां:
"GAT TAC CA"
बन जाती हैं"GAT TAC A"
- अनुवाद त्रुटियाँ:
"GAT TAC CA"
बन जाता है"GTA TAC CA"
- ट्रिपल दोहराव:
"GAT TAC CA"
बन जाता है"GAT TAC TAC CA"
- ट्रिपल स्लिपज:
"GAT TAC CA"
बन जाता है"TAC GAT CA"
- ट्रिपल रिवर्सल:
"GAT TAC CA"
बन जाता है"GAT CAT CA"
कि त्रुटियों को पेश किया जाएगा बेशक कोड से तुरंत स्पष्ट नहीं होना चाहिए; और इनपुट की लंबाई के बावजूद; रूपांतरण में कम से कम एक त्रुटि होनी चाहिए।
समान इनपुट के साथ दो रन जरूरी समान आउटपुट का उत्पादन नहीं करना चाहिए ।
चाल
वाइल बायोइनफॉरमैटिस्टिक एक मामूली सक्षम कोडर है; और जैसे कि, कुछ निर्माणों को स्वचालित रूप से खोजा जाएगा, और इस तरह के प्रतिबंधित हैं:
- वह स्वत: ही किसी)) इस तरह रैंड (के रूप में प्रणाली यादृच्छिक संख्या जनरेटर के लिए कॉल, यादृच्छिक (, खोज, या से पढ़ने जाएगा / dev / urandom या / dev / यादृच्छिक (या जो भी भाषा बराबर है)।
- वह किसी भी शानदार चर, काउंटर या लूप को भी नोटिस करेगा।
स्कोरिंग
एनकोडर और डिकोडर को अलग-अलग स्कोर किया जाएगा।
प्रत्येक को 100 बेतरतीब ढंग से उत्पन्न इनपुट फ़ाइलों के एक सेट के खिलाफ 3 बार चलाया जाएगा, प्रत्येक फ़ाइल 3 मिलियन इकाइयों के आदेश पर आकार के साथ होगी।
एनकोडर परीक्षण मामलों के लिए डेटा लगभग बनाया जाएगा:
for (l = 1 => bigNum)
for (t = 1 => 20)
random_pick(3,ATGC)
t == 20 ? newline : space
विकोडक परीक्षण मामलों का डेटा लगभग इस प्रकार बनाया जाएगा:
for (u = 1 => bigNum)
for (t = 1 => 20)
random_byte() | 0b11000000
0x00
एनकोडर
- प्रत्येक बाइट वास्तविक लंबाई में उम्मीद की न्यूनतम लंबाई से लापता स्कोर -1 अंक, ऊपर -1000 की एक अधिकतम करने के लिए। (उम्मीद कम से कम लंबाई है
ceil(count(ATGC) / 3)
।)
विकोडक
- वास्तविक लंबाई में उम्मीद की अधिकतम लंबाई से अधिक प्रत्येक बाइट स्कोर -1 अंक, ऊपर -1000 की एक अधिकतम करने के लिए। (उम्मीद अधिकतम लंबाई है
size(input) * 4 + 1
।)
दोनों
- त्रुटि है कि 100 अंक स्कोर होगा उत्पादन किया जा सकता से प्रत्येक प्रकार; प्रत्येक के लिए 600 अंक संभव हो, कुल 1200 के एक कुल के लिए।
- प्रत्येक परीक्षा मामले जिसके लिए एनकोडर की तुलना में अधिक 30% कम या ज्यादा त्रुटियों से अपने स्वयं के औसत -5 अंक दंडित नहीं किया जाएगा पैदा करता है।
- प्रत्येक परीक्षा मामले जिसके लिए एनकोडर अपने स्वयं के औसत की तुलना में 15% से कम और अधिक या कम त्रुटियों का उत्पादन 5 अंक दिया जाएगा।
- प्रत्येक परीक्षा मामले में जहां सभी तीन रन समान आउटपुट उत्पादन -10 अंक दंडित किये जाएँगे।
हार्ड आवश्यकताओं
एक प्रविष्टि को अयोग्य ठहराया जाएगा यदि:
- एक त्रिक से अधिक समय किसी भी मान्य इनपुट के लिए यह भी एक त्रुटि का उत्पादन करने में विफल रहता है।
- इसके प्रदर्शन को ऐसी है कि वह लगभग एक घंटे के भीतर परीक्षण चुनौती पूर्ण नहीं कर सकता है।
- यह औसतन हर दस हजार इकाइयों में एक से अधिक त्रुटि पैदा करता है।
- यह औसतन हर मिलियन यूनिट में एक से कम त्रुटि पैदा करता है।
अंतरपटल
नवागंतुकों मानक आउटपुट में मानक इनपुट पर इनपुट, और उत्पादन को स्वीकार करना चाहिए।
यदि प्रविष्टि दोहरे फ़ंक्शन के साथ एक कार्यक्रम है; स्विच -e
और -d
एन्कोडिंग और डिकोडिंग, क्रमशः के लिए कार्यक्रम निर्धारित करना चाहिए।
उदाहरण के चालान:
$ encoder <infile.txt >outfile.bin
$ decoder <infile.bin >outfile.txt
$ recoder -e <infile.txt >outfile.bin
विजेता
विजेता उच्चतम स्कोर के साथ प्रविष्टि है; सैद्धांतिक अधिकतम त्रुटि पीढ़ी दर में स्थिरता के लिए त्रुटि प्रकार के लिए 1200 से अधिक 3000 अंक की जा रही है।
एक ड्रॉ की अप्रत्याशित घटना में; विजेता वोट गिनती द्वारा निर्धारित किया जाएगा।
अतिरिक्त नोट्स
परीक्षण गौंटलेट चलाने के प्रयोजनों के लिए, प्रत्येक प्रविष्टि में रन या संकलन निर्देश शामिल होना चाहिए।
सभी प्रविष्टियों अधिमानतः एक्स के बिना एक Linux मशीन पर runnable होना चाहिए