Halo teman-teman, apa kabar? Kali ini saya ingin membahas sedikit tentang salah satu problem yang ada di web rosalind.info. Judulnya ialah "Inferring mRna from Protein". Sebagai acuan, teman-teman bisa cek dahulu problem yang akan kita bahas (disini).
DNA -> RNA -> Protein.
Di problem ini kita akan disajikan sebuah string (sebut saja s) yang mewakili susunan hasil translating RNA ke protein. Tugas kita ialah menghitung jumlah kemungkinan susunan RNA yang dapat membentuk s tersebut. Supaya mempermudah pengerjaan, teman-teman bisa menengok ke tabel kodon terlebih dahulu.
Idenya adalah menghitung jumlah susunan RNA yang bisa menjadi kandidat, huruf per huruf (misal, protein "A" memiliki 4 susunan RNA potensial, kemudian "D" ada 2, dan seterusnya), kemudian mengalikannya. Dan jangan lupa menghitung protein stop kodon (ada 3 potensial RNA) di akhir susunan s.
Berikut kode pengerjaannya (dalam bahasa java) :
01 static void solve() {
02 int[] pts = new int[26];
03 pts['V' - 'A']++;
04 pts['V' - 'A']++;
05 pts['V' - 'A']++;
06 pts['V' - 'A']++;
07 pts['A' - 'A']++;
08 pts['A' - 'A']++;
09 pts['A' - 'A']++;
10 pts['A' - 'A']++;
11 pts['D' - 'A']++;
12 pts['D' - 'A']++;
13 pts['E' - 'A']++;
14 pts['E' - 'A']++;
15 pts['G' - 'A']++;
16 pts['G' - 'A']++;
17 pts['G' - 'A']++;
18 pts['G' - 'A']++;
19 pts['F' - 'A']++;
20 pts['F' - 'A']++;
21 pts['L' - 'A']++;
22 pts['L' - 'A']++;
23 pts['S' - 'A']++;
24 pts['S' - 'A']++;
25 pts['S' - 'A']++;
26 pts['S' - 'A']++;
27 pts['Y' - 'A']++;
28 pts['Y' - 'A']++;
29 pts['C' - 'A']++;
30 pts['C' - 'A']++;
31 pts['W' - 'A']++;
32 pts['L' - 'A']++;
33 pts['L' - 'A']++;
34 pts['L' - 'A']++;
35 pts['L' - 'A']++;
36 pts['P' - 'A']++;
37 pts['P' - 'A']++;
38 pts['P' - 'A']++;
39 pts['P' - 'A']++;
40 pts['H' - 'A']++;
41 pts['H' - 'A']++;
42 pts['Q' - 'A']++;
43 pts['Q' - 'A']++;
44 pts['R' - 'A']++;
45 pts['R' - 'A']++;
46 pts['R' - 'A']++;
47 pts['R' - 'A']++;
48 pts['I' - 'A']++;
49 pts['I' - 'A']++;
50 pts['I' - 'A']++;
51 pts['M' - 'A']++;
52 pts['T' - 'A']++;
53 pts['T' - 'A']++;
54 pts['T' - 'A']++;
55 pts['T' - 'A']++;
56 pts['N' - 'A']++;
57 pts['N' - 'A']++;
58 pts['K' - 'A']++;
59 pts['K' - 'A']++;
60 pts['S' - 'A']++;
61 pts['S' - 'A']++;
62 pts['R' - 'A']++;
63 pts['R' - 'A']++;
64 String s = ns();
65 long res = 1L;
66 for (char chs : s.toCharArray()) {
67 res *= pts[chs - 'A'];
68 res %= 1000000L;
69 }
70 res *= 3;
71 res %= 1000000L;
72 out.println(res);
73 }
Pertama, teman-teman bisa meng-converse dulu tabel kodon ke dalam array untuk mencari jumlah potensial susunan RNA per huruf protein (baris ke 2-63). Kemudian teman-teman bisa mencari total susunan potensial dengan cara mengalikannya huruf per huruf ditambah dengan protein stop kodon di akhir susunan (menggunakan modular aritmetik 1.000.000).
Disini saya memakai fungsi ns() untuk meng-input data string. Fungsi tersebut adalah modifikasi dari salah satu sistem input yang ada di java (BufferedReader). Sedangkan untuk output-nya saya memakai fungsi out.println() . Fungsi tersebut juga adalah modifikasi dari fungsi System.out.println() yang merupakan fungsi default di java. Untuk lebih jelasnya teman-teman bisa melihat kode tambahan untuk memodifikasi fungsi tersebut (input maupun output) di versi lengkap kode saya di github.
Sekian dari saya. Jika teman-teman ingin menanyakan sesuatu, teman-teman bisa menulisnya di kolom komentar. Semoga bermanfaat dan sampai jumpa di artikel berikutnya!
Referensi :
Sumber gambar 1 :https://www.facebook.com/ProjectRosalind/
Sumber gambar 2 :https://www.abbexa.com/mRNA-cancer-treatment
No comments:
Post a Comment