<?php
class Kamus {
private $data = [];
public function tambah
(string
$kata, array $sinonim): void
{ if (!isset($this->data[$kata])) { $this->data[$kata] = [];
}
foreach ($sinonim as $s) {
if (!in_array($s, $this->data[$kata], true)) { $this->data[$kata][] = $s;
}
}
}
public function ambilSinonim
(string
$kata): ?
array { if (isset($this->data[$kata])) { return $this->data[$kata];
}
foreach ($this->data as $utama => $sinonimList) {
if (in_array($kata, $sinonimList, true)) { $result = [$utama];
foreach (($this->data[$utama] ?? []) as $s) {
if ($s !== $kata && !in_array($s, $result, true)) { $result[] = $s;
}
}
return $result;
}
}
return null;
}
}
$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'));
PD9waHAKCmNsYXNzIEthbXVzIHsKICAgIHByaXZhdGUgJGRhdGEgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gdGFtYmFoKHN0cmluZyAka2F0YSwgYXJyYXkgJHNpbm9uaW0pOiB2b2lkIHsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5kYXRhWyRrYXRhXSkpIHsKICAgICAgICAgICAgJHRoaXMtPmRhdGFbJGthdGFdID0gW107CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRzaW5vbmltIGFzICRzKSB7CiAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJHMsICR0aGlzLT5kYXRhWyRrYXRhXSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5kYXRhWyRrYXRhXVtdID0gJHM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGFtYmlsU2lub25pbShzdHJpbmcgJGthdGEpOiA/YXJyYXkgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+ZGF0YVska2F0YV0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVska2F0YV07CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGF0YSBhcyAkdXRhbWEgPT4gJHNpbm9uaW1MaXN0KSB7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgka2F0YSwgJHNpbm9uaW1MaXN0LCB0cnVlKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdCA9IFskdXRhbWFdOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoKCR0aGlzLT5kYXRhWyR1dGFtYV0gPz8gW10pIGFzICRzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRzICE9PSAka2F0YSAmJiAhaW5fYXJyYXkoJHMsICRyZXN1bHQsIHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHRbXSA9ICRzOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9CgoKJGthbXVzID0gbmV3IEthbXVzKCk7CiRrYW11cy0+dGFtYmFoKCdiaWcnLCBbJ2xhcmdlJywgJ2dyZWF0J10pOwoka2FtdXMtPnRhbWJhaCgnYmlnJywgWydodWdlJywgJ2ZhdCddKTsKJGthbXVzLT50YW1iYWgoJ2h1Z2UnLCBbJ2Vub3Jtb3VzJywgJ2dpZ2FudGljJ10pOwoKcHJpbnRfcigka2FtdXMtPmFtYmlsU2lub25pbSgnYmlnJykpOwoKCnByaW50X3IoJGthbXVzLT5hbWJpbFNpbm9uaW0oJ2h1Z2UnKSk7CgoKcHJpbnRfcigka2FtdXMtPmFtYmlsU2lub25pbSgnZ2lnYW50aWMnKSk7Cgp2YXJfZHVtcCgka2FtdXMtPmFtYmlsU2lub25pbSgnY29sb3NzYWwnKSk7Cgo=