Cara bermain Rak Warung
- Baca instruksi level. Di atas editor tertulis apa yang disediakan game, mis.
rakberupaMap,KAPASITAS, dangudang(barang). - Ubah kode di editor. Kodemu langsung dijalankan dengan beberapa deretan pesanan, dan arena menampilkan pesanan satu per satu sekali: hit atau miss, lalu isi rak dari kiri (paling lama) ke kanan (paling baru).
- Baris bertanda ✗ belum sesuai. Di bawahnya tampil hasil target, jadi kamu bisa membandingkan isi rakmu dengan isi rak yang seharusnya. Tombol Lewati animasi langsung menampilkan semua baris.
- Klik Deretan 2 untuk melihat deretan pesanan lain. Semua deretan harus sesuai, jadi jawaban yang ditulis langsung untuk satu deretan tidak lolos.
- Tekan Cek jawaban atau Ctrl + Enter. Yang dicek adalah hit, miss, dan isi rak di tiap pesanan, bukan teks kodemu.
- Kalau buntu, buka Petunjuk. Level yang sudah selesai tetap tercentang di browser yang sama.
Yang kamu pelajari
- Level 1
Cache, hit, dan miss
Cache menyimpan salinan data yang lambat diambil di tempat yang cepat. Hit berarti datanya ada di cache, miss berarti harus diambil dari sumber aslinya.
- Level 2
Kapasitas dan FIFO
Cache punya batas. Kebijakan FIFO menggusur data yang paling lama masuk.
Mapmenjaga urutan sisip, jadirak.keys().next().valueadalah yang paling lama. - Level 3
LRU (Least Recently Used)
Setiap hit memindahkan data ke posisi paling baru dengan
deletelaluset, jadi yang digusur adalah data yang paling lama tidak dipakai. - Level 4
Menggusur hanya saat miss
Hit tidak menambah isi cache. Penggusuran cukup dilakukan tepat sebelum data baru masuk.
- Level 5
Hit rate
Jumlah hit dibagi semua permintaan. Angka ini yang dipakai untuk menilai apakah cache dan kapasitasnya sudah pas.
- Level 6
Kelas cache LRU
Logika LRU dibungkus dalam
getdanset, sehingga pemakainya cukup memanggil keduanya tanpa tahu cara penggusurannya. - Level 7
Memperbarui kunci yang sudah ada
Map.setuntuk kunci lama tidak memindah posisinya. Hapus dulu kuncinya supaya jadi yang paling baru dan tidak ada data lain yang tergusur. - Level 8
Memoization dan kunci cache
Menyimpan hasil fungsi mahal per argumen. Kuncinya harus memuat semua argumen yang memengaruhi hasil.
- Level 9
Memoization terbatas
Simpanan memo yang terus tumbuh bisa menghabiskan memori. Batasi dengan LRU supaya hanya hasil yang sering dipakai yang tersimpan.
FIFO melihat kapan masuk, LRU melihat kapan dipakai
Rak berisi teh, kopi, gula, dan pembeli baru saja membeli teh lagi. Lalu datang pesanan mi dan rak penuh. FIFO mengeluarkan teh karena teh yang paling dulu masuk rak, padahal teh baru saja laku. LRU mengeluarkan kopi, karena kopi yang paling lama tidak disentuh.
Di kode, bedanya hanya dua baris saat hit: rak.delete(barang) lalu rak.set(barang, isi). Map menyimpan kunci sesuai urutan dimasukkan, jadi menghapus lalu memasukkan lagi memindahkan barang ke ujung kanan, dan kunci pertama selalu yang paling lama tidak dipakai. Memanggil set saja tidak cukup, karena kunci yang sudah ada tetap di posisi lamanya.
Tanya jawab
Apakah harus daftar akun untuk bermain?
Tidak. Semua level bisa dimainkan tanpa akun. Kemajuanmu disimpan di browser yang kamu pakai, jadi akan hilang kalau data browser dihapus.
Bagaimana game tahu sebuah pesanan hit atau miss?
Game menghitung berapa kali gudang dipanggil. Kalau pesanan selesai tanpa memanggil gudang, itu hit. Barang dari gudang juga selalu objek baru, jadi barang yang dibuat sendiri tanpa gudang ketahuan dan tidak dihitung benar.
Kenapa contohnya memakai Map, bukan objek biasa?
Map menjaga urutan kunci sesuai urutan dimasukkan, punya size, dan delete lalu set memindahkan kunci ke ujung. Itu semua yang dibutuhkan LRU, jadi tidak perlu linked list sendiri. Objek biasa mengurutkan kunci yang berupa angka lebih dulu, jadi urutannya bisa berbeda dari urutan masuk.
Kapan memakai LRU dan kapan FIFO?
LRU cocok kalau data yang baru dipakai kemungkinan dipakai lagi, seperti barang laris atau halaman yang sering dibuka. FIFO lebih sederhana dan cukup kalau umur data yang penting, misalnya data yang memang kedaluwarsa setelah sekian lama.
Apa beda memoization dengan cache biasa?
Memoization adalah cache untuk hasil fungsi: kuncinya argumen fungsi, nilainya hasil hitungan. Cocok untuk fungsi murni yang mahal. Kalau hasilnya bisa berubah walau argumennya sama, misalnya data dari server, cache butuh aturan kedaluwarsa juga.
Di mana kodeku dijalankan?
Di Web Worker di dalam iframe terpisah, bukan di halaman ini. Kodemu tidak bisa membaca cookie atau data Mahir, dan perulangan yang tidak berhenti dihentikan setelah 1 detik.