Wednesday

18-06-2025 Vol 19

Daily JavaScript Challenge #JS-187: Find the Shortest Word in a Sentence

Daily JavaScript Challenge #JS-187: Temukan Kata Terpendek dalam Kalimat

Selamat datang di tantangan JavaScript harian lainnya! Hari ini, kita akan menyelami tantangan yang sederhana namun menarik: menemukan kata terpendek dalam sebuah kalimat. Tantangan ini adalah latihan yang bagus untuk keterampilan manipulasi string dan array Anda, dan merupakan blok bangunan yang umum untuk tugas-tugas pemrosesan teks yang lebih kompleks. Mari kita uraikan tantangannya dan selesaikan langkah demi langkah.

Mengapa Tantangan Ini Penting?

Anda mungkin bertanya, mengapa saya harus repot-repot dengan tantangan yang tampaknya sederhana ini? Ada beberapa alasan:

  1. Peningkatan Logika: Memecahkan masalah ini mengharuskan Anda untuk berpikir secara logis tentang bagaimana menguraikan sebuah kalimat, membandingkan panjang kata, dan melacak kata terpendek.
  2. Keterampilan Manipulasi String: Anda akan berlatih menggunakan metode string JavaScript seperti split() dan properti length.
  3. Pengetahuan Array: Anda akan bekerja dengan array untuk menyimpan dan memproses kata-kata dalam kalimat.
  4. Persiapan Wawancara: Tantangan seperti ini sering muncul dalam wawancara teknis sebagai cara untuk menilai keterampilan pemecahan masalah dasar Anda.
  5. Pemecahan Masalah Dunia Nyata: Konsep menemukan nilai minimum atau maksimum dalam kumpulan data berlaku untuk berbagai skenario dunia nyata.

Memahami Tantangan

Tujuan kita adalah untuk menulis sebuah fungsi JavaScript yang mengambil sebuah kalimat sebagai input dan mengembalikan kata terpendek dalam kalimat itu. Berikut adalah beberapa pertimbangan penting:

  • Input: Sebuah string yang mewakili sebuah kalimat.
  • Output: String yang mewakili kata terpendek dalam kalimat.
  • Edge Cases:
    • Bagaimana jika kalimat kosong?
    • Bagaimana jika ada beberapa kata dengan panjang yang sama?
    • Bagaimana jika input bukan string?

Kerangka Posting Blog

Untuk memastikan kita membahas semua aspek penting dari tantangan ini, berikut adalah kerangka yang akan kita ikuti:

  1. Pengantar: Perkenalkan tantangan dan jelaskan pentingnya.
  2. Memahami Tantangan: Klarifikasi input, output, dan edge cases.
  3. Pendekatan Langkah demi Langkah: Uraikan proses pemecahan masalah.
  4. Solusi JavaScript:
    • Solusi Dasar (dengan penjelasan rinci).
    • Solusi yang Lebih Singkat (menggunakan metode array modern).
  5. Penjelasan Kode: Jelaskan setiap bagian dari kode secara mendalam.
  6. Penanganan Edge Case: Diskusikan bagaimana mengatasi edge cases.
  7. Uji Kasus: Berikan contoh uji untuk memvalidasi solusi.
  8. Analisis Kompleksitas: Analisis kompleksitas waktu dan ruang dari solusi.
  9. Peningkatan yang Mungkin: Sarankan cara untuk meningkatkan solusi.
  10. Kesimpulan: Rangkum apa yang telah kita pelajari dan berikan takeaway.
  11. Tantangan Tambahan: Sarankan tantangan serupa untuk latihan lebih lanjut.

Pendekatan Langkah demi Langkah

Sebelum kita mulai menulis kode, mari kita uraikan proses pemecahan masalah menjadi langkah-langkah yang lebih kecil:

  1. Pisahkan Kalimat: Gunakan metode split() untuk membagi kalimat menjadi sebuah array kata-kata.
  2. Inisialisasi Variabel: Buat sebuah variabel untuk menyimpan kata terpendek yang ditemukan sejauh ini. Inisialisasikan ke kata pertama dalam array (atau null jika array kosong).
  3. Iterasi Melalui Array: Loop melalui array kata-kata.
  4. Bandingkan Panjang: Untuk setiap kata, bandingkan panjangnya dengan panjang kata terpendek yang saat ini.
  5. Perbarui Kata Terpendek: Jika kata saat ini lebih pendek dari kata terpendek saat ini, perbarui variabel kata terpendek.
  6. Kembalikan Kata Terpendek: Setelah melakukan iterasi melalui semua kata, kembalikan variabel kata terpendek.
  7. Penanganan Edge Case: Tambahkan pemeriksaan untuk menangani edge cases seperti kalimat kosong atau input non-string.

Solusi JavaScript

Sekarang mari kita terapkan pendekatan ini dalam kode JavaScript.

Solusi Dasar

Solusi ini menggunakan loop for tradisional untuk melakukan iterasi melalui array kata-kata.

“`javascript
function findShortestWord(sentence) {
// Validasi input
if (typeof sentence !== ‘string’) {
return “Input harus berupa string.”;
}

// Pisahkan kalimat menjadi kata-kata
const words = sentence.split(‘ ‘);

// Tangani kalimat kosong
if (words.length === 0) {
return “Kalimat kosong.”;
}

// Inisialisasi kata terpendek ke kata pertama
let shortestWord = words[0];

// Loop melalui kata-kata dan cari kata terpendek
for (let i = 1; i < words.length; i++) { if (words[i].length < shortestWord.length) { shortestWord = words[i]; } } return shortestWord; } // Contoh penggunaan const sentence = "Ini adalah sebuah kalimat dengan beberapa kata"; const shortest = findShortestWord(sentence); console.log(`Kata terpendek: ${shortest}`); // Output: Kata terpendek: ini const emptySentence = ""; const shortestEmpty = findShortestWord(emptySentence); console.log(`Kata terpendek untuk kalimat kosong: ${shortestEmpty}`); // Output: Kata terpendek untuk kalimat kosong: Kalimat kosong. const invalidInput = 123; const shortestInvalid = findShortestWord(invalidInput); console.log(`Kata terpendek untuk input tidak valid: ${shortestInvalid}`); // Output: Kata terpendek untuk input tidak valid: Input harus berupa string. ```

Solusi yang Lebih Singkat (Menggunakan Metode Array Modern)

Solusi ini menggunakan metode array reduce() untuk mencapai hasil yang sama dalam kode yang lebih ringkas.

“`javascript
function findShortestWordShorter(sentence) {
if (typeof sentence !== ‘string’) {
return “Input harus berupa string.”;
}

const words = sentence.split(‘ ‘);

if (words.length === 0) {
return “Kalimat kosong.”;
}

return words.reduce((shortest, current) => current.length < shortest.length ? current : shortest); } // Contoh penggunaan const sentenceShorter = "Ini adalah sebuah kalimat dengan beberapa kata"; const shortestShorter = findShortestWordShorter(sentenceShorter); console.log(`Kata terpendek (versi singkat): ${shortestShorter}`); // Output: Kata terpendek (versi singkat): ini const emptySentenceShorter = ""; const shortestEmptyShorter = findShortestWordShorter(emptySentenceShorter); console.log(`Kata terpendek untuk kalimat kosong (versi singkat): ${shortestEmptyShorter}`); // Output: Kata terpendek untuk kalimat kosong (versi singkat): Kalimat kosong. const invalidInputShorter = 123; const shortestInvalidShorter = findShortestWordShorter(invalidInputShorter); console.log(`Kata terpendek untuk input tidak valid (versi singkat): ${shortestInvalidShorter}`); // Output: Kata terpendek untuk input tidak valid (versi singkat): Input harus berupa string. ```

Penjelasan Kode

Mari kita uraikan kode lebih detail:

Solusi Dasar

  1. Validasi Input:
    “`javascript
    if (typeof sentence !== ‘string’) {
    return “Input harus berupa string.”;
    }
    “`

    Pemeriksaan ini memastikan bahwa input adalah string. Jika tidak, fungsi mengembalikan pesan kesalahan.

  2. Pisahkan Kalimat:
    “`javascript
    const words = sentence.split(‘ ‘);
    “`

    Metode split(' ') membagi kalimat menjadi sebuah array kata-kata, menggunakan spasi sebagai pemisah.

  3. Tangani Kalimat Kosong:
    “`javascript
    if (words.length === 0) {
    return “Kalimat kosong.”;
    }
    “`

    Pemeriksaan ini menangani kasus di mana kalimatnya kosong. Jika array words kosong, fungsi mengembalikan pesan yang sesuai.

  4. Inisialisasi Kata Terpendek:
    “`javascript
    let shortestWord = words[0];
    “`

    Kita inisialisasi variabel shortestWord ke kata pertama dalam array. Ini adalah kata terpendek yang kita temukan sejauh ini.

  5. Loop Melalui Kata-Kata:
    “`javascript
    for (let i = 1; i < words.length; i++) { if (words[i].length < shortestWord.length) { shortestWord = words[i]; } } ```

    Kita menggunakan loop for untuk melakukan iterasi melalui array kata-kata. Untuk setiap kata, kita membandingkan panjangnya dengan panjang shortestWord. Jika kata saat ini lebih pendek, kita memperbarui shortestWord.

  6. Kembalikan Kata Terpendek:
    “`javascript
    return shortestWord;
    “`

    Setelah melakukan iterasi melalui semua kata, kita mengembalikan shortestWord.

Solusi yang Lebih Singkat

  1. Validasi Input: Sama seperti solusi dasar.
  2. Pisahkan Kalimat: Sama seperti solusi dasar.
  3. Tangani Kalimat Kosong: Sama seperti solusi dasar.
  4. Gunakan Reduce:
    “`javascript
    return words.reduce((shortest, current) => current.length < shortest.length ? current : shortest); ```

    Metode reduce() melakukan iterasi melalui array dan mengakumulasikan nilai tunggal. Dalam kasus ini, kita menggunakannya untuk membandingkan panjang setiap kata dengan panjang kata terpendek yang saat ini. Jika kata saat ini lebih pendek, kata itu menjadi kata terpendek baru. Jika tidak, kata terpendek saat ini tetap tidak berubah.

Penanganan Edge Case

Kita telah membahas penanganan edge case berikut dalam kode:

  • Input Non-String: Kita mengembalikan pesan kesalahan jika input bukan string.
  • Kalimat Kosong: Kita mengembalikan pesan khusus jika kalimatnya kosong.

Edge case lain yang perlu dipertimbangkan adalah bagaimana menangani beberapa kata dengan panjang yang sama. Saat ini, kode mengembalikan kata pertama yang muncul dengan panjang terpendek. Jika Anda ingin mengembalikan *semua* kata terpendek, Anda perlu memodifikasi kode untuk menyimpan semua kata dengan panjang terpendek dalam sebuah array dan mengembalikan array itu.

Uji Kasus

Berikut adalah beberapa uji kasus untuk memvalidasi solusi kita:

  1. Kalimat Normal:
    • Input: “Ini adalah sebuah kalimat dengan beberapa kata”
    • Output: “ini”
  2. Kalimat dengan Kata Panjang:
    • Input: “Ini adalah sebuah kalimat dengan kata superpanjang”
    • Output: “ini”
  3. Kalimat dengan Beberapa Kata Terpendek:
    • Input: “aku dan dia pergi”
    • Output: “aku”
  4. Kalimat Kosong:
    • Input: “”
    • Output: “Kalimat kosong.”
  5. Input Non-String:
    • Input: 123
    • Output: “Input harus berupa string.”

Analisis Kompleksitas

Mari kita analisis kompleksitas waktu dan ruang dari solusi kita.

Kompleksitas Waktu

  • Solusi Dasar: Kompleksitas waktunya adalah O(n), di mana n adalah jumlah kata dalam kalimat. Kita perlu melakukan iterasi melalui setiap kata untuk menemukan kata terpendek.
  • Solusi yang Lebih Singkat: Kompleksitas waktunya juga O(n) karena metode reduce() juga perlu melakukan iterasi melalui setiap kata.

Kompleksitas Ruang

  • Solusi Dasar: Kompleksitas ruangnya adalah O(n) karena kita membuat sebuah array words untuk menyimpan semua kata dalam kalimat.
  • Solusi yang Lebih Singkat: Kompleksitas ruangnya juga O(n) karena kita masih membuat array words. Namun, penggunaan reduce mungkin memiliki overhead ruang yang sedikit lebih kecil dibandingkan dengan loop eksplisit dalam beberapa implementasi JavaScript.

Peningkatan yang Mungkin

Berikut adalah beberapa cara untuk meningkatkan solusi kita:

  1. Penanganan Tanda Baca: Kode saat ini menganggap tanda baca sebagai bagian dari kata. Anda dapat meningkatkan kode untuk menghilangkan tanda baca sebelum menemukan kata terpendek.
  2. Kasus yang Tidak Sensitif: Kode saat ini sensitif terhadap kasus. Anda dapat mengubah kode untuk mengubah semua kata menjadi huruf kecil sebelum membandingkan panjangnya.
  3. Menangani Beberapa Kata Terpendek: Seperti yang disebutkan sebelumnya, Anda dapat memodifikasi kode untuk mengembalikan semua kata dengan panjang terpendek dalam sebuah array.
  4. Optimasi untuk Kalimat Panjang: Untuk kalimat yang sangat panjang, Anda dapat mempertimbangkan untuk menggunakan algoritma yang lebih canggih seperti pohon trie untuk mengoptimalkan pencarian kata terpendek. Namun, untuk sebagian besar kasus penggunaan praktis, peningkatan ini mungkin tidak diperlukan.

Kesimpulan

Dalam posting blog ini, kita telah menjelajahi tantangan menemukan kata terpendek dalam sebuah kalimat. Kita telah membahas:

  • Pentingnya tantangan ini untuk meningkatkan keterampilan pemecahan masalah dan manipulasi string Anda.
  • Proses langkah demi langkah untuk memecahkan masalah.
  • Dua solusi JavaScript: satu dasar dan satu lebih singkat menggunakan metode array modern.
  • Penjelasan mendalam dari kode.
  • Penanganan edge case.
  • Uji kasus untuk memvalidasi solusi kita.
  • Analisis kompleksitas waktu dan ruang.
  • Peningkatan yang mungkin.

Takeaway utama adalah bahwa bahkan tantangan yang tampaknya sederhana pun dapat menjadi latihan yang berharga untuk keterampilan pemrograman Anda. Dengan memecah masalah menjadi langkah-langkah yang lebih kecil dan mempertimbangkan edge case, Anda dapat menulis kode yang kuat dan efisien.

Tantangan Tambahan

Ingin melatih keterampilan JavaScript Anda lebih jauh? Berikut adalah beberapa tantangan serupa:

  1. Temukan Kata Terpanjang: Modifikasi kode kita untuk menemukan kata terpanjang dalam sebuah kalimat.
  2. Hitung Kemunculan Kata: Tulis sebuah fungsi yang menghitung berapa kali setiap kata muncul dalam sebuah kalimat.
  3. Balikkan Kalimat: Tulis sebuah fungsi yang membalikkan urutan kata dalam sebuah kalimat.
  4. Periksa Palindrom: Tulis sebuah fungsi yang memeriksa apakah sebuah kata atau kalimat adalah palindrom (bacaan yang sama maju dan mundur).

Semoga beruntung, dan selamat coding!

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *