class Kamus:
def __init__(self):
self._sinonim_map ={}
def tambah(self, kata, sinonim_list):
if kata not in self._sinonim_map: self._sinonim_map[kata] = set()
self._sinonim_map[kata].update(sinonim_list)
def ambilSinonim(self, kata):
forwards = set(self._sinonim_map.get(kata, []))
backwards = {k for k,sinset in self._sinonim_map.items() if kata in sinset}
hasil = forwards.union(backwards)
return list(hasil)if hasil else None
#usage
if __name__ == '__main__':
kamus = Kamus()
kamus.tambah('big', ['large', 'great'])
kamus.tambah('big', ['huge', 'fat'])
kamus.tambah('huge', ['enormous', 'gigantic'])
# kamus.tambah('colossal', ['fat']) #tc
print(kamus.ambilSinonim('big'))
print(kamus.ambilSinonim('huge'))
print(kamus.ambilSinonim('gigantic'))
print(kamus.ambilSinonim('colossal'))
Y2xhc3MgS2FtdXM6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5fc2lub25pbV9tYXAgPXt9CgogICAgZGVmIHRhbWJhaChzZWxmLCBrYXRhLCBzaW5vbmltX2xpc3QpOgogICAgICAgIGlmIGthdGEgbm90IGluIHNlbGYuX3Npbm9uaW1fbWFwOiBzZWxmLl9zaW5vbmltX21hcFtrYXRhXSA9IHNldCgpCiAgICAgICAgc2VsZi5fc2lub25pbV9tYXBba2F0YV0udXBkYXRlKHNpbm9uaW1fbGlzdCkKCiAgICBkZWYgYW1iaWxTaW5vbmltKHNlbGYsIGthdGEpOgogICAgICAgIGZvcndhcmRzID0gc2V0KHNlbGYuX3Npbm9uaW1fbWFwLmdldChrYXRhLCBbXSkpCiAgICAgICAgYmFja3dhcmRzID0ge2sgZm9yIGssc2luc2V0IGluIHNlbGYuX3Npbm9uaW1fbWFwLml0ZW1zKCkgaWYga2F0YSBpbiBzaW5zZXR9CiAgICAgICAgaGFzaWwgPSBmb3J3YXJkcy51bmlvbihiYWNrd2FyZHMpCiAgICAgICAgcmV0dXJuIGxpc3QoaGFzaWwpaWYgaGFzaWwgZWxzZSBOb25lCgojdXNhZ2UKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIGthbXVzID0gS2FtdXMoKQogICAga2FtdXMudGFtYmFoKCdiaWcnLCAgWydsYXJnZScsICdncmVhdCddKQogICAga2FtdXMudGFtYmFoKCdiaWcnLCAgWydodWdlJywgJ2ZhdCddKQogICAga2FtdXMudGFtYmFoKCdodWdlJywgWydlbm9ybW91cycsICdnaWdhbnRpYyddKQogICAgIyBrYW11cy50YW1iYWgoJ2NvbG9zc2FsJywgWydmYXQnXSkgI3RjCgogICAgcHJpbnQoa2FtdXMuYW1iaWxTaW5vbmltKCdiaWcnKSkKICAgIHByaW50KGthbXVzLmFtYmlsU2lub25pbSgnaHVnZScpKQogICAgcHJpbnQoa2FtdXMuYW1iaWxTaW5vbmltKCdnaWdhbnRpYycpKQogICAgcHJpbnQoa2FtdXMuYW1iaWxTaW5vbmltKCdjb2xvc3NhbCcpKQo=