class Kamus {
constructor() {
this.data = {}; // Menyimpan kata dan sinonimnya
}
// Menambahkan kata dan sinonimnya
tambah(kata, daftarSinonim) {
if (!this.data[kata]) {
this.data[kata] = new Set();
}
for (let sinonim of daftarSinonim) {
this.data[kata].add(sinonim);
}
}
// Mengambil semua sinonim dari suatu kata
ambilSinonim(kata) {
if (!this.data[kata]) { // akan ditelusuri dulu apakah kata yang dijalankan tidak ditemukan di kamus
for (let kunci in this.data) { // lalu dicek dlu apakah kata bagian dari sinonim dari kata lain
if (this.data[kunci].has(kata)) {
return [kata];
}
}
return null; // kalau kata yang digunakan benar-benar tidak ditemukan di mana pun
}
let hasil = new Set();
let antrian = [...this.data[kata]];
let dikunjungi = new Set();
for (let s of this.data[kata]) {
hasil.add(s);
dikunjungi.add(s);
}
while (antrian.length > 0) {
let sekarang = antrian.shift();
if (this.data[sekarang]) {
for (let berikutnya of this.data[sekarang]) {
if (!dikunjungi.has(berikutnya)) {
hasil.add(berikutnya);
antrian.push(berikutnya);
dikunjungi.add(berikutnya);
}
}
}
}
return Array.from(hasil);
}
}
const kamus = new Kamus();
// Tambahkan sinonim
kamus.tambah('bahagia', ['senang', 'gembira']);
kamus.tambah('gembira', ['riang', 'ceria']);
kamus.tambah('senang', ['puas', 'lega']);
kamus.tambah('lega', ['tenang']);
kamus.tambah('marah', ['geram', 'murka']);
kamus.tambah('geram', ['kesal']);
// Ambil sinonim
console.log('Sinonim dari "bahagia":');
console.log(kamus.ambilSinonim('bahagia'));
// harusnya akan menghasilkan output: ['senang', 'gembira', 'puas', 'lega', 'riang', 'ceria', 'tenang']
console.log('\nSinonim dari "gembira":');
console.log(kamus.ambilSinonim('gembira'));
// harusnya akan menghasilkan output : ['riang', 'ceria']
console.log('\nSinonim dari "geram":');
console.log(kamus.ambilSinonim('geram'));
// harusnya akan menghasilkan output: ['kesal']
console.log('\nSinonim dari "kesal":');
console.log(kamus.ambilSinonim('kesal'));
// Outputnya : ['kesal']
console.log('\nSinonim dari "abcde":');
console.log(kamus.ambilSinonim('abcde'));
// untuk kata yang tidak ada didalam kamus, outputnya : null