fork download
  1. class Kamus {
  2. constructor() {
  3. // Menggunakan Map untuk menyimpan hubungan kata => [sinonim].
  4. this.data = new Map();
  5. }
  6.  
  7. /**
  8.   * Menambahkan kata dan sinonimnya dengan hubungan dua arah.
  9.   * @param {string} kata Kata utama.
  10.   * @param {string[]} sinonim Array berisi sinonim-sinonimnya.
  11.   */
  12. tambah(kata, sinonim) {
  13. // Ambil daftar sinonim yang sudah ada untuk kata utama.
  14. const kataSinonim = this.data.get(kata) || [];
  15. // Gunakan Set untuk menggabungkan dan memastikan keunikan.
  16. const updatedKataSinonim = new Set([...kataSinonim, ...sinonim]);
  17. this.data.set(kata, Array.from(updatedKataSinonim));
  18.  
  19. // Buat hubungan sebaliknya dari setiap sinonim ke kata utama.
  20. for (const s of sinonim) {
  21. const sSinonim = this.data.get(s) || [];
  22. const updatedSSinonim = new Set([...sSinonim, kata]);
  23. this.data.set(s, Array.from(updatedSSinonim));
  24. }
  25. }
  26.  
  27. /**
  28.   * Mengambil daftar sinonim dari sebuah kata.
  29.   * @param {string} kata Kata yang ingin dicari.
  30.   * @returns {string[]|null} Mengembalikan array sinonim atau null.
  31.   */
  32. ambilSinonim(kata) {
  33. if (this.data.has(kata)) {
  34. // Urutkan array untuk hasil yang konsisten.
  35. return this.data.get(kata).sort();
  36. }
  37. return null;
  38. }
  39. }
  40.  
  41. // --- Contoh Penggunaan ---
  42.  
  43. // Fungsi bantuan untuk mencetak hasil dengan rapi.
  44. function cetak(hasil) {
  45. console.log(JSON.stringify(hasil));
  46. }
  47.  
  48. const kamus = new Kamus();
  49. kamus.tambah('big', ['large', 'great']);
  50. kamus.tambah('big', ['huge', 'fat']);
  51. kamus.tambah('huge', ['enormous', 'gigantic']);
  52.  
  53. process.stdout.write("Hasil ambilSinonim('big'): ");
  54. cetak(kamus.ambilSinonim('big'));
  55.  
  56. process.stdout.write("Hasil ambilSinonim('huge'): ");
  57. cetak(kamus.ambilSinonim('huge'));
  58.  
  59. process.stdout.write("Hasil ambilSinonim('gigantic'): ");
  60. cetak(kamus.ambilSinonim('gigantic'));
  61.  
  62. process.stdout.write("Hasil ambilSinonim('colossal'): ");
  63. cetak(kamus.ambilSinonim('colossal'));
Success #stdin #stdout 0.05s 42412KB
stdin
Standard input is empty
stdout
Hasil ambilSinonim('big'): ["fat","great","huge","large"]
Hasil ambilSinonim('huge'): ["big","enormous","gigantic"]
Hasil ambilSinonim('gigantic'): ["huge"]
Hasil ambilSinonim('colossal'): null