Persoalan Cryptarithmetic dengan Algoritma Backtracking

dokumen-dokumen yang mirip
Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

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

SOLUSI PERMAINAN CHEMICALS DENGAN ALGORITMA RUNUT BALIK

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

Algoritma Runut-balik (Backtracking) Bagian 1

Analisis Penerapan Algoritma Backtracking Pada Pencarian Jalan Keluar di Dalam Labirin

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

Pencarian Solusi Permainan Pipe Puzzle Menggunakan Algoritma Backtrack

Penerapan Algoritma Backtracking pada Pewarnaan Graf

PENERAPAN ALGORITMA RUNUT BALIK DALAM PERMAINAN TEKA-TEKI SILANG

Penerapan Algoritma Backtracking pada Game The Lonely Knight

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Penerapan Algoritma Backtracking pada Knight s Tour Problem

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Permainan Pencarian Kata

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

Algoritma Runut-balik (Backtracking)

Pendeteksian Deadlock dengan Algoritma Runut-balik

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

PENGUNAAN DUA VERSI ALGORITMA BACKTRACK DALAM MENCARI SOLUSI PERMAINAN SUDOKU

ANTIMAGIC PUZZLE. Alwi Afiansyah Ramdan

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

PERMAINAN KNIGHT S TOUR DENGAN ALGORITMA BACKTRACKING DAN ATURAN WARNSDORFF

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

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

Penerapan Algoritma Brute-Force serta Backtracking dalam Penyelesaian Cryptarithmetic

Implementasi Algoritma DFS pada Pewarnaan Gambar Sederhana Menggunakan Bucket tool

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

Menyelesaikan Permainan Wordament Menggunakan Algoritma Backtracking

ALGORITMA RUNUT BALIK DALAM PENYELESAIAN PERMAINAN WORD DIAGRAM

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

Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

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

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

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

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

Penerapan Algoritma DFS dan BFS untuk Permainan Wordsearch Puzzle

Penerapan Algoritma Backtrack pada Knight s Tour

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

Penyelesaian Permainan Pacman yang disederhanakan dengan Algoritma Backtracking

Algoritma Brute Force (Bagian 1) Oleh: Rinaldi Munir

PENGGUNAAN ALGORITMA BACKTRACKING DALAM PENCARIAN KOEFISIEN ROOK POLYNOMIAL

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

Implementasi Algoritma Runut Balik dalam Pengenalan Citra Wajah pada Basis Data

Aplikasi Algoritma Runut Balik dalam Pembangkitan Elemen Awal Permainan Sudoku

Penggunaan Strategi Algoritma Backtracking pada Pencarian Solusi Puzzle Pentomino

1, 2, 3

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Penerapan Algoritma BFS, DFS, DLS dan IDS dalam Pencarian Solusi Water Jug Problem

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

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

PERBANDINGAN ALGORITMA BFS DAN DFS DALAM PEMBUATAN RUTE PERJALANAN OBJEK PERMAINAN 2 DIMENSI

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

Aplikasi Algoritma Runut-balik pada Penyelesaian Teka Teki Mengisi Angka

PENYELESAIAN GAME TEKA-TEKI SILANG DENGAN MENERAPKAN ALGORITMA BACKTRACKING

PENERAPAN ALGORITMA BFS PADA CHINESE SLIDE BLOCK PUZZLE (KLOTSKI)

Penggunaan Algoritma Backtracking pada Permainan Mummy Maze

Penggunaan Algoritma Backtracking Untuk Menentukan Keisomorfikan Graf

Analisis Penggunaan Algoritma Backtracking dalam Penjadwalan Kuliah

Penerapan Algoritma BFS dan DFS dalam Mencari Solusi Permainan Rolling Block

Implementasi Algoritma BFS dan DFS dalam Penyelesaian Token Flip Puzzle

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

Algoritma Puzzle Pencarian Kata

Penerapan Algoritma Runut-Balik pada Magic Square

IMPLEMENTASI BACKTRACKING ALGORITHM UNTUK PENYELESAIAN PERMAINAN SU DOKU POLA 9X9

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Pelacakan dan Penentuan Jarak Terpendek terhadap Objek dengan BFS (Breadth First Search) dan Branch and Bound

Pemanfaatan Pohon dalam Realisasi Algoritma Backtracking untuk Memecahkan N-Queens Problem

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE

PENGGUNAAN ALGORITMA BRANCH AND BOUND UNTUK MENYELESAIKAN PERSOALAN PENCARIAN JALAN (PATH-FINDING)

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.

Pembentukan pohon pencarian solusi dan perbandingan masingmasing algoritma pembentuknya dalam simulasi N-Puzzle

Pencarian Solusi Permainan Flow Free Menggunakan Brute Force dan Pruning

Penerapan Algoritma Runut-balik pada Permainan Math Maze

BFS dan DFS. Bahan Kuliah IF2151 Strategi Algoritmik. Oleh: Rinaldi Munir

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

Penerapan Algoritma Branch and Bound untuk Penentuan Jalur Wisata

BAB II LANDASAN TEORI

Analisis Algoritma Knuth Morris Pratt dan Algoritma Boyer Moore dalam Proses Pencarian String

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

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

Aplikasi Branch and Bound Pada Pencarian Jalan Pada Software Navigasi

Penerapan Algoritma Backtracking dalam Permainan Futoshiki Puzzle

Aplikasi Graf Breadth-First Search Pada Solver Rubik s Cube

UNTUK PEMECAHAN MASALAH PADA PERMAINAN HASHIWOKAKERO

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Zebra Puzzle

AlgoritmaBrute Force. Desain dan Analisis Algoritma (CS3024)

Algoritma Brute Force

Penerapan Algoritma Greedy dan Algoritma BFS untuk AI pada Permainan Greedy Spiders

Memecahkan Puzzle Hidato dengan Algoritma Branch and Bound

Penerapan Algoritma DFS dalam Menyelesaikan Permainan Buttons & Scissors

PENGGUNAAN ALGORITMA BACKTRACKING DALAM PENYELESAIAN PERMAINAN SUDOKU

Aplikasi Algoritma Traversal Dalam Binary Space Partitioning

IMPLEMENTASI ALGORITMA BREADTH FIRST SEARCH DAN STRING MATCHING PADA SISTEM PAKAR

Implementasi Algoritma DFS pada permainan Monument Valley

Implementasi Intuitif Penyelesaian Labirin dengan Algoritma Depth-First Search

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

Transkripsi:

Persoalan Cryptarithmetic dengan Algoritma Backtracking Elisa Sibarani 1, Inte Bu ulolo 2, Rosni Lumbantoruan 3 Program studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung E-mail : elisa@students.if.itb.ac.id 1, inte@students.if.itb.ac.id 2, rosni@students.if.itb.ac.id 3 Abstrak Persoalan cryptarithmetic termasuk salah satu persoalan CSP (Constraint Satisfaction Problem) yang bisa diselesaikan menggunakan algoritma backtracking. Backtracking adalah algoritma berbasis DFS (Depth First Search) untuk mencari solusi persoalan secara lebih mangkus. Pada algoritma backtracking tidak perlu memeriksa semua kemungkinan solusi yang ada, hanya pencarian yang mengarah ke solusi saja yang selalu dipertimbangkan. Dengan proses seperti ini maka perfomansi akan lebih baik karena akan menghemat waktu pencarian [1]. Kata kunci: cryptarithmetic, backtracking, DFS 1. Pendahuluan CSP merupakan teknik yang dapat digunakan untuk penyelesaian persoalan dalam dunia nyata, yang terkadang memberikan batasan tertentu yang tidak boleh dilanggar pada saat mencari solusinya. Pada saat melakukan pencarian solusi atau pemilihan urutan aksi, teknik penyelesaian ini akan selalu menyesuaikan dengan constraint-constraint yang sudah ditentukan sebelumnya, sedemikian sehingga semua constraint akan terpenuhi. CSP dapat direpresentasikan sebagai berikut : 1. Kumpulan variabel. X kumpulan dari n variabel X1,X2,X3,..,Xn, Variabel adalah elemen atau entity yang ingin dicari nilainya sehingga pemberian nilai pada variabel dapat menjadi solusi dari CSP. 2. Domain D Masing-masing variabel didefinisikan oleh suatu domain yang finite D1,D2,,Dn, yang berisi kumpulan nilainilai yang mungkin untuk variabel tertentu yang bertujuan untuk menyelesaikan persoalan. 3. Constraint C kumpulan dari constraintconstraint C1,C2,,Cm. Ci merupakan constraint-constraint yang berisi batasan nilai untuk setiap variabel dan tidak boleh dilanggar. Constraint-constraint ini akan membatasi domain dari suatu variabel sehingga menjadi lebih sempit 4. Assignment pemberian nilai pada suatu variabel. 5. Solusi pemberian nilai-nilai pada setiap variabel yang memenuhi semua constraint yang telah ditetapkan untuk persoalan, sehingga nilainilai variabel tersebut merupakan solusi untuk persoalan. Untuk mempermudah pemahaman terhadap suatu CSP, maka umumnya persoalan ini digambarkan dalam bentuk graf, dan disebut constraint graph. Constraint graph terdiri dari simpul simpul yang merepresentasikan variabel pada CSP yang akan dicari nilainya, dan busur pada graf menggambarkan constraint di antara variabel yang dihubungkannya. Jika dua variabel tidak terhubung dengan suatu busur, maka di antara dua variabel tersebut tidak memiliki hubungan constraint, jadi tidak perlu diperiksa kekonsistenannya pada saat pemberian nilai. Tujuan utama dari penyelesaian CSP yaitu untuk memberikan nilai pada semua komponen persoalan, dengan tidak melanggar constraint yang telah ditetapkan untuk persoalan tersebut. 2. Deskrispsi Masalah Cryptarithmetic Cryptarithmetic merupakan pengetahuan dan seni untuk menciptakan dan menyelesaikan mathematic puzzle, dimana digit-digit ditukar dengan hurufhuruf alfabet atau symbol lain. Cryptarithmetic merupakan salah satu contoh persoalan yang dapat diselesaikan dengan CSP, dengan constraint yang melibatkan 3 atau lebih variabel. Cryptarithmetic merupakan contoh yang sangat cocok untuk CSP, karena selain menyediakan deskripsi, masalah cryptarithmetic dapat dijelaskan lebih baik dengan constraint-constraint. 1

Constraint-constraint yang mendefinisikan sebuah cryptarithmetic problem antara lain : 1. Masing-masing huruf atau symbol merepresentasikan digit yang hanya satu dan unik dalam persoalan tersebut. 2. Ketika digit-digit menggantikan huruf atau simbol, maka hasil dari operasi aritmatika harus benar. Batasan-batasan di atas memunculkan beberapa batasan baru dalam persoalan, yaitu apabila basis dari angka adalah 10, maka pasti akan ada paling banyak 10 simbol atau huruf yang unik dalam persoalan. Jika tidak, maka tidak akan mungkin untuk memberikan digit yang unik ke setiap huruf atau simbol yang unik juga dalam persoalan. Dan supaya memiliki makna yang berarti secara semantik, angka tidak boleh dimulai dengan 0, jadi huruf-huruf yang muncul untuk setiap variabel pertama sekali seharusnya tidak boleh mengandung 0. Spesifikasi persoalan cryptarithmetic (couple + couple = quartet) yaitu: 1. Pemberian digit atau nilai harus berbeda untuk setiap variabel C, O, U, P, L, E, Q, A, R, T yaitu digit 0,..9 sehingga persamaan COUPLE + COUPLE = QUARTET terpenuhi. 2. Apabila masing-masing variabel sudah diberikan nilai, maka pemberian nilai harus memenuhi constraint yang ada, sehingga pada saat operasi aritmatika dilakukan untuk nilai setiap variabel, maka hasil dari operasi penjumlahan COUPLE + COUPLE = QUARTET harus sesuai. 3. Variabel-variabel untuk persoalan cryptaritmetic ini ada 10 variabel, antara lain : C, O, U, P, L, E, Q, A, R, dan T. 4. Persoalan cryptaritmetic ini akan menggunakan bit carry, yaitu variabel X 1, X 2, X 3, X 4, dan X 5. 3. Prinsip Pencarian Solusi dengan Metode Runut Balik [1] Disini kita hanya akan meninjau pencarian solusi pada pohon ruang status yang dibangun secara dinamis. Langkah-langkah pencarian solusi adalah sebagai berikut: 1. Solusi dicari dengan membentuk lintasan dari akar ke daun. Aturan pembentukan yang dipakai adalah mengikuti metode pencarian mendalam (DFS). Simpul-simpul yang sudah dilahirkan disebut simpul hidup (live node). Simpul hidup yang sedang diperluas dinamakan simpul-e (Expand node). Simpul dinomori dari atas kebawah sesuai dengan urutan kelahirannya (ingat prinsip DFS). 2. Tiap kali simpul-e diperluas, lintasan yang dibangun olehnya bertambah panjang. Jika lintasan yang dibentuk tidak mengarah ke solusi, maka simpul-e tersebut dibunuh sehingga menjadi simpul mati (dead node). Fungsi yang digunakan untuk membunuh simpul-e adalah dengan menerapkan fungsi pembatas (bounding function). Simpul yang sudah mati tidak akan pernah diperluas lagi. 3. Jika pembangunan lintaran berakhir dengan simpul mati, maka proses pencarian diteruskan dengan membangkitkan simpul anak yang lainnya. Bila tidak ada lagi simpul anak yang dapat dibangkitkan, maka pencarian solusi dilanjutkan dengan melakukan runut balik ke simpul terdekat (simpul orangtua). Selanjutnya simpul ini menjadi simpul-e yang baru. Lintasan baru dibangun kembali sampai lintasan tersebut membentuk solusi. 4. Pencarian dihentikan bila kita telah menemukan solusi atau tidak ada lagi simpul hidup untuk runut balik. 4. Penyelesaian Masalah dengan Algoritma Backtracking (Runut Balik) Persoalan cryptarithmetic: Diberikan sebuah bentuk cryptarithmetic dengan n buah variabel dan disediakan m buah angka. Berikan angka yang sesuai untuk setiap variabel, dan hasil aritmatika setelah setiap variabel diberi angka, harus sama dengan bentuk awal dan tidak ada variabel yang diberi angka yang sama. Untuk persoalan ini, karena jumlah variabel ada 10, maka pastilah kesepuluh angka harus dipakai. X 5 X 4 X 3 X 2 X 1 C O U P L E C O U P L E ---------------------- + Q U A R T E T Bit carry X 1 = 0,1, X 2 = 0,1, X 3 = 0,1, X 4 = 0,1, X 5 = 0,1. Constraint-contraint yang ditentukan untuk persoalan cryptarithmetic yaitu: E + E = T + 10 * X1 X1 + L + L = E + 10 * X2 X2 + P + P = T + 10 * X3 X3 + U + U = R + 10 * X4 X4 + O + O = A + 10 * X5 X5 + C + C = U + 10 * Q Solusi dinyatakan sebagai vektor X dengan n-tuple: 2

X = (x 1, x 2,., x n ), x i Є 0,1,2,..,9 Angka variabel ke-k, x k, ditentukan dengan algoritma berikut: 1. Bangkitkan angka i 2. Periksa pemberian angka berdasarkan constraint yang ada 3. Jika angka i yang dibangkitkan tidak melanggar constraint untuk variabel tersebut, maka variabel k diberi angka i, kalau tidak bangkitkan angka berikutnya, dan ulangi langkah 2 di atas. 4. Jika tidak ada lagi angka yang dapat dibangkitkan (angka habis), maka persoalan cryptarithmetic dengan n variabel dan m warna tidak dapat diselesaikan. Algoritma Runut-balik untuk persoalan Cryptarithmetic Masukan: 1. Matriks ketetanggaan GRAF [1 n, 1 n] n = jumlah simpul graf GRAF[i, j] = true jika ada constraint dari simpul i ke simpul j i untuk variabel yang akan dijumlahkan, bukan sebagai hasil, dan j adalah variabel hasil penjumlahan dari i GRAF[i, j] = false jika tidak ada constraint dari simpul i ke simpul j Karena penamaan simpul adalah angka, bukan variabel, sehingga untuk setiap variabel akan diberi urutan nomor dimulai dari variabel paling kanan dari cryptarithmetic yaitu E sampai ke paling kiri yaitu Q, sebab operasi yang dilakukan adalah penjumlahan sehingga harus dimulai dari sebelah kiri, yaitu: E = 1 R = 6 T = 2 O = 7 L = 3 A = 8 P = 4 C = 9 U = 5 Q = 10 Perlu diingat : pemberian nomor untuk variabel bukanlah solusi, tetapi hanya untuk mempermudah proses iterasi 2. Angka Dinyatakan dengan integer 0, 1, 2,.., 9 Keluaran: 1. Tabel X [1...n] yang dalam hal ini, x [i] adalah angka untuk simpul i Algoritma: 1. Inisialisasi X [1...n] dengan -1 for i 1 to n do x [ i ] -1 endfor Procedure Cryptarithmetic (input S1: string, S2 : string S3 : string) Deskripsi : Program utama Masukan : tiga buah string. Keluaran : jika solusi ditemukan, solusi cryptarithmetic di cetak ke piranti keluaran Menggunakan: function generate(input i : integer, j : integer output i : integer, j : integer)/*fungsi untuk mebangkitkan solusi per kolom operasi dan mengisikannya ke manyblock, outputnya true jika solusi valid dan false jika solusi tidak valid*/ function ceklonglength(input S1:String, S2:String, S3:String)/*fungsi untuk mencari panjang string terbesar*/ procedure findfriend(input S1 : string, S2 : string, S3 : string, lengthgen : integer)/*procedure untuk mengenali karakter-karakter pada setiap kolom operasi dan menyimpannya ke charfriend*/ Deklarasi: lengths1 : integer lengths2 : integer lengths3 : integer x : integer y : integer i : integer lengthgen : integer /*mencatat panjang string terbesar untuk penentuan jumlah kolom operasi*/ typdef struct char1 : array of integer/*menyimpan nilai yang diassign ke operan pertama*/ char2 : array of integer/*menyimpan nilai yang diassign ke operan kedua*/ char3 : array of integer/*menyimpan nilai yang diassign ke hasil*/ parity : integer/*menyimpan nilai sisa*/ block typdef structmember : array of integer/*menyimpan karakter-karakter pada satu kolo*/ friend manyblock : array of struct block/*menampung solusi*/ charfriend : array of friend/*mencatat semua kolom operasi*/ 3

asignednumber : array of Boolean/*mencatat penggunaan angka 0-9*/ arraychar : array of integer/*mencatat angka yang di assign ke*/ /*setiap karakter misalnya untuk*/ /*karakter A, arraychar[65]=5*/ Algoritma: lengthgen=ceklonglength(s1, S2, S3) findfriend(s1, S2, S3, lengthgen) for i=0 to banyakkarakter arraychar[karakter yang terlibat] NULL x=0 y=0 while x < lengthgen do while (y< 10 and not stop) do if(!assignednumber[y]) result=generate(&x,&y); if result==true increased x; y 0 if(x!=0) x= cekbacktrack(manyblock[x].char1, manyblock[x].char2, manyblock[x].cha angka yang sudah di assign pada karakter yang bersesuaian di beri status false tapi tidak boleh di assign pada karakter yang sama increased y end if end if end while end while Function generate(input i : integer, j : integer output i : integer, j : integer) Deskripsi : fungsi untuk mebangkitkan solusi per kolom operasi dan mengisikannya ke manyblock, outputnya true jika solusi valid dan false jika solusi tidak valid Masukan : nomor kolom operasi(i) dan salah satu angka dari 0-9 yang akan di assign. Keluaran : Boolean true atau false Deklarasi: jj : integer temp1 : integer temp2 : integer temp3 : integer parity : integer toparity : integer Algoritma: if( kolom operasi pertama ) if(karakter pertama dan kedua sama) manyblock[i].char1 j manyblock[i].char2 j manyblock[i].char3 manyblock[i].char2; if(jika angka yang diasgn ke karakter pertama dan kedua sama) return false /*assign angka ke karakterkarakter*/ arraychar[charfriend[i].member [0] ] j arraychar[charfriend[i].member[2] ] manyblock[i].char3 /*status angka yang diassign menjadi true*/ assignednumber[j] true assignednumber[manyblock[i].ch ar3] true if(manyblock[i].char3 >9) /*karakter pertama dan kedua berbeda*/ manyblock[i].char1 j; assignednumber[j] true jj j j j+1 manyblock[i].char2 j; manyblock[i].char3 manyblock[i].char2; if(angka yang diassign ke setiap karakter ada yang sama) return false arraychar[charfriend[i].member [0]] jj arraychar[charfriend[i].membe r[0]] j arraychar[charfriend[i].member[2] ] manyblock[i].char3 assignednumber[j] true assignednumber[manyblock[i].ch ar3] true if(manyblock[i].char3 >9) /*kolom kedua dan seterusnya*/ if(karakter pertama dan kedua sama) 4

manyblock[i].char1 j; manyblock[i].char2 j; manyblock[i].char1 temp1; manyblock[i].char2 temp1; if(temp3 == NULL) toparity parity + manyblock[i].char2 manyblock[i].char3 toparity mod 10 if (assignednumber [manyblock[i].char3]) return false if(jumlah sisa + karakter pertama dan kedua tidak sama dengan angka yang diassign pada karakter ke tiga) return false manyblock[i].char3 Temp3 toparity manyblock[i]. if(jika angka yang diasgn ke karakter pertama dan kedua sama) return false if(toparity>9) /*karakter pertama dan kedua berbeda*/ temp1 arraychar[ [charfriend[i].member[0]]] temp2 arraychar[ [charfriend[i].member[1]]] temp3 arraychar[ [charfriend[i].member[2]]] parity manyblock[i-].parity if(temp1 == NULL)/*jika karakter belum diassign angka*/ manyblock[i].char1 j; if(temp21 == NULL) jj j j j+1 manyblock[i].char2 j if(temp3 == NULL) toparity parity + manyblock[i].char2 manyblock[i].char3 toparity mod 10 /*angka yang diassign ke karakter ke tiga berstatus true maka backtrack*/ if (assignednumber[manyblock[i].char3] ) return false if(jumlah sisa + karakter pertama dan kedua tidak sama dengan angka yang diassign pada karakter ke tiga)!=temp3) return false manyblock[i].char3 Temp3 toparity manyblock[i]. if (angka yang diassign ke setiap karakter ada yang sama) return false if(toparity>9) return true Procedure findfriend(input S1 : string, S2 : string, S3 : string, lengthgen : integer) Deskripsi : procedure untuk mengenali karakter-karakter pada setiap kolom operasi dan menyimpannya ke charfriend Masukan : tiga buah string dan panjang banyak kolom operasi Keluaran : charfriend 5

Deklarasi : j : integer lengths1 : integer lengths2 : integer lengths3 : integer lengths1 length of string S1-1; lengths2 length of string S2-1; lengths3 length of string S3-1; Algoritma : for i 0 to lengthgen-1 j 0 if (lengths1!= -1) S1[lengthS1] NULL j j + 1 if (lengths2!= -1) S2[lengthS2] NULL return i if(char2 == charfriend[i].member[2]) return i Pohon ruang status dinamis yang dibentuk selama pencarian runut balik j j + 1 if (lengths1!= -1) S3[lengthS3] NULL lengths1 lengths1-1 lengths2 lengths1-1 lengths3 lengths1-1 Function cekbacktrack (input char1 : character, char2 : character, char3 : character) Deskripsi : fungsi untuk melakukan bactracking ke kolom operasi sebelumnya yaitu kolom operasi yang telah menggunakan salah beberapa dari karakter input Masukan : tiga buah karakter yang berasal dari satu kolom operasi yang tidak valid Keluaran : nomor kolom operasi hasil backtracking Deklarasi : i : integer j : integer 5. Referensi 1. Rinaldi Munir, Diktat Kuliah IF2251 Strategi Algoritmik, STEI, 2006. 2. Stuart J Russell & Peter Norvig, Artificial Intelligence A Modern Approach, Prentice- Hall International, Inc, Textbook 6 for i 0 to lengthgen for j= 0 to 2 if(char1 == charfriend[i].member[0]) return i if(char2 == charfriend[i].member[1])