<?php
class Kamus {
private $kamus = [];
// Menambah kata beserta sinonimnya
public function tambah
(string
$kata, array $sinonim): void
{ if (!isset($this->kamus[$kata])) { $this->kamus[$kata] = [];
}
foreach ($sinonim as $s) {
if (!in_array($s, $this->kamus[$kata], true)) { $this->kamus[$kata][] = $s;
}
}
}
// Mengambil sinonim sesuai aturan soal
public function ambilSinonim
(string
$kata): ?
array { if (!isset($this->kamus[$kata])) { // Cek apakah kata ini adalah sinonim dari kata lain
foreach ($this->kamus as $k => $sinonims) {
// Jika kata ini adalah sinonim dari kata lain, kembalikan array berisi kata itu saja
return [$kata];
}
}
// Jika tidak ditemukan, return null
return null;
}
// Jika kata utama, kembalikan semua sinonim langsungnya
return $this->kamus[$kata];
}
}
$kamus = new Kamus();
$kamus->tambah('big', ['large', 'great']);
$kamus->tambah('big', ['huge', 'fat']);
$kamus->tambah('huge', ['enormous', 'gigantic']);
$kamus->tambah('small', ['tiny', 'little']);
function cetakHasil($kata, $hasil) {
echo "ambilSinonim('$kata'): ";
if ($hasil === null) {
echo "null\n";
} else {
echo "[" . implode(", ", $hasil) . "]\n"; }
}
cetakHasil('big', $kamus->ambilSinonim('big'));
cetakHasil('huge', $kamus->ambilSinonim('huge'));
cetakHasil('gigantic', $kamus->ambilSinonim('gigantic'));
cetakHasil('colossal', $kamus->ambilSinonim('colossal'));
cetakHasil('small', $kamus->ambilSinonim('small'));
PD9waHAKY2xhc3MgS2FtdXMgewogICAgcHJpdmF0ZSAka2FtdXMgPSBbXTsKCiAgICAvLyBNZW5hbWJhaCBrYXRhIGJlc2VydGEgc2lub25pbW55YQogICAgcHVibGljIGZ1bmN0aW9uIHRhbWJhaChzdHJpbmcgJGthdGEsIGFycmF5ICRzaW5vbmltKTogdm9pZCB7CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+a2FtdXNbJGthdGFdKSkgewogICAgICAgICAgICAkdGhpcy0+a2FtdXNbJGthdGFdID0gW107CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRzaW5vbmltIGFzICRzKSB7CiAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJHMsICR0aGlzLT5rYW11c1ska2F0YV0sIHRydWUpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+a2FtdXNbJGthdGFdW10gPSAkczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyBNZW5nYW1iaWwgc2lub25pbSBzZXN1YWkgYXR1cmFuIHNvYWwKICAgIHB1YmxpYyBmdW5jdGlvbiBhbWJpbFNpbm9uaW0oc3RyaW5nICRrYXRhKTogP2FycmF5IHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5rYW11c1ska2F0YV0pKSB7CiAgICAgICAgICAgIC8vIENlayBhcGFrYWgga2F0YSBpbmkgYWRhbGFoIHNpbm9uaW0gZGFyaSBrYXRhIGxhaW4KICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmthbXVzIGFzICRrID0+ICRzaW5vbmltcykgewogICAgICAgICAgICAgICAgaWYgKGluX2FycmF5KCRrYXRhLCAkc2lub25pbXMsIHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSmlrYSBrYXRhIGluaSBhZGFsYWggc2lub25pbSBkYXJpIGthdGEgbGFpbiwga2VtYmFsaWthbiBhcnJheSBiZXJpc2kga2F0YSBpdHUgc2FqYQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbJGthdGFdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEppa2EgdGlkYWsgZGl0ZW11a2FuLCByZXR1cm4gbnVsbAogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgLy8gSmlrYSBrYXRhIHV0YW1hLCBrZW1iYWxpa2FuIHNlbXVhIHNpbm9uaW0gbGFuZ3N1bmdueWEKICAgICAgICByZXR1cm4gJHRoaXMtPmthbXVzWyRrYXRhXTsKICAgIH0KfQoKJGthbXVzID0gbmV3IEthbXVzKCk7CiRrYW11cy0+dGFtYmFoKCdiaWcnLCBbJ2xhcmdlJywgJ2dyZWF0J10pOwoka2FtdXMtPnRhbWJhaCgnYmlnJywgWydodWdlJywgJ2ZhdCddKTsKJGthbXVzLT50YW1iYWgoJ2h1Z2UnLCBbJ2Vub3Jtb3VzJywgJ2dpZ2FudGljJ10pOwoka2FtdXMtPnRhbWJhaCgnc21hbGwnLCBbJ3RpbnknLCAnbGl0dGxlJ10pOwoKCmZ1bmN0aW9uIGNldGFrSGFzaWwoJGthdGEsICRoYXNpbCkgewogICAgZWNobyAiYW1iaWxTaW5vbmltKCcka2F0YScpOiAiOwogICAgaWYgKCRoYXNpbCA9PT0gbnVsbCkgewogICAgICAgIGVjaG8gIm51bGxcbiI7CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gIlsiIC4gaW1wbG9kZSgiLCAiLCAkaGFzaWwpIC4gIl1cbiI7CiAgICB9Cn0KCmNldGFrSGFzaWwoJ2JpZycsICRrYW11cy0+YW1iaWxTaW5vbmltKCdiaWcnKSk7CmNldGFrSGFzaWwoJ2h1Z2UnLCAka2FtdXMtPmFtYmlsU2lub25pbSgnaHVnZScpKTsKY2V0YWtIYXNpbCgnZ2lnYW50aWMnLCAka2FtdXMtPmFtYmlsU2lub25pbSgnZ2lnYW50aWMnKSk7CmNldGFrSGFzaWwoJ2NvbG9zc2FsJywgJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2NvbG9zc2FsJykpOyAKY2V0YWtIYXNpbCgnc21hbGwnLCAka2FtdXMtPmFtYmlsU2lub25pbSgnc21hbGwnKSk7