<?php
class Kamus {
private $data = [];
// tambah kata + daftar sinonim (relasi dua arah)
public function tambah
(string
$kata, array $sinonim): void
{ if (!isset($this->data[$kata])) { $this->data[$kata] = [];
}
foreach ($sinonim as $s) {
// tambah s ke kata (hindari duplikasi)
if (!in_array($s, $this->data[$kata], true)) { $this->data[$kata][] = $s;
}
// pastikan node s ada
if (!isset($this->data[$s])) { $this->data[$s] = [];
}
// tambah kata ke s (relasi balik), hindari duplikasi
if (!in_array($kata, $this->data[$s], true)) { $this->data[$s][] = $kata;
}
}
}
// ambil daftar sinonim (atau null jika tidak ada)
public function ambilSinonim(string $kata) {
if (!isset($this->data[$kata])) { return null;
}
return $this->data[$kata];
}
}
// ===== Pengujian sesuai contoh =====
$kamus = new Kamus();
$kamus->tambah('big', ['large', 'great']);
$kamus->tambah('big', ['huge', 'fat']);
$kamus->tambah('huge', ['enormous', 'gigantic']);
print_r($kamus->ambilSinonim('big')); print_r($kamus->ambilSinonim('huge')); print_r($kamus->ambilSinonim('gigantic')); var_dump($kamus->ambilSinonim('colossal'));
PD9waHAKCmNsYXNzIEthbXVzIHsKICAgIHByaXZhdGUgJGRhdGEgPSBbXTsKCiAgICAvLyB0YW1iYWgga2F0YSArIGRhZnRhciBzaW5vbmltIChyZWxhc2kgZHVhIGFyYWgpCiAgICBwdWJsaWMgZnVuY3Rpb24gdGFtYmFoKHN0cmluZyAka2F0YSwgYXJyYXkgJHNpbm9uaW0pOiB2b2lkIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWyRrYXRhXSkpIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGFbJGthdGFdID0gW107CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkc2lub25pbSBhcyAkcykgewogICAgICAgICAgICAvLyB0YW1iYWggcyBrZSBrYXRhIChoaW5kYXJpIGR1cGxpa2FzaSkKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkcywgJHRoaXMtPmRhdGFbJGthdGFdLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmRhdGFbJGthdGFdW10gPSAkczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gcGFzdGlrYW4gbm9kZSBzIGFkYQogICAgICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWyRzXSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5kYXRhWyRzXSA9IFtdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyB0YW1iYWgga2F0YSBrZSBzIChyZWxhc2kgYmFsaWspLCBoaW5kYXJpIGR1cGxpa2FzaQogICAgICAgICAgICBpZiAoIWluX2FycmF5KCRrYXRhLCAkdGhpcy0+ZGF0YVskc10sIHRydWUpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZGF0YVskc11bXSA9ICRrYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIGFtYmlsIGRhZnRhciBzaW5vbmltIChhdGF1IG51bGwgamlrYSB0aWRhayBhZGEpCiAgICBwdWJsaWMgZnVuY3Rpb24gYW1iaWxTaW5vbmltKHN0cmluZyAka2F0YSkgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmRhdGFbJGthdGFdKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWyRrYXRhXTsKICAgIH0KfQoKCi8vID09PT09IFBlbmd1amlhbiBzZXN1YWkgY29udG9oID09PT09Cgoka2FtdXMgPSBuZXcgS2FtdXMoKTsKJGthbXVzLT50YW1iYWgoJ2JpZycsIFsnbGFyZ2UnLCAnZ3JlYXQnXSk7CiRrYW11cy0+dGFtYmFoKCdiaWcnLCBbJ2h1Z2UnLCAnZmF0J10pOwoka2FtdXMtPnRhbWJhaCgnaHVnZScsIFsnZW5vcm1vdXMnLCAnZ2lnYW50aWMnXSk7CgpwcmludF9yKCRrYW11cy0+YW1iaWxTaW5vbmltKCdiaWcnKSk7CnByaW50X3IoJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2h1Z2UnKSk7CnByaW50X3IoJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2dpZ2FudGljJykpOwp2YXJfZHVtcCgka2FtdXMtPmFtYmlsU2lub25pbSgnY29sb3NzYWwnKSk7Cg==