fork download
  1. <?php
  2.  
  3. class Kamus {
  4. private $data = [];
  5.  
  6. // tambah kata + daftar sinonim (relasi dua arah)
  7. public function tambah(string $kata, array $sinonim): void {
  8. if (!isset($this->data[$kata])) {
  9. $this->data[$kata] = [];
  10. }
  11.  
  12. foreach ($sinonim as $s) {
  13. // tambah s ke kata (hindari duplikasi)
  14. if (!in_array($s, $this->data[$kata], true)) {
  15. $this->data[$kata][] = $s;
  16. }
  17.  
  18. // pastikan node s ada
  19. if (!isset($this->data[$s])) {
  20. $this->data[$s] = [];
  21. }
  22.  
  23. // tambah kata ke s (relasi balik), hindari duplikasi
  24. if (!in_array($kata, $this->data[$s], true)) {
  25. $this->data[$s][] = $kata;
  26. }
  27. }
  28. }
  29.  
  30. // ambil daftar sinonim (atau null jika tidak ada)
  31. public function ambilSinonim(string $kata) {
  32. if (!isset($this->data[$kata])) {
  33. return null;
  34. }
  35. return $this->data[$kata];
  36. }
  37. }
  38.  
  39.  
  40. // ===== Pengujian sesuai contoh =====
  41.  
  42. $kamus = new Kamus();
  43. $kamus->tambah('big', ['large', 'great']);
  44. $kamus->tambah('big', ['huge', 'fat']);
  45. $kamus->tambah('huge', ['enormous', 'gigantic']);
  46.  
  47. print_r($kamus->ambilSinonim('big'));
  48. print_r($kamus->ambilSinonim('huge'));
  49. print_r($kamus->ambilSinonim('gigantic'));
  50. var_dump($kamus->ambilSinonim('colossal'));
  51.  
Success #stdin #stdout 0.02s 25648KB
stdin
Standard input is empty
stdout
Array
(
    [0] => large
    [1] => great
    [2] => huge
    [3] => fat
)
Array
(
    [0] => big
    [1] => enormous
    [2] => gigantic
)
Array
(
    [0] => huge
)
NULL