fork download
  1. <?php
  2.  
  3. class Kamus {
  4. private $data = [];
  5.  
  6. // Menambahkan kata beserta sinonim
  7. public function tambah($kata, $sinonimArray) {
  8. if (!isset($this->data[$kata])) {
  9. $this->data[$kata] = [];
  10. }
  11.  
  12. foreach ($sinonimArray as $sinonim) {
  13. if (!in_array($sinonim, $this->data[$kata])) {
  14. $this->data[$kata][] = $sinonim;
  15. }
  16. }
  17. }
  18.  
  19. // Mengambil sinonim dari kata, termasuk chaining
  20. public function ambilSinonim($kata) {
  21. if (!isset($this->data[$kata])) {
  22. // Cek apakah kata adalah sinonim dari kata lain
  23. foreach ($this->data as $key => $sinonimList) {
  24. if (in_array($kata, $sinonimList)) {
  25. return [$key];
  26. }
  27. }
  28. return null;
  29. }
  30.  
  31. $hasil = [];
  32. $queue = [$kata];
  33. $visited = [$kata];
  34.  
  35. while (!empty($queue)) {
  36. $current = array_shift($queue);
  37. if (isset($this->data[$current])) {
  38. foreach ($this->data[$current] as $syn) {
  39. if (!in_array($syn, $hasil)) {
  40. $hasil[] = $syn;
  41. if (!in_array($syn, $visited)) {
  42. $queue[] = $syn;
  43. $visited[] = $syn;
  44. }
  45. }
  46. }
  47. }
  48. }
  49.  
  50. return $hasil;
  51. }
  52. }
  53.  
  54. // Contoh pengujian
  55. $kamus = new Kamus();
  56. $kamus->tambah('big', ['large', 'great']);
  57. $kamus->tambah('big', ['huge', 'fat']);
  58. $kamus->tambah('huge', ['enormous', 'gigantic']);
  59.  
  60. print_r($kamus->ambilSinonim('big')); // ['large', 'great', 'huge', 'fat', 'enormous', 'gigantic']
  61. print_r($kamus->ambilSinonim('huge')); // ['enormous', 'gigantic']
  62. print_r($kamus->ambilSinonim('gigantic')); // ['huge']
  63. print_r($kamus->ambilSinonim('colossal')); // null
  64.  
Success #stdin #stdout 0.02s 26252KB
stdin
Standard input is empty
stdout
Array
(
    [0] => large
    [1] => great
    [2] => huge
    [3] => fat
    [4] => enormous
    [5] => gigantic
)
Array
(
    [0] => enormous
    [1] => gigantic
)
Array
(
    [0] => huge
)