Catatan Kuliah: Studi Kasus Toples dan Bakteri

Catatan Kuliah: Studi Kasus Toples dan Bakteri

Pernahkah Anda menonton keseruan adu logika saat Jerome Polin menjadi bintang tamu di podcast Deddy Corbuzier? Ada satu tebak-tebakan matematika terbalik (riddle) yang dilemparkan Jerome dan sukses membuat suasana podcast menjadi seru sekaligus memeras otak. Teka-tekinya sederhana, tapi jebakan logikanya luar biasa. Mari kita uji kemampuan berpikir kritis Anda dengan pertanyaan yang sama!

Pertanyaannya:

"Ada sebuah toples kosong. Di dalamnya dimasukkan satu bakteri. Setiap 1 menit, bakteri ini akan berkembang biak menjadi 2 kali lipat dari jumlah sebelumnya (pembelahan eksponensial). Diketahui bahwa toples tersebut akan penuh total oleh bakteri tepat pada menit ke-60 (atau 1 jam)."

Pertanyaannya: Pada menit ke berapakah toples tersebut terisi setengah (1/2) penuh?

Bagi kebanyakan orang yang mengandalkan intuisi instan, jawaban yang pertama kali terlintas di kepala biasanya adalah menit ke-30. Logikanya: "Kalau 1 jam (60 menit) itu penuh, berarti setengahnya ya 30 menit."

Apakah jawaban Anda juga 30 menit? Jika iya, sayang sekali... jawaban Anda salah!

Jawaban & Pembahasan Logikanya:

Jawaban yang benar adalah Menit ke-59! ✔️

Kenapa bisa begitu?

Kunci untuk memecahkan teka-teki ini adalah dengan berpikir mundur, bukan maju. Mari kita bedah logikanya bersama-sama:

  1. Kita tahu dari soal bahwa pada menit ke-60, kondisi toples sudah 100% penuh.
  2. Aturan perkembangbiakannya adalah: Jumlah bakteri menjadi 2x lipat setiap menit.
  3. Artinya, jika kita mundur 1 menit sebelum penuh (yaitu dari menit ke-60 mundur ke menit ke-59), maka jumlah bakteri di dalam toples pasti setengah (1/2) dari jumlah saat penuh.
  4. Ketika berada di menit ke-59 (kondisi setengah penuh), lalu waktu berjalan maju 1 menit ke menit ke-60, jumlah bakteri yang setengah itu akan berlipat ganda (1/2 x 2), sehingga toples langsung terisi penuh 100%!

Jika diteruskan mundur:

  • Menit ke-60: Penuh (1)
  • Menit ke-59: Setengah Penuh (1/2)
  • Menit ke-58: Seperempat Penuh (1/4)
  • Menit ke-57: Seperdelapan Penuh (1/8), dan seterusnya.

Tebak-tebakan dari Jerome Polin ini mengajarkan kita tentang dahsyatnya Pertumbuhan Eksponensial (Exponential Growth). Dalam dunia nyata, pertumbuhan eksponensial sering kali menipu mata manusia. Pada menit ke-1 hingga menit ke-55, kasat mata toples mungkin terlihat hampir kosong dan perkembangannya terasa sangat lambat. Namun, hanya butuh waktu beberapa menit terakhir saja bagi bakteri tersebut untuk meledak dan menguasai seluruh ruang toples.

Konsep ini sama persis dengan bagaimana sebuah tren menjadi viral, pertumbuhan investasi, atau bahkan penyebaran virus di dunia nyata. Bagaimana? Apakah Anda berhasil menjawabnya dengan benar sebelum membaca pembahasan di atas?

Berikut adalah contoh penerapan dari permasalahan di atas menggunakan pendekatan shell scripting.

#!/bin/bash
MENIT_PENUH=60 # 1 jam = 60 menit
TARGET_PENYEBUT=2 # target penuhnya, dilihat dari penyebut
KELIPATAN=2 # kelipatan bakteri berkembang biak

echo ""
echo "— Kapasitas Toples Bakteri —"
echo "Target: Menit ke-berapa toples terisi 1/$TARGET_PENYEBUT bagian?"
echo "-—————————————"

# Loop mundur dari menit ke-60
for (( menit=$MENIT_PENUH; menit>=55; menit– )) # looping dari menit terakhir dan mundur ke belakang
do
# Menghitung penyebut (2 pangkat selisih menit)
selisih=$(( MENIT_PENUH - menit ))
penyebut=$(( KELIPATAN ** selisih ))
if [ $selisih -eq 0 ]; then
status="Penuh (1/1)"
echo "Menit ke-$menit: $status"
else
status="Terisi 1/$penyebut bagian"
# Tandai saat mencapai 1/$TARGET_PENYEBUT
if [ $penyebut -eq $TARGET_PENYEBUT ]; then
echo ">> JAWABAN: Toples $status pada menit ke-$menit <<"
else
echo "Menit ke-$menit: $status"
fi
fi
done

echo ""

Mari kita bedah kodenya bagian demi bagian:

1. Inisialisasi Variabel (Konfigurasi Data)

MENIT_PENUH=60 # 1 jam = 60 menit
TARGET_PENYEBUT=2 # target penuhnya, dilihat dari penyebut
KELIPATAN=2 # kelipatan bakteri berkembang biak

Di bagian awal, kita mendefinisikan konstanta agar script ini fleksibel jika ingin diubah konfigurasinya di kemudian hari:

  • MENIT_PENUH: Batas akhir saat toples terisi 100% penuh (menit ke-60).
  • TARGET_PENYEBUT: Angka penyebut yang ingin dicari jawabannya. Karena mencari setengah ($1/2$) penuh, maka target penyebutnya adalah 2.
  • KELIPATAN: Kecepatan bakteri membelah diri, yaitu 2 kali lipat setiap menit.

2. Struktur Perulangan Mundur (Backward Loop)

for (( menit=$MENIT_PENUH; menit>=55; menit– ))

  • Program menggunakan sintaks C-style loop pada Bash untuk melakukan hitung mundur.
  • Perulangan dimulai dari menit=60 ($MENIT_PENUH) dan akan terus berkurang (menit--) selama nilai menit masih lebih besar atau sama dengan 55 (menit>=55).
  • Catatan: Pembatasan sampai menit ke-55 dilakukan agar output di terminal tidak terlalu panjang, karena esensi jawabannya sudah pasti berada di rentang menit-menit terakhir ini.

3. Logika Perhitungan Matematis (Eksponensial)

Di dalam loop, terdapat dua baris kalkulasi matematika yang menjadi kunci utama script ini:

selisih=$(( MENIT_PENUH - menit ))
penyebut=$(( KELIPATAN ** selisih ))

  • selisih: Menghitung sudah berapa menit kita berjalan mundur dari kondisi penuh.
    • Contoh: Pada menit ke-60 selisihnya 60-60 = 0. Pada menit ke-59 selisihnya 60-59 = 1.
  • penyebut: Di sini kita menggunakan operator yang merupakan operator perpangkatan di Bash. Rumus fisika/matematikanya adalah KELIPATAN^selisih atau 2 ^ selisih.
    • Saat menit 60: 2^0 = 1 (Penyebutnya 1 -> arti fraksinya 1/1 atau Penuh).
    • Saat menit 59: 2^1 = 2 (Penyebutnya 2 -> arti fraksinya 1/2 atau Setengah).
    • Saat menit 58: 2^2 = 4 (Penyebutnya 4 -> arti fraksinya 1/4 atau Seperempat).

4. Logika Percabangan Kondisional (if-else)

if [ $selisih -eq 0 ]; then
status="Penuh (1/1)"
echo "Menit ke-$menit: $status"

Jika selisih sama dengan 0 (-eq 0), artinya ini adalah kondisi awal (menit ke-60). Program akan langsung mencetak bahwa toples dalam kondisi "Penuh (1/1)".

else
status="Terisi 1/$penyebut bagian"
# Tandai saat mencapai 1/$TARGET_PENYEBUT
if [ $penyebut -eq $TARGET_PENYEBUT ]; then
echo ">> JAWABAN: Toples $status pada menit ke-$menit <<"
else
echo "Menit ke-$menit: $status"
fi
fi

  • Jika selisih bukan 0, program akan menyusun teks status fraksinya (misal: "Terisi 1/2 bagian").
  • Di dalam blok else ini, terdapat pengecekan lagi (nested if): "Apakah nilai penyebut saat ini sama dengan TARGET_PENYEBUT (yaitu angka 2)?"
    • Jika YA, program akan mencetak baris teks spesial dengan tanda >> JAWABAN: ... << untuk menyoroti jawaban yang dicari.
    • Jika TIDAK, program hanya akan mencetak status baris reguler seperti biasa.

Hasil Output Program Saat Dijalankan

Jika script ini dieksekusi di terminal, maka output yang dihasilkan akan terlihat seperti ini:

— Kapasitas Toples Bakteri —
Target: Menit ke-berapa toples terisi 1/2 bagian?
-—————————————
Menit ke-60: Penuh (1/1)
>> JAWABAN: Toples Terisi 1/2 bagian pada menit ke-59 <<
Menit ke-58: Terisi 1/4 bagian
Menit ke-57: Terisi 1/8 bagian
Menit ke-56: Terisi 1/16 bagian
Menit ke-55: Terisi 1/32 bagian

Kesimpulan Review

Struktur logika dari kode shell script-nya berjalan dengan tepat berkat pemanfaatan operator matematika perpangkatan Bash () untuk merepresentasikan pembelahan biner bakteri (eksponensial), serta penggunaan conditional styling untuk langsung menembak jawaban yang tepat pada menit ke-59.