Saturday, 16 October 2021

Introduction to Random Strings (Rosalind)

   

   rosalind


Halo teman-teman, apa kabar? Kali ini saya ingin membahas sedikit tentang salah satu problem yang ada di web rosalind.info. Judulnya ialah "Introduction to Random Strings". Sebagai acuan, teman-teman bisa cek dahulu problem yang akan kita bahas (disini). 

Overview 

Di problem ini kita akan disajikan sebuah string (sebut saja string s) dan sebuah array integer (sebut saja array A[]) yang berisikan angka gc-content. Gc-content sendiri ialah suatu nilai yang mewakili probabilitas kemunculan senyawa gianine ('G') dan cytosine ('C') dalam suatu DNA. Sedangkan string s disini mewakili urutan "random string DNA". 

Tugas kita ialah menentukan probabilitas dari string s menggunakan acuan gc-content yang ada di array A[]. Lalu nilai probabilitas tersebut (sebut saja x) kita ubah nilainya menggunakan log10   dengan rumus log10  (x)
 
Idenya disini ialah memasukan probabilitas dari gc-content ke dalam string s: nilai (gc-content / 2) untuk 'G' dan 'C', sedangkan 'A' dan 'T' menggunakan nilai ((1 - gc-content) / 2). Sebagai contoh, suatu DNA memiliki gc-content 0.6, dan kita ingin menemukan nilai dari random string "ACGA". Maka kita masukan per masing-masing karakter: 'A' = 0.2 (0.4 / 2), 'C' = 0.3 (0.6 / 2), 'G' = 0.3, dan 'A' = 0.2. Kalikan semua, maka kita akan mendapatkan angka 0.0036. Jawabannya ialah log10 dari 0.0036. 

Kode Pengerjaan

Berikut kode pengerjaannya dalam bahasa java :
  1. public void solve() {
  2. Scanner sc = new Scanner(System.in);
  3. String s = sc.next();
  4. int GC = 0;
  5. int AT = 0;
  6. for (char c : s.toCharArray()) if (c == 'G' || c == 'C') GC++; else AT++;
  7. while (sc.hasNext()) {
  8. double gcContent = Double.parseDouble(sc.next());
  9. out.printf("%.3f\n", Math.log10(Math.pow(gcContent / 2, GC) * Math.pow((1 - gcContent) / 2, AT)));
  10. }
  11. }
  12.     
Penjelasan Kode

Pertama, kita masukan dahulu jumlah kemunculan dari karakter 'G' & 'C' dan 'A' & 'T' (baris 6). 

Setelah diketahui jumlahnya, sekarang kita proses angka-angka gc-content yang ada di array A[] menggunakan metode yang telah kita bahas diatas. Untuk mempersingkat proses pengerjaan, disini saya langsung memakai rumus Math.log10(Math.pow(gcContent / 2, GC) * Math.pow((1 - gcContent) / 2, AT)) seperti pada kode diatas (baris 9). Rumus tersebut ialah modifikasi dari rumus binomial distribution

Input dan Output

Seperti yang teman-teman lihat; disini, saya memakai fungsi next() (baris 3) untuk meng-input data stringSedangkan untuk output-nya saya memakai fungsi out.printf() (baris 9)Fungsi tersebut adalah modifikasi dari fungsi System.out.printf() yang merupakan fungsi default di java. Untuk lebih jelasnya, teman-teman bisa melihat kode tambahan untuk memodifikasi fungsi tersebut (input maupun outputdi 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/

No comments:

Post a Comment