from typing import List, Set, Dict, Optional
class Kamus:
def __init__(self):
self._data: Dict[str, Set[str]] = {}
def tambah(self, kata: str, sinonim: List[str]) -> None:
self._data.setdefault(kata, set()).update(sinonim)
for s in sinonim:
self._data.setdefault(s, set()).add(kata)
def ambilSinonim(self, kata: str) -> Optional[List[str]]:
hasil_set = self._data.get(kata)
if hasil_set is not None:
return list(hasil_set)
return None
def main_demonstrasi():
# Inisialisasi dan penambahan data
kamus = Kamus()
kamus.tambah('big', ['large', 'great'])
kamus.tambah('big', ['huge', 'fat'])
kamus.tambah('huge', ['enormous', 'gigantic'])
# Menjalankan pengujian dan mencetak hasilnya saja
hasil_big = kamus.ambilSinonim('big')
print(sorted(hasil_big) if hasil_big else None)
hasil_huge = kamus.ambilSinonim('huge')
print(sorted(hasil_huge) if hasil_huge else None)
hasil_gigantic = kamus.ambilSinonim('gigantic')
print(hasil_gigantic)
hasil_colossal = kamus.ambilSinonim('colossal')
print(hasil_colossal)
if __name__ == "__main__":
main_demonstrasi()
ZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFNldCwgRGljdCwgT3B0aW9uYWwKCmNsYXNzIEthbXVzOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuX2RhdGE6IERpY3Rbc3RyLCBTZXRbc3RyXV0gPSB7fQoKICAgIGRlZiB0YW1iYWgoc2VsZiwga2F0YTogc3RyLCBzaW5vbmltOiBMaXN0W3N0cl0pIC0+IE5vbmU6CiAgICAgICAgc2VsZi5fZGF0YS5zZXRkZWZhdWx0KGthdGEsIHNldCgpKS51cGRhdGUoc2lub25pbSkKICAgICAgICBmb3IgcyBpbiBzaW5vbmltOgogICAgICAgICAgICBzZWxmLl9kYXRhLnNldGRlZmF1bHQocywgc2V0KCkpLmFkZChrYXRhKQoKICAgIGRlZiBhbWJpbFNpbm9uaW0oc2VsZiwga2F0YTogc3RyKSAtPiBPcHRpb25hbFtMaXN0W3N0cl1dOgogICAgICAgIGhhc2lsX3NldCA9IHNlbGYuX2RhdGEuZ2V0KGthdGEpCiAgICAgICAgaWYgaGFzaWxfc2V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXR1cm4gbGlzdChoYXNpbF9zZXQpCiAgICAgICAgcmV0dXJuIE5vbmUKCmRlZiBtYWluX2RlbW9uc3RyYXNpKCk6CiAgICAjIEluaXNpYWxpc2FzaSBkYW4gcGVuYW1iYWhhbiBkYXRhCiAgICBrYW11cyA9IEthbXVzKCkKICAgIGthbXVzLnRhbWJhaCgnYmlnJywgWydsYXJnZScsICdncmVhdCddKQogICAga2FtdXMudGFtYmFoKCdiaWcnLCBbJ2h1Z2UnLCAnZmF0J10pCiAgICBrYW11cy50YW1iYWgoJ2h1Z2UnLCBbJ2Vub3Jtb3VzJywgJ2dpZ2FudGljJ10pCgogICAgIyBNZW5qYWxhbmthbiBwZW5ndWppYW4gZGFuIG1lbmNldGFrIGhhc2lsbnlhIHNhamEKICAgIGhhc2lsX2JpZyA9IGthbXVzLmFtYmlsU2lub25pbSgnYmlnJykKICAgIHByaW50KHNvcnRlZChoYXNpbF9iaWcpIGlmIGhhc2lsX2JpZyBlbHNlIE5vbmUpCiAgICAKICAgIGhhc2lsX2h1Z2UgPSBrYW11cy5hbWJpbFNpbm9uaW0oJ2h1Z2UnKQogICAgcHJpbnQoc29ydGVkKGhhc2lsX2h1Z2UpIGlmIGhhc2lsX2h1Z2UgZWxzZSBOb25lKQoKICAgIGhhc2lsX2dpZ2FudGljID0ga2FtdXMuYW1iaWxTaW5vbmltKCdnaWdhbnRpYycpCiAgICBwcmludChoYXNpbF9naWdhbnRpYykKCiAgICBoYXNpbF9jb2xvc3NhbCA9IGthbXVzLmFtYmlsU2lub25pbSgnY29sb3NzYWwnKQogICAgcHJpbnQoaGFzaWxfY29sb3NzYWwpCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbl9kZW1vbnN0cmFzaSgp