<?php
class Kamus
{
private $data = [];
public function tambah($word, $synonyms)
{
foreach($synonyms as $s)
{
if($s === $word)
{
continue;
}
$this->link($s, $word); // two-way relation }
}
public function ambilSinonim($word)
{
if(!isset($this->data[$word])) {
return null;
}
}
private function link($a, $b) {
if (!isset($this->data[$a])){ $this->data[$a] = [];
}
$this->data[$a][$b] = true;
}
}
function show($dictionary, $word)
{
$result = $dictionary->ambilSinonim($word);
if($result === null)
{
echo "* `$word` → `NULL`\n";
}
else
{
echo "* `$word` → `[" . implode(', ', $result) . "]`\n"; }
}
$kamus = new Kamus();
$kamus->tambah('big', ['large', 'great']);
$kamus->tambah('big', ['huge', 'fat']);
$kamus->tambah('huge', ['enormous', 'gigantic']);
show($kamus, 'big');
show($kamus, 'huge');
show($kamus, 'gigantic');
show($kamus, 'colossal');
PD9waHAKIApjbGFzcyBLYW11cyAKewoJcHJpdmF0ZSAkZGF0YSA9IFtdOwogCglwdWJsaWMgZnVuY3Rpb24gdGFtYmFoKCR3b3JkLCAkc3lub255bXMpCgl7CgkJZm9yZWFjaCgkc3lub255bXMgYXMgJHMpCgkJewoJCQlpZigkcyA9PT0gJHdvcmQpCgkJCXsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCSR0aGlzLT5saW5rKCR3b3JkLCAkcyk7CgkJCSR0aGlzLT5saW5rKCRzLCAkd29yZCk7IC8vIHR3by13YXkgcmVsYXRpb24KCQl9Cgl9CQogCglwdWJsaWMgZnVuY3Rpb24gYW1iaWxTaW5vbmltKCR3b3JkKQoJewoJCWlmKCFpc3NldCgkdGhpcy0+ZGF0YVskd29yZF0pKQoJCXsKCQkJcmV0dXJuIG51bGw7CgkJfQoJCXJldHVybiBhcnJheV9rZXlzKCR0aGlzLT5kYXRhWyR3b3JkXSk7Cgl9CiAKCXByaXZhdGUgZnVuY3Rpb24gbGluaygkYSwgJGIpCgl7CgkJaWYgKCFpc3NldCgkdGhpcy0+ZGF0YVskYV0pKXsKCQkJJHRoaXMtPmRhdGFbJGFdID0gW107CgkJfQoJCSR0aGlzLT5kYXRhWyRhXVskYl0gPSB0cnVlOwoJfQp9CiAKZnVuY3Rpb24gc2hvdygkZGljdGlvbmFyeSwgJHdvcmQpCnsKCSRyZXN1bHQgPSAkZGljdGlvbmFyeS0+YW1iaWxTaW5vbmltKCR3b3JkKTsKCWlmKCRyZXN1bHQgPT09IG51bGwpCgl7CgkJZWNobyAiKiBgJHdvcmRgIOKGkiBgTlVMTGBcbiI7Cgl9CgllbHNlCgl7CgkJZWNobyAiKiBgJHdvcmRgIOKGkiBgWyIgLiBpbXBsb2RlKCcsICcsICRyZXN1bHQpIC4gIl1gXG4iOwoJfQp9CiAKJGthbXVzID0gbmV3IEthbXVzKCk7CiRrYW11cy0+dGFtYmFoKCdiaWcnLCBbJ2xhcmdlJywgJ2dyZWF0J10pOwoka2FtdXMtPnRhbWJhaCgnYmlnJywgWydodWdlJywgJ2ZhdCddKTsKJGthbXVzLT50YW1iYWgoJ2h1Z2UnLCBbJ2Vub3Jtb3VzJywgJ2dpZ2FudGljJ10pOwoKc2hvdygka2FtdXMsICdiaWcnKTsKc2hvdygka2FtdXMsICdodWdlJyk7CnNob3coJGthbXVzLCAnZ2lnYW50aWMnKTsKc2hvdygka2FtdXMsICdjb2xvc3NhbCcpOw==