Kamis, 18 Februari 2010

Pemecahan Jaw Break

Jawbreaker: Menghitung Skor

Anda mungkin pernah melihat permainan komputer berikut ini, bahkan mungkin pernah memainkannya. Di depan anda terdapat sejumlah bola dari berbagai warna (jumlah kemungkinan warna tertentu). Bola-bola tersebut tersusun dalam bentuk matriks mxn dan masing-masing ditempatkan secara acak dalam matriks. Pemain dapat “mengambil” sejumlah bola berwarna sama sekaligus (minimal dua bola) asalkan bola-bola tersebut tersebut dalam satu rangkaian. Bola-bola dalam satu rangkaian didefinisikan sbb.

Jika ‘*’ adalah bola yang akan dipilih (atau ikut terpilih) dan ‘+’ adalah bola yang berwarna sama dengan ‘*’ berada di bawah atau di samping kiri atau di samping kanan atau di atasnya, maka ‘+’ ikut terpilih (bertanda ‘*’ juga). Jika anda memperoleh t bola dalam satu pengambilan maka anda mendapat nilai t(t-1). Karena paling sedikit ada dua bola yang anda ambil sekaligus maka tentu nilai minimal adalah 2.

Berikut ini contoh-contohnya:

Contoh dengan hanya dua warna bola

Jika dipilih ‘*’

Semua yang ikut terpilih bertanda ‘*’ dan ‘+’ tidak

Nilai

-------

-+++---

-+-++--

-----+-

-------

-*++---

-+-++--

-----+-

-------

-***---

-*-**--

-----+-

30

----++-

-+++---

--++---

---+++-

----++-

-+++---

--++---

---*++-

----++-

-***---

--**---

---***-

56

-+-----

-+++---

-++-++-

--++-+-

-+-----

-+++---

-++-+*-

--++-+-

-+-----

-+++---

-++-**-

--++-*-

6

Dalam permainan komputer yang sebenarnya tentu ada cerita selanjutnya, yaitu bahwa anda harus memilih yang mana dari semua bola tersebut sehingga anda bisa memdapatkan total nilai sebesar-besarnya, kemudian dari hasil pengambilan menyebabkan perubahan struktur matriks, lalu anda melakukan pengambilan berikutnya, dan seterusnya hingga habis atau tidak ada lagi yang dapat dipilih.

Kali ini anda hanya diminta untuk membuat program yang melakukan penghitungan nilai yang akan anda peroleh berdasarkan data susunan matriks bola dan bola yang dipilih.

Masukan

Program anda membaca masukan dari standard input sbb.

- Baris pertama berisi dua bilangan m dan n yang dipisahkan spasi yang menyatakan jumlah baris dan jumlah kolom, dengan masing-masing dapat berharga dari 4 sampai 25.

- Kemudian susunan bola dinyatakan dalam m baris berikutnya, dan pada setiap baris terdapat n bilangan, bilangan dengan bilangan berikutnya terpisahkan satu spasi. Harga bilangan tersebut menyatakan warna bola yang dapat berharga 1 sampai denga 5.

- Pada baris terakhir terdapat 2 bilangan b dan k yang menyatakan nomor baris dan nomor kolom dari bola yang akan dipilih dan dituliskan terpisahkan satu spasi. Penomoran dimulai dari 0, 1, ..dst, sehingga bola di pojok kiri atas bernomor (0, 0) dan di pojok kanan bawah bernomor (m-1, n-1).

Keluaran

Program anda hanya mengoutputkan satu angka yaitu skor sebagai hasil pemilihan bola pada data masukan tersebut. Jika bola yang dipilih tidak memiliki rentetan karena tidak ada bola yang sama di sebelah atas, bawah, kiri atau kanannya maka anda mengoutputkan bilangan 0.

Contoh

(Semua contoh berikut sesuai contoh di atas)

Testcase 1:

Masukan

4 7
3 3 4 2 4 3 5
2 1 1 1 3 5 5
3 1 4 1 1 4 5
3 3 4 3 3 1 5
1 1
 

Keluaran

30
 

Testcase 2:

Masukan

4 7
1 1 1 1 2 2 1
1 2 2 2 1 1 1
3 3 2 2 4 4 4
3 3 3 2 2 2 4
3 3
 

Keluaran

56
 

Testcase 3:

Masukan

4 7
1 1 1 1 1 1 1
2 5 5 5 2 2 2
3 5 5 1 5 5 1
3 3 5 5 1 5 1
2 5
 

Keluaran

6


Untuk jawaban source code TPW 1.5 klik di sini. Untuk TP 7 dan free pascal tinggal hapus "uses wincrt;"

2 komentar:

Gusti Ahta Virgo mengatakan...

kan di jawabannya menggunakan assign,yaitu membaca sebuah file lain...
apoakah g ada cara lain tanpa menggunakan assign?

rico_rexx mengatakan...

assignnya di apus juga gak papa kok..

Emoticons


:)) :)] ;)) ;;) :D ;) :p :(( :) :( :X =(( :-o :-/ :-* :| 8-} ~x( :-t b-( :-L x( =))

Posting Komentar

 

Great Morning ©  Copyright by Klik Terus | Internet | by NOZZE(†) & REXX | Template by Blogger Templates | Blog Trick at Blog-HowToTricks