May 03
2008Solusi Game Logika Family Crisis
Filed Under (Java, Programming Concept) by Coni on 03-05-2008
Family Crisis adalah sebuah game logika berbasis flash yg dikeluarkan oleh plastelina. Kita disuruh untuk menyeberangkan sebuah keluarga yg terdiri dari 5 orang dengan waktu yg dibutuhkan untuk menyeberang berbeda-beda. Aturannya adalah:
-
Waktunya malam.
-
Hanya ada satu lampu.
-
Maksimal 2 orang yg dapat menyeberang pada satu waktu dan harus membawa lampu.
-
Setiap orang menyeberang dengan waktu 1, 3, 6, 8, dan 12 detik.
-
Satu pasang penyeberang bergerak dengan waktu orang yg paling lama.
-
Lampu hanya cukup untuk 30 detik menyeberang.
Apakah anda sudah pernah memainkannya dan berhasil? Jika ya maka anda termasuk orang yg sangat cerdas. Saya sudah mencoba bertahun-tahun secara manual tetapi tidak bisa. Karena saya menyadari bahwa insting saya amat sedikit dan masih bodoh maka saya mulai mencari solusinya dengan membuat program dengan algoritma backtracking. Hasilnya lumayan. Ada 8 solusi yg didapat.
Mari kita telusuri masalahnya. Ketika mau menyeberang pertama kali, ada 5 orang yg belum menyeberang dan dibutuhkan 2 orang untuk menyeberang. Berarti ada kombinasi pasangan sejumlah 5 kombinasi 2 yg berarti 10 pasangan (Jadi ingat kalkulus yg dapet C). Setelah salah satu pasangan menyeberang, maka ada 2 kombinasi orang yg akan kembali membawa lampu. Setelah satu orang kembali, maka ada 4 orang yg belum menyeberang. Berarti ada kombinasi orang yg mau menyeberang sejumlah 4 kombinasi 2 (6 kombinasi pasangan). Teruskan sendiri iterasinya sampai semuanya telah menyeberang.
Ayo sekarang kita modelkan kelasnya. Saya hanya memakai 3 kelas. Kelas pertama yg bertujuan mencari solusi, kelas kedua yg merupakan pemodelan dari orang, dan kelas ketiga yg memodelkan pasangan penyeberang. Saya menggunakan bahasa Java untuk implementasinya. Jika ingin menggunakan kode programnya untuk kepentingan mengajar, harap jangan hapus komentar author saya. Lumayan membuat nama saya sedikit terkenal.
Output dari program saya adalah:
<= 1+2| 1 =>| <= 1+3| 1 =>| <= 4+5| 2 =>| <= 1+2| 29
<= 1+2| 1 =>| <= 1+3| 2 =>| <= 4+5| 1 =>| <= 1+2| 29
<= 1+2| 1 =>| <= 4+5| 2 =>| <= 1+2| 1 =>| <= 1+3| 29
<= 1+2| 1 =>| <= 4+5| 2 =>| <= 1+3| 1 =>| <= 1+2| 29
<= 1+2| 2 =>| <= 4+5| 1 =>| <= 1+2| 1 =>| <= 1+3| 29
<= 1+2| 2 =>| <= 4+5| 1 =>| <= 1+3| 1 =>| <= 1+2| 29
<= 1+3| 1 =>| <= 1+2| 1 =>| <= 4+5| 2 =>| <= 1+2| 29
<= 1+3| 1 =>| <= 1+2| 2 =>| <= 4+5| 1 =>| <= 1+2| 29
Angka 1,2,3,4,5,6 adalah menandakan orang keberapa dan terakhir waktu yg dibutuhkan. Dimulai dari orang ke-1 yg membutuhkan waktu 1 detik.














