আমাদের প্রত্যেকে আমাদের জৈবিক পিতা-মাতার কাছ থেকে DNA নামে পরিচিত একগুচ্ছ রাসায়নিক নির্দেশনা পাই, যা আমাদের শরীর কীভাবে গড়ে ওঠে তা প্রভাবিত করে। পৃথিবীর সব পরিচিত প্রাণই DNA-র উপর নির্ভরশীল!
নোট: এই অনুশীলনীটি সম্পূর্ণ করতে নিউক্লিওটাইড বা DNA সম্পর্কে কিছু বোঝার দরকার নেই।
DNA হলো আরও অনেক রাসায়নিক পদার্থের একটি দীর্ঘ শৃঙ্খল, আর এর মধ্যে সবচেয়ে গুরুত্বপূর্ণ হলো চারটি নিউক্লিওটাইড: অ্যাডেনিন, সাইটোসিন, গুয়ানিন আর থাইমিন। একটি DNA শৃঙ্খলে এই চারটি নিউক্লিওটাইডের কোটি কোটি কপি থাকতে পারে, আর এগুলো যে ক্রমে থাকে সেটি গুরুত্বপূর্ণ! DNA-র একটি অংশে এই নিউক্লিওটাইডগুলোর যে ক্রম থাকে, তাকে আমরা বলি "DNA সিকোয়েন্স"।
আমরা একটি DNA সিকোয়েন্সকে এই চারটি নিউক্লিওটাইডের একটি সাজানো সংগ্রহ হিসেবে প্রকাশ করি, আর এটি করার একটি কমন উপায় হলো ক্যারেক্টারের একটি স্ট্রিং, যেমন ৬টি নিউক্লিওটাইডের একটি DNA সিকোয়েন্সের জন্য "ATTACG"। এখানে 'A' মানে অ্যাডেনিন, 'C' মানে সাইটোসিন, 'G' মানে গুয়ানিন আর 'T' মানে থাইমিন।
একটি DNA সিকোয়েন্স প্রকাশ করা একটি স্ট্রিং দেওয়া হলে, প্রতিটি নিউক্লিওটাইড কতবার আছে তা গুনে বের করুন। স্ট্রিংটিতে A, C, G বা T ছাড়া অন্য কোনো ক্যারেক্টার থাকলে সেটি অকার্যকর, আর সেক্ষেত্রে আপনাকে একটি এরর সংকেত দিতে হবে।
উদাহরণ:
"GATTACA" -> 'A': 3, 'C': 1, 'G': 1, 'T': 2
"INVALID" -> error
আপনার একটি কাস্টম টাইপ 'DNA' ডিফাইন করা উচিত, যার একটি ফাংশন 'Counts' দুটি মান আউটপুট দেয়:
DNA স্ট্র্যান্ডের জন্য কোন টাইপটি ভালো?
আউটপুট মানগুলো রিপ্রেজেন্ট করার জন্য সবচেয়ে ভালো Go টাইপ কোনটি?
সম্ভাব্য ইনপুটগুলো কী কী হতে পারে, সে সম্পর্কে একটি আভাস পেতে টেস্ট কেসগুলো দেখে নিন।
আপনি হয়তো cases_test.go ফাইলটি নিয়ে ভাবছেন।
আমরা এটি leap অনুশীলনীতে ব্যাখ্যা করেছি।
Exercism-এ সাইন আপ করুন, Go ট্র্যাকের 34টি কনসেপ্ট165টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।