fork download
  1. <?php
  2. // Membuat class Kamus untuk menyimpan pasangan kata dan sinonimnya
  3. class Kamus {
  4.  
  5. // Array untuk menyimpan mapping kata → sinonim
  6. private $forward = array();
  7. // Array untuk menyimpan mapping sinonim → kata (reverse mapping)
  8. private $reverse = array();
  9.  
  10. // Fungsi untuk menambahkan kata beserta sinonimnya ke dalam kamus
  11. public function tambah($kata, array $sinonimArray) {
  12. // Jika kata belum ada di forward mapping, buat array kosong untuk kata itu
  13. if (!isset($this->forward[$kata])) {
  14. $this->forward[$kata] = array();
  15. }
  16.  
  17. // Loop melalui setiap sinonim yang diberikan
  18. foreach ($sinonimArray as $s) {
  19. // Tambahkan sinonim ke forward mapping jika belum ada
  20. if (!in_array($s, $this->forward[$kata], true)) {
  21. $this->forward[$kata][] = $s;
  22. }
  23.  
  24. // Buat reverse mapping untuk sinonim ke kata
  25. if (!isset($this->reverse[$s])) {
  26. $this->reverse[$s] = array();
  27. }
  28. // Tambahkan kata ke reverse mapping jika belum ada
  29. if (!in_array($kata, $this->reverse[$s], true)) {
  30. $this->reverse[$s][] = $kata;
  31. }
  32. }
  33. }
  34.  
  35. // Fungsi untuk mengambil daftar sinonim dari sebuah kata
  36. public function ambilSinonim($kata) {
  37. $result = array();
  38.  
  39. // Cari kata-kata yang menjadikan $kata sebagai sinonim (reverse mapping)
  40. if (isset($this->reverse[$kata])) {
  41. foreach ($this->reverse[$kata] as $w) {
  42. $result[] = $w;
  43. }
  44. }
  45.  
  46. // Tambahkan juga sinonim langsung dari kata (forward mapping)
  47. if (isset($this->forward[$kata])) {
  48. foreach ($this->forward[$kata] as $s) {
  49. $result[] = $s;
  50. }
  51. }
  52.  
  53. // Jika tidak ada sinonim ditemukan, kembalikan null
  54. return empty($result) ? null : $result;
  55. }
  56. }
  57.  
  58. // Contoh penggunaan:
  59. $kamus = new Kamus();
  60. $kamus->tambah('big', ['large','great']); // big → large, great
  61. $kamus->tambah('big', ['huge','fat']); // big → huge, fat
  62. $kamus->tambah('huge', ['enormous','gigantic']); // huge → enormous, gigantic
  63.  
  64. // Menampilkan sinonim yang ditemukan
  65. var_dump($kamus->ambilSinonim('big')); // Output: ['large','great','huge','fat']
  66. var_dump($kamus->ambilSinonim('huge')); // Output: ['big','enormous','gigantic']
  67. var_dump($kamus->ambilSinonim('gigantic')); // Output: ['huge']
  68. var_dump($kamus->ambilSinonim('colossal')); // Output: null (tidak ada sinonim)
  69. ?>
  70.  
Success #stdin #stdout 0.03s 26104KB
stdin
Standard input is empty
stdout
array(4) {
  [0]=>
  string(5) "large"
  [1]=>
  string(5) "great"
  [2]=>
  string(4) "huge"
  [3]=>
  string(3) "fat"
}
array(3) {
  [0]=>
  string(3) "big"
  [1]=>
  string(8) "enormous"
  [2]=>
  string(8) "gigantic"
}
array(1) {
  [0]=>
  string(4) "huge"
}
NULL