DEV Community

Ramadhanty Sadewi
Ramadhanty Sadewi

Posted on

Sharing Solusi Tantangan CodeWars: Least Larger, dari Dasar hingga 1 Baris

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
}
Enter fullscreen mode Exit fullscreen mode

Bagaimana Cara Kerjanya?

  1. Inisialisasi Awal

    • Aku set smaller ke Infinity sebagai nilai awal untuk pembanding.
    • result di-set ke -1 untuk jaga-jaga kalau nggak ada elemen yang memenuhi.
  2. Iterasi Array

    • Aku cek setiap elemen di array.
    • Ada dua kondisi yang harus terpenuhi:
      1. Elemen lebih besar dari elemen acuan (a[i]).
      2. Elemen lebih kecil dari pembanding sebelumnya (smaller).
    • Kalau kedua kondisi itu terpenuhi, aku update smaller dan simpan indeks elemen di result.
  3. 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
Enter fullscreen mode Exit fullscreen mode

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 indeks 3.

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])));
Enter fullscreen mode Exit fullscreen mode

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:

  1. Sistem Pemesanan Tiket

    • Dalam sistem tiket, kita sering perlu mencari harga kursi terendah yang lebih tinggi dari harga tertentu (misalnya, untuk mengisi kursi berikutnya).
  2. 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.
  3. 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)