# -------- Muhammad Yalqa R.A. - Suitmedia Backend Test --------
class Kamus:
def __init__(self):
self.kamus = {}
def tambah(self, kata, daftar_sinonim):
if kata not in self.kamus:
self.kamus[kata] = set()
self.kamus[kata].update(daftar_sinonim)
def ambilSinonim(self, kata):
hasil = set()
if kata in self.kamus:
hasil.update(self.kamus[kata])
for key, sinonim_set in self.kamus.items():
if kata in sinonim_set:
hasil.add(key)
if not hasil and all(kata not in s for s in self.kamus.values()):
return None
if not hasil:
return [kata]
return sorted(hasil)
# -------- TEST CASES --------
kamus = Kamus()
kamus.tambah("big", ["large", "great"])
kamus.tambah("big", ["huge", "fat"])
kamus.tambah("huge", ["enormous", "gigantic"])
for kata in ["big", "huge", "gigantic", "colossal"]:
hasil = kamus.ambilSinonim(kata)
print(f"Sinonim dari '{kata}': {hasil if hasil is not None else 'null'}")
IyAtLS0tLS0tLSBNdWhhbW1hZCBZYWxxYSBSLkEuIC0gU3VpdG1lZGlhIEJhY2tlbmQgVGVzdCAtLS0tLS0tLQoKY2xhc3MgS2FtdXM6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5rYW11cyA9IHt9CgogICAgZGVmIHRhbWJhaChzZWxmLCBrYXRhLCBkYWZ0YXJfc2lub25pbSk6CiAgICAgICAgaWYga2F0YSBub3QgaW4gc2VsZi5rYW11czoKICAgICAgICAgICAgc2VsZi5rYW11c1trYXRhXSA9IHNldCgpCiAgICAgICAgc2VsZi5rYW11c1trYXRhXS51cGRhdGUoZGFmdGFyX3Npbm9uaW0pCgogICAgZGVmIGFtYmlsU2lub25pbShzZWxmLCBrYXRhKToKICAgICAgICBoYXNpbCA9IHNldCgpCgogICAgICAgIGlmIGthdGEgaW4gc2VsZi5rYW11czoKICAgICAgICAgICAgaGFzaWwudXBkYXRlKHNlbGYua2FtdXNba2F0YV0pCgogICAgICAgIGZvciBrZXksIHNpbm9uaW1fc2V0IGluIHNlbGYua2FtdXMuaXRlbXMoKToKICAgICAgICAgICAgaWYga2F0YSBpbiBzaW5vbmltX3NldDoKICAgICAgICAgICAgICAgIGhhc2lsLmFkZChrZXkpCgogICAgICAgIGlmIG5vdCBoYXNpbCBhbmQgYWxsKGthdGEgbm90IGluIHMgZm9yIHMgaW4gc2VsZi5rYW11cy52YWx1ZXMoKSk6CiAgICAgICAgICAgIHJldHVybiBOb25lCgogICAgICAgIGlmIG5vdCBoYXNpbDoKICAgICAgICAgICAgcmV0dXJuIFtrYXRhXQoKICAgICAgICByZXR1cm4gc29ydGVkKGhhc2lsKQoKCiMgLS0tLS0tLS0gVEVTVCBDQVNFUyAtLS0tLS0tLQoKa2FtdXMgPSBLYW11cygpCmthbXVzLnRhbWJhaCgiYmlnIiwgWyJsYXJnZSIsICJncmVhdCJdKQprYW11cy50YW1iYWgoImJpZyIsIFsiaHVnZSIsICJmYXQiXSkKa2FtdXMudGFtYmFoKCJodWdlIiwgWyJlbm9ybW91cyIsICJnaWdhbnRpYyJdKQoKZm9yIGthdGEgaW4gWyJiaWciLCAiaHVnZSIsICJnaWdhbnRpYyIsICJjb2xvc3NhbCJdOgogICAgaGFzaWwgPSBrYW11cy5hbWJpbFNpbm9uaW0oa2F0YSkKICAgIHByaW50KGYiU2lub25pbSBkYXJpICd7a2F0YX0nOiB7aGFzaWwgaWYgaGFzaWwgaXMgbm90IE5vbmUgZWxzZSAnbnVsbCd9Iik=