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():
print("--- Memulai Eksekusi Sesuai Contoh Soal ---")
kamus = Kamus()
print("\nLangkah 1: Menambahkan kata dan sinonim")
kamus.tambah('big', ['large', 'great'])
print("-> tambah('big', ['large', 'great'])")
kamus.tambah('big', ['huge', 'fat'])
print("-> tambah('big', ['huge', 'fat'])")
kamus.tambah('huge', ['enormous', 'gigantic'])
print("-> tambah('huge', ['enormous', 'gigantic'])")
print("\nLangkah 2: Menjalankan pengujian")
hasil_big = kamus.ambilSinonim('big')
print(f"-> Hasil ambilSinonim('big'): {sorted(hasil_big) if hasil_big else None}")
hasil_huge = kamus.ambilSinonim('huge')
print(f"-> Hasil ambilSinonim('huge'): {sorted(hasil_huge) if hasil_huge else None}")
hasil_gigantic = kamus.ambilSinonim('gigantic')
print(f"-> Hasil ambilSinonim('gigantic'): {hasil_gigantic}")
hasil_colossal = kamus.ambilSinonim('colossal')
print(f"-> Hasil ambilSinonim('colossal'): {hasil_colossal}")
print("\n--- Eksekusi Selesai ---")
if __name__ == "__main__":
main_demonstrasi()
ZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIFNldCwgRGljdCwgT3B0aW9uYWwKCmNsYXNzIEthbXVzOgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuX2RhdGE6IERpY3Rbc3RyLCBTZXRbc3RyXV0gPSB7fQoKICAgIGRlZiB0YW1iYWgoc2VsZiwga2F0YTogc3RyLCBzaW5vbmltOiBMaXN0W3N0cl0pIC0+IE5vbmU6CiAgICAgICAgc2VsZi5fZGF0YS5zZXRkZWZhdWx0KGthdGEsIHNldCgpKS51cGRhdGUoc2lub25pbSkKICAgICAgICBmb3IgcyBpbiBzaW5vbmltOgogICAgICAgICAgICBzZWxmLl9kYXRhLnNldGRlZmF1bHQocywgc2V0KCkpLmFkZChrYXRhKQoKICAgIGRlZiBhbWJpbFNpbm9uaW0oc2VsZiwga2F0YTogc3RyKSAtPiBPcHRpb25hbFtMaXN0W3N0cl1dOgogICAgICAgIGhhc2lsX3NldCA9IHNlbGYuX2RhdGEuZ2V0KGthdGEpCiAgICAgICAgaWYgaGFzaWxfc2V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICByZXR1cm4gbGlzdChoYXNpbF9zZXQpCiAgICAgICAgcmV0dXJuIE5vbmUKCmRlZiBtYWluX2RlbW9uc3RyYXNpKCk6CiAgICBwcmludCgiLS0tIE1lbXVsYWkgRWtzZWt1c2kgU2VzdWFpIENvbnRvaCBTb2FsIC0tLSIpCgogICAga2FtdXMgPSBLYW11cygpCiAgICBwcmludCgiXG5MYW5na2FoIDE6IE1lbmFtYmFoa2FuIGthdGEgZGFuIHNpbm9uaW0iKQogICAga2FtdXMudGFtYmFoKCdiaWcnLCBbJ2xhcmdlJywgJ2dyZWF0J10pCiAgICBwcmludCgiLT4gdGFtYmFoKCdiaWcnLCBbJ2xhcmdlJywgJ2dyZWF0J10pIikKICAgIAogICAga2FtdXMudGFtYmFoKCdiaWcnLCBbJ2h1Z2UnLCAnZmF0J10pCiAgICBwcmludCgiLT4gdGFtYmFoKCdiaWcnLCBbJ2h1Z2UnLCAnZmF0J10pIikKICAgIAogICAga2FtdXMudGFtYmFoKCdodWdlJywgWydlbm9ybW91cycsICdnaWdhbnRpYyddKQogICAgcHJpbnQoIi0+IHRhbWJhaCgnaHVnZScsIFsnZW5vcm1vdXMnLCAnZ2lnYW50aWMnXSkiKQogICAgCiAgICBwcmludCgiXG5MYW5na2FoIDI6IE1lbmphbGFua2FuIHBlbmd1amlhbiIpCiAgICAKICAgIGhhc2lsX2JpZyA9IGthbXVzLmFtYmlsU2lub25pbSgnYmlnJykKICAgIHByaW50KGYiLT4gSGFzaWwgYW1iaWxTaW5vbmltKCdiaWcnKToge3NvcnRlZChoYXNpbF9iaWcpIGlmIGhhc2lsX2JpZyBlbHNlIE5vbmV9IikKICAgIAogICAgaGFzaWxfaHVnZSA9IGthbXVzLmFtYmlsU2lub25pbSgnaHVnZScpCiAgICBwcmludChmIi0+IEhhc2lsIGFtYmlsU2lub25pbSgnaHVnZScpOiB7c29ydGVkKGhhc2lsX2h1Z2UpIGlmIGhhc2lsX2h1Z2UgZWxzZSBOb25lfSIpCgogICAgaGFzaWxfZ2lnYW50aWMgPSBrYW11cy5hbWJpbFNpbm9uaW0oJ2dpZ2FudGljJykKICAgIHByaW50KGYiLT4gSGFzaWwgYW1iaWxTaW5vbmltKCdnaWdhbnRpYycpOiB7aGFzaWxfZ2lnYW50aWN9IikKCiAgICBoYXNpbF9jb2xvc3NhbCA9IGthbXVzLmFtYmlsU2lub25pbSgnY29sb3NzYWwnKQogICAgcHJpbnQoZiItPiBIYXNpbCBhbWJpbFNpbm9uaW0oJ2NvbG9zc2FsJyk6IHtoYXNpbF9jb2xvc3NhbH0iKQogICAgCiAgICBwcmludCgiXG4tLS0gRWtzZWt1c2kgU2VsZXNhaSAtLS0iKQoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIG1haW5fZGVtb25zdHJhc2koKQ==
--- Memulai Eksekusi Sesuai Contoh Soal ---
Langkah 1: Menambahkan kata dan sinonim
-> tambah('big', ['large', 'great'])
-> tambah('big', ['huge', 'fat'])
-> tambah('huge', ['enormous', 'gigantic'])
Langkah 2: Menjalankan pengujian
-> Hasil ambilSinonim('big'): ['fat', 'great', 'huge', 'large']
-> Hasil ambilSinonim('huge'): ['big', 'enormous', 'gigantic']
-> Hasil ambilSinonim('gigantic'): ['huge']
-> Hasil ambilSinonim('colossal'): None
--- Eksekusi Selesai ---