class Kamus {
constructor() {
this.sinonim = new Map();
}
tambah(kata, sinonimArray) {
if (this.sinonim.has(kata)) {
const sinonimLama = this.sinonim.get(kata);
const sinonimBaru = new Set([...sinonimLama, ...sinonimArray]);
this.sinonim.set(kata, Array.from(sinonimBaru));
} else {
this.sinonim.set(kata, sinonimArray);
}
}
ambilSinonim(kata) {
const hasilSinonim = new Set();
let ditemukan = false;
if (this.sinonim.has(kata)) {
ditemukan = true;
const sinonimKata = this.sinonim.get(kata);
sinonimKata.forEach((sinonim) => hasilSinonim.add(sinonim));
}
for (const [key, sinonimArray] of this.sinonim.entries()) {
if (sinonimArray.includes(kata)) {
ditemukan = true;
hasilSinonim.add(key);
}
}
if (!ditemukan) {
return null;
}
return Array.from(hasilSinonim);
}
}
const kamus = new Kamus();
kamus.tambah("big", ["large", "great"]);
kamus.tambah("big", ["huge", "fat"]);
kamus.tambah("big", ["great"]);
kamus.tambah("huge", ["enormous", "gigantic"]);
console.log(kamus.ambilSinonim("big")); //['large', 'fat', 'great', 'huge', 'enormous', 'gigantic']
console.log(kamus.ambilSinonim("huge")); // ["large", "great", "huge", "fat", "enormous", "gigantic"]
console.log(kamus.ambilSinonim("gigantic")); // ['huge']
console.log(kamus.ambilSinonim("colossal")); // null
Y2xhc3MgS2FtdXMgewogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5zaW5vbmltID0gbmV3IE1hcCgpOwogIH0KCiAgdGFtYmFoKGthdGEsIHNpbm9uaW1BcnJheSkgewogICAgaWYgKHRoaXMuc2lub25pbS5oYXMoa2F0YSkpIHsKICAgICAgY29uc3Qgc2lub25pbUxhbWEgPSB0aGlzLnNpbm9uaW0uZ2V0KGthdGEpOwogICAgICBjb25zdCBzaW5vbmltQmFydSA9IG5ldyBTZXQoWy4uLnNpbm9uaW1MYW1hLCAuLi5zaW5vbmltQXJyYXldKTsKICAgICAgdGhpcy5zaW5vbmltLnNldChrYXRhLCBBcnJheS5mcm9tKHNpbm9uaW1CYXJ1KSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNpbm9uaW0uc2V0KGthdGEsIHNpbm9uaW1BcnJheSk7CiAgICB9CiAgfQoKICBhbWJpbFNpbm9uaW0oa2F0YSkgewogICAgY29uc3QgaGFzaWxTaW5vbmltID0gbmV3IFNldCgpOwogICAgbGV0IGRpdGVtdWthbiA9IGZhbHNlOwoKICAgIGlmICh0aGlzLnNpbm9uaW0uaGFzKGthdGEpKSB7CiAgICAgIGRpdGVtdWthbiA9IHRydWU7CiAgICAgIGNvbnN0IHNpbm9uaW1LYXRhID0gdGhpcy5zaW5vbmltLmdldChrYXRhKTsKICAgICAgc2lub25pbUthdGEuZm9yRWFjaCgoc2lub25pbSkgPT4gaGFzaWxTaW5vbmltLmFkZChzaW5vbmltKSk7CiAgICB9CgogICAgZm9yIChjb25zdCBba2V5LCBzaW5vbmltQXJyYXldIG9mIHRoaXMuc2lub25pbS5lbnRyaWVzKCkpIHsKICAgICAgaWYgKHNpbm9uaW1BcnJheS5pbmNsdWRlcyhrYXRhKSkgewogICAgICAgIGRpdGVtdWthbiA9IHRydWU7CiAgICAgICAgaGFzaWxTaW5vbmltLmFkZChrZXkpOwogICAgICB9CiAgICB9CgogICAgaWYgKCFkaXRlbXVrYW4pIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcmV0dXJuIEFycmF5LmZyb20oaGFzaWxTaW5vbmltKTsKICB9Cn0KCmNvbnN0IGthbXVzID0gbmV3IEthbXVzKCk7CmthbXVzLnRhbWJhaCgiYmlnIiwgWyJsYXJnZSIsICJncmVhdCJdKTsKa2FtdXMudGFtYmFoKCJiaWciLCBbImh1Z2UiLCAiZmF0Il0pOwprYW11cy50YW1iYWgoImJpZyIsIFsiZ3JlYXQiXSk7CmthbXVzLnRhbWJhaCgiaHVnZSIsIFsiZW5vcm1vdXMiLCAiZ2lnYW50aWMiXSk7Cgpjb25zb2xlLmxvZyhrYW11cy5hbWJpbFNpbm9uaW0oImJpZyIpKTsgLy9bJ2xhcmdlJywgJ2ZhdCcsICdncmVhdCcsICdodWdlJywgJ2Vub3Jtb3VzJywgJ2dpZ2FudGljJ10KY29uc29sZS5sb2coa2FtdXMuYW1iaWxTaW5vbmltKCJodWdlIikpOyAvLyBbImxhcmdlIiwgImdyZWF0IiwgImh1Z2UiLCAiZmF0IiwgImVub3Jtb3VzIiwgImdpZ2FudGljIl0KY29uc29sZS5sb2coa2FtdXMuYW1iaWxTaW5vbmltKCJnaWdhbnRpYyIpKTsgLy8gWydodWdlJ10KY29uc29sZS5sb2coa2FtdXMuYW1iaWxTaW5vbmltKCJjb2xvc3NhbCIpKTsgLy8gbnVsbAo=