package main
import (
"fmt"
)
type Kamus struct {
data map[string]map[string]bool
}
func NewKamus() *Kamus {
return &Kamus{
data: make(map[string]map[string]bool),
}
}
func (k *Kamus) Tambah(kata string, sinonim []string) {
if _, ok := k.data[kata]; !ok {
k.data[kata] = make(map[string]bool)
}
for _, s := range sinonim {
k.data[kata][s] = true
if _, ok := k.data[s]; !ok {
k.data[s] = make(map[string]bool)
}
k.data[s][kata] = true
}
}
func (k *Kamus) AmbilSinonim(kata string) []string {
sinonim, ok := k.data[kata]
if !ok {
return nil
}
var result []string
for s := range sinonim {
result = append(result, s)
}
return result
}
func main() {
kamus := NewKamus()
kamus.Tambah("big", []string{"large", "great"})
kamus.Tambah("big", []string{"huge", "fat"})
kamus.Tambah("huge", []string{"enormous", "gigantic"})
fmt.Println(kamus.AmbilSinonim("big"))
fmt.Println(kamus.AmbilSinonim("huge"))
fmt.Println(kamus.AmbilSinonim("gigantic"))
fmt.Println(kamus.AmbilSinonim("colossal"))
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImZtdCIKKQoKdHlwZSBLYW11cyBzdHJ1Y3QgewoJZGF0YSBtYXBbc3RyaW5nXW1hcFtzdHJpbmddYm9vbAp9CgpmdW5jIE5ld0thbXVzKCkgKkthbXVzIHsKCXJldHVybiAmS2FtdXN7CgkJZGF0YTogbWFrZShtYXBbc3RyaW5nXW1hcFtzdHJpbmddYm9vbCksCgl9Cn0KCmZ1bmMgKGsgKkthbXVzKSBUYW1iYWgoa2F0YSBzdHJpbmcsIHNpbm9uaW0gW11zdHJpbmcpIHsKCWlmIF8sIG9rIDo9IGsuZGF0YVtrYXRhXTsgIW9rIHsKCQlrLmRhdGFba2F0YV0gPSBtYWtlKG1hcFtzdHJpbmddYm9vbCkKCX0KCWZvciBfLCBzIDo9IHJhbmdlIHNpbm9uaW0gewoJCWsuZGF0YVtrYXRhXVtzXSA9IHRydWUKCQlpZiBfLCBvayA6PSBrLmRhdGFbc107ICFvayB7CgkJCWsuZGF0YVtzXSA9IG1ha2UobWFwW3N0cmluZ11ib29sKQoJCX0KCQlrLmRhdGFbc11ba2F0YV0gPSB0cnVlCgl9Cn0KCmZ1bmMgKGsgKkthbXVzKSBBbWJpbFNpbm9uaW0oa2F0YSBzdHJpbmcpIFtdc3RyaW5nIHsKCXNpbm9uaW0sIG9rIDo9IGsuZGF0YVtrYXRhXQoJaWYgIW9rIHsKCQlyZXR1cm4gbmlsCgl9Cgl2YXIgcmVzdWx0IFtdc3RyaW5nCglmb3IgcyA6PSByYW5nZSBzaW5vbmltIHsKCQlyZXN1bHQgPSBhcHBlbmQocmVzdWx0LCBzKQoJfQoJcmV0dXJuIHJlc3VsdAp9CgpmdW5jIG1haW4oKSB7CglrYW11cyA6PSBOZXdLYW11cygpCglrYW11cy5UYW1iYWgoImJpZyIsIFtdc3RyaW5neyJsYXJnZSIsICJncmVhdCJ9KQoJa2FtdXMuVGFtYmFoKCJiaWciLCBbXXN0cmluZ3siaHVnZSIsICJmYXQifSkKCWthbXVzLlRhbWJhaCgiaHVnZSIsIFtdc3RyaW5neyJlbm9ybW91cyIsICJnaWdhbnRpYyJ9KQoKCWZtdC5QcmludGxuKGthbXVzLkFtYmlsU2lub25pbSgiYmlnIikpICAgICAgCglmbXQuUHJpbnRsbihrYW11cy5BbWJpbFNpbm9uaW0oImh1Z2UiKSkgICAgIAoJZm10LlByaW50bG4oa2FtdXMuQW1iaWxTaW5vbmltKCJnaWdhbnRpYyIpKSAKCWZtdC5QcmludGxuKGthbXVzLkFtYmlsU2lub25pbSgiY29sb3NzYWwiKSkgCn0K