প্রোটিন অনুবাদ থেকে আরএনএ


18

আরএনএ , ডিএনএর মতো, জিনগত তথ্য এনকোডিং করে এমন কোষগুলিতে পাওয়া একটি অণু। এটি নিউক্লিয়োটাইডস সমন্বয়ে গঠিত , যা অ্যাডিনাইন (এ), সাইটোসিন (সি), গুয়ানিন (জি) এবং ইউরাসিল (ইউ) ঘাঁটি দ্বারা প্রতিনিধিত্ব করে। * একটি কোডন তিনটি নিউক্লিওটাইডের অনুক্রম।

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

এর অনুক্রম দেওয়া ACGU, আপনি কি এটির সাথে সম্পর্কিত প্রোটিনের স্ট্রিংয়ে অনুবাদ করতে পারবেন?

* ডিএনএতে ACGT থাকে, যেখানে টি থাকে থাইমাইন। ডিএনএ থেকে আরএনএ প্রতিলিপি চলাকালীন, থাইমাইন ইউরেসিল দ্বারা প্রতিস্থাপিত হয়।


ইনপুট

ইনপুট একটি একক স্ট্রিং হবে যা কেবল ACGUউচ্চ অক্ষরের অক্ষর সমন্বিত থাকে। আপনি এই চ্যালেঞ্জের জন্য কোনও ফাংশন বা একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন।

আউটপুট

আপনি স্ট্রিং মুদ্রণ করে বা ফিরে আসার মাধ্যমে আউটপুট বেছে নিতে পারেন (পরের পছন্দটি কেবল কোনও ফাংশনের ক্ষেত্রে উপলভ্য)।

অনুবাদ একটি শুরু কোডন ( AUG, হিসাবে উপস্থাপিত M) থেকে শুরু হওয়া উচিত এবং একটি স্টপ কোডন (এর মধ্যে একটি UAA, UAGবা UGA, হিসাবে উপস্থাপিত *) এ শেষ হওয়া উচিত। চারটি ক্ষেত্রে রয়েছে যেখানে ইনপুটটি অবৈধ হতে পারে:

  • ইনপুটটি শুরু কোডন দিয়ে শুরু হয় না
  • স্টপ কোডন দিয়ে ইনপুটটি শেষ হয় না
  • ইনপুটটির দৈর্ঘ্য 3 এর একক নয়
  • ইনপুটটিতে শেষে ছাড়া অন্য কোথাও একটি স্টপ কোডন রয়েছে od

এই সব ক্ষেত্রে, Errorআউটপুট করা উচিত। নোট করুন, স্টপ কোডনগুলির বিপরীতে স্টার্ট কোডনগুলি স্ট্রিং শুরুর পরে উপস্থিত হতে পারে।

অন্যথায়, আপনি প্রতিটি কোডনকে নিম্নলিখিত আরএনএ কোডন টেবিলের মাধ্যমে স্ব স্ব অ্যামিনো অ্যাসিডে রূপান্তর করতে পারেন :

* UAA UAG UGA
A GCU GCC GCA GCG
C UGU UGC
D GAU GAC
E GAA GAG
F UUU UUC
G GGU GGC GGA GGG
H CAU CAC
I AUU AUC AUA
K AAA AAG
L UUA UUG CUU CUC CUA CUG
M AUG
N AAU AAC
P CCU CCC CCA CCG
Q CAA CAG
R CGU CGC CGA CGG AGA AGG
S UCU UCC UCA UCG AGU AGC
T ACU ACC ACA ACG
V GUU GUC GUA GUG
W UGG
Y UAU UAC

... এবং অনুবাদিত স্ট্রিং আউটপুট।

উদাহরণ

অবৈধ মামলা:

<empty string> -> Error
AUG -> Error
UAA -> Error
AUGCUAG -> Error
AAAAAAA -> Error
GGGCACUAG -> Error
AUGAACGGA -> Error
AUGUAGUGA -> Error
AUGUUUGUUCCGUCGAAAUACCUAUGAACACGCUAA -> Error

বৈধ মামলা:

AUGUGA -> M*
AUGAGGUGUAGCUGA -> MRCS*
AUGGGUGAGAAUGAAACGAUUUGCAGUUAA -> MGENETICS*
AUGCCAGUCGCACGAUUAGUUCACACGCUCUUGUAA -> MPVARLVHTLL*
AUGCUGCGGUCCUCGCAUCUAGCGUUGUGGUUAGGGUGUGUAACUUCGAGAACAGUGAGUCCCGUACCAGGUAGCAUAAUGCGAGCAAUGUCGUACGAUUCAUAG -> MLRSSHLALWLGCVTSRTVSPVPGSIMRAMSYDS*
AUGAAAAACAAGAAUACAACCACGACUAGAAGCAGGAGUAUAAUCAUGAUUCAACACCAGCAUCCACCCCCGCCUCGACGCCGGCGUCUACUCCUGCUUGAAGACGAGGAUGCAGCCGCGGCUGGAGGCGGGGGUGUAGUCGUGGUUUACUAUUCAUCCUCGUCUUGCUGGUGUUUAUUCUUGUUUUAA -> MKNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVVYYSSSSCWCLFLF*

সম্পাদনা: আরও পরীক্ষার কেস যুক্ত করা হয়েছে

স্কোরিং

এটি কোড গল্ফ, সুতরাং কয়েকটি বাইটের কোডটি জয়ী।

দ্রষ্টব্য: আমি মলিকুলার বায়োলজিতে কোনও বিশেষজ্ঞ নই, তাই আমি যদি কোনও কিছু ভুল করে দিই তবে আমাকে সংশোধন করতে নির্দ্বিধায় :)


1
একজন যথাযথ অনুবাদক যে কোনও স্ট্রিংয়ে খোলা পঠন ফ্রেমটি সন্ধান করতে সক্ষম হবেন, কেবল এটিউএস দিয়ে শুরু হয় না!
কানাডিয়ানার

@ কানাডিয়ানার আহা হ্যাঁ আমি প্রথমে এটি বিবেচনা করেছি, তবে আমি উন্মুক্ত পঠন ফ্রেমগুলি (বা এমনকি একক স্ট্রিং থেকে একাধিক প্রোটিন অনুবাদ করে) প্রশ্নটি খুব জটিল করে তুলতে চাই না :)
Sp3000

খালি স্ট্রিংটি একটি দরকারী পরীক্ষার ক্ষেত্রে হবে, কারণ এটি পরীক্ষার জন্য কিছু পন্থাকে ভেঙে ফেলবে যে ডিকোডড ক্রমটি শুরু হয় Mএবং শেষ হয় *
পিটার টেলর

@ পিটারটেলর আরও কয়েকটি সংক্ষিপ্ত পরীক্ষার মামলার সাথে যুক্ত হয়েছে :)
এসপি 3000

1
আপনি যদি সত্যিকারের ব্যথা হতে চান, আপনি আরএনএর পরিবর্তে ডিএনএ ব্যবহার করতে পারেন, তাই আপনার পিছনের ফ্রেমগুলিও পিছনে রয়েছে।
ব্যবহারকারী 137

উত্তর:


6

সিজেম ( 97 93 92 91 বাইট)

q"GACU"f#3/{4b"GGEDAAVVRSKNTTMIRRQHPPLLWC*YSSLF"{_s"MW""I*"er}%=}%s_'*/(1<"M"=*Qa=\"Error"?

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

6 বাইট অপ্টিমাইজারের পরামর্শের জন্য ধন্যবাদ সংরক্ষণ করেছে (এমন কিছু থেকে দুটি বাইট সহ যা আমি ভেবেছিলাম যে আমি চেষ্টা করেছি এবং কাজ করব না - হু)।


1
q"GACU"f#3/{4b"GGEDAAVVRSKNTTMIRRQHPPLLWC*YSSLF"{_s"MW""I*"er}%=}%s_'*/(1<"M"=*Q="Error"@?- 90
অপ্টিমাইজার 18

@ অপ্টিমাইজার, এর মধ্যে কিছু উন্নতি বলে মনে হচ্ছে। যাইহোক, এটি একটি রানটাইম ত্রুটি দেয় এবং এর Qচেয়ে তুলনাটি [Q]কেবল ভুল।
পিটার টেলর 11

1. আপনি কোডটি সঠিকভাবে অনুলিপি করেননি, যখন কোড মন্তব্যগুলিতে একাধিক লাইন ছড়িয়ে দেয়, এটি লাইন বিরতিতে একটি অদ্ভুত ইউনিকোড অক্ষর পায়। আপনাকে নিজে নিজে কোডটি টাইপ করতে হবে। 2. যুক্তিবিজ্ঞান দেখ, এটা সঠিকভাবে কাজ করার রদবদল করা হয়েছে, এইভাবে [Q]করতে Qপরিবর্তন সঠিক।
অপ্টিমাইজার 11

@ অপ্টিমাইজার, পরীক্ষার কেসটি চেষ্টা করে দেখুনAUGUAGUGA
পিটার টেলর

1
আহ ঠিক আছে. তবুও [Q]->Qa
অপ্টিমাইজার 11

10

জাভাস্ক্রিপ্ট (ES6) 167 177 অক্ষর ইউটিএফ 8 এ 167 177 বাইট হিসাবে এনকোড হয়েছে

... তাই আমি আশা করি সবাই খুশি।

সম্পাদনা আসলে, শেষ ব্লকের জন্য খুব ছোট কোনও বিশেষ মামলার দরকার নেই। যদি শেষ 2 (বা 1) অক্ষর ম্যাপ না করা হয় তবে ফলাফলের স্ট্রিংটি '*' দিয়ে শেষ হয় না এবং এটি ত্রুটি দেয়।

F=s=>/^M[^*]*\*$/.test(s=s.replace(/.../g,x=>
"KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF"
[[for(c of(r=0,x))r=r*4+"ACGU".search(c)]|r]))?s:'Error'

ব্যাখ্যা

একটি ট্রিপলেটের প্রতিটি চরের 4 টি মান থাকতে পারে, সুতরাং 4 টি 3 == 64 ট্রিপল্ট রয়েছে। সি ফাংশন প্রতিটি ট্রিপলেট 0 এবং 63 এর মধ্যে একটি সংখ্যায় মানচিত্র করে input

C=s=>[for(c of(r=0,s))r=r*4+"ACGU".search(c)]|r

প্রতিটি ট্রিপলেট একটি একক চর দ্বারা চিহ্নিত একটি এমাইনোসিডে মানচিত্র করে। আমরা এটি 64 টি অক্ষরের স্ট্রিংয়ে এনকোড করতে পারি। স্ট্রিংটি পেতে, কোডন মানচিত্র দিয়ে শুরু করুন:

zz=["* UAA UAG UGA","A GCU GCC GCA GCG","C UGU UGC","D GAU GAC","E GAA GAG"
,"F UUU UUC","G GGU GGC GGA GGG","H CAU CAC","I AUU AUC AUA","K AAA AAG"
,"L UUA UUG CUU CUC CUA CUG","M AUG","N AAU AAC","P CCU CCC CCA CCG","Q CAA CAG"
,"R CGU CGC CGA CGG AGA AGG","S UCU UCC UCA UCG AGU AGC","T ACU ACC ACA ACG"
,"V GUU GUC GUA GUG","W UGG","Y UAU UAC"]
a=[],zz.map(v=>v.slice(2).split(' ').map(x=>a[C(x)]=v[0])),a.join('')

... "কেএনকেএনটিটিটিটিআরএসআরআইসিআইকিউকিউপিপিপিপিআরপিআরআরআরএলএলএইডিএডিএএএজিজিজিজিভিভিভিভি * ওয়াই * ওয়াইএসএসএস * সিডাব্লুসিএলএফএলএফ" প্রাপ্ত করা হচ্ছে

সুতরাং আমরা ইনপুট স্ট্রিংটি স্ক্যান করতে এবং কোড 0..63, এবং কোড থেকে অ্যামিনোসিড চরটি পেতে সি ফাংশনের একই যুক্তি ব্যবহার করতে পারি। প্রতিস্থাপন ফাংশনটি ইনপুট স্ট্রিংটিকে 3 টি চরগুলিতে বিভক্ত করে, শেষ পর্যন্ত 1 বা 2 টি অক্ষর পরিচালনা না করে (এটি '*' দিয়ে শেষ না হয়ে একটি অবৈধ ফলাফল স্ট্রিং দেবে)।

শেষ অবধি, এনজোড করা স্ট্রিংটি একটি রেজিপ্যাক্স ব্যবহার করে বৈধ কিনা তা পরীক্ষা করুন: এটি অবশ্যই 'এম' দিয়ে শুরু হওয়া উচিত, '*' থাকতে হবে না এবং অবশ্যই '*' দিয়ে শেষ হওয়া উচিত

টেস্ট ইন Firebug / ফায়ারফক্স কনসোল

;['AUGCUAG','GGGCACUAG','AUGAACGGA','AUGUAGUGA','AAAAAAA',
'AUGUUUGUUCCGUCGAAAUACCUAUGAACACGCUAA',
'AUGAGGUGUAGCUGA','AUGCCAGUCGCACGAUUAGUUCACACGCUCUUGUAA',
'AUGCUGCGGUCCUCGCAUCUAGCGUUGUGGUUAGGGUGUGUAACUUCGAGAACAGUGAGUCCCGUACCAGGUAGCAUAAUGCGAGCAAUGUCGUACGAUUCAUAG']
.forEach(c=>console.log(c,'->',F(c)))

আউটপুট

AUGCUAG -> Error
GGGCACUAG -> Error
AUGAACGGA -> Error
AUGUAGUGA -> Error
AAAAAAA -> Error
AUGUUUGUUCCGUCGAAAUACCUAUGAACACGCUAA -> Error
AUGAGGUGUAGCUGA -> MRCS*
AUGCCAGUCGCACGAUUAGUUCACACGCUCUUGUAA -> MPVARLVHTLL*
AUGCUGCGGUCCUCGCAUCUAGCGUUGUGGUUAGGGUGUGUAACUUCGAGAACAGUGAGUCCCGUACCAGGUAGCAUAAUGCGAGCAAUGUCGUACGAUUCAUAG -> MLRSSHLALWLGCVTSRTVSPVPGSIMRAMSYDS*

ভাল যুক্তি! শুধু এটি করার কথা ভাবছিলাম। তুমি আমাকে এটা দ্বারা মেরেছ!
অপ্টিমাইজার

8

সি, ১৯০ বাইট (ফাংশন)

f(char*x){int a=0,i=0,j=0,s=1;for(;x[i];i%3||(s-=(x[j++]=a-37?a-9?"KNRSIITTEDGGVVAA*Y*CLFSSQHRRLLPP"[a/2]:77:87)==42,x[j]=a=0))a=a*4+(-x[i++]/2&3);puts(*x-77||i%3||s||x[j-1]-42?"Error":x);}

199 194 বাইট (প্রোগ্রাম)

a,i,j;char x[999];main(s){for(gets(x);x[i];i%3||(s-=(x[j++]=a-37?a-9?"KNRSIITTEDGGVVAA*Y*CLFSSQHRRLLPP"[a/2]:77:87)==42,x[j]=a=0))a=a*4+(-x[i++]/2&3);puts((*x-77||i%3||s||x[j-1]-42)?"Error":x);}

হ্যাশ সূত্রটি উন্নত করে কয়েকটি বাইট সংরক্ষণ করা হয়েছে।

এখানে একটি মজাদার পরীক্ষার মামলা রয়েছে:

AUGUAUCAUGAGCUCCUUCAGUGGCAAAGACUUGACUGA --> MYHELLQWQRLD* 

ব্যাখ্যা

চিঠিগুলির ট্রিপলেট একটি বেস 4 সংখ্যায় রূপান্তরিত হয়। প্রতিটি চিঠি নীচে হ্যাশ করা হয়।

x[i]       ASCII code       Hashed to (-x[i]/2&3) 
A        64+ 1  1000001            00   
G        64+ 7  1000111            01
U        64+21  1010101            10   
C        64+ 3  1000011            11

এটি পরিসীমাটিতে একটি সংখ্যা দেয় 0..63। এখন ধারণাটি হ'ল এডিসি 65 এবং অপ্টিমাইজারের মতো ব্যবহারের মতো দেখতে একটি সারণী ব্যবহার করা। তবে হ্যাশটি এমনভাবে ডিজাইন করা হয়েছে যাতে জি এবং এ একে অপরের পাশে এবং ইউ এবং সি একে অপরের পাশে থাকে।

Https://en.wikedia.org/wiki/Genetic_code#RNA_codon_table এ টেবিলটির দিকে তাকিয়ে আমরা দেখতে পাই যে এইভাবে আদেশ করা অক্ষরগুলির সাহায্যে সাধারণত শেষ বিটটি উপেক্ষা করা যায়। দুটি বিশেষ ক্ষেত্রে বাদে শুধুমাত্র একটি 32-বর্ণচিহ্ন অনুসন্ধানের টেবিলের প্রয়োজন।

নীচে প্রথম দুটি অক্ষর দেখুন এবং সংশ্লিষ্ট অ্যামিনো অ্যাসিড (যেখানে তৃতীয় বর্ণটি জি / এ, এবং তৃতীয় বর্ণটি ইউ / সি হয়)। 32-অক্ষরের টেবিলের সাথে খাপ খায় না এমন দুটি বিশেষ ক্ষেত্রে সংশোধনগুলি হার্ডকোডযুক্ত।

     A/G U/C          A/G U/C            A/G U/C         A/G U/C  
AAX> K   N       AGX> R   S         AUX> I   I      ACX> T   T
GAX> E   D       GGX> G   G         GUX> V   V      GCX> A   A
UAX> *   Y       UGX> *   C         UUX> L   F      UCX> S   S
CAX> Q   H       CGX> R   R         CUX> L   L      CCX> P   P

Corrections for special cases (where last bit cannot be ignored)
AUG 001001=9 -->  M
UGG 100101=37-->  W

মন্তব্য করা কোড

গল্ফযুক্ত সংস্করণে i%3কোডটি forবন্ধনীটির বর্ধিত অবস্থানের মধ্যে রয়েছে তবে মন্তব্য কোডটিতে এটি আরও পঠনযোগ্য অবস্থানে চলে গেছে।

a,i,j;char x[999];                                                             //Array x used for storing both input and output. i=input pointer, j=output pointer.
main(s){                                                                       //s is commandline string count. if no arguments, will be set to zero. Will be used to count stops.
  for(gets(x);x[i];)                                                           //Get a string, loop until end of string (zero byte) found
    a=a*4+(-x[i++]/2&3),                                                       //Hash character x[i] to a number 0-3. leftshift any value already in a and add the new value. Increment i.
    i%3||(                                                                     //if i divisible by 3,
      s-=(x[j++]=a-37?a-9?"KNRSIITTEDGGVVAA*Y*CLFSSQHRRLLPP"[a/2]:77:87)==42,  //lookup the correct value in the table. for special cases a=24 and a=32 map to 'M' and 'W' (ASCII 77 and 87). If character is '*' (ASCII42) decrement s.   
      x[j]=a=0                                                                 //reset a to 0. clear x[j] to terminate output string.                                                     
    );   
  puts((*x-77||i%3||s||x[j-1]-42)?"Error":x);                                  //if first character not M or i not divisible by 3 or number of stops not 1 or last character not * print "Error" else print amino acid chain.
}

যদি সেখানেই থাকত O! MGENETICS*যদিও আমি একটি পরীক্ষার কেস যুক্ত করেছি , কারণ এটি আমি তৈরি করতে সবচেয়ে থিম্যাটিক শব্দটি করেছি: P
Sp3000

6

সিজেএম, 317 121 104 বাইট

q3/{{"ACGU"#}%4b"KN T RS IIMI QH P R L ED A G V *Y S *CWC LF"S/{_,4\/*}%s=}%_('M=\)'*=\'*/,1=**\"Error"?

এটি এখনও আরও গল্ফ করা যেতে পারে।

এডসি 65 এর উত্তরে ব্যবহৃত ম্যাপিং প্রক্রিয়াটিকে আপডেট করে। যদিও আমি নিজে থেকে এটি নিয়ে এসেছি, তিনি আমাকে এতে মারধর করেছেন :)

আপডেট : কোডন টেবিলের মানচিত্রটি এতে নিদর্শন পর্যালোচনা করে সংক্ষিপ্ত করে তুলেছে।

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


যদি ইনপুটটি খালি স্ট্রিং হয় তবে এটি ব্রেক হবে।
পিটার টেলর

@ পিটারটেলর একটি বিধি যা উত্তর পোস্ট হওয়ার পরে আপনার পরামর্শে যুক্ত হয়েছিল;)। আমি শীঘ্রই কোড আপডেট করব।
অপ্টিমাইজার 16

1
এটি কোনও নিয়ম যুক্ত করা হয়নি, এটি একটি পরীক্ষার কেস ছিল যা ইতিমধ্যে বিধি দ্বারা আবশ্যকীয়ভাবে আবশ্যক ছিল।
পিটার টেলর

3

গল্ফস্ক্রিপ্ট (103 বাইট)

{)7&2/}%3/{4base'GGEDAAVVRSKNTTMIRRQHPPLLWC*YSSLF'{..'MW'?'I*'@),+=}%=}%''+.'*'/(1<'M'=*['']=*'Error'or

অনলাইন ডেমো (এনবি দুটি বৃহত্তম টেস্ট কেস অন্তর্ভুক্ত করে না কারণ এটি 15 সেকেন্ডে চালানো দরকার)।

ব্যবচ্ছেদ

স্টিভ ভেরিল যেমনটি স্যান্ডবক্সে নির্দেশ করেছেন, ততক্ষণে টেবিলটি 32 টি উপাদান এবং দুটি বিশেষ ক্ষেত্রে কমিয়ে দেওয়া যেতে পারে। দেখা যাচ্ছে যে বিশেষ ক্ষেত্রে উভয়ই অক্ষর ( Mএবং Wযথাক্রমে) জড়িত যা কেবল একবারই ঘটে থাকে এবং অক্ষরের ডান ম্যাপিংয়ের সাথে 4 সংখ্যাকে ভিত্তি করে ডুপ্লিকেট করে 32 টি উপাদান থেকে পূর্ণ 64-উপাদান অনুসন্ধান সারণী তৈরি করা সম্ভব এবং এবং tr:

'GGEDAAVVRSKNTTMIRRQHPPLLWC*YSSLF'  # 32-element lookup table
{                                   # Map over the 32 elements...
  .                                 #   Duplicate the element
  .'MW'?'I*'@),+=                   #   Apply tr/MW/I*/ to the duplicate
}%

তারপরে একবার আমরা ডিকোডটি সম্পন্ন করার পরে, বৈধতাটি অনেক পদ্ধতির জন্য অনুমতি দেয়। আমি সবচেয়ে সংক্ষিপ্ততম খুঁজে পেয়েছি

.'*'/       # Duplicate and split the copy around '*' retaining empty strings
(1<'M'=*    # Pull out the first string from the split (guarantee to exist even if input is
            # the empty string); if it starts with 'M' leave the rest of the split intact;
            # otherwise reduce it to the empty array
['']=       # Check whether we have ['']. If so, the split produced [prefix ''] where
            # prefix begins with 'M'. Otherwise we want an error.
*           # If we have an error case, reduce the original decoded string to ''
'Error'or   # Standard fallback mechanism

1 বাইট। চ্যালেঞ্জ গ্রহন করা হল!
অপ্টিমাইজার 15

@ অপ্টিমাইজার, সিজেমের একটি সরাসরি অনুবাদ একটি ভাল কয়েকটি বাইট সংরক্ষণ করবে কারণ এতে প্রচুর প্রাসঙ্গিক বিল্ট-ইন রয়েছে।
পিটার টেলর

আমার হ্যাশিং ফাংশনটি 57 বাইট দীর্ঘ, যখন আপনার 52। তাই আমি কেবলমাত্র সর্বোচ্চ 5 বাইট সংরক্ষণ করতে পারি ...
অপটিমাইজার

আমি আনন্দিত যে স্যান্ডবক্সে আমার মন্তব্যটি কার্যকর ছিল। আমি আশাবাদী যে Mবৈধ শুরুর জন্য পরীক্ষা করা বিশেষ ঘটনাগুলির মধ্যে একটি ছিল এটি সত্য ব্যবহার করা সম্ভব হতে পারে তবে এটি সেভাবে কার্যকর হয়নি। সেই স্ট্রিংটিতে এখনও আট জোড়া অভিন্ন অক্ষর রয়েছে। আমি আশ্চর্য হই যে g-->GG a-->AAএগুলিকে ছোট হাতের অক্ষর হিসাবে সংকুচিত করা যেতে পারে: ইত্যাদি If
স্তর নদী সেন্ট

1

পাইথন, 473 বাইট

t={'U(A[AG]|GA)':'*','GC.':'A','UG[UC]':'C','GA[UC]':'D','GA[AG]':'E','UU[UC]':'F','GG.':'G','CA[UC]':'H','AU[UCA]':'I','AA[AG]':'K','(UU[AG]|CU.)':'L','AUG':'M','AA[UC]':'N','CC.':'P','CA[AG]':'Q','(CG.|AG[AG])':'R','(UC.|AG[UC])':'S','AC.':'T','GU.':'V','UGG':'W','UA[UC]':'Y'}
import re
i=raw_input()
a=''
for x in[i[y:y+3]for y in range(0,len(i),3)]:
 a+=[t[u]for u in t.keys()if re.match(u, x)][0]
print["Error",a][all((a[0]+a[-1]=="M*",len(i)%3==0,not"*"in a[1:-1]))]

1

পাইথন 2, 370 358 354 বাইট

এটি কোনও সংকোচনের সাহায্যে খুব সোজা ফরোয়ার্ড অ্যাপ্রোচ, কেবল তথ্যটি বেশ ঘনত্বের সাথে প্যাক করার চেষ্টা করছে:

s=lambda x:x and[x[:3]]+s(x[3:])or[]
def f(I):O=''.join(d*any(0==x.find(p)for p in e)for x in s(I)for d,e in zip('*ACDEFGHIKLMNPQRSTVWY',map(s,'UAAUAGUGA,GC,UGUUGC,GAUGAC,GAAGAG,UUUUUC,GG,CAUCAC,AUUAUCAUA,AAAAAG,UUAUUGCU,AUG,AAUAAC,CC,CAACAG,AGAAGGCG,AGUAGCUC,AC,GU,UGG,UAUUAC'.split(','))));return['Error',O][len(I)%3==0==len(O)-O.find('*')-(O[0]=='M')]

সম্পাদনা: এক্সনোরের পরামর্শ অনুসারে কয়েকটি অক্ষর মুছে ফেলা হয়েছে।


আমি বিশ্বাস করি আপনি লিখতে পারেন sযাও recursively যেমন খাটো s=lambda x:x and[x[:3]]+s(x[3:])
xnor

@ এক্সনর গ্রেট, আমি এটি ভেবে দেখিনি। এটি তেমনভাবে কাজ করে না, কারণ পুনরাবৃত্তির শেষে এটি খালি স্ট্রিংকে খালি তালিকা আউটপুট দেবে। তবে আরও চারটি চরিত্র নিয়ে আমি এটি কাজ করতে পারি। ধন্যবাদ!
এমিল

1

স্কালা (৩১7 টি অক্ষর)

def g(c:Char)="ACGU"indexOf c;def h(s:String,i:Int)=g(s(i))*16+g(s(i+1))*4+g(s(i+2));def p(a:Int)=a!=48&&a!=50&&a!=56;def f(s:String)=if(s.length%3!=0||h(s,0)!=14||p(h(s,s.length-3)))"Error"else{var r="";for(i<-0 to s.length-3 by 3)r+="KNKNTTTTRSRSIIMIQHQHPPPPRRRRLLLLEDEDAAAAGGGGVVVV*Y*YSSSS*CWCLFLF"charAt h(s,i);r}

মূল কাজটি হ'ল f। অবশ্যই, একটি ভাল পছন্দ হবে একটি ফিরে Option[String]


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