কোডোনগুলিতে আরএনএ পার্স করুন


18

ভূমিকা

আরএনএ হ'ল ডিএনএ-র কম পরিচিত কাজিন in এর মূল উদ্দেশ্যটি অনুবাদ নামক একটি প্রক্রিয়ার মাধ্যমে কোষে প্রোটিনের উত্পাদন নিয়ন্ত্রণ করা । এই চ্যালেঞ্জে আপনার কাজটি এই প্রক্রিয়াটির একটি অংশ বাস্তবায়ন করা যেখানে আরএনএ কোডনগুলিতে বিভক্ত ।

এই চ্যালেঞ্জ থিম্যাটিকভাবে সম্পর্কিত, তবে অনুবাদ প্রক্রিয়াটির অন্য একটি অংশে মনোনিবেশ করে।

Codons

আমরা আরএনএটিকে বেস জোড়ার বর্ণমালার উপর দীর্ঘ স্ট্রিং হিসাবে ভাবব AUCG। অনুবাদে, আরএনএ তিনটি বেস জোড়ের নন-ওভারল্যাপিং খণ্ডগুলিতে বিভক্ত, যাকে কোডন বলা হয়। প্রক্রিয়া একটি টায় শুরু হয় শুরু কোডন , AUG, এবং একটি এ সমাপ্ত স্টপ কোডন , এক UAA, UAGবা UGA। প্রতিটি কোডন (স্টপ কোডন ব্যতীত) একটি অ্যামিনো অ্যাসিডের সাথে মিলে যায়, এবং এমিনো অ্যাসিডের ফলস্বরূপ প্রোটিন গঠন করে।

ইনপুট

আপনার ইনপুটটি আরএনএর একটি খালি খালি স্ট্রিং।

আউটপুট

আপনার আউটপুটটি কোডনগুলির তালিকা যা কোনও যুক্তিসঙ্গত বিন্যাসে আরএনএ বিভক্ত। সরলীকৃত এই মডেলটিতে প্রক্রিয়াটি বামদিকের শুরু কোডন থেকে শুরু হয় AUGযা আউটপুটে অন্তর্ভুক্ত। এটি যখন স্টপ কোডনটির মুখোমুখি হয় বা যখন আমরা আরএনএ থেকে বের হয়ে আসি তখন এটি শেষ হয়। যদি ইনপুটটিতে কোনও প্রারম্ভিক কোডন না থাকে তবে আউটপুটটি খালি তালিকা হবে।

উদাহরণ

ইনপুট ক্রম বিবেচনা করুন

ACAUGGAUGGACUGUAACCCCAUGC

বিশ্লেষণ AUG2 সূচকের বামতম ঘটনা থেকে শুরু হয় , এটি নিম্নলিখিত হিসাবে অব্যাহত রয়েছে:

AC AUG GAU GGA CUG UAA CCCCAUGC
   *   ^   ^   ^   +

চিহ্নিত কোডনটি *হ'ল শুরু কোডন এবং এর সাথে চিহ্নিত চিহ্নগুলিও ^আউটপুট অংশ। স্টপ কোডনটি চিহ্নিত রয়েছে +। সঠিক আউটপুট হয়

AUG,GAU,GGA,CUG

সংক্ষিপ্ত ইনপুট জন্য

ACAUGGAUGGACUGU

প্রক্রিয়া যায়

AC AUG GAU GGA CUG U
   *   ^   ^   ^

এবার, স্টপ কোডনটির মুখোমুখি হচ্ছে না, কাজেই বেস বেসগুলি শেষ হয়ে গেলে প্রক্রিয়াটি বন্ধ হয়ে যায়। আউটপুট উপরের মত একই।

বিধি এবং স্কোরিং

আপনি কোনও ফাংশনের পুরো প্রোগ্রাম লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

পরীক্ষার মামলা

GGUACGGAUU -> 
GGCGAAAUCGAUGCC -> AUG
ACAUGGAUGGACUGU -> AUG,GAU,GGA,CUG
AUGACGUGAUGCUUGA -> AUG,ACG
UGGUUAGAAUAAUGAGCUAG -> AUG,AGC
ACAUGGAUGGACUGUAACCCCAUGC -> AUG,GAU,GGA,CUG
CUAAGAUGGCAUGAGUAAUGAAUGGAG -> AUG,GCA
AAUGGUUUAAUAAAUGUGAUAUGAUGAUA -> AUG,GUU
UGUCACCAUGUAAGGCAUGCCCAAAAUCAG -> AUG
UAUAGAUGGUGAUGAUGCCAUGAGAUGCAUGUUAAU -> AUG,GUG,AUG,AUG,CCA
AUGCUUAUGAAUGGCAUGUACUAAUAGACUCACUUAAGCGGUGAUGAA -> AUG,CUU,AUG,AAU,GGC,AUG,UAC
UGAUAGAUGUAUGGAUGGGAUGCUCAUAGCUAUAAAUGUUAAAGUUAGUCUAAUGAUGAGUAGCCGAUGGCCUAUGAUGCUGAC -> AUG,UAU,GGA,UGG,GAU,GCU,CAU,AGC,UAU,AAA,UGU

13
প্রোটিনের সাথে আরএনএর সাথে ডিএনএর সম্পর্কটি আমি একবার কম্পিউটারের শর্তে ব্যাখ্যা করেছিলাম যা আমি বুঝতে পারি: ডিএনএ একটি হার্ড ডিস্কের একটি প্রোগ্রামের সমান; আরএনএ মেমরিতে লোড হওয়া প্রোগ্রামটির সমান; এবং প্রোটিন যে প্রোগ্রাম চলমান ফলাফল হিসাবে উত্পাদিত আউটপুট ডেটা সমান।
ডিজিটাল ট্রমা

4
আণবিক জীববিজ্ঞানের ডগমা হ'ল "ডিএনএ আরএনএকে প্রোটিন তৈরি করে।" সুতরাং ডিএনএ মোটামুটি বিরল, এবং আরএনএ কম বিখ্যাত, তবে আরও সাধারণ। প্রোটিন সবার মধ্যে সবচেয়ে সাধারণ।
স্তর নদী সেন্ট

1
@ ডিজিটালট্রামা: জিনতত্ত্ববিদ হিসাবে আমার এটি উল্লেখ করতে হবে যে ডিএনএ কীভাবে কাজ করে তার বাস্তবতা বর্ণনা করার জন্য এই সাদৃশ্যটি অত্যন্ত দু: খজনকভাবে অপ্রতুল। ডিএনএ আরএনএতে লিপিবদ্ধ হওয়ার জন্য অপেক্ষা করা কোনও মৃত জিনিস নয় যাতে এটি কিছু করতে পারে।
জ্যাক এইডলি

বাস্তবে বাস্তবে কি ঘটে যদি এমআরএনএর একটি টুকরা স্টপ কোডনের আগে শেষ হয় (সাধারণ উদাহরণ হিসাবে), যার অর্থ কোনও রিলিজ ফ্যাক্টরের সাথে আবদ্ধ হওয়ার জন্য কোনও স্টপ ট্রিপলেট নয়?
মনিকা পুনরায় ইনস্টল করুন - ζ-- 16:51

1
@ জ্যাক হার্ড ডিস্কের বিষয়বস্তুগুলি অগত্যা মৃত জিনিস নয় - আপগ্রেড, অটো আপডেট ইত্যাদি, যদিও অবশ্যই আমি ডিএনএ বুঝতে পেরেছি সে পরিমাণে স্ব-নিরাময় নয়। তবে আপনি ঠিক বলেছেন - এটি একটি দুর্বল উপমা। তবে আমি মনে করি এটি আমার অ-জেনেটিসিস্ট নিজেকে একজন সাধারণ মানুষ বোঝার খুব কাছে পেয়েছে
ডিজিটাল ট্রমা

উত্তর:


9

রেটিনা , 39 38 32 30 বাইট

M!`AUG|\B\G...
U(AA|AG|GA)\D*

পেছনের লাইনফিডটি তাৎপর্যপূর্ণ।

লাইনফিড-বিচ্ছিন্ন তালিকা হিসাবে আউটপুট।

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা

M!`AUG|\B\G...

এটি ম্যাচের মঞ্চ যা ইনপুটটিকে সমস্ত ম্যাচের একটি লাইনফিড-বিচ্ছিন্ন তালিকায় পরিণত করে (কারণ কারণে !)। রেজেক্স নিজেই প্রথম থেকে শুরু করে প্রতিটি কোডনের সাথে মেলে AUG। আমরা দুটি পৃথক বিকল্পের সাথে এটি অর্জন করি। AUGনিঃশর্ত ম্যাচগুলি, যাতে এটি ম্যাচের তালিকা শুরু করতে পারে। দ্বিতীয় ম্যাচটি যে কোনও কোডন হতে পারে (যে ...কোনও তিন অক্ষরের সাথে মেলে) তবে এটি \Gএকটি বিশেষ অ্যাঙ্কর যা নিশ্চিত করে যে এটি কেবল অন্য ম্যাচের পরে ঠিক মিলতে পারে। একমাত্র সমস্যাটি \Gস্ট্রিংয়ের শুরুতেও মেলে যা আমরা চাই না। যেহেতু ইনপুটটিতে কেবলমাত্র শব্দের অক্ষর রয়েছে, আমরা \Bইনপুটটির শুরুতে এই ম্যাচটি ব্যবহার না করা হয় তা নিশ্চিত করার জন্য (কোনও শব্দ যে কোনও শব্দ সীমানা নয়) ব্যবহার করি।

U(AA|AG|GA)\D*

এটি প্রথম স্টপ কোডনটি খুঁজে পেয়েছে, U(AA|AG|GA)ম্যাচের পাশাপাশি পাশাপাশি তার পরে সবকিছু এবং স্ট্রিং থেকে এটিকে সরিয়ে দেয়। যেহেতু প্রথম পর্যায়ে কোডনগুলিকে পৃথক রেখায় বিভক্ত করা হয়েছে, আমরা জানি যে এই ম্যাচটি শুরু কোডনের সাথে সঠিকভাবে সংযুক্ত হয়েছে। আমরা \Dকোনও অক্ষর মেলানোর জন্য (অ-অঙ্কগুলি) ব্যবহার করি , যেহেতু .লাইনফিডগুলি পেরিয়ে যায় না, এবং ইনপুটটিতে অঙ্ক থাকে না।


5

হাস্কেল, 115 112 বাইট

import Data.Lists
fst.break(\e->elem e["UAA","UAG","UGA"]||length e<3).chunksOf 3.snd.spanList((/="AUG").take 3)

ব্যবহারের উদাহরণ:

*Main> ( fst.break(\e->elem e["UAA","UAG","UGA"]||length e<3).chunksOf 3.snd.spanList((/="AUG").take 3) ) "AUGCUUAUGAAUGGCAUGUACUAAUAGACUCACUUAAGCGGUGAUGAA"
["AUG","CUU","AUG","AAU","GGC","AUG","UAC"]

কিভাবে এটা কাজ করে:

                spanList((/="AUG").take 3)  -- split input at the first "AUG"
             snd                            -- take 2nd part ("AUG" + rest)
     chunksOf 3                             -- split into 3 element lists
fst.break(\e->                              -- take elements from this list
           elem e["UAA","UAG","UGA"]||      -- as long as we don't see end codons
           length e<3)                      -- or run out of full codons 

1

জাভাস্ক্রিপ্ট 88 82 70 69 অক্ষর

s=>/AUG(...)+?(?=(U(AA|AG|GA)|$))/.exec(s)[0].match(/.../g).join(",")

ব্যবহারের উদাহরণ:

(s=>/AUG(...)+?(?=(U(AA|AG|GA)|$))/.exec(s)[0].match(/.../g).join(","))("ACAUGGAUGGACUGUAACCCCAUGC")

এটি স্টপ কোডন ছাড়া ইনপুটটির জন্য ব্যর্থ হয় না?
ফ্ল্যাম্বিনো

1
আপনি ঠিক বলেছেন, আমি ঠিক করছিলাম না যে এটি একটি বিকল্প ছিল, ফিক্সিং
বেনিয়ামিন গ্রুইনবাউম

ব্যবহার করে দেখুন s=>/AUG(...)+?(?=(U(AA|AG|GA)|$))/.exec(s)[0].match(/.../g)
মামা ফান রোল

স্টপ কোডনগুলির জন্য এখনও ব্যর্থ। (পরীক্ষার কেস 3 চেষ্টা করে দেখুন)
user81655

1

পাইথন 2, 185 বাইট

i=input()
o=[]
if i.find('AUG')>=0:i=map(''.join,zip(*[iter(i[i.find('AUG'):])]*3))
else:print "";exit()
for j in i:
 if j not in['UGA','UAA','UAG']:o+=[j]
 else:break
print ','.join(o)

ব্যাখ্যাi ইনপুট সেট করুন। এটি 'এওজি' থেকে শেষ পর্যন্ত বিভক্ত করুন। তিনটি স্ট্রিং মধ্যে বিভক্ত। কোডন বন্ধ করুন কিনা তা পরীক্ষা করে কেটে নিন।

এখানে চেষ্টা করুন


1

এমএটিএল , 57 বাইট

j'AUG(...)*?(?=(UAA|UAG|UGA|.?.?$))'XXtn?1X)tnt3\-:)3[]e!

এটি ভাষা / সংকলকের বর্তমান সংস্করণ (9.3.1) ব্যবহার করে।

ইনপুট এবং আউটপুট স্টিডিন এবং স্টডআউট মাধ্যমে হয়। আউটপুট লাইনব্রেক দ্বারা পৃথক করা হয়।

উদাহরণ

>> matl
 > j'AUG(...)*?(?=(UAA|UAG|UGA|.?.?$))'XXtn?1X)tnt3\-:)3[]e!
 >
> ACAUGGAUGGACUGUAACCCCAUGC
AUG
GAU
GGA
CUG

সম্পাদনা (জুন 12, 2016): ভাষার পরিবর্তনের সাথে মানিয়ে নিতে, []সরানো উচিত। নীচের লিঙ্কটিতে সেই পরিবর্তন রয়েছে

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

কোডটি নিয়মিত প্রকাশের উপর ভিত্তি করে

AUG(...)*?(?=(UAA|UAG|UGA|.?.?$))

এই ম্যাচ দিয়ে শুরু হওয়া সাবস্ট্রিং AUG, তিন অক্ষরের গোষ্ঠী (ধারণকারী ...) এবং হয় শেষ হওয়া UAA, UAGঅথবা UGA; বা স্ট্রিংয়ের শেষে শেষ হয় এবং এক্ষেত্রে একটি শেষ অসম্পূর্ণ গোষ্ঠী ( .?.?$) থাকতে পারে । লুকাহেড ( (?=...)) ব্যবহার করা হয় যাতে স্টপ কোডনগুলি ম্যাচের অংশ না হয়। মেলা অলস ( *?পাওয়া যদি থাকে) প্রথম স্টপ কোডন এ ফিনিস করার জন্য।

j                                     % input string
'AUG(...)*?(?=(UAA|UAG|UGA|.?.?$))'   % regex
XX                                    % apply it. Push cell array of matched substrings
tn?                                   % if non-empty
1X)                                   % get first substring
tnt3\-:)                              % make length the largest possible multiple of 3
3[]e!                                 % reshape into rows of 3 columns
                                      % implicit endif
                                      % implicit display

0

রুবি, 97 95 78 75 62 বাইট

->(r){r.scan(/AUG|\B\G.../).join(?,).sub(/,U(AA|AG|GA).*/,'')}

আমি বেশি গল্ফ করি না, তাই আমি নিশ্চিত এটির উন্নতি হতে পারে।

সম্পাদনা: চুরি করা ধার মার্টিন বাটনার দুর্দান্ত \B\Gকৌশল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.