class Kamus {
constructor() {
this.data = new Map();
}
tambah(kata, sinonim) {
if (!this.data.has(kata)) {
this.data.set(kata, []);
}
const existingSinonim = this.data.get(kata);
for (let sin of sinonim) {
if (!existingSinonim.includes(sin)) {
existingSinonim.push(sin);
}
}
}
ambilSinonim(kata) {
if (!this.data.has(kata)) {
return null;
}
const sinonimLangsung = this.data.get(kata) || [];
const sinonimTidakLangsung = [];
for (let [kataLain, daftarSinonim] of this.data.entries()) {
if (kataLain !== kata && daftarSinonim.includes(kata)) {
sinonimTidakLangsung.push(kataLain);
}
}
const hasil = [...sinonimLangsung, ...sinonimTidakLangsung];
return console.log([...new Set(hasil)]);
}
tampilkanSemuaData() {
console.log("Data Kamus:");
for (let [kata, sinonim] of this.data.entries()) {
console.log(`${kata}: [${sinonim.join(', ')}]`);
}
}
}
const kamus = new Kamus();
kamus.tambah('huge', ['giant', 'enourmous', 'gigantic']);
kamus.tambah('big', ['large', 'great']);
kamus.ambilSinonim('huge');
kamus.ambilSinonim('big');
kamus.tampilkanSemuaData();
Y2xhc3MgS2FtdXMgewogICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5kYXRhID0gbmV3IE1hcCgpOwogICAgfQogICAgCiAgICB0YW1iYWgoa2F0YSwgc2lub25pbSkgewogICAgICAgIGlmICghdGhpcy5kYXRhLmhhcyhrYXRhKSkgewogICAgICAgICAgICB0aGlzLmRhdGEuc2V0KGthdGEsIFtdKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY29uc3QgZXhpc3RpbmdTaW5vbmltID0gdGhpcy5kYXRhLmdldChrYXRhKTsKICAgICAgICAKICAgICAgICBmb3IgKGxldCBzaW4gb2Ygc2lub25pbSkgewogICAgICAgICAgICBpZiAoIWV4aXN0aW5nU2lub25pbS5pbmNsdWRlcyhzaW4pKSB7CiAgICAgICAgICAgICAgICBleGlzdGluZ1Npbm9uaW0ucHVzaChzaW4pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBhbWJpbFNpbm9uaW0oa2F0YSkgewogICAgICAgIGlmICghdGhpcy5kYXRhLmhhcyhrYXRhKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY29uc3Qgc2lub25pbUxhbmdzdW5nID0gdGhpcy5kYXRhLmdldChrYXRhKSB8fCBbXTsKICAgICAgICAKICAgICAgICBjb25zdCBzaW5vbmltVGlkYWtMYW5nc3VuZyA9IFtdOwogICAgICAgIAogICAgICAgIGZvciAobGV0IFtrYXRhTGFpbiwgZGFmdGFyU2lub25pbV0gb2YgdGhpcy5kYXRhLmVudHJpZXMoKSkgewogICAgICAgICAgICBpZiAoa2F0YUxhaW4gIT09IGthdGEgJiYgZGFmdGFyU2lub25pbS5pbmNsdWRlcyhrYXRhKSkgewogICAgICAgICAgICAgICAgc2lub25pbVRpZGFrTGFuZ3N1bmcucHVzaChrYXRhTGFpbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY29uc3QgaGFzaWwgPSBbLi4uc2lub25pbUxhbmdzdW5nLCAuLi5zaW5vbmltVGlkYWtMYW5nc3VuZ107CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKFsuLi5uZXcgU2V0KGhhc2lsKV0pOwogICAgfQogICAgCiAgICB0YW1waWxrYW5TZW11YURhdGEoKSB7CiAgICAgICAgY29uc29sZS5sb2coIkRhdGEgS2FtdXM6Iik7CiAgICAgICAgZm9yIChsZXQgW2thdGEsIHNpbm9uaW1dIG9mIHRoaXMuZGF0YS5lbnRyaWVzKCkpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coYCR7a2F0YX06IFske3Npbm9uaW0uam9pbignLCAnKX1dYCk7CiAgICAgICAgfQogICAgfQp9Cgpjb25zdCBrYW11cyA9IG5ldyBLYW11cygpOwprYW11cy50YW1iYWgoJ2h1Z2UnLCBbJ2dpYW50JywgJ2Vub3VybW91cycsICdnaWdhbnRpYyddKTsKa2FtdXMudGFtYmFoKCdiaWcnLCBbJ2xhcmdlJywgJ2dyZWF0J10pOwprYW11cy5hbWJpbFNpbm9uaW0oJ2h1Z2UnKTsKa2FtdXMuYW1iaWxTaW5vbmltKCdiaWcnKTsKa2FtdXMudGFtcGlsa2FuU2VtdWFEYXRhKCk7