Halo teman-teman, apa kabar? Kali ini saya ingin membahas sedikit tentang salah satu problem bioinformatika yang ada di web rosalind.info. Judulnya ialah "Enumerating k-mers Lexicographically". Sebagai acuan, teman-teman bisa cek dahulu problem yang akan kita bahas (disini).
Overview
Di problem ini kita akan disajikan beberapa huruf alfabet (jumlah tidak diketahui) dan sebuah angka integer, kita sebut disini array alfa[ ] dan integer n.
Tugas kita ialah membuat string permutasi yang terdiri atas n huruf yang dipilih dari dari alfa[ ]. Dengan kata lain, kita akan membuat semua string yang memungkinkan yang dibentuk dari alfa[ ] sebanyak n huruf. Sebagai contoh string permutasi yang dibuat dari huruf A, B, dan C dengan (n = 2) ialah: AA, AB, AC, BA, BB, BC, CA, CB, dan CC.
Kode Pengerjaan
Berikut kode pengerjaannya dalam bahasa java :
- static void diPrint (int[] res, Vector<Character> karakter) {
- for (int x : res) {
- out.print(karakter.get(x));
- }
- out.println();
- }
- static void solve() {
- Scanner sc = new Scanner(System.in);
- Vector<Character> karakter = new Vector<>();
- int n = 0;
- while (sc.hasNext()) {
- String masuk = sc.next();
- if (masuk.charAt(0) >= 'A' && masuk.charAt(0) <= 'Z') {
- karakter.add(masuk.charAt(0));
- }
- else {
- n = Integer.valueOf(masuk);
- }
- }
- int karSize = karakter.size();
- int[] res = new int[n];
- boolean terus = true;
- while (terus) {
- diPrint(res, karakter);
- for (int i = n - 1; i >= 0; i--) {
- if (res[i] != karSize - 1) {
- res[i]++;
- break;
- }
- {
- if (i == 0) {
- terus = false; break;
- }
- res[i] = 0;
- }
- }
- }
- }
Penjelasan Kode
Pertama, kita beralih ke fungsi static void solve() terlebih dahulu (baris 7).
Setelah kita memasukkan input (baris 11-19), kita bisa langsung masuk ke proses pembuatan string permutasinya (baris 23-37). Disini saya membuat string permutasi menggunakan metode array: array akan berubah secara leksikografi di setiap putaran while loop; dan di setiap putaran, string akan di-print berdasarkan angka-angka yang ada di array pada saat itu (baris 23-37).
Input dan Output
Seperti yang teman-teman lihat, disini saya memakai fungsi next() (baris 12) untuk meng-input data string. Saya juga menggunakan hasNext() (baris 11) dikarenakan fungsi tersebut mampu meng-input data yang tidak diketahui jumlahnya.
Sedangkan untuk output-nya saya memakai fungsi out.print() & out.println() (baris 3 & 5). Fungsi tersebut adalah modifikasi dari fungsi System.out.print() & fungsi System.out.println() yang merupakan fungsi default yang ada 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/
No comments:
Post a Comment