class Kamus {
constructor() {
// Menggunakan Map untuk menyimpan hubungan kata => [sinonim].
this.data = new Map();
}
/**
* Menambahkan kata dan sinonimnya dengan hubungan dua arah.
* @param {string} kata Kata utama.
* @param {string[]} sinonim Array berisi sinonim-sinonimnya.
*/
tambah(kata, sinonim) {
// Ambil daftar sinonim yang sudah ada untuk kata utama.
const kataSinonim = this.data.get(kata) || [];
// Gunakan Set untuk menggabungkan dan memastikan keunikan.
const updatedKataSinonim = new Set([...kataSinonim, ...sinonim]);
this.data.set(kata, Array.from(updatedKataSinonim));
// Buat hubungan sebaliknya dari setiap sinonim ke kata utama.
for (const s of sinonim) {
const sSinonim = this.data.get(s) || [];
const updatedSSinonim = new Set([...sSinonim, kata]);
this.data.set(s, Array.from(updatedSSinonim));
}
}
/**
* Mengambil daftar sinonim dari sebuah kata.
* @param {string} kata Kata yang ingin dicari.
* @returns {string[]|null} Mengembalikan array sinonim atau null.
*/
ambilSinonim(kata) {
if (this.data.has(kata)) {
// Urutkan array untuk hasil yang konsisten.
return this.data.get(kata).sort();
}
return null;
}
}
// --- Contoh Penggunaan ---
// Fungsi bantuan untuk mencetak hasil dengan rapi.
function cetak(hasil) {
console.log(JSON.stringify(hasil));
}
const kamus = new Kamus();
kamus.tambah('big', ['large', 'great']);
kamus.tambah('big', ['huge', 'fat']);
kamus.tambah('huge', ['enormous', 'gigantic']);
process.stdout.write("Hasil ambilSinonim('big'): ");
cetak(kamus.ambilSinonim('big'));
process.stdout.write("Hasil ambilSinonim('huge'): ");
cetak(kamus.ambilSinonim('huge'));
process.stdout.write("Hasil ambilSinonim('gigantic'): ");
cetak(kamus.ambilSinonim('gigantic'));
process.stdout.write("Hasil ambilSinonim('colossal'): ");
cetak(kamus.ambilSinonim('colossal'));