<?php
class Kamus {
private $data = [];
// Menambahkan kata beserta sinonim
public function tambah($kata, $sinonimArray) {
if (!isset($this->data[$kata])) { $this->data[$kata] = [];
}
foreach ($sinonimArray as $sinonim) {
if (!in_array($sinonim, $this->data[$kata])) { $this->data[$kata][] = $sinonim;
}
}
}
// Mengambil sinonim dari kata, termasuk chaining
public function ambilSinonim($kata) {
if (!isset($this->data[$kata])) { // Cek apakah kata adalah sinonim dari kata lain
foreach ($this->data as $key => $sinonimList) {
return [$key];
}
}
return null;
}
$hasil = [];
$queue = [$kata];
$visited = [$kata];
if (isset($this->data[$current])) { foreach ($this->data[$current] as $syn) {
$hasil[] = $syn;
$queue[] = $syn;
$visited[] = $syn;
}
}
}
}
}
return $hasil;
}
}
// Contoh pengujian
$kamus = new Kamus();
$kamus->tambah('big', ['large', 'great']);
$kamus->tambah('big', ['huge', 'fat']);
$kamus->tambah('huge', ['enormous', 'gigantic']);
print_r($kamus->ambilSinonim('big')); // ['large', 'great', 'huge', 'fat', 'enormous', 'gigantic'] print_r($kamus->ambilSinonim('huge')); // ['enormous', 'gigantic'] print_r($kamus->ambilSinonim('gigantic')); // ['huge'] print_r($kamus->ambilSinonim('colossal')); // null
PD9waHAKCmNsYXNzIEthbXVzIHsKICAgIHByaXZhdGUgJGRhdGEgPSBbXTsKCiAgICAvLyBNZW5hbWJhaGthbiBrYXRhIGJlc2VydGEgc2lub25pbQogICAgcHVibGljIGZ1bmN0aW9uIHRhbWJhaCgka2F0YSwgJHNpbm9uaW1BcnJheSkgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmRhdGFbJGthdGFdKSkgewogICAgICAgICAgICAkdGhpcy0+ZGF0YVska2F0YV0gPSBbXTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRzaW5vbmltQXJyYXkgYXMgJHNpbm9uaW0pIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkc2lub25pbSwgJHRoaXMtPmRhdGFbJGthdGFdKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmRhdGFbJGthdGFdW10gPSAkc2lub25pbTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyBNZW5nYW1iaWwgc2lub25pbSBkYXJpIGthdGEsIHRlcm1hc3VrIGNoYWluaW5nCiAgICBwdWJsaWMgZnVuY3Rpb24gYW1iaWxTaW5vbmltKCRrYXRhKSB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZGF0YVska2F0YV0pKSB7CiAgICAgICAgICAgIC8vIENlayBhcGFrYWgga2F0YSBhZGFsYWggc2lub25pbSBkYXJpIGthdGEgbGFpbgogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAka2V5ID0+ICRzaW5vbmltTGlzdCkgewogICAgICAgICAgICAgICAgaWYgKGluX2FycmF5KCRrYXRhLCAkc2lub25pbUxpc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFska2V5XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRoYXNpbCA9IFtdOwogICAgICAgICRxdWV1ZSA9IFska2F0YV07CiAgICAgICAgJHZpc2l0ZWQgPSBbJGthdGFdOwoKICAgICAgICB3aGlsZSAoIWVtcHR5KCRxdWV1ZSkpIHsKICAgICAgICAgICAgJGN1cnJlbnQgPSBhcnJheV9zaGlmdCgkcXVldWUpOwogICAgICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmRhdGFbJGN1cnJlbnRdKSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGFbJGN1cnJlbnRdIGFzICRzeW4pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRzeW4sICRoYXNpbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGhhc2lsW10gPSAkc3luOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRzeW4sICR2aXNpdGVkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHF1ZXVlW10gPSAkc3luOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZpc2l0ZWRbXSA9ICRzeW47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkaGFzaWw7CiAgICB9Cn0KCi8vIENvbnRvaCBwZW5ndWppYW4KJGthbXVzID0gbmV3IEthbXVzKCk7CiRrYW11cy0+dGFtYmFoKCdiaWcnLCBbJ2xhcmdlJywgJ2dyZWF0J10pOwoka2FtdXMtPnRhbWJhaCgnYmlnJywgWydodWdlJywgJ2ZhdCddKTsKJGthbXVzLT50YW1iYWgoJ2h1Z2UnLCBbJ2Vub3Jtb3VzJywgJ2dpZ2FudGljJ10pOwoKcHJpbnRfcigka2FtdXMtPmFtYmlsU2lub25pbSgnYmlnJykpOyAvLyBbJ2xhcmdlJywgJ2dyZWF0JywgJ2h1Z2UnLCAnZmF0JywgJ2Vub3Jtb3VzJywgJ2dpZ2FudGljJ10KcHJpbnRfcigka2FtdXMtPmFtYmlsU2lub25pbSgnaHVnZScpKTsgLy8gWydlbm9ybW91cycsICdnaWdhbnRpYyddCnByaW50X3IoJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2dpZ2FudGljJykpOyAvLyBbJ2h1Z2UnXQpwcmludF9yKCRrYW11cy0+YW1iaWxTaW5vbmltKCdjb2xvc3NhbCcpKTsgLy8gbnVsbAo=