<?php
class Kamus
{
private $data = [];
// Fungsi untuk menambah kata beserta sinonimnya
public function tambah
(string
$kata, array $sinonim): void
{
if (!isset($this->data[$kata])) { $this->data[$kata] = [];
}
// Gabungkan sinonim lama dan baru lalu hapus duplikat
// Pastikan relasi dua arah
foreach ($sinonim as $sin) {
if (!isset($this->data[$sin])) { $this->data[$sin] = [];
}
if (!in_array($kata, $this->data[$sin])) { $this->data[$sin][] = $kata;
}
}
}
// Fungsi untuk mengambil sinonim dari kata
public function ambilSinonim
(string
$kata): ?
array {
if (!isset($this->data[$kata])) { return null;
}
return count($this->data[$kata]) > 0 ?
$this->data[$kata] : [$kata]; }
}
// Contoh penggunaan
$kamus = new Kamus();
$kamus->tambah('cepat', ['gesit', 'lincah']);
$kamus->tambah('cepat', ['kilat', 'tangkas']);
$kamus->tambah('kilat', ['segera', 'pesat']);
print_r($kamus->ambilSinonim('cepat')); // Hasil: ['gesit', 'lincah', 'kilat', 'tangkas']
print_r($kamus->ambilSinonim('kilat')); // Hasil: ['cepat', 'segera', 'pesat']
print_r($kamus->ambilSinonim('pesat')); // Hasil: ['kilat']
print_r($kamus->ambilSinonim('segera')); // Hasil: ['kilat']
print_r($kamus->ambilSinonim('lambat')); // Hasil: null
?>
PD9waHAKCmNsYXNzIEthbXVzCnsKICAgIHByaXZhdGUgJGRhdGEgPSBbXTsKCiAgICAvLyBGdW5nc2kgdW50dWsgbWVuYW1iYWgga2F0YSBiZXNlcnRhIHNpbm9uaW1ueWEKICAgIHB1YmxpYyBmdW5jdGlvbiB0YW1iYWgoc3RyaW5nICRrYXRhLCBhcnJheSAkc2lub25pbSk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWyRrYXRhXSkpIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGFbJGthdGFdID0gW107CiAgICAgICAgfQoKICAgICAgICAvLyBHYWJ1bmdrYW4gc2lub25pbSBsYW1hIGRhbiBiYXJ1IGxhbHUgaGFwdXMgZHVwbGlrYXQKICAgICAgICAkdGhpcy0+ZGF0YVska2F0YV0gPSBhcnJheV91bmlxdWUoYXJyYXlfbWVyZ2UoJHRoaXMtPmRhdGFbJGthdGFdLCAkc2lub25pbSkpOwoKICAgICAgICAvLyBQYXN0aWthbiByZWxhc2kgZHVhIGFyYWgKICAgICAgICBmb3JlYWNoICgkc2lub25pbSBhcyAkc2luKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmRhdGFbJHNpbl0pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZGF0YVskc2luXSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJGthdGEsICR0aGlzLT5kYXRhWyRzaW5dKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmRhdGFbJHNpbl1bXSA9ICRrYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIEZ1bmdzaSB1bnR1ayBtZW5nYW1iaWwgc2lub25pbSBkYXJpIGthdGEKICAgIHB1YmxpYyBmdW5jdGlvbiBhbWJpbFNpbm9uaW0oc3RyaW5nICRrYXRhKTogP2FycmF5CiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+ZGF0YVska2F0YV0pKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNvdW50KCR0aGlzLT5kYXRhWyRrYXRhXSkgPiAwID8gJHRoaXMtPmRhdGFbJGthdGFdIDogWyRrYXRhXTsKICAgIH0KfQoKLy8gQ29udG9oIHBlbmdndW5hYW4KJGthbXVzID0gbmV3IEthbXVzKCk7CiRrYW11cy0+dGFtYmFoKCdjZXBhdCcsIFsnZ2VzaXQnLCAnbGluY2FoJ10pOwoka2FtdXMtPnRhbWJhaCgnY2VwYXQnLCBbJ2tpbGF0JywgJ3RhbmdrYXMnXSk7CiRrYW11cy0+dGFtYmFoKCdraWxhdCcsIFsnc2VnZXJhJywgJ3Blc2F0J10pOwoKcHJpbnRfcigka2FtdXMtPmFtYmlsU2lub25pbSgnY2VwYXQnKSk7IAovLyBIYXNpbDogWydnZXNpdCcsICdsaW5jYWgnLCAna2lsYXQnLCAndGFuZ2thcyddCgpwcmludF9yKCRrYW11cy0+YW1iaWxTaW5vbmltKCdraWxhdCcpKTsgCi8vIEhhc2lsOiBbJ2NlcGF0JywgJ3NlZ2VyYScsICdwZXNhdCddCgpwcmludF9yKCRrYW11cy0+YW1iaWxTaW5vbmltKCdwZXNhdCcpKTsgCi8vIEhhc2lsOiBbJ2tpbGF0J10KCnByaW50X3IoJGthbXVzLT5hbWJpbFNpbm9uaW0oJ3NlZ2VyYScpKTsgCi8vIEhhc2lsOiBbJ2tpbGF0J10KCnByaW50X3IoJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2xhbWJhdCcpKTsgCi8vIEhhc2lsOiBudWxsCgo/Pg==