Belajar dari Tantangan CodeWars: Least Larger
Halo, teman-teman! Kali ini aku mau sharing soal tantangan Least Larger dari CodeWars. Tantangan ini seru banget karena melatih logika dan cara berpikir sistematis, sekaligus memberikan gambaran bagaimana konsep ini bisa berguna di dunia nyata. Yuk, kita bahas bareng-bareng!
Apa Tantangannya?
Jadi, kita diberi sebuah array angka dan sebuah indeks tertentu. Tugas kita adalah mencari angka terkecil yang lebih besar dari elemen di indeks tersebut, lalu mengembalikan indeksnya. Kalau nggak ada angka yang memenuhi, kita harus mengembalikan -1
.
Contoh:
Array: [4, 1, 3, 5, 6]
Indeks: 0
(angka acuan adalah 4
)
Hasilnya adalah 3
, karena angka terkecil yang lebih besar dari 4
adalah 5
, yang ada di indeks 3
.
kenapa bisa 3 ?
array itu di mulai dari 0
jadi :
4 : index 0
1 : index 1
3 : index 2
5 : index 3
6 : index 4
Solusi yang Aku Buat
Untuk menyelesaikan tantangan ini, aku membuat fungsi bernama leastLarger
. Berikut kodenya:
function leastLarger(a, i) {
let smaller = Infinity; // Nilai pembanding awal
let result = -1; // Default hasil kalau nggak ada elemen yang memenuhi
for (let index = 0; index < a.length; index++) {
if (a[index] > a[i] && a[index] < smaller) {
smaller = a[index]; // Update nilai terkecil yang lebih besar
result = index; // Simpan indeks elemen
}
}
return result; // Kembalikan hasil
}
Bagaimana Cara Kerjanya?
-
Inisialisasi Awal
- Aku set
smaller
keInfinity
sebagai nilai awal untuk pembanding. -
result
di-set ke-1
untuk jaga-jaga kalau nggak ada elemen yang memenuhi.
- Aku set
-
Iterasi Array
- Aku cek setiap elemen di array.
- Ada dua kondisi yang harus terpenuhi:
- Elemen lebih besar dari elemen acuan (
a[i]
). - Elemen lebih kecil dari pembanding sebelumnya (
smaller
).
- Elemen lebih besar dari elemen acuan (
- Kalau kedua kondisi itu terpenuhi, aku update
smaller
dan simpan indeks elemen diresult
.
-
Mengembalikan Hasil
- Kalau ada elemen yang memenuhi, fungsi mengembalikan indeksnya.
- Kalau nggak ada, hasilnya tetap
-1
.
Contoh Penggunaan
console.log(leastLarger([4, 1, 3, 5, 6], 0)); // Output: 3
Penjelasan:
- Elemen acuan adalah
4
(di indeks 0). - Elemen-elemen yang lebih besar dari
4
adalah[5, 6]
. - Dari elemen-elemen itu, yang terkecil adalah
5
, dan posisinya ada di indeks3
.
Solusi Advance: Ringkas dalam 1 Baris
Buat kamu yang suka pendekatan lebih "JavaScript banget," kita bisa menulis solusi ini dalam satu baris kode menggunakan metode bawaan seperti filter
, Math.min
, dan findIndex
:
const leastLarger = (a, i) => a.findIndex(x => x > a[i] && x === Math.min(...a.filter(y => y > a[i])));
Kode ini melakukan hal yang sama, tapi dalam gaya yang lebih fungsional dan ringkas. Cocok untuk situasi di mana kamu ingin menulis solusi cepat tanpa terlalu banyak variabel tambahan.
Studi Kasus di Dunia Nyata
Fungsi seperti ini sebenarnya cukup relevan di berbagai situasi nyata. Beberapa contohnya:
-
Sistem Pemesanan Tiket
- Dalam sistem tiket, kita sering perlu mencari harga kursi terendah yang lebih tinggi dari harga tertentu (misalnya, untuk mengisi kursi berikutnya).
-
Penjadwalan Tugas
- Saat membuat jadwal, kita bisa mencari waktu terdekat berikutnya yang lebih besar dari waktu tertentu, misalnya untuk mengalokasikan slot meeting atau tugas berikutnya.
-
Manajemen Inventaris
- Dalam gudang, jika kamu perlu mencari lokasi penyimpanan dengan kapasitas terkecil yang masih cukup untuk menyimpan barang tertentu.
Tantangan ini terlihat sederhana, tapi pas dicoba, aku jadi sadar kalau logika yang rapi itu sangat penting. Yang aku suka dari tantangan ini adalah betapa relevannya konsep ini untuk diterapkan di dunia nyata.
Oh iya, kalau teman-teman punya cara lain untuk menyelesaikan tantangan ini, jangan ragu buat share di kolom komentar, ya! Siapa tahu, kita bisa saling belajar dari pendekatan yang berbeda. Semoga sharing ini bermanfaat, dan happy coding! 😊
Top comments (0)