fork download
  1. <?php
  2. class Kamus
  3. {
  4. private $graph = [];
  5. private $keys = [];
  6.  
  7. public function tambah(string $kata, array $sinonim): void
  8. {
  9. // Pastikan ada list untuk $kata
  10. if (!isset($this->graph[$kata])) {
  11. $this->graph[$kata] = [];
  12. }
  13. // Tandai bahwa $kata pernah di‐tambah
  14. $this->keys[$kata] = true;
  15.  
  16. foreach ($sinonim as $s) {
  17. // Buat node untuk $s jika belum ada
  18. if (!isset($this->graph[$s])) {
  19. $this->graph[$s] = [];
  20. }
  21.  
  22. // Tambahkan $s ke daftar $kata, jika belum ada
  23. if (!in_array($s, $this->graph[$kata], true)) {
  24. $this->graph[$kata][] = $s;
  25. }
  26.  
  27. // Tambahkan $kata ke daftar $s, jika belum ada
  28. if (!in_array($kata, $this->graph[$s], true)) {
  29. $this->graph[$s][] = $kata;
  30. }
  31. }
  32. }
  33.  
  34. public function ambilSinonim(string $kata)
  35. {
  36. if (!isset($this->keys[$kata])) {
  37. return null;
  38. }
  39. return $this->graph[$kata];
  40. }
  41. }
  42.  
  43.  
  44. $kamus = new Kamus();
  45.  
  46. // Kata: “gubris” (jarang dipakai), sinonim: abaikan, acuhkan
  47. $kamus->tambah('gubris', ['abaikan', 'acuhkan']);
  48.  
  49. // Tambah lagi sinonim “mengabaikan” untuk “gubris”
  50. $kamus->tambah('gubris', ['mengabaikan']);
  51.  
  52. // Kata “abaikan” juga ditambahkan sendiri dengan sinonim lain
  53. $kamus->tambah('abaikan', ['mengesampingkan', 'menyampingkan']);
  54.  
  55. // Ambil sinonim “gubris”
  56. print_r($kamus->ambilSinonim('gubris'));
  57. // Ambil sinonim “abaikan” (harus menyertakan “gubris” karena dua arah)
  58. print_r($kamus->ambilSinonim('abaikan'));
  59.  
  60. // Kata yang hanya muncul sebagai sinonim, bukan kunci, mengembalikan null
  61. var_dump($kamus->ambilSinonim('acuhkan')); // null
  62. var_dump($kamus->ambilSinonim('menyampingkan')); // null
  63.  
Success #stdin #stdout 0.03s 26200KB
stdin
Standard input is empty
stdout
Array
(
    [0] => abaikan
    [1] => acuhkan
    [2] => mengabaikan
)
Array
(
    [0] => gubris
    [1] => mengesampingkan
    [2] => menyampingkan
)
NULL
NULL