class Kamus {
constructor() {
this.data = {};
}
tambah(kata, sinonim) {
if (!this.data[kata]) {
this.data[kata] = new Set();
}
for (let s of sinonim) {
this.data[kata].add(s);
if (!this.data[s]) {
this.data[s] = new Set();
}
this.data[s].add(kata);
}
}
ambilSinonim(kata) {
if (!this.data[kata]) {
return null;
}
return Array.from(this.data[kata]);
}
}
// pengujian
const kamus = new Kamus();
kamus.tambah('big', ['large', 'great']);
kamus.tambah('big', ['huge', 'fat']);
kamus.tambah('huge', ['enormous', 'gigantic']);
console.log(kamus.ambilSinonim('big'));
// ['large', 'great', 'huge', 'fat']
console.log(kamus.ambilSinonim('huge'));
// ['big', 'enormous', 'gigantic']
console.log(kamus.ambilSinonim('gigantic'));
// ['huge']
console.log(kamus.ambilSinonim('colossal'));
// null
Y2xhc3MgS2FtdXMgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5kYXRhID0ge307CiAgICB9CgogICAgdGFtYmFoKGthdGEsIHNpbm9uaW0pIHsKICAgICAgICBpZiAoIXRoaXMuZGF0YVtrYXRhXSkgewogICAgICAgICAgICB0aGlzLmRhdGFba2F0YV0gPSBuZXcgU2V0KCk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGxldCBzIG9mIHNpbm9uaW0pIHsKICAgICAgICAgICAgdGhpcy5kYXRhW2thdGFdLmFkZChzKTsKCiAgICAgICAgICAgIGlmICghdGhpcy5kYXRhW3NdKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbc10gPSBuZXcgU2V0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5kYXRhW3NdLmFkZChrYXRhKTsKICAgICAgICB9CiAgICB9CgogICAgYW1iaWxTaW5vbmltKGthdGEpIHsKICAgICAgICBpZiAoIXRoaXMuZGF0YVtrYXRhXSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZGF0YVtrYXRhXSk7CiAgICB9Cn0KCi8vIHBlbmd1amlhbgpjb25zdCBrYW11cyA9IG5ldyBLYW11cygpOwoKa2FtdXMudGFtYmFoKCdiaWcnLCBbJ2xhcmdlJywgJ2dyZWF0J10pOwprYW11cy50YW1iYWgoJ2JpZycsIFsnaHVnZScsICdmYXQnXSk7CmthbXVzLnRhbWJhaCgnaHVnZScsIFsnZW5vcm1vdXMnLCAnZ2lnYW50aWMnXSk7Cgpjb25zb2xlLmxvZyhrYW11cy5hbWJpbFNpbm9uaW0oJ2JpZycpKTsKLy8gWydsYXJnZScsICdncmVhdCcsICdodWdlJywgJ2ZhdCddCgpjb25zb2xlLmxvZyhrYW11cy5hbWJpbFNpbm9uaW0oJ2h1Z2UnKSk7Ci8vIFsnYmlnJywgJ2Vub3Jtb3VzJywgJ2dpZ2FudGljJ10KCmNvbnNvbGUubG9nKGthbXVzLmFtYmlsU2lub25pbSgnZ2lnYW50aWMnKSk7Ci8vIFsnaHVnZSddCgpjb25zb2xlLmxvZyhrYW11cy5hbWJpbFNpbm9uaW0oJ2NvbG9zc2FsJykpOwovLyBudWxs