Latihan buat 07 Proyek Robot Pengantar Paket. Latihan 7.1 dan 7.2 butuh kode proyek robotnya (graf, VillageState, runRobot, findRoute, dst) sudah dimuat lebih dulu. Konsep: mengukur, mengoptimasi, dan data persisten. Jawaban di 07 Kunci Jawaban Robot.

7.1 Mengukur Robot

Tulis compareRobots(robot1, memory1, robot2, memory2) yang membuat 100 tugas, menyuruh kedua robot menyelesaikan tiap tugas yang sama, lalu mencetak rata-rata langkah per tugas untuk masing-masing.

Kode awal:

function compareRobots(robot1, memory1, robot2, memory2) {
  // tulis kodemu di sini
}
 
compareRobots(routeRobot, [], goalOrientedRobot, []);

Petunjuk: buat helper mirip runRobot tapi mengembalikan jumlah langkah (bukan mencetak). Loop 100 kali: buat satu VillageState.random(), beri state yang sama ke kedua robot (aman karena state-nya immutable), jumlahkan langkahnya, lalu bagi 100. Konsep di 07 Proyek Robot Pengantar Paket > Simulasi.

→ Jawaban: 07 Kunci Jawaban Robot > 7.1 Mengukur Robot

7.2 Efisiensi Robot

goalOrientedRobot cuma memikirkan satu paket sekaligus, sehingga sering bolak-balik. Tulis robot yang lebih cepat.

Kode awal:

function robotHemat({place, parcels}, route) {
  // tulis kodemu di sini
}

Petunjuk: hitung rute untuk semua paket, lalu pilih yang terpendek. Beri sedikit bonus pada rute yang menuju pengambilan paket dibanding pengantaran (makin cepat semua paket di tangan, makin banyak pengantaran yang “kebetulan” terjadi di jalan). Pakai map untuk bikin kandidat rute dan reduce untuk memilih skor terbaik. Konsep di 07 Proyek Robot Pengantar Paket > Pencarian Jalur.

→ Jawaban: 07 Kunci Jawaban Robot > 7.2 Efisiensi Robot

7.3 Group Persisten

Set bawaan gak punya cara bikin salinan baru dengan/tanpa satu anggota. Tulis class PGroup (mirip Group bab 6) yang persisten: add dan delete mengembalikan PGroup baru dan meninggalkan yang lama utuh. Sediakan instance kosong PGroup.empty sebagai titik awal (constructor bukan bagian antarmuka).

Kode awal:

class PGroup {
  // tulis kodemu di sini
}
 
let a = PGroup.empty.add("a");
let ab = a.add("b");
let b = ab.delete("a");
 
console.log(b.has("b"));
// → true
console.log(a.has("b"));
// → false
console.log(b.has("a"));
// → false

Petunjuk: simpan anggota di array yang tak pernah diubah. add bikin new PGroup(members.concat([nilai])), delete bikin new PGroup(members.filter(...)). PGroup.empty adalah properti static. Kenapa cukup satu empty? Karena semua group kosong itu sama dan instance-nya immutable. Konsep di 07 Proyek Robot Pengantar Paket > Data Persisten.

→ Jawaban: 07 Kunci Jawaban Robot > 7.3 Group Persisten