<?php
class Kamus {
private $kamus = [];
/**
* Menambahkan kata beserta sinonimnya ke dalam kamus
* @param string $kata - kata yang akan ditambahkan
* @param array $sinonim - array sinonim untuk kata tersebut
*/
public function tambah($kata, $sinonim) {
// Inisialisasi array untuk kata jika belum ada
if (!isset($this->kamus[$kata])) { $this->kamus[$kata] = [];
}
// Tambahkan sinonim ke kata utama
foreach ($sinonim as $sin) {
if (!in_array($sin, $this->kamus[$kata])) { $this->kamus[$kata][] = $sin;
}
}
// Tambahkan hubungan balik: setiap sinonim juga mengarah ke kata utama
foreach ($sinonim as $sin) {
if (!isset($this->kamus[$sin])) { $this->kamus[$sin] = [];
}
// Tambahkan kata utama ke sinonim jika belum ada
if (!in_array($kata, $this->kamus[$sin])) { $this->kamus[$sin][] = $kata;
}
}
}
/**
* Mengambil sinonim dari kata yang diberikan
* @param string $kata - kata yang akan dicari sinonimnya
* @return array|null - array sinonim atau null jika kata tidak ditemukan
*/
public function ambilSinonim($kata) {
if (isset($this->kamus[$kata])) { return $this->kamus[$kata];
}
return null;
}
}
// Contoh penggunaan sesuai dengan yang diminta
$kamus = new Kamus();
$kamus->tambah('big', ['large', 'great']);
$kamus->tambah('big', ['huge', 'fat']);
$kamus->tambah('huge', ['enormous', 'gigantic']);
echo "Sinonim 'big': ";
print_r($kamus->ambilSinonim('big')); echo "\n";
echo "Sinonim 'huge': ";
print_r($kamus->ambilSinonim('huge')); echo "\n";
echo "Sinonim 'gigantic': ";
print_r($kamus->ambilSinonim('gigantic')); echo "\n";
echo "Sinonim 'colossal': ";
var_dump($kamus->ambilSinonim('colossal')); echo "\n";
?>
PD9waHAKCmNsYXNzIEthbXVzIHsKICAgIHByaXZhdGUgJGthbXVzID0gW107CiAgICAKICAgIC8qKgogICAgICogTWVuYW1iYWhrYW4ga2F0YSBiZXNlcnRhIHNpbm9uaW1ueWEga2UgZGFsYW0ga2FtdXMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGthdGEgLSBrYXRhIHlhbmcgYWthbiBkaXRhbWJhaGthbgogICAgICogQHBhcmFtIGFycmF5ICRzaW5vbmltIC0gYXJyYXkgc2lub25pbSB1bnR1ayBrYXRhIHRlcnNlYnV0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1iYWgoJGthdGEsICRzaW5vbmltKSB7CiAgICAgICAgLy8gSW5pc2lhbGlzYXNpIGFycmF5IHVudHVrIGthdGEgamlrYSBiZWx1bSBhZGEKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5rYW11c1ska2F0YV0pKSB7CiAgICAgICAgICAgICR0aGlzLT5rYW11c1ska2F0YV0gPSBbXTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gVGFtYmFoa2FuIHNpbm9uaW0ga2Uga2F0YSB1dGFtYQogICAgICAgIGZvcmVhY2ggKCRzaW5vbmltIGFzICRzaW4pIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkc2luLCAkdGhpcy0+a2FtdXNbJGthdGFdKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmthbXVzWyRrYXRhXVtdID0gJHNpbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBUYW1iYWhrYW4gaHVidW5nYW4gYmFsaWs6IHNldGlhcCBzaW5vbmltIGp1Z2EgbWVuZ2FyYWgga2Uga2F0YSB1dGFtYQogICAgICAgIGZvcmVhY2ggKCRzaW5vbmltIGFzICRzaW4pIHsKICAgICAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+a2FtdXNbJHNpbl0pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+a2FtdXNbJHNpbl0gPSBbXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVGFtYmFoa2FuIGthdGEgdXRhbWEga2Ugc2lub25pbSBqaWthIGJlbHVtIGFkYQogICAgICAgICAgICBpZiAoIWluX2FycmF5KCRrYXRhLCAkdGhpcy0+a2FtdXNbJHNpbl0pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+a2FtdXNbJHNpbl1bXSA9ICRrYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKioKICAgICAqIE1lbmdhbWJpbCBzaW5vbmltIGRhcmkga2F0YSB5YW5nIGRpYmVyaWthbgogICAgICogQHBhcmFtIHN0cmluZyAka2F0YSAtIGthdGEgeWFuZyBha2FuIGRpY2FyaSBzaW5vbmltbnlhCiAgICAgKiBAcmV0dXJuIGFycmF5fG51bGwgLSBhcnJheSBzaW5vbmltIGF0YXUgbnVsbCBqaWthIGthdGEgdGlkYWsgZGl0ZW11a2FuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhbWJpbFNpbm9uaW0oJGthdGEpIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPmthbXVzWyRrYXRhXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5rYW11c1ska2F0YV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9CgovLyBDb250b2ggcGVuZ2d1bmFhbiBzZXN1YWkgZGVuZ2FuIHlhbmcgZGltaW50YQoka2FtdXMgPSBuZXcgS2FtdXMoKTsKJGthbXVzLT50YW1iYWgoJ2JpZycsIFsnbGFyZ2UnLCAnZ3JlYXQnXSk7CiRrYW11cy0+dGFtYmFoKCdiaWcnLCBbJ2h1Z2UnLCAnZmF0J10pOwoka2FtdXMtPnRhbWJhaCgnaHVnZScsIFsnZW5vcm1vdXMnLCAnZ2lnYW50aWMnXSk7CgplY2hvICJTaW5vbmltICdiaWcnOiAiOwpwcmludF9yKCRrYW11cy0+YW1iaWxTaW5vbmltKCdiaWcnKSk7CmVjaG8gIlxuIjsKCmVjaG8gIlNpbm9uaW0gJ2h1Z2UnOiAiOwpwcmludF9yKCRrYW11cy0+YW1iaWxTaW5vbmltKCdodWdlJykpOwplY2hvICJcbiI7CgplY2hvICJTaW5vbmltICdnaWdhbnRpYyc6ICI7CnByaW50X3IoJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2dpZ2FudGljJykpOwplY2hvICJcbiI7CgplY2hvICJTaW5vbmltICdjb2xvc3NhbCc6ICI7CnZhcl9kdW1wKCRrYW11cy0+YW1iaWxTaW5vbmltKCdjb2xvc3NhbCcpKTsKZWNobyAiXG4iOwoKPz4=