Aplikasi Algoritma Runut Balik dalam Pembangkitan Elemen Awal Permainan Sudoku

dokumen-dokumen yang mirip
Penerapan Algoritma Backtrack pada Knight s Tour

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

Penerapan Algoritma Runut-balik pada Permainan Math Maze

ANTIMAGIC PUZZLE. Alwi Afiansyah Ramdan

Algoritma Runut-balik (Backtracking) Bahan Kuliah IF2251 Strategi Algoritmik Oleh: Rinaldi Munir

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

Algoritma Runut-balik (Backtracking) Bagian 1

Penerapan Algoritma Backtracking pada Game The Lonely Knight

SOLUSI PERMAINAN CHEMICALS DENGAN ALGORITMA RUNUT BALIK

PERMAINAN KNIGHT S TOUR DENGAN ALGORITMA BACKTRACKING DAN ATURAN WARNSDORFF

Algoritma Runut-balik (Backtracking)

Penyelesaian Permainan 3 missionaries and 3 cannibals Dengan Algoritma Runut-Balik

Penerapan Algoritma Runut-Balik pada Magic Square

Aplikasi Algoritma Runut-balik pada Penyelesaian Teka Teki Mengisi Angka

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

Implementasi Algoritma Runut Balik dalam Pengenalan Citra Wajah pada Basis Data

ALGORITMA RUNUT-BALIK UNTUK MENGGANTIKAN ALGORITMA BRUTE FORCE DALAM PERSOALAN N-RATU

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

Penerapan Algoritma Backtracking dalam Permainan Futoshiki Puzzle

Pembentukan Pohon Pencarian Solusi dalam Persoalan N-Ratu (The N-Queens Problem)

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Permainan Pencarian Kata

PENERAPAN ALGORITMA RUNUT-BALIK (BACKTRACKING) DALAM PENYELESAIAN PERMAINAN SUDOKU

Oleh Lukman Hariadi

PENERAPAN ALGORITMA RUNUT BALIK DALAM PERMAINAN TEKA-TEKI SILANG

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

BAB III ANALISIS DAN PERANCANGAN

Penerapan Algoritma Backtracking pada Knight s Tour Problem

Pencarian Solusi Permainan Pipe Puzzle Menggunakan Algoritma Backtrack

Analisis Penerapan Algoritma Backtracking Pada Pencarian Jalan Keluar di Dalam Labirin

Penggunaan Algoritma Backtracking pada Permainan Mummy Maze

Penerapan Algoritma DFS dan BFS untuk Permainan Wordsearch Puzzle

BAB I PENDAHULUAN. 1.1 Latar Belakang Masalah

ALGORITMA RUNUT-BALIK (BACKTRACKING ALGORITHM) PADA MASALAH KNIGHT S TOUR

Implementasi Algoritma Backtracking untuk Memecahkan Puzzle The Tile Trial pada Permainan Final Fantasy XIII-2

Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

Penerapan DFS dan BFS dalam Pencarian Solusi Game Japanese River IQ Test

PENGUNAAN DUA VERSI ALGORITMA BACKTRACK DALAM MENCARI SOLUSI PERMAINAN SUDOKU

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Zebra Puzzle

ALGORITMA RUNUT BALIK DALAM PENYELESAIAN PERMAINAN WORD DIAGRAM

Penggunaan Algoritma Backtrack dan Aturan Warnsdorff Untuk Menyelesaikan Knight s Tour Problem

Penerapan Algoritma Backtracking pada Pencarian Solusi Fill-in Crossnumber

Pemanfaatan Algoritma Runut-Balik dalam Menyelesaikan Puzzle NeurOn dalam Permainan Logical Cell

I. PENDAHULUAN II. DASAR TEORI. Contoh lainnya: Solusi: 0= V,1= I,2= O,3= R, 4= N,5= L,7= A,8= F,9= E.

PEMBANGKIT TEKA-TEKI SILANG DENGAN ALGORITMA BACKTRACKING SERTA APLIKASI PERMAINANNYA YANG BERBASIS WEB

Penerapan Algoritma Backtracking pada Pewarnaan Graf

Perbandingan Algoritma Depth-First Search dan Algoritma Hunt-and-Kill dalam Pembuatan Labirin

ANALISIS PENYELESAIAN PUZZLE SUDOKU DENGAN MENERAPKAN ALGORITMA BACKTRACKING ABSTRAK

MAKALAH STRATEGI ALGORITMIK (IF 2251) ALGORITMA RUNUT BALIK DALAM GAME LABIRIN

ANALISIS PENYELESAIAN PUZZLE SUDOKU DENGAN MENERAPKAN ALGORITMA BACKTRACKING MEMANFAATKAN BAHASA PEMROGRAMAN VISUAL BASIC 6.0

Penerapan Algoritma Brute-Force serta Backtracking dalam Penyelesaian Cryptarithmetic

Penggabungan Algoritma Brute Force dan Backtracking dalam Travelling Thief Problem

Implementasi Algoritma Backtracking dalam Pencarian Solusi Flash Game Web-Based Maze

Pembangkit Teka-Teki Silang dengan Algoritma Backtracking serta Aplikasi Permainannya yang Berbasis Web

Pendeteksian Deadlock dengan Algoritma Runut-balik

PENERAPAN ALGORITMA RUNUT-BALIK DALAM PENCARIAN SOLUSI TEKA-TEKI BATTLESHIP

Pencarian Solusi Permainan Flow Free Menggunakan Brute Force dan Pruning

Menyelesaikan Permainan Wordament Menggunakan Algoritma Backtracking

Perbandingan Algoritma Greedy & Bactracking Dalam Penyelesaian Permainan 2048

ANALISIS PENERAPAN ALGORITMA RUNUT-BALIK DALAM PENCARIAN SOLUSI PERSOALAN LOMPATAN KUDA

UNTUK PEMECAHAN MASALAH PADA PERMAINAN HASHIWOKAKERO

Penentuan Keputusan dalam Permainan Gomoku dengan Program Dinamis dan Algoritma Greedy

PENGGUNAAN ALGORITMA BACKTRACKING DALAM PENCARIAN KOEFISIEN ROOK POLYNOMIAL

Penyelesaian Game Lights Out dengan Algoritma Runut Balik

Penerapan Algoritma Brute Force dan Backtracking pada Permainan Skycraper

Algoritma Backtracking Pada Logic Game : Family Crisis (Game Penyebrangan)

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Penggunaan Strategi Algoritma Backtracking pada Pencarian Solusi Puzzle Pentomino

Penyelesaian Permainan Pacman yang disederhanakan dengan Algoritma Backtracking

Penyelesaian Sum of Subset Problem dengan Dynamic Programming

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

IMPLEMENTASI BACKTRACKING ALGORITHM UNTUK PENYELESAIAN PERMAINAN SU DOKU POLA 9X9

Penerapan Algoritma Branch and Bound untuk Penentuan Jalur Wisata

Memecahkan Puzzle Hidato dengan Algoritma Branch and Bound

Implementasi Algoritma DFS pada Pewarnaan Gambar Sederhana Menggunakan Bucket tool

Penggunaan Algoritma Backtracking Untuk Menentukan Keisomorfikan Graf

Penerapan Pohon dengan Algoritma Branch and Bound dalam Menyelesaikan N-Queen Problem

PENYELESAIAN PERMAINAN SUDOKU DENGAN ALGORITMA BRUTEFORCE,BACKTRACKING,dan BACKTRACKING DENGAN OPTIMASI

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Mekanisme Penanganan Deadlock Dalam Pemrosesan Transaksi Oleh DBMS Menggunakan Algoritma Backtracking

Penerapan Algoritma Greedy dan Backtrackng Dalam Penyelesaian Masalah Rubik s Cube

Aplikasi Algoritma Brute Force dan Backtracking pada Permainan Slitherlink

PENCARIAN SOLUSI DENGAN ALGORITMA BACKTRACKING UNTUK MENYELESAIKAN PUZZLE KAKURO

Pemanfaatan Algoritma Runut-balik dalam Penentuan Golongan Suara pada Dunia Paduan Suara

@UKDW. Lampiran B - 1 BAB 1 PENDAHULUAN

PENGGUNAAN ALGORITMA BACKTRACKING DALAM PENYELESAIAN PERMAINAN SUDOKU

Algoritma Puzzle Pencarian Kata

Penerapan Algoritma DFS dalam Menyelesaikan Permainan Buttons & Scissors

Algoritma Backtracking Pada Permainan Peg Solitaire

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Algoritma Runut-Balik pada Robot Pemadam Api

Implementasi Algoritma DFS pada permainan Monument Valley

Penggunaan Algoritma Greedy untuk menyelesaikan Permainan Othello

Penerapan Algoritma Greedy Pada Game Tower Defense: Tower of Greece

Penerapan Algoritma Greedy pada Permainan Tower Defense

Penggunaan Algoritma Greedy untuk Mencari Solusi Optimal dalam Permainan Brick Breaker

PENYELESAIAN TEKA-TEKI PENYUSUNAN ANGKA MENGGUNAKAN ALGORITMA RUNUT BALIK

Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound

Penggunaan Algoritma Runut-Balik dalam Proses Resolusi Query dari Eksekusi Program dalam Bahasa Prolog

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

Transkripsi:

Aplikasi Algoritma Runut Balik dalam Pembangkitan Elemen Awal Permainan Sudoku Muhammad Farhan Kemal / 13513085 1 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia 1 13513085@std.stei.itb.ac.id Abstract Sudoku merupakan sebuah permainan menyusun angka dari satu hingga sembilan dalam board yang berukuran 9x9 kotak. Aturan permainan ini secara umum adalah penyusunan setiap angka dalam kolom 9x9 tersebut tidak boleh sama dalam setiap baris, kolom, dan dalam upa-board yang berukuran 3x3 kotak. Setiap game akan dimulai, board dalam kondisi beberapa kotak sudah berisi angka yang tidak menyalahi aturan Sudoku itu sendiri. Jumlah angka yang terisi dalam board tergantung dalam tingkat kesulitan game yang dipilih diawal game. Dalam sistem permainan Sudoku ini, setiap kotak dalam board telah memiliki nilai yang dibangkitkan pada saat game akan dimulai. Agar pembangkitan nilai pada setiap kotak memenuhi aturan permainan Sudoku ada banyak cara yang bisa diterapkan, salah satunya dengan menggunakan algoritma runut balik atau yang biasa disebut backtrack. Dalam algoritma backtrack, kita mencoba beberapa sekuens keputusan, sampai Anda menemukan sekuens yang bekerja. Index Terms Sudoku, backtrack,. I. PEDAHULUA Kehidupan manusia di bumi bersifat dinamis. Lingkungan tempat manusia hidup juga dinamis. Hal secara tidak langsung mengakibatkan cara berpikir manusia yang dinamis dan selalu berkembang sesuai dengan lingkungan dan kebutuhannya. Begitupun dengan cara berpikir manusia mengenai masalah komputasi dan pemecahan masalah. Telah banyak algoritma yang ditemukan manusia untuk memecahkan suatu masalah. Dimulai dari algoritma brute-force yang menyolusikan suatu masalah secara langsung tanpa menggunakan langkah yang efisien. Kemudian ditemukan algoritmaalgoritma yang lebih mangkus dan sangkil sesuai dengan fungsi algoritma tersebut dan kebutuhan pengguna, contohnya algoritma Greed, algoritma branch and bound yang menggunakan strategi berbasis pencarian dan pohon ruang status, algoritma divide and conquer yang mengandalkan penyolusian atas-bawah, algoritma runut balik yang merupakan penyempurnaan dari exhaustive search yang merupakan algoritma brute-force, dan masih banyak lagi algoritma yang lain yang merupakan pengembangan dari algoritma yang lain ataupun algoritma lain yang ditemukan karena adanya kebutuhan dari user. Umumnya suatu algoritma mampu menyolusikan banyak kondisi dan permasalahan. Mulai dari masalah yang sederhana hingga masalah yang butuh penyolusian dengan mengombinasikan banyak algoritma. Salah satu permasalahan yang akan dibahasa pada makalah ini adalah pembangkitan elemen awal pada permainan Sudoku. Permainan Sudoku adalah permainan klasik yang menggunakan angka satu hingga Sembilan dan menempatkan angka-angka tersebut dalam sebuah board berukuran 9x9. Aturan dari permainan adalah tidak ada angka yang sama dalam suatu baris, kolom, dan upaboard. Dalam sebuah aplikasi Sudoku, setiap kotak telah dibangkitkan nilainya terlebih dahulu. Dalam pembangkitan nilai setiap kotak dalam board digunakan algoritma runut balik hingga didapatkan solusi yang memenuhi segala aturan dalam permainan Sudoku tersebut. II. ALGORITMA RUUT BALIK Istilah backtracking pertama kali diperkenalkan oleh D.H. Lehmer pada tahun 1950 dan terdapat juga tokoh-tokoh seperti R.J.Walker, Golomb, Baumert yang menyjikan uraian umum tentang backtracking. Algoritma backtracking adalah algoritma pencarian solusi yang berbasis DFS (Depth First Search). Algoritma backtracking banyak diterapkan untuk program games: 1. Permainan tic-tac-toe 2. Menemukan jalan keluar dari sebuah maze 3. Permainan Crossword puzzle 4. Catur Algoritma runut balik merupakan perbaikan dari algoritma brute force. Pada algoritma brute force semua kemungkinan solusi dieksplorasi satu per satu sedangkan pada algoritma runut balik hanya pilihan yang mengarah ke solusi yang dieksplorasi, pilihan yang tidak mengarah ke solusi tidak dipertimbangkan kembali.

2.1. Properti Umum Algoritma Runut Balik a. Solusi persoalan Solusi dinyatakan dalam bentuk vektor dengan tupel: X = (x1, x2, x3,...,xn), xi Si. Mungkin terjadi S1 = S2 =... = Sn Contoh: Si = {0,1}, xi = 0 atau xi = 1 b. Fungsi pembangkit Fungsi pembangkit nilai xk Dinyatakan dalam predikat T(k) dimana T(k) membangkitkan nilai untuk xk, yang merupakan komponen vektor solusi. c. Fungsi pembatas Dinyatakan dalam predikat : B (x1, x2,...,xk) B bernilai benar jika (x1, x2,...,xk) mengarah ke solusi. Jika benar, maka pembangkitan nilai untuk xk + 1 dilanjutkan, tetapi jika false, maka (x1, x2,...,xk) dibuang. 2.2. Prinsip Pencarian Solusi dengan Metode Runut Balik Setiap simpul dalam pohon ruang status berasosiasi dengan sebuah pemangilan rekursif. Jika jumlah simpul dalam pohon ruang status adalah 2n atau n!, maka untuk kasus terburuk, algoritma runut balik membutuhkan waktu dalam: a. O(p(n) 2n) atau b. O(q(n)n!) Dengan p(n) dan q(n) adalah polinom derajat n yang menyatakan waktu komputasi simpul. 2.4. Skema Umum Algoritma Runut Balik procedure RunutBalikR(input k:integer) {Mencari semua solusi persoalan dengan metode runut-balik; skema rekursif Masukan: k, yaitu indeks komponen vektor solusi, x[k] Keluaran: solusi x = (x[1], x[2],, x[n])} Algoritma for tiap x[k] yang belum dicoba sedemikian sehingga ([k] T(k)) and B(x[1], x[2],...,x[k])= true do if (x[1], x[2],...,x[k]) adalah lintasan dari akar ke daun then CetakSolusi(x) III. SUDOKU Gambar 1. Prinspi algoritma runut balik a. Solusi dicari dengan membentuk lintasan dari akar ke daun. Aturan pembentukan yang dipakai mengikuti aturan depth-first order (DFS). b. Simpul-simpul yang sudah dilahirkan dinamakan simpul hidup (live node). c. Simpul-simpul yang sedang diperluas dinamakan simpul-e (expand node). d. Tiap kali simpul-e diperluas, lintasan yang dibangun olehnya bertambah panjang. e. Jika lintasan yang sedang dibentuk tidak mengarah ke solusi, maka simpul-e tersebut dibunuh sehingga menjadi simpul mati (dead node) f. Fungsi yang digunakan untuk membunuh simpul-e adalah dengan menerapkan fungsi pembatas. 2.3. Kompleksitas Waktu Algoritma Runut Balik Permainan seperti sudoku sudah dikenal sejak tahun 1979 di majalah Dell Magazines dengan nama "umber Place". Permainan ini didesain oleh Howard Grans. Permainan ini mulai dikenal di Jepang pada tahun 1984, dimuat di majalah bulanan ikoli, dengan nama "Suuji Wa Dokushin Kagiru". Selanjutnya puzzle ini dikenal sebagai Su-Doku (orang Jepang memang biasa menyingkat nama). Tahun 1986, ikoli membuat aturan baru dalam permainan sudoku, yaitu : 1. omor yang disertakan dalam soal tidak boleh lebih dari 32 buah. 2. Soal harus simetris. Tahun 2004, permainan ini mulai dikenalkan di Inggris, dan diterbitkan pertama kali di The Times, 12 ovember 2004, tetap menggunakan nama sudoku. Sudoku dimainkan dengan cara mengisi kotak dalam board dengan angka dari satu hingga Sembilan dengan aturan permainan sebagai berikut: 1. Sudoku dimainkan dalam 9x9 kotak yang dibagi dalam 3x3 upa-board (sel) yang disebut "area".

Dalam permainan sudoku yang telah dibuat dalam bentuk aplikasi komputer, saat game dimulai setiap kotak telah dibangkitkan nilainya masing-masing. 2. Sudoku dimulai dengan beberapa sel yang sudah terisi dengan angka 3. Angka hanya dapat muncul sekali dalam setiap baris: - Diperbolehkan: - Tidak diperbolehkan 4. Angka hanya dapat muncul sekali dalam setiap kolom: 5. Angka hanya dapat muncul sekali dalam setiap area IV. AALISIS PEMBAGKITA ILAI AWAL SUDOKU MEGGUAKA ALGORITMA RUUT BALIK Penerapan algoritma runut balik dalam pembangkitan nilai awal Sudoku adalah sebagai berikut. 1. Pada keadaan awal, seluruh kotak tidak memiliki nilai. Algoritma dimulai dari posisi 0,0 pada matriks Sudoku 9x9. 2. Pilih sebuah nilai x, dimana x merupakan anggota dari {1, 2, 3, 4, 5, 6, 7, 8, 9}. 3. Jika x memenuhi aturan Sudoku, maka isi kotak yang kosong tersebut dengan nilai x dan lanjutkan pemeriksaan ke kotak selanjutnya. 4. Jika nilai x tidak memenuhi aturan Sudoku, maka ubah nilai x menjadi nilai yang lain dalam himpunan keanggotaan x. 5. Jika seluruh kemungkinan x telah dicoba dan tidak ada yang memenuhi aturan permainan Sudoku, maka akan dilakukan backtracking ke kotak sebelumnya dan nilai kotak sebelumnya diubah menjadi kemungkinan nilai yang lain. 6. Lakukan langkah ke-3 untuk kotak-kotak yang lain. 7. Proses di atas akan dilakukan terus-menerus secara rekursih hingga seluruh kotak pada board Sudoku telah terisi seluruhnya dan memenuhi aturan Sudoku. 8. Untuk digunakan dalam sebuah game, nilai-nilai pada board tersebut dihapus secara random sebanyak y buah tergantung tingkat kesulitan game.

Langkah-langkah di atas akan direpresentasikan dalam pseudocode. FUCTIO SUDOKU() DEKLARASI values : array [0..8] of integer index, i : integer num : integer z, zindex : integer maxbacktrack, backtrack, backtracked : int ElemenAwal : integer level : string fungsi SesuaiAturan (input baris, kolom, num : integer, output boolean) penampung zindex dan nilai dari elemen ke zindex dari values akan dimasukkann ke dalam z. pada baris ke 12 17, fungsi akan meemriks apakah nilai z memenuhi aturan Sudoku atau tidak. jika z memenuhi aturan Sudoku maka akan dilanjutkan ke tahapan selanjutnya. namun jika tidak maka akan dilakukan kembali instruksi pada baris 9 17. Jika ternyata banyaknya anka yang terdapat pada array values adalah nol, atau dengan kata lain tidak ada nilai yang memenuhi untuk indeks tersebut maka akan dilakukan backtrack dengan instruksi pada baris 18 35. interpretasi code dalam flowchart. ALGORITMA 1. index <- 0; 2. While (index < baris * Kolom) do 3. num <- 0 4. for i <- 0 to 8 do 5. values[i] <- i + 1 6. i++ 7. endfor 8. while (num=0 & values.length>0) do 9. zindex <- rand(0, values.length) 10. z <- values[zindex] 11. values[zindex] = 12. if (SesuaiAturan (z, Grid[index] = true)) then 13. num <- z 14. else 15. num <- 0 16. endif 17. endwhile 18. if num = 0 then 19. if index > 5 then 20. maxbacktrack <- 5 21. else 22. maxbacktrack <- index 23. endif 24. backtrack <- random(1, maxbactrack) 25. backtracked <- 0 26. while (backtracked < bactrack)do 27. selgrid[index - backtracked]<-0 28. backtracked++ 29. endwhile 30. index <- index backtrack 31. else 32. selgrid[index] <- num 33. index++ 34. endif 35. endwhile index = 0 sesuai aturan Sudoku? selgrid[index] = num index++ indeks < 81? pilih num acak, {1,2,3,4,5,6,7,8,9} indeks <= 5 maxbacktrack = indeks eliminasi num acak yang sebelumnya ada num acak lain? backtrack indeks > 5 Pada bagian values, didefinisikan variable yang digunakan dalam fungsi di atas, yaitu: a. values, variable penampung b. num, nilai setiap kotak yang mungkin c. ElemenAwal, banyak elemen yang akan ditampilkan Solusi maxbactrack = rand(1,5) Pada baris 1 7, diinisialisasikan index dengan 0. selama indeks < 81, insialisasi num dengan 0. kemudian dilakukan pengisian array values = [1, 2, 3, 4, 5, 6, 7, 8, 9]. pada baris 8 11, fungsi akan memilih angka secara acak antara 0 sampai dengan banyaknya angka pada array values. angka acak akan dimasukkan ke dalam variable indeks = maxbacktrack

V. KESIMPULA Dalam kehidupan sehari-hari, sangat banyak contoh pengaplikasian algoritma runut balik atau backtracking. Mulai dari masalah yang sangat rumit hingga masalah yang sangat sederhana. salah satunya dalam kasus pembangkitan elemen pada kotak-kotak Sudoku. Sebenarnya tidak hanya algoritma runut balik yang bisa digunakan dalam penyelesaian kasus ini, namun karena kompleksitas waktu dan ruang serta sistem pemecahan masalah yang lebih pas maka algoritma runut balik sangat efisien digunakan dalam kasus ini. Dalam penyolusiannya, kasus ini juga dapat diselesaikan dengan menggunakan berbagai bahasa pemrograman sesuai dengan pseudocode yang telah dibuat pada makalah ini. VI. DAFTAR PUSTAKA 1. Munir, Rinaldi, Diktat Kuliah IF2211 Strategi Algoritma. Program Studi Teknik Informatika ITB, 2015. 2. uralta, ovita, Penerapan Algoritma Backtrack, Perpustakaan UPI, 2013 PERATAA Dengan ini saya menyatakan bahwa makalah yang saya tulis ini adalah tulisan saya sendiri, bukan saduran, atau terjemahan dari makalah orang lain, dan bukan plagiasi. Bandung, 4 April 2015 Muhammad Farhan Kemal 13513085