using System;
public class Kamus
{
private Dictionary<string, HashSet<string>> a = new Dictionary<string, HashSet<string>>();
public void tambah(string kata, string[] sinonim)
{
if (!a.ContainsKey(kata))
{
a[kata] = new HashSet<string>();
}
foreach (var item in sinonim)
{
if (!a.ContainsKey(item))
{
a[item] = new HashSet<string>();
}
a[kata].Add(item);
a[item].Add(kata);
}
}
public string[] ambilSinonim(string kata)
{
if (!a.ContainsKey(kata))
{
return null;
}
return a[kata].Where(w => w != kata).ToArray();
}
}
public class Test
{
public static void Main()
{
Kamus kamus = new Kamus();
kamus.tambah("big", new string[] { "large", "great" });
kamus.tambah("big", new string[] { "huge", "fat" });
kamus.tambah("huge", new string[] { "enormous", "gigantic" });
void showResult(string kata)
{
var sinonim = kamus.ambilSinonim(kata);
Console.WriteLine($"Sinonim '{kata}': {(sinonim == null ? "null" : string.Join(", ", sinonim))}");
}
showResult("big");
showResult("huge");
showResult("gigantic");
showResult("colossal");
}
}
dXNpbmcgU3lzdGVtOwogCnB1YmxpYyBjbGFzcyBLYW11cwp7CiAgICBwcml2YXRlIERpY3Rpb25hcnk8c3RyaW5nLCBIYXNoU2V0PHN0cmluZz4+IGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIEhhc2hTZXQ8c3RyaW5nPj4oKTsKIAogICAgcHVibGljIHZvaWQgdGFtYmFoKHN0cmluZyBrYXRhLCBzdHJpbmdbXSBzaW5vbmltKQogICAgewogICAgICAgIGlmICghYS5Db250YWluc0tleShrYXRhKSkKICAgICAgICB7CiAgICAgICAgICAgIGFba2F0YV0gPSBuZXcgSGFzaFNldDxzdHJpbmc+KCk7CiAgICAgICAgfQogCiAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gc2lub25pbSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICghYS5Db250YWluc0tleShpdGVtKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYVtpdGVtXSA9IG5ldyBIYXNoU2V0PHN0cmluZz4oKTsKICAgICAgICAgICAgfQogCiAgICAgICAgICAgIGFba2F0YV0uQWRkKGl0ZW0pOwogICAgICAgICAgICBhW2l0ZW1dLkFkZChrYXRhKTsKICAgICAgICB9CiAgICB9CiAKICAgIHB1YmxpYyBzdHJpbmdbXSBhbWJpbFNpbm9uaW0oc3RyaW5nIGthdGEpCiAgICB7CiAgICAgICAgaWYgKCFhLkNvbnRhaW5zS2V5KGthdGEpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogCiAgICAgICAgcmV0dXJuIGFba2F0YV0uV2hlcmUodyA9PiB3ICE9IGthdGEpLlRvQXJyYXkoKTsKICAgIH0KfQogCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlLYW11cyBrYW11cyA9IG5ldyBLYW11cygpOwoJCWthbXVzLnRhbWJhaCgiYmlnIiwgbmV3IHN0cmluZ1tdIHsgImxhcmdlIiwgImdyZWF0IiB9KTsKCQlrYW11cy50YW1iYWgoImJpZyIsIG5ldyBzdHJpbmdbXSB7ICJodWdlIiwgImZhdCIgfSk7CgkJa2FtdXMudGFtYmFoKCJodWdlIiwgbmV3IHN0cmluZ1tdIHsgImVub3Jtb3VzIiwgImdpZ2FudGljIiB9KTsKIAoJCXZvaWQgc2hvd1Jlc3VsdChzdHJpbmcga2F0YSkKCQl7CgkJCXZhciBzaW5vbmltID0ga2FtdXMuYW1iaWxTaW5vbmltKGthdGEpOwoJCQlDb25zb2xlLldyaXRlTGluZSgkIlNpbm9uaW0gJ3trYXRhfSc6IHsoc2lub25pbSA9PSBudWxsID8gIm51bGwiIDogc3RyaW5nLkpvaW4oIiwgIiwgc2lub25pbSkpfSIpOwoJCX0KIAoJCXNob3dSZXN1bHQoImJpZyIpOwoJCXNob3dSZXN1bHQoImh1Z2UiKTsKCQlzaG93UmVzdWx0KCJnaWdhbnRpYyIpOwoJCXNob3dSZXN1bHQoImNvbG9zc2FsIik7Cgl9Cn0=