fork download
  1. <?php
  2.  
  3. class Kamus {
  4. private $data = [];
  5.  
  6. public function tambah(string $kata, array $sinonim): void {
  7. if (!isset($this->data[$kata])) {
  8. $this->data[$kata] = [];
  9. }
  10.  
  11. // Gabungkan sinonim baru tanpa duplikat
  12. $this->data[$kata] = array_values(array_unique(array_merge($this->data[$kata], $sinonim)));
  13. }
  14.  
  15. public function ambilSinonim(string $kata): ?array {
  16. $hasil = [];
  17.  
  18. // 1. Tambahkan sinonim langsung dari key
  19. if (isset($this->data[$kata])) {
  20. $hasil = $this->data[$kata];
  21. }
  22.  
  23. // 2. Tambahkan key lain yang menjadikan kata ini sebagai sinonim
  24. foreach ($this->data as $k => $sinonim) {
  25. if (in_array($kata, $sinonim, true)) {
  26. $hasil[] = $k;
  27. }
  28. }
  29.  
  30. if (empty($hasil)) {
  31. return null;
  32. }
  33.  
  34. return array_values(array_unique($hasil));
  35. }
  36. }
  37.  
  38.  
  39. $kamus = new Kamus();
  40. $kamus->tambah('big', ['large', 'great']);
  41. $kamus->tambah('big', ['huge', 'fat']);
  42. $kamus->tambah('huge', ['enormous', 'gigantic']);
  43.  
  44. print_r($kamus->ambilSinonim('big'));
  45. // ['large', 'great', 'huge', 'fat']
  46.  
  47. print_r($kamus->ambilSinonim('huge'));
  48. // ['enormous', 'gigantic', 'big']
  49.  
  50. print_r($kamus->ambilSinonim('gigantic'));
  51. // ['huge']
  52.  
  53. print_r($kamus->ambilSinonim('colossal'));
  54. // null
  55.  
Success #stdin #stdout 0.02s 26028KB
stdin
Standard input is empty
stdout
Array
(
    [0] => large
    [1] => great
    [2] => huge
    [3] => fat
)
Array
(
    [0] => enormous
    [1] => gigantic
    [2] => big
)
Array
(
    [0] => huge
)