Latihan 1 dari materi git bisect untuk Regresi di Debugging — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi findFirstBad(commits, isBad), binary search yang dipakai git bisect.
commits adalah array index [0, 1, 2, ...], urut dari commit lama ke baru.
isBad(commit) mengembalikan true kalau commit itu rusak. Sifatnya monoton: kalau commit X rusak, semua commit sesudahnya juga rusak.
Langkahnya:
- Simpan
low = 0, high = commits.length - 1, dan jawaban = -1.
- Selama
low <= high, ambil mid = Math.floor((low + high) / 2) dan panggil isBad(commits[mid]).
- Rusak? Simpan
jawaban = mid, lalu high = mid - 1. Bagus? low = mid + 1.
- Kembalikan
jawaban: index commit rusak pertama, atau -1 kalau gak ada yang rusak.
countCalls(commits, isBad) di kode awal sudah membungkus isBad dengan penghitung dan mengembalikan { firstBad, calls }. Biarkan function itu dan semua console.log-nya. Output-nya harus persis enam baris ini, berurutan:
7
true (paling banyak 5 panggilan untuk 10 commit)
742
true (paling banyak 11 panggilan untuk 1.000 commit)
-1
0
Ada juga dua cek lain: 64 commit dengan bug mulai di 50 harus menghasilkan [50, true] (50, dengan paling banyak 7 panggilan), dan untuk [0, 1, 2, 3] hasilnya harus [-1, 0] kalau gak ada yang rusak dan kalau semuanya rusak.