<?php
class Kamus {
private $data;
public function __construct() {
}
public function tambah($kata, $sinonim) {
// Jika belum ada di kamus, tambahkan
if (!isset($this->data[$kata])) { $this->data[$kata] = array(); }
// Tambahkan sinonim
foreach ($sinonim as $s) {
if (!in_array($s, $this->data[$kata])) { $this->data[$kata][] = $s;
}
// Lakukan kebalikannya
// Jika belum ada di kamus, tambahkan
if (!isset($this->data[$s])) { $this->data[$s] = array(); }
if (!in_array($kata, $this->data[$s])) { $this->data[$s][] = $kata;
}
}
}
//ambil dari kamus
public function ambilSinonim($kata) {
if (isset($this->data[$kata])) { return $this->data[$kata];
} else {
return null;
}
}
}
function printSinonim($hasil) {
if ($hasil !== null) {
echo "['" . implode("', '", $hasil) . "']\n"; } else {
echo "null\n";
}
}
// test Case
$kamus = new Kamus();
$kamus->tambah('big', ['large', 'great']);
$kamus->tambah('big', ['huge', 'fat']);
$kamus->tambah('huge', ['enormous', 'gigantic']);
$hasil_big = $kamus->ambilSinonim('big');
echo "sinonim big: ";
printSinonim($hasil_big);
$hasil_huge = $kamus->ambilSinonim('huge');
echo "sinonim huge: ";
printSinonim($hasil_huge);
$hasil_gigantic = $kamus->ambilSinonim('gigantic');
echo "sinonim gigantic: ";
printSinonim($hasil_gigantic);
$hasil_colossal = $kamus->ambilSinonim('colossal');
echo "sinonim colossal: ";
printSinonim($hasil_colossal);
?>
PD9waHAKCmNsYXNzIEthbXVzIHsKICAgIHByaXZhdGUgJGRhdGE7CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHsKICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1iYWgoJGthdGEsICRzaW5vbmltKSB7CgogICAgICAgIAogICAgICAgIC8vIEppa2EgYmVsdW0gYWRhIGRpIGthbXVzLCB0YW1iYWhrYW4KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWyRrYXRhXSkpIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGFbJGthdGFdID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gVGFtYmFoa2FuIHNpbm9uaW0KICAgICAgICBmb3JlYWNoICgkc2lub25pbSBhcyAkcykgewogICAgICAgICAgICBpZiAoIWluX2FycmF5KCRzLCAkdGhpcy0+ZGF0YVska2F0YV0pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZGF0YVska2F0YV1bXSA9ICRzOwogICAgICAgICAgICB9CgkJCS8vIExha3VrYW4ga2ViYWxpa2FubnlhCgkJCS8vIEppa2EgYmVsdW0gYWRhIGRpIGthbXVzLCB0YW1iYWhrYW4KICAgICAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZGF0YVskc10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZGF0YVskc10gPSBhcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJGthdGEsICR0aGlzLT5kYXRhWyRzXSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5kYXRhWyRzXVtdID0gJGthdGE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vYW1iaWwgZGFyaSBrYW11cwogICAgcHVibGljIGZ1bmN0aW9uIGFtYmlsU2lub25pbSgka2F0YSkgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+ZGF0YVska2F0YV0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVska2F0YV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfQp9CgoKZnVuY3Rpb24gcHJpbnRTaW5vbmltKCRoYXNpbCkgewogICAgaWYgKCRoYXNpbCAhPT0gbnVsbCkgewogICAgICAgIGVjaG8gIlsnIiAuIGltcGxvZGUoIicsICciLCAkaGFzaWwpIC4gIiddXG4iOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvICJudWxsXG4iOwogICAgfQp9CgoKCi8vIHRlc3QgQ2FzZQoka2FtdXMgPSBuZXcgS2FtdXMoKTsKJGthbXVzLT50YW1iYWgoJ2JpZycsIFsnbGFyZ2UnLCAnZ3JlYXQnXSk7CiRrYW11cy0+dGFtYmFoKCdiaWcnLCBbJ2h1Z2UnLCAnZmF0J10pOwoka2FtdXMtPnRhbWJhaCgnaHVnZScsIFsnZW5vcm1vdXMnLCAnZ2lnYW50aWMnXSk7CgokaGFzaWxfYmlnID0gJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2JpZycpOwplY2hvICJzaW5vbmltIGJpZzogIjsKcHJpbnRTaW5vbmltKCRoYXNpbF9iaWcpOwoKJGhhc2lsX2h1Z2UgPSAka2FtdXMtPmFtYmlsU2lub25pbSgnaHVnZScpOwplY2hvICJzaW5vbmltIGh1Z2U6ICI7CnByaW50U2lub25pbSgkaGFzaWxfaHVnZSk7CgokaGFzaWxfZ2lnYW50aWMgPSAka2FtdXMtPmFtYmlsU2lub25pbSgnZ2lnYW50aWMnKTsKZWNobyAic2lub25pbSBnaWdhbnRpYzogIjsKcHJpbnRTaW5vbmltKCRoYXNpbF9naWdhbnRpYyk7CgokaGFzaWxfY29sb3NzYWwgPSAka2FtdXMtPmFtYmlsU2lub25pbSgnY29sb3NzYWwnKTsKZWNobyAic2lub25pbSBjb2xvc3NhbDogIjsKcHJpbnRTaW5vbmltKCRoYXNpbF9jb2xvc3NhbCk7Cgo/Pg==