• Tidak ada hasil yang ditemukan

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR

BOGOR

2011

15 Gambar 37 Grafik perbandingan waktu eksekusi

dan ukuran slither link.

KESIMPULAN DAN SARAN

Kesimpulan

Tujuan utama dari penelitian ini adalah membuat model penyelesaian slither link dengan menggunakan paradigma answer set programming, paradigma ini akan menyelesaikan slither link seperti cara berpikir manusia dengan mengkodekan program ke dalam bahasa logika, berbeda dengan paradigma procedural programming dimana programmer menuliskan urutan instruksi untuk dikerjakan oleh komputer berupa operasi yang akan dilakukan dan nilai yang akan disimpan dalam variabel.

Paradigma answer set programming yang diaplikasikan pada masalah slither link terbukti efisien dan efektif dalam rata-rata waktu eksekusi dibandingkan menggunakan procedural programming dan dalam hal kualitas kode program yang dihasilkan meskipun procedural programming mendukung penggunaan fungsi tetapi karena ukuran kode program yang besar akan sulit ketika dilakukan pengembangan atau perubahan sistem. Model penyelesaian slither link telah sukses diaplikasikan ke bentuk web based sehingga berbentuk game interactive dengan menggunakan antar muka sehingga pengguna bisa memainkan slither link dan meminta penyelesaiannya.

Saran

Penelitian selanjutnya diharapkan bisa menerapkan answer set programming untuk membangkitkan soal slither link yang dijamin sulit, karena saat ini pembangkitnya menggunakan procedural programming yang tidak dijamin sulit solusinya. Memperbaiki kinerja dari penyelesaian slither link yang menggunakan procedural programming dengan menggunakan teknik lain.

DAFTAR PUSTAKA

Cormen TH, Leiserson CE, Rivest RL, Stein C. 2001. Introduction to Algorithm. England : McGraw-Hill.

Conceptis Puzzle. 1997. Slither link Technique.

[terhubung berkala].

http://www.conceptispuzzles.com/index.as px?uri=puzzle/slitherlink/techniques [12 januari 2011].

Eiter T, Gottlob G. 1993. Complexity Results for Disjunctive Logic Programming and Application to Nonmonotonic Logics. Technical University of Vienna. http://www.kr.tuwien.ac.at/staff/eiter/et-archive/ilps93.ps.gz .

Garey MR, Johnson DS. 1979. Computers and Intractability : a guide to the theory of NP-Completeness. United States of America : Bell Telephone Laboratories.

Gelfond M, Lifschitz V. 1991. Classsical Negation in Logic Programs and Disjunctive Databases. University of Texas.

http://citeseerx.ist.psu.edu/viewdoc/downl oad?doi=10.1.1.49.9332&rep=rep1&type= pdf .

Leone N et al. 2006. The DLV System for Knowledge Representation and Reasoning. ACM Trans. Comput. Log.

Lifschitz V. 2008. What is Answer Set Programming. Department of Computer Sciences – University of Texas at Austin. http://userweb.cs.utexas.edu/users/vl/paper s/wiasp.pdf

Tucker AB, Noonan R. 2002. Programming Languanges : Principles and Paradigms. England : McGraw-Hill.

Wan J. 2009. Logical Slither link. Computer Science and Mathematics – School of

Computer Science.

http://intranet.cs.man.ac.uk/Intranet_subw eb/library/3yrep/2009/7035254.pdf . Yato T, Seta T. 2003. Complexity and

Completeness of Finding Solution and its Application to Puzzles. Department of Computer Science – The Unversity of Tokyo. http://www-imai.is.s.u-tokyo.ac.jp/~yato/data2/SIGAL87-2.pdf .

16

LAMPIRAN

17 Lampiran 1 Program DLV, modul pembangkitan.

1 arc(X,Y,1,0,0,0) v arc(X,Y,0,1,0,0) v arc(X,Y,0,0,1,0) v arc(X,Y,0,0,0,1) :- C(X,Y,1).

2 arc(X,Y,1,1,0,0) v arc(X,Y,0,1,1,0) v arc(X,Y,0,0,1,1) v arc(X,Y,1,0,0,1) v arc(X,Y,1,0,1,0) v arc(X,Y,0,1,0,1) :- C(X,Y,2).

3 arc(X,Y,1,1,1,0) v arc(X,Y,0,1,1,1) v arc(X,Y,1,0,1,1) v arc(X,Y,1,1,0,1) :- C(X,Y,3).

4 arc(X,Y,0,0,0,0) :- C(X,Y,0).

5 arc(X,Y,1,0,0,0) v arc(X,Y,0,1,0,0) v arc(X,Y,0,0,1,0) v arc(X,Y,0,0,0,1) v arc(X,Y,1,1,0,0) v arc(X,Y,0,1,1,0) v arc(X,Y,0,0,1,1) v arc(X,Y,1,0,0,1) v arc(X,Y,1,0,1,0) v arc(X,Y,0,1,0,1) v arc(X,Y,1,1,1,0) v arc(X,Y,0,1,1,1) v arc(X,Y,1,0,1,1) v arc(X,Y,1,1,0,1) v arc(X,Y,0,0,0,0) :- C(X,Y,null).

Modul ini akan membangkitkan kemungkinan solusi dengan melihat angka di dalam cell slither link, baris pertama akan membangkitkan kandidat solusi untuk cell yang memiliki nilai 1 ditunjukkan oleh predikat C(X,Y,1), baris kedua akan membangkitkan kandidat solusi untuk cell dengan nilai 2, baris ketiga untuk cell dengan nilai 3, baris keempat untuk cell dengan nilai 0, dan baris kelima untuk cell dengan nilai null.

18 Lampiran 2 Program DLV, constraint cell dengan nilai 0, 1, 2, dan 3.

1 :- arc(X,Y,1,0,0,0), arc(A,Y,_,_,0,_), X=A+1. 2 :- arc(X,Y,0,1,0,0), arc(X,B,_,_,_,0), B=Y+1. 3 :- arc(X,Y,0,0,1,0), arc(A,Y,0,_,_,_), A=X+1. 4 :- arc(X,Y,0,0,0,1), arc(X,B,_,0,_,_), Y=B+1. 5 :- arc(X,Y,1,1,0,0), arc(X,B,_,_,_,0), B=Y+1. 6 :- arc(X,Y,1,1,0,0), arc(A,Y,_,_,0,_), X=A+1. 7 :- arc(X,Y,0,1,1,0), arc(X,B,_,_,_,0), B=Y+1. 8 :- arc(X,Y,0,1,1,0), arc(A,Y,0,_,_,_), A=X+1. 9 :- arc(X,Y,0,0,1,1), arc(X,B,_,0,_,_), Y=B+1. 10 :- arc(X,Y,0,0,1,1), arc(A,Y,0,_,_,_), A=X+1. 11 :- arc(X,Y,1,0,0,1), arc(X,B,_,0,_,_), Y=B+1. 12 :- arc(X,Y,1,0,0,1), arc(A,Y,_,_,0,_), X=A+1. 13 :- arc(X,Y,1,0,1,0), arc(A,Y,_,_,0,_), X=A+1. 14 :- arc(X,Y,1,0,1,0), arc(A,Y,0,_,_,_), A=X+1. 15 :- arc(X,Y,0,1,0,1), arc(X,B,_,0,_,_), Y=B+1. 16 :- arc(X,Y,0,1,0,1), arc(X,B,_,_,_,0), B=Y+1. 17 :- arc(X,Y,1,1,1,0), arc(X,B,_,_,_,0), B=Y+1. 18 :- arc(X,Y,1,1,1,0), arc(A,Y,_,_,0,_), X=A+1. 19 :- arc(X,Y,1,1,1,0), arc(A,Y,0,_,_,_), A=X+1. 20 :- arc(X,Y,0,1,1,1), arc(X,B,_,_,_,0), B=Y+1. 21 :- arc(X,Y,0,1,1,1), arc(X,B,_,0,_,_), Y=B+1. 22 :- arc(X,Y,0,1,1,1), arc(A,Y,0,_,_,_), A=X+1. 23 :- arc(X,Y,1,0,1,1), arc(A,Y,_,_,0,_), X=A+1. 24 :- arc(X,Y,1,0,1,1), arc(A,Y,0,_,_,_), A=X+1. 25 :- arc(X,Y,1,0,1,1), arc(X,B,_,0,_,_), Y=B+1. 26 :- arc(X,Y,1,1,0,1), arc(X,B,_,0,_,_), Y=B+1. 27 :- arc(X,Y,1,1,0,1), arc(X,B,_,_,_,0), B=Y+1. 28 :- arc(X,Y,1,1,0,1), arc(A,Y,_,_,0,_), X=A+1. 29 :- arc(X,Y,0,0,0,0), arc(X,B,_,_,_,1), B=Y+1. 30 :- arc(X,Y,0,0,0,0), arc(X,B,_,1,_,_), Y=B+1. 31 :- arc(X,Y,0,0,0,0), arc(A,Y,_,_,1,_), X=A+1. 32 :- arc(X,Y,0,0,0,0), arc(A,Y,1,_,_,_), A=X+1.

Bagian B=Y+1 menandakan bahwa posisi B ada di bawah Y, dan bagian X=A+1 menandakan bahwa posisi X ada di sebelah kanan A .Baris 1 sampai baris 4 pada lampiran ini menunjukkan constraint untuk cell bernilai 1, baris 5 sampai baris 16 menunjukkan constraint untuk cell bernilai 2, dan pada baris 17 sampai baris 28 constraint untuk cell bernilai 3. Baris 29 sampai baris 32 menunjukkan constraint untuk cell bernilai 0.

19 Lampiran 3 Program DLV, constraint mencegah local loop.

1 :- arc(X,Y,1,1,0,1), arc(A,Y,0,1,1,1), A=X+1. 2 :- arc(X,Y,0,1,1,1), arc(A,Y,1,0,1,1), X=A+1. 3 :- arc(X,Y,1,1,1,0), arc(X,B,1,0,1,1), Y=B+1. 4 :- arc(X,Y,1,0,1,1), arc(X,A,1,1,1,0), A=Y+1. 5 :- arc(X,Y,1,1,1,0), arc(X,B,_,1,_,_), Y = B+1. 6 :- arc(X,Y,0,1,1,1), arc(A,Y,_,_,1,_), X = A+1. 7 :- arc(X,Y,1,0,1,1), arc(X,B,_,_,_,1), B = Y+1. 8 :- arc(X,Y,1,1,0,1), arc(A,Y,1,_,_,_), A = X+1.

Baris 1 sampai baris 4 menunjukkan constraint untuk mencegah sebuah cell memiliki nilai 4 atau cell tersebut memilik 4 buah garis yang mengelilinginya, dan baris 5 sampai baris 8 menunjukkan constraint untuk mencegah dua buah cell bernilai 3 yang bertetangga dan keduanya membentuk loop.

20 Lampiran 4 Program DLV, constraint pada cell dengan posisi di pojok grid.

1 :- arc(1,1,1,0,0,0). 2 :- arc(1,1,0,0,0,1). 3 :- arc(1,1,0,0,1,1). 4 :- arc(1,1,1,1,0,0). 5 :- arc(1,1,1,1,1,0). 6 :- arc(1,1,0,1,1,1). 7 :- arc(1,1,0,1,0,1). 8 :- arc(1,1,1,0,1,0). 9 :- arc(1,#maxint,1,0,0,0). 10 :- arc(1,#maxint,0,1,0,0). 11 :- arc(1,#maxint,1,0,0,1). 12 :- arc(1,#maxint,1,0,1,1). 13 :- arc(1,#maxint,0,1,1,1). 14 :- arc(1,#maxint,0,1,0,1). 15 :- arc(1,#maxint,1,0,1,0). 16 :- arc(1,#maxint,0,1,1,0). 17 :- arc(#maxint,1,0,0,0,1). 18 :- arc(#maxint,1,0,0,1,0). 19 :- arc(#maxint,1,0,1,1,0). 20 :- arc(#maxint,1,1,0,0,1). 21 :- arc(#maxint,1,1,1,1,0). 22 :- arc(#maxint,1,1,1,0,1). 23 :- arc(#maxint,1,0,1,0,1). 24 :- arc(#maxint,1,1,0,1,0). 25 :- arc(#maxint,#maxint,0,1,0,0). 26 :- arc(#maxint,#maxint,0,0,1,0). 27 :- arc(#maxint,#maxint,0,0,1,1). 28 :- arc(#maxint,#maxint,1,1,0,0). 29 :- arc(#maxint,#maxint,1,0,1,1). 30 :- arc(#maxint,#maxint,1,1,0,1). 31 :- arc(#maxint,#maxint,0,1,0,1). 32 :- arc(#maxint,#maxint,1,0,1,0).

Pada baris 1 sampai baris 8 menunjukkan constraint untuk cell dengan posisi di pojok kiri atas grid (1,1), kemudian baris 9 sampai baris 16 adalah constraint untuk cell dengan posisi di pojok kanan atas grid dimana #maxint adalah ukuran dari slither link, baris selanjutnya yaitu baris 17 sampai baris 24 adalah constraint untuk cell dengan posisi di pojok kiri bawah grid, dan baris 25 sampai baris 32 pada lampiran menunjukkan constraint untuk cell dengan posisi di pojok kanan bawah grid.

21 Lampiran 5 Program DLV, constraint untuk mengantisipasi cabang dan ketersambungan garis.

1 :- arc(X,Y,1,1,_,_), arc(A,B,_,_,1,_), X=A+1, B=Y+1. 2 :- arc(X,Y,1,1,_,_), arc(A,B,_,_,_,1), X=A+1, B=Y+1. 3 :- arc(X,Y,1,1,_,_), arc(X,B,1,_,_,_), B=Y+1.

4 :- arc(X,#maxint,1,1,_,_), arc(A,#maxint,_,1,_,_), X=A+1. 5 :- arc(X,Y,_,1,1,_), arc(A,B,1,_,_,_), A=X+1, B=Y+1. 6 :- arc(X,Y,_,1,1,_), arc(A,B,_,_,_,1), A=X+1, B=Y+1. 7 :- arc(X,Y,_,1,1,_), arc(X,B,_,_,1,_), B=Y+1.

8 :- arc(X,#maxint,_,1,1,_), arc(A,#maxint,_,1,_,_), A=X+1. 9 :- arc(X,Y,_,_,1,1), arc(A,B,1,_,_,_), A=X+1, Y=B+1. 10 :- arc(X,1,_,_,1,1), arc(A,1,_,_,_,1), A=X+1.

11 :- arc(X,Y,_,_,1,1), arc(A,B,_,1,_,_), A=X+1, Y=B+1. 12 :- arc(X,Y,_,_,1,1), arc(X,B,_,_,1,_), Y=B+1.

13 :- arc(X,Y,1,_,_,1), arc(A,B,_,1,_,_), X=A+1, Y=B+1. 14 :- arc(X,Y,1,_,_,1), arc(A,B,_,_,1,_), X=A+1, Y=B+1. 15 :- arc(X,Y,1,_,_,1), arc(X,B,1,_,_,_), Y=B+1.

16 :- arc(X,1,1,_,_,1), arc(A,1,_,_,_,1), X=A+1.

17 :- arc(X,Y,1,_,_,0), arc(A,B,_,M,N,_), M=N, X=A+1, Y=B+1. %kiri atas 18 :- arc(X,Y,1,0,_,_), arc(A,B,_,_,M,N), M=N, X=A+1, B=Y+1. %kanan atas 19 :- arc(1,Y,1,0,_,_), arc(1,B,0,_,_,_), B=Y+1. %atas -- kanan

20 :- arc(1,Y,1,_,_,0), arc(1,B,0,_,_,_), Y=B+1. %atas -- kiri

21 :- arc(X,#maxint,1,0,_,_), arc(A,#maxint,_,0,_,_), X=A+1. %bagian kanan -- atas 22 :- arc(X,Y,0,1,_,_), arc(A,B,_,_,M,N), M=N, X=A+1, B=Y+1. %kanan atas

23 :- arc(X,#maxint,_,1,0,_), arc(A,#maxint,_,0,_,_), A=X+1. %bagian kanan -- bawah 24 :- arc(#maxint,Y,_,1,0,_), arc(#maxint,B,_,_,0,_), B=Y+1. %bagian bawah -- kanan 25 :- arc(X,#maxint,0,1,_,_), arc(A,#maxint,_,0,_,_), X=A+1. %bagian kanan -- atas 26 :- arc(1,Y,0,1,_,_), arc(1,B,0,_,_,_), B=Y+1. %bagian atas -- kiri

27 :- arc(X,Y,_,_,1,0), arc(A,B,M,N,_,_), M=N, A=X+1, Y=B+1. %kiri bawah 28 :- arc(X,Y,_,0,1,_), arc(A,B,M,_,_,N), M=N, A=X+1, B=Y+1. %kanan bawah 29 :- arc(#maxint,Y,_,0,1,_), arc(#maxint,B,_,_,0,_), B=Y+1. %bawah -- kanan 30 :- arc(#maxint,Y,_,_,1,0), arc(#maxint,B,_,_,0,_), Y=B+1. %bawah -- kiri 31 :- arc(X,Y,0,_,_,1), arc(A,B,_,M,N,_), M=N, X=A+1, Y=B+1. %atas -- kiri 32 :- arc(X,Y,_,_,0,1), arc(A,B,M,N,_,_), M=N, A=X+1, Y=B+1. %bawah -- kiri 33 :- arc(X,1,_,_,0,1), arc(A,1,_,_,_,0), A=X+1. %samping kiri -- bawah 34 :- arc(X,1,0,_,_,1), arc(A,1,_,_,_,0), X=A+1. %samping kiri - atas 35 :- arc(X,1,1,_,_,0), arc(A,1,_,_,_,0), X=A+1. %samping kiri -- atas 36 :- arc(X,1,_,_,1,0), arc(A,1,_,_,_,0), A=X+1. %samping kiri -- bawah

37 :- arc(X,#maxint,1,0,1,0), arc(A,#maxint,_,0,_,_), arc(C,#maxint,_,0,_,_), A=X+1, X=C+1. %samping kanan -- bawah -- atas

38 :- arc(X,1,1,0,1,0), arc(A,1,_,_,_,0), arc(C,1,_,_,_,0), A=X+1, X=C+1. %samping kiri -- bawah -- atas

39 :- arc(#maxint,Y,0,1,0,1), arc(#maxint,B,_,_,0,_), B=Y+1. %bagian bawah -- kanan 40 :- arc(#maxint,Y,0,1,0,1), arc(#maxint,B,_,_,0,_), Y=B+1. %bagian bawah -- kiri 41 :- arc(1,Y,0,1,0,1), arc(1,B,0,_,_,_), B=Y+1. %bagian atas -- kanan

42 :- arc(1,Y,0,1,0,1), arc(1,B,0,_,_,_), Y=B+1. %bagian atas – kiri

Pada baris 1 sampai baris 16 menunjukkan constraint untuk mencegah terjadinya cabang pada solusi slither link, dan pada baris 17 sampai baris 42 menunjukkan constraint untuk tetap menjaga agar solusi slither link merupakan sebuah garis yang kontinyu (tidak terputus).

22 Lampiran 6 Program DLV, constraint dari cell bernilai 2 yang bersebelahan dengan cell bernilai 0.

1 :- arc(#maxint,Y,1,0,1,0), arc(#maxint,B,0,0,0,0), Y=B+1. %bagian bawah -- kiri 2 :- arc(#maxint,Y,1,0,1,0), arc(#maxint,B,0,0,0,0), B=Y+1. %bagian bawah -- kanan 3 :- arc(#maxint,Y,0,1,0,1), arc(#maxint,B,0,0,0,0), Y=B+1. %bagian bawah -- kiri 4 :- arc(#maxint,Y,0,1,0,1), arc(#maxint,B,0,0,0,0), B=Y+1. %bagian bawah -- kanan 5 :- arc(1,Y,1,0,1,0), arc(1,B,0,0,0,0), Y=B+1. %bagian atas -- kiri

6 :- arc(1,Y,1,0,1,0), arc(1,B,0,0,0,0), B=Y+1. %bagian atas -- kanan 7 :- arc(1,Y,0,1,0,1), arc(1,B,0,0,0,0), Y=B+1. %bagian atas -- kiri 8 :- arc(1,Y,0,1,0,1), arc(1,B,0,0,0,0), B=Y+1. %bagian atas – kanan

Baris 1 sampai baris 4 pada lampiran ini ditujukan untuk cell dengan posisi di bagian bawah slither link, dan baris 5 sampai baris 8 adalah constraint untuk cell dengan posisi di bagian atas slither link.

23 Lampiran 7 Pseudo code program C++ untuk membaca fakta slither link.

1 Set count to 1

2 FOR each string on data.dat 3 Set titik[count] to string 4 Increment count

5 END FOR 6 Set k to 1

7 FOR each side on slither_link 8 Set line_value[k] to 3 9 END FOR

Baris 1 sampai baris 5 pada lampiran ini digunakan untuk membaca fakta yang telah disimpan dalam file data.dat, dan pada bairs 6 sampai baris 9 digunakan untuk memberikan nilai default yaitu 3 pada setiap sisi pada cell.

24 Lampiran 8 Pseudo code program C++, modul basic_rule .

1 //basic rule

2 FOR each cell in slither_link 3 IF cell_value is 0 THEN

4 Set no_line on cell is TRUE 5 ELSE IF cell_value is 1 THEN 6 IF cell_position is 1 7 Set line_value on up to 0 8 Set line_value on left to 0

9 END IF

10 ...

11 ELSE IF cell_value is 2 THEN 12 IF cell_position is 1 THEN 13 IF line_value on up is 0

14 AND line_value on left is 0 THEN 15 Set line_value on right to 1 16 Set line_value on bottom to 1

17 END IF

18 END IF

19 ...

20 ELSE IF cell_value is 3 THEN 21 IF cell_position is 1 22 Set line_value on up to 1 23 Set line_value on left to 1

24 END IF

25 ...

26 END IF 27 END FOR

25 Lampiran 9 Pseudo code program C++, modul advance_rule .

1 //advance_rule

2 FOR each cell in slither_link 3 IF cell_value is 1 THEN 4 IF cell_position on up THEN

5 IF line_value on up_left is 0 THEN 6 Set line_value on up to 0

7 Set line_value on left to 0

8 END IF

9 END IF

10 ....

11 ELSE IF cell_value is 2 THEN

12 IF line_value on up is 1 AND line_value on bottom is 0 THEN 13 IF line_value on right is 0 THEN

14 Set line_value on left to 1 15 ELSE IF line_value on left is 0 THEN 16 Set line_value on right to 1

17 END IF

18 END IF

19 ...

20 ELSE IF cell_value is 3 THEN 21 IF cell_position on up THEN 22 IF line_value on up_left is 0 23 Set line_value on up to 1 24 Set line_value on left to 1 25 ELSE IF line_value on up_right is 0 26 Set line_value on up to 1

27 Set line_value on right to 1

28 END IF

29 END IF

30 ...

31 END IF 32 END FOR

26 Lampiran 10 Pseudo code program C++, modul cek_garis_cell .

1 //cek_garis_cell

2 FOR each cell in slither_link 3 IF cell_value is 1 THEN 4 IF line_value on up is 1

5 Set line_value on right, bottom, left to 0

6 END IF

7 ELSE IF cell_value is 2 THEN

8 IF line_value on up is 1 AND line_value on right is 1 THEN 9 Set line_value on bottom, left to 0

10 END IF

11 ELSE IF cell_value is 3 THEN 12 IF line_value on up is 0 THEN

13 Set line_value on right, bottom, left to 1

14 END IF

15 END IF 16 END FOR

27 Lampiran 11 Pseudo code program C++, modul sambung_garis dan modul cek_cabang.

1 //sambung_garis 2 Set k to 1

3 Set n to puzzle_size

4 FOR each side on slither_link 5 IF line_value is 1

6 IF line[k] is horizontal THEN

7 IF line_value[k-n] is 0 AND line_value[k+1] is 0 THEN set line_value[k+n+1] to 1

8 ELSE IF line_value[k+n+1] is 0 AND line_value[k+1] is 0 THEN set line_value[k-n] to 1 9 END IF 10 END IF 11 ... 12 END IF 13 END FOR 14 //cek_cabang

15 FOR each cell in slither_link

16 IF line_value[up] is 1 AND line_value[up_right] is 1 THEN 17 Set line_value that branch to 0

18 ELSE IF line_value[up] is 1 AND line_value[up_left] is 1 THEN 19 Set line_value that branch to 0

20 .... 21 END IF 22 END FOR

28 Lampiran 12 Pseudo code program C++, modul cek_logic dan fungsi sambung.

1 //cek_logic

2 FOR each cell in slither_link 3 IF cell_position is 1

4 IF line_value[up_right] is 1 AND Line_value[left_bottom] is 1 THEN 5 IF line_value[up] is 0 OR Line_value[left] is 0

6 Set line_value[bottom] to 1

7 Set line_value[right] to 1

8 ElSE IF line_value[right] is 0 OR Line_value[bottom] is 0

9 Set line_value[up] to 1

10 Set line_value[left] to 1

11 END IF

12 END IF

13 ELSE IF cell_position is puzzle_size

14 IF line_value[up_left] is 1 AND Line_value[right_bottom] is 1 THEN 15 IF line_value[up] is 0 OR line_value[right] is 0 THEN

16 Set line_value[bottom] to 1 17 Set line_value[left] to 1

18 ELSE IF line_value[left] is 0 OR line_value[bottom] is 0 THEN 19 Set line_value[up] to 1 20 Set line_value[right] to 1 21 END IF 22 END IF 23 ... 24 END IF 25 END FOR 26 //fungsi sambung 27 Function sambung(puzzle_data) 28 { 29 Set status to 0 30 While status is 0

31 Do traversal until find a loop

32 IF a loop satisfy the puzzle rule THEN

33 Set status to 1

34 END IF

35 END DO

36 END WHILE 37 }

Dokumen terkait