using System;
public class Kamus
{
private Dictionary<string, HashSet<string>> kamus = new Dictionary<string, HashSet<string>>();
public void Tambah(string kata, string[] sinonim)
{
if (!kamus.ContainsKey(kata))
{
kamus[kata] = new HashSet<string>();
}
foreach (string s in sinonim)
{
kamus[kata].Add(s);
if (!kamus.ContainsKey(s))
{
kamus[s] = new HashSet<string>();
}
kamus[s].Add(kata);
}
}
public string[] AmbilSinonim(string kata)
{
return kamus.ContainsKey(kata) ? kamus[kata].ToArray() : null;
}
}
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" });
//Hasil = [large, great, huge, fat]
Console.WriteLine("[" + string.Join(", ", kamus.AmbilSinonim("big") ?? new string[0]) + "]");
//Hasil = [large, great, huge, fat]
Console.WriteLine("[" + string.Join(", ", kamus.AmbilSinonim("huge") ?? new string[0]) + "]");
//Hasil = [huge]
Console.WriteLine("[" + string.Join(", ", kamus.AmbilSinonim("gigantic") ?? new string[0]) + "]");
//Hasil = null
Console.WriteLine(kamus.AmbilSinonim("colossal") == null ? "null" : "found");
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIEthbXVzIAp7Cglwcml2YXRlIERpY3Rpb25hcnk8c3RyaW5nLCBIYXNoU2V0PHN0cmluZz4+IGthbXVzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBIYXNoU2V0PHN0cmluZz4+KCk7CgoJcHVibGljIHZvaWQgVGFtYmFoKHN0cmluZyBrYXRhLCBzdHJpbmdbXSBzaW5vbmltKSAKCXsKCQlpZiAoIWthbXVzLkNvbnRhaW5zS2V5KGthdGEpKQoJCXsKCQkJa2FtdXNba2F0YV0gPSBuZXcgSGFzaFNldDxzdHJpbmc+KCk7CgkJfQoKCQlmb3JlYWNoIChzdHJpbmcgcyBpbiBzaW5vbmltKSAKCQl7CgkJCWthbXVzW2thdGFdLkFkZChzKTsKCQkJCgkJCWlmICgha2FtdXMuQ29udGFpbnNLZXkocykpCgkJCXsKCQkJCWthbXVzW3NdID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOwoJCQl9CgkJCQoJCQlrYW11c1tzXS5BZGQoa2F0YSk7CgkJfQoJfQoKCXB1YmxpYyBzdHJpbmdbXSBBbWJpbFNpbm9uaW0oc3RyaW5nIGthdGEpCgl7CgkJcmV0dXJuIGthbXVzLkNvbnRhaW5zS2V5KGthdGEpID8ga2FtdXNba2F0YV0uVG9BcnJheSgpIDogbnVsbDsKCX0KfSAKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlLYW11cyBrYW11cyA9IG5ldyBLYW11cygpOwogICAgICAgIAoJCWthbXVzLlRhbWJhaCgiYmlnIiwgbmV3IHN0cmluZ1tdIHsgImxhcmdlIiwgImdyZWF0IiB9KTsKCQlrYW11cy5UYW1iYWgoImJpZyIsIG5ldyBzdHJpbmdbXSB7ICJodWdlIiwgImZhdCIgfSk7CgkJa2FtdXMuVGFtYmFoKCJodWdlIiwgbmV3IHN0cmluZ1tdIHsgImVub3Jtb3VzIiwgImdpZ2FudGljIiB9KTsKICAgICAgICAKCQkvL0hhc2lsID0gW2xhcmdlLCBncmVhdCwgaHVnZSwgZmF0XQoJCUNvbnNvbGUuV3JpdGVMaW5lKCJbIiArIHN0cmluZy5Kb2luKCIsICIsIGthbXVzLkFtYmlsU2lub25pbSgiYmlnIikgPz8gbmV3IHN0cmluZ1swXSkgKyAiXSIpOyAKCQkKCQkvL0hhc2lsID0gW2xhcmdlLCBncmVhdCwgaHVnZSwgZmF0XQoJCUNvbnNvbGUuV3JpdGVMaW5lKCJbIiArIHN0cmluZy5Kb2luKCIsICIsIGthbXVzLkFtYmlsU2lub25pbSgiaHVnZSIpID8/IG5ldyBzdHJpbmdbMF0pICsgIl0iKTsKCgkJLy9IYXNpbCA9IFtodWdlXQoJCUNvbnNvbGUuV3JpdGVMaW5lKCJbIiArIHN0cmluZy5Kb2luKCIsICIsIGthbXVzLkFtYmlsU2lub25pbSgiZ2lnYW50aWMiKSA/PyBuZXcgc3RyaW5nWzBdKSArICJdIik7CgkJCgkJLy9IYXNpbCA9IG51bGwKCQlDb25zb2xlLldyaXRlTGluZShrYW11cy5BbWJpbFNpbm9uaW0oImNvbG9zc2FsIikgPT0gbnVsbCA/ICJudWxsIiA6ICJmb3VuZCIpOwoJfQp9Cg==