using System;
public class Test
{
public static void Main()
{
Kamus kamus = new Kamus();
kamus.TambahKata("Besar", new List<string> { "Gede", "Agung" });
kamus.TambahKata("Kecil", new List<string> { "Cilik", "Mini", "Pendek" });
kamus.TambahKata("Besar", new List<string> { "Luas", "Panjang" });
Console.Write("Masukkan kata untuk mencari sinonim: ");
string input = Console.ReadLine() ?? string.Empty;
List<string>? sinonim = kamus.CariSinonim(input);
string result = sinonim != null ? string.Join(", ", sinonim) : "Tidak ditemukan";
Console.WriteLine($"Sinonim dari kata {input} adalah : { result}");
}
class Kamus
{
private Dictionary<string, List<string>> data;
public Kamus()
{
data = new Dictionary<string, List<string>>();
}
public void TambahKata(string kata, List<string> sinonim)
{
if (!data.ContainsKey(kata))
{
data[kata] = new List<string>();
}
data[kata].AddRange(sinonim);
}
public List<string>? CariSinonim(string kata)
{
if (data.ContainsKey(kata))
{
return data[kata].ToList();
}
foreach (var item in data)
{
if (item.Value.Contains(kata))
{
return new List<string> { item.Key }
.Concat(item.Value.Where(x => x != kata))
.ToList();
}
}
return null;
}
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgICAgIEthbXVzIGthbXVzID0gbmV3IEthbXVzKCk7CiAgICAgICAga2FtdXMuVGFtYmFoS2F0YSgiQmVzYXIiLCBuZXcgTGlzdDxzdHJpbmc+IHsgIkdlZGUiLCAiQWd1bmciIH0pOwogICAgICAgIGthbXVzLlRhbWJhaEthdGEoIktlY2lsIiwgbmV3IExpc3Q8c3RyaW5nPiB7ICJDaWxpayIsICJNaW5pIiwgIlBlbmRlayIgfSk7CiAgICAgICAga2FtdXMuVGFtYmFoS2F0YSgiQmVzYXIiLCBuZXcgTGlzdDxzdHJpbmc+IHsgIkx1YXMiLCAiUGFuamFuZyIgfSk7CgogICAgICAgIENvbnNvbGUuV3JpdGUoIk1hc3Vra2FuIGthdGEgdW50dWsgbWVuY2FyaSBzaW5vbmltOiAiKTsKICAgICAgICBzdHJpbmcgaW5wdXQgPSBDb25zb2xlLlJlYWRMaW5lKCkgPz8gc3RyaW5nLkVtcHR5OwogICAgICAgIExpc3Q8c3RyaW5nPj8gc2lub25pbSA9IGthbXVzLkNhcmlTaW5vbmltKGlucHV0KTsKICAgICAgICBzdHJpbmcgcmVzdWx0ID0gc2lub25pbSAhPSBudWxsID8gc3RyaW5nLkpvaW4oIiwgIiwgc2lub25pbSkgOiAiVGlkYWsgZGl0ZW11a2FuIjsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIlNpbm9uaW0gZGFyaSBrYXRhIHtpbnB1dH0gYWRhbGFoIDogeyByZXN1bHR9Iik7Cgl9CgkKY2xhc3MgS2FtdXMKewogICAgcHJpdmF0ZSBEaWN0aW9uYXJ5PHN0cmluZywgTGlzdDxzdHJpbmc+PiBkYXRhOwoKICAgIHB1YmxpYyBLYW11cygpCiAgICB7CiAgICAgICAgZGF0YSA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgTGlzdDxzdHJpbmc+PigpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIFRhbWJhaEthdGEoc3RyaW5nIGthdGEsIExpc3Q8c3RyaW5nPiBzaW5vbmltKQogICAgewogICAgICAgIGlmICghZGF0YS5Db250YWluc0tleShrYXRhKSkKICAgICAgICB7CiAgICAgICAgICAgIGRhdGFba2F0YV0gPSBuZXcgTGlzdDxzdHJpbmc+KCk7CiAgICAgICAgfQoKICAgICAgICBkYXRhW2thdGFdLkFkZFJhbmdlKHNpbm9uaW0pOwogICAgfQoKICAgIHB1YmxpYyBMaXN0PHN0cmluZz4/IENhcmlTaW5vbmltKHN0cmluZyBrYXRhKQogICAgewogICAgICAgIGlmIChkYXRhLkNvbnRhaW5zS2V5KGthdGEpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGRhdGFba2F0YV0uVG9MaXN0KCk7CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiBkYXRhKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGl0ZW0uVmFsdWUuQ29udGFpbnMoa2F0YSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdDxzdHJpbmc+IHsgaXRlbS5LZXkgfQogICAgICAgICAgICAgICAgLkNvbmNhdChpdGVtLlZhbHVlLldoZXJlKHggPT4geCAhPSBrYXRhKSkKICAgICAgICAgICAgICAgIC5Ub0xpc3QoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0KfQo=