fork download
  1. from typing import List, Set, Dict, Optional
  2.  
  3. class Kamus:
  4. """
  5. Sistem kamus sinonim (thesaurus) dengan hubungan simetris.
  6. """
  7. def __init__(self):
  8. # Struktur data utama: Dict untuk pencarian O(1), Set untuk data unik & efisiensi.
  9. self._data: Dict[str, Set[str]] = {}
  10.  
  11. def tambah(self, kata: str, sinonim: List[str]) -> None:
  12. self._data.setdefault(kata, set()).update(sinonim)
  13. for s in sinonim:
  14. self._data.setdefault(s, set()).add(kata)
  15.  
  16. def ambil_sinonim(self, kata: str) -> Optional[List[str]]:
  17. hasil_set = self._data.get(kata)
  18. if hasil_set is not None:
  19. return list(hasil_set)
  20. return None
  21.  
  22. def main():
  23. # Inisialisasi object dari class Kamus.
  24. kamus = Kamus()
  25. kamus.tambah('big', ['large', 'great'])
  26. kamus.tambah('big', ['huge', 'fat'])
  27. kamus.tambah('huge', ['enormous', 'gigantic'])
  28.  
  29. # Test case untuk kata 'big'.
  30. hasil_big = kamus.ambil_sinonim('big')
  31. print(sorted(hasil_big) if hasil_big else None)
  32.  
  33. # Test case untuk kata 'huge'.
  34. hasil_huge = kamus.ambil_sinonim('huge')
  35. print(sorted(hasil_huge) if hasil_huge else None)
  36.  
  37. # Test case untuk kata 'gigantic', menguji hubungan simetris dari 'huge'.
  38. hasil_gigantic = kamus.ambil_sinonim('gigantic')
  39. print(sorted(hasil_gigantic) if hasil_gigantic else None)
  40.  
  41. # Test case untuk kata yang tidak ada di dalam kamus.
  42. hasil_colossal = kamus.ambil_sinonim('colossal')
  43. print(sorted(hasil_colossal) if hasil_colossal else None)
  44.  
  45. # Standard entry point di Python.
  46. if __name__ == "__main__":
  47. main()
Success #stdin #stdout 0.19s 16596KB
stdin
Standard input is empty
stdout
['fat', 'great', 'huge', 'large']
['big', 'enormous', 'gigantic']
['huge']
None