<?php
// Membuat class Kamus untuk menyimpan pasangan kata dan sinonimnya
class Kamus {
// Array untuk menyimpan mapping kata → sinonim
private $forward = array(); // Array untuk menyimpan mapping sinonim → kata (reverse mapping)
private $reverse = array();
// Fungsi untuk menambahkan kata beserta sinonimnya ke dalam kamus
public function tambah
($kata, array $sinonimArray) { // Jika kata belum ada di forward mapping, buat array kosong untuk kata itu
if (!isset($this->forward[$kata])) { $this->forward[$kata] = array(); }
// Loop melalui setiap sinonim yang diberikan
foreach ($sinonimArray as $s) {
// Tambahkan sinonim ke forward mapping jika belum ada
if (!in_array($s, $this->forward[$kata], true)) { $this->forward[$kata][] = $s;
}
// Buat reverse mapping untuk sinonim ke kata
if (!isset($this->reverse[$s])) { $this->reverse[$s] = array(); }
// Tambahkan kata ke reverse mapping jika belum ada
if (!in_array($kata, $this->reverse[$s], true)) { $this->reverse[$s][] = $kata;
}
}
}
// Fungsi untuk mengambil daftar sinonim dari sebuah kata
public function ambilSinonim($kata) {
// Cari kata-kata yang menjadikan $kata sebagai sinonim (reverse mapping)
if (isset($this->reverse[$kata])) { foreach ($this->reverse[$kata] as $w) {
$result[] = $w;
}
}
// Tambahkan juga sinonim langsung dari kata (forward mapping)
if (isset($this->forward[$kata])) { foreach ($this->forward[$kata] as $s) {
$result[] = $s;
}
}
// Jika tidak ada sinonim ditemukan, kembalikan null
return empty($result) ?
null : $result; }
}
// Contoh penggunaan:
$kamus = new Kamus();
$kamus->tambah('big', ['large','great']); // big → large, great
$kamus->tambah('big', ['huge','fat']); // big → huge, fat
$kamus->tambah('huge', ['enormous','gigantic']); // huge → enormous, gigantic
// Menampilkan sinonim yang ditemukan
var_dump($kamus->ambilSinonim('big')); // Output: ['large','great','huge','fat'] var_dump($kamus->ambilSinonim('huge')); // Output: ['big','enormous','gigantic'] var_dump($kamus->ambilSinonim('gigantic')); // Output: ['huge'] var_dump($kamus->ambilSinonim('colossal')); // Output: null (tidak ada sinonim) ?>
PD9waHAKLy8gTWVtYnVhdCBjbGFzcyBLYW11cyB1bnR1ayBtZW55aW1wYW4gcGFzYW5nYW4ga2F0YSBkYW4gc2lub25pbW55YQpjbGFzcyBLYW11cyB7CiAKICAgIC8vIEFycmF5IHVudHVrIG1lbnlpbXBhbiBtYXBwaW5nIGthdGEg4oaSIHNpbm9uaW0KICAgIHByaXZhdGUgJGZvcndhcmQgPSBhcnJheSgpOwogICAgLy8gQXJyYXkgdW50dWsgbWVueWltcGFuIG1hcHBpbmcgc2lub25pbSDihpIga2F0YSAocmV2ZXJzZSBtYXBwaW5nKQogICAgcHJpdmF0ZSAkcmV2ZXJzZSA9IGFycmF5KCk7CiAKICAgIC8vIEZ1bmdzaSB1bnR1ayBtZW5hbWJhaGthbiBrYXRhIGJlc2VydGEgc2lub25pbW55YSBrZSBkYWxhbSBrYW11cwogICAgcHVibGljIGZ1bmN0aW9uIHRhbWJhaCgka2F0YSwgYXJyYXkgJHNpbm9uaW1BcnJheSkgewogICAgICAgIC8vIEppa2Ega2F0YSBiZWx1bSBhZGEgZGkgZm9yd2FyZCBtYXBwaW5nLCBidWF0IGFycmF5IGtvc29uZyB1bnR1ayBrYXRhIGl0dQogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmZvcndhcmRbJGthdGFdKSkgewogICAgICAgICAgICAkdGhpcy0+Zm9yd2FyZFska2F0YV0gPSBhcnJheSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gTG9vcCBtZWxhbHVpIHNldGlhcCBzaW5vbmltIHlhbmcgZGliZXJpa2FuCiAgICAgICAgZm9yZWFjaCAoJHNpbm9uaW1BcnJheSBhcyAkcykgewogICAgICAgICAgICAvLyBUYW1iYWhrYW4gc2lub25pbSBrZSBmb3J3YXJkIG1hcHBpbmcgamlrYSBiZWx1bSBhZGEKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkcywgJHRoaXMtPmZvcndhcmRbJGthdGFdLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmZvcndhcmRbJGthdGFdW10gPSAkczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQnVhdCByZXZlcnNlIG1hcHBpbmcgdW50dWsgc2lub25pbSBrZSBrYXRhCiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnJldmVyc2VbJHNdKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnJldmVyc2VbJHNdID0gYXJyYXkoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBUYW1iYWhrYW4ga2F0YSBrZSByZXZlcnNlIG1hcHBpbmcgamlrYSBiZWx1bSBhZGEKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgka2F0YSwgJHRoaXMtPnJldmVyc2VbJHNdLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnJldmVyc2VbJHNdW10gPSAka2F0YTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIAogICAgLy8gRnVuZ3NpIHVudHVrIG1lbmdhbWJpbCBkYWZ0YXIgc2lub25pbSBkYXJpIHNlYnVhaCBrYXRhCiAgICBwdWJsaWMgZnVuY3Rpb24gYW1iaWxTaW5vbmltKCRrYXRhKSB7CiAgICAgICAgJHJlc3VsdCA9IGFycmF5KCk7CgogICAgICAgIC8vIENhcmkga2F0YS1rYXRhIHlhbmcgbWVuamFkaWthbiAka2F0YSBzZWJhZ2FpIHNpbm9uaW0gKHJldmVyc2UgbWFwcGluZykKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnJldmVyc2VbJGthdGFdKSkgewogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cmV2ZXJzZVska2F0YV0gYXMgJHcpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICR3OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBUYW1iYWhrYW4ganVnYSBzaW5vbmltIGxhbmdzdW5nIGRhcmkga2F0YSAoZm9yd2FyZCBtYXBwaW5nKQogICAgICAgIGlmIChpc3NldCgkdGhpcy0+Zm9yd2FyZFska2F0YV0pKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5mb3J3YXJkWyRrYXRhXSBhcyAkcykgewogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJHM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICAvLyBKaWthIHRpZGFrIGFkYSBzaW5vbmltIGRpdGVtdWthbiwga2VtYmFsaWthbiBudWxsCiAgICAgICAgcmV0dXJuIGVtcHR5KCRyZXN1bHQpID8gbnVsbCA6ICRyZXN1bHQ7CiAgICB9Cn0KIAovLyBDb250b2ggcGVuZ2d1bmFhbjoKJGthbXVzID0gbmV3IEthbXVzKCk7CiRrYW11cy0+dGFtYmFoKCdiaWcnLCAgIFsnbGFyZ2UnLCdncmVhdCddKTsgICAgICAgIC8vIGJpZyDihpIgbGFyZ2UsIGdyZWF0CiRrYW11cy0+dGFtYmFoKCdiaWcnLCAgIFsnaHVnZScsJ2ZhdCddKTsgICAgICAgICAgIC8vIGJpZyDihpIgaHVnZSwgZmF0CiRrYW11cy0+dGFtYmFoKCdodWdlJywgIFsnZW5vcm1vdXMnLCdnaWdhbnRpYyddKTsgIC8vIGh1Z2Ug4oaSIGVub3Jtb3VzLCBnaWdhbnRpYwoKLy8gTWVuYW1waWxrYW4gc2lub25pbSB5YW5nIGRpdGVtdWthbgp2YXJfZHVtcCgka2FtdXMtPmFtYmlsU2lub25pbSgnYmlnJykpOyAgICAgIC8vIE91dHB1dDogWydsYXJnZScsJ2dyZWF0JywnaHVnZScsJ2ZhdCddCnZhcl9kdW1wKCRrYW11cy0+YW1iaWxTaW5vbmltKCdodWdlJykpOyAgICAgLy8gT3V0cHV0OiBbJ2JpZycsJ2Vub3Jtb3VzJywnZ2lnYW50aWMnXQp2YXJfZHVtcCgka2FtdXMtPmFtYmlsU2lub25pbSgnZ2lnYW50aWMnKSk7IC8vIE91dHB1dDogWydodWdlJ10KdmFyX2R1bXAoJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2NvbG9zc2FsJykpOyAvLyBPdXRwdXQ6IG51bGwgKHRpZGFrIGFkYSBzaW5vbmltKQo/Pgo=