Anda di halaman 1dari 6

Test RS Pondok Indah

Nama: Agus Anggarwanto

Summary
1a. 6 lampu tidak terhubung sakelar
1b. 13 lampu menyala bersamaan

2. ada 21 cara Pak Sugeng membagikan permen kepada cucu-cucunya

3a. Kartu teratas adalah kartu 24


3b. Kartu teratas adalah kartu 23
3c. Langkah yang dibutuhkan adalah 26 langkah

Lampu Pak Sugeng


Untuk mengetahui berapa banyak lampu Pak Sugeng yang tak terhubung sakelar dan berapa banyak
lampu yang dapat dinyalakan secara bersamaan, di sini saya membuat program menggunakan
Golang dengan pseudocode sebagai berikut:
```
FUNCTION LampuPakSugeng() RETURNS (lampuTakTerhubungSakelar, lampuNyalaBersamaan)

INITIALIZE lampuNyala AS empty map of integer to boolean

INITIALIZE sakelar AS list of integers [2, 3, 5, 7, 11]

FOR i FROM 1 TO 30

FOR EACH s IN sakelar

IF i MOD s EQUALS 0 THEN

TOGGLE lampuNyala[i]

END IF

END FOR

END FOR

lampuNyalaBersamaan = 0

FOR EACH nyala IN lampuNyala


IF nyala IS true THEN

INCREMENT lampuNyalaBersamaan

END IF

END FOR

lampuTakTerhubungSakelar = 30 - LENGTH OF lampuNyala

RETURN lampuTakTerhubungSakelar, lampuNyalaBersamaan

END FUNCTION
```

Jika dijalankan pada function main() sebagai berikut:


```
func main() {

lampuTakTerhubungSakelar, lampuNyalaBersamaan := LampuPakSugeng()

fmt.Println("Lampu Pak Sugeng tak terhubung sakelar :", lampuTakTerhubungSakelar)

fmt.Println("Lampu Pak Sugeng yang menyala bersamaan :", lampuNyalaBersamaan)

```

Maka bisa diketahui bahwa lampu Pak Sugeng yang tak terhubung sakelar ada 6 lampu, sedangkan
lampu yang dapat dinyalakan secara bersamaan ada 13 lampu.

Jumlah Cara Pak Zaki Membagi Permen Kepada Cucunya


Untuk mengetahui berapa cara Pak Zaki membagikan permen kepada ketiga cucunya dengan syarat
Cibi mendapatkan permen lebih dari 6 permen, sedangkan Abi dan Bibi bisa saja mendapat 0
permen.
Maka saya membuat pseudocode dari problem di atas sebagai berikut:
```

FUNCTION CaraPakZakiMembagikanPermen() RETURNS jumlahCara

INITIALIZE JUMLAH_PERMEN AS 12

FOR permenCibi FROM 7 TO JUMLAH_PERMEN

INITIALIZE sisaPermenSetelahCibi AS JUMLAH_PERMEN - permenCibi

FOR permenAbi FROM 0 TO sisaPermenSetelahCibi

INITIALIZE sisaPermenSetelahAbi AS sisaPermenSetelahCibi - permenAbi

FOR permenBibi FROM 0 TO sisaPermenAbi

IF permenAbi + permenBibi EQUALS sisaPermenSetelahChibi THEN

INCREAMENT jumlahCara

END IF

END FOR

END FOR

END FOR

RETURN jumlahCara

END FUNCTION

```
Jika program di atas dijalankan pada function main() sebagai berikut:
```
func main() {

fmt.Println("Jumlah cara Pak Zaki membagikan permen:", CaraPakZakiMembagikanPermen())

}
```

Maka dapat diketahui bahwa jumlah cara Pak Zaki membagikan permen ada 21 cara.

Mengocok Kartu
Di sini ada 2 problem:
1. Mencari kartu teratas jika cara pengocokan kartu adalah mengambil N kartu dari bawah lalu
ditumpukan ke atas sebanyak M langkah.

2. Mencari berapa langkah yang dibutuhkan dengan N kartu dengan cara pengocokan seperti di
atas, dan target kartu teratas M

Untuk problem pertama, pseudocode-nya seperti ini:


```
FUNCTION MencariKartuTeratas(n, langkah) RETURNS kartuTeratas

INITIALIZE deck AS list OF INTEGERS [1,2,3,...,31]

INITIALIZE jumlahKartu AS LENGTH OF deck

FOR i FROM 0 TO langkah-1

INITIALIZE tumpukanTerbawah AS LAST n ELEMENTS FROM deck

REMOVE LAST n ELEMENTS FROM deck

APPEND tumpukanTerbawah TO THE FRONT OF deck


END FOR

kartuTeratas = FIRST ELEMENT OF deck

RETURN kartuTeratas

END FUNCTION

```

Kemudian untuk problem kedua, pseudocode yang saya buat seperti ini:

```

FUNCTION MencariBerapaLangkahKocokanKartu(n, target) RETURNS langkah

INITIALIZE deck AS list OF INTEGERS [1,2,3,...,31]

INITIALIZE jumlahKartu AS LENGTH OF deck

WHILE TRUE

INITIALIZE tumpukanTerbawah AS LAST n ELEMENTS FROM deck

REMOVE LAST n ELEMENTS FROM deck

APPEND tumpukanTerbawah TO THE FRONT OF deck

INCREAMENT langkah
IF FIRST ELEMENT OF deck EQUALS target THEN

RETURN langkah

END IF

END WHILE

END FUNCTION

```

Jika kedua function di atas dijalankan pada main() seperti ini:


```

func main() {

fmt.Println("Jika N = 5, dan langkah kocokan kartu 45 langkah, maka kartu teratas adalah kartu:",
MencariKartuTeratas(5, 45))

fmt.Println("Jika N = 7, dan langkah kocokan kartu 50 langkah, maka kartu teratas adalah kartu:",
MencariKartuTeratas(7, 50))

fmt.Println("Jika N = 3, dan target kartu teratas = 2, maka jumlah langkah yang dibutuhkan:",
MencariKartuTeratas(3, 2))

```

Maka dapat diketahui:

N = 5, langkah kocokan = 45, maka kartu teratasnya adalah kartu 24


N = 7, langkah kocokan = 50, maka kartu teratasanya adalah kartu 23
N = 3, target kartu teratas = 2, maka jumlah langkah yang diperlukan adalah 26 langkah

Anda mungkin juga menyukai