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 ;
}
// Ambil hanya level 1 (langsung) dan pastikan tidak mengembalikan kata aslinya
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" ) ;
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIEthbXVzCnsKICAgIHByaXZhdGUgRGljdGlvbmFyeTxzdHJpbmcsIEhhc2hTZXQ8c3RyaW5nPj4gYSA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgSGFzaFNldDxzdHJpbmc+PigpOwoKICAgIHB1YmxpYyB2b2lkIHRhbWJhaChzdHJpbmcga2F0YSwgc3RyaW5nW10gc2lub25pbSkKICAgIHsKICAgICAgICBpZiAoIWEuQ29udGFpbnNLZXkoa2F0YSkpCiAgICAgICAgewogICAgICAgICAgICBhW2thdGFdID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gc2lub25pbSkKICAgICAgICB7CiAgICAgICAgICAgIGlmICghYS5Db250YWluc0tleShpdGVtKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYVtpdGVtXSA9IG5ldyBIYXNoU2V0PHN0cmluZz4oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYVtrYXRhXS5BZGQoaXRlbSk7CiAgICAgICAgICAgIGFbaXRlbV0uQWRkKGthdGEpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RyaW5nW10gYW1iaWxTaW5vbmltKHN0cmluZyBrYXRhKQogICAgewogICAgICAgIGlmICghYS5Db250YWluc0tleShrYXRhKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgLy8gQW1iaWwgaGFueWEgbGV2ZWwgMSAobGFuZ3N1bmcpIGRhbiBwYXN0aWthbiB0aWRhayBtZW5nZW1iYWxpa2FuIGthdGEgYXNsaW55YQogICAgICAgIHJldHVybiBhW2thdGFdLldoZXJlKHcgPT4gdyAhPSBrYXRhKS5Ub0FycmF5KCk7CiAgICB9Cn0KCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlLYW11cyBrYW11cyA9IG5ldyBLYW11cygpOwoJCWthbXVzLnRhbWJhaCgiYmlnIiwgbmV3IHN0cmluZ1tdIHsgImxhcmdlIiwgImdyZWF0IiB9KTsKCQlrYW11cy50YW1iYWgoImJpZyIsIG5ldyBzdHJpbmdbXSB7ICJodWdlIiwgImZhdCIgfSk7CgkJa2FtdXMudGFtYmFoKCJodWdlIiwgbmV3IHN0cmluZ1tdIHsgImVub3Jtb3VzIiwgImdpZ2FudGljIiB9KTsKCgkJdm9pZCBzaG93UmVzdWx0KHN0cmluZyBrYXRhKQoJCXsKCQkJdmFyIHNpbm9uaW0gPSBrYW11cy5hbWJpbFNpbm9uaW0oa2F0YSk7CgkJCUNvbnNvbGUuV3JpdGVMaW5lKCQiU2lub25pbSAne2thdGF9JzogeyhzaW5vbmltID09IG51bGwgPyAibnVsbCIgOiBzdHJpbmcuSm9pbigiLCAiLCBzaW5vbmltKSl9Iik7CgkJfQoKCQlzaG93UmVzdWx0KCJiaWciKTsKCQlzaG93UmVzdWx0KCJodWdlIik7CgkJc2hvd1Jlc3VsdCgiZ2lnYW50aWMiKTsKCQlzaG93UmVzdWx0KCJjb2xvc3NhbCIpOwoJfQp9Cg==