package main

import (
	"fmt"
)

type Kamus struct {
	data map[string]map[string]bool
}

// Constructor untuk membuat instance baru dari Kamus
func NewKamus() *Kamus {
	return &Kamus{
		data: make(map[string]map[string]bool),
	}
}

// Menambahkan kata dan sinonimnya ke dalam kamus
func (k *Kamus) Tambah(kata string, sinonim []string) {
	if k.data[kata] == nil {
		k.data[kata] = make(map[string]bool)
	}
	
	for _, s := range sinonim {
		k.data[kata][s] = true
		if k.data[s] == nil {
			k.data[s] = make(map[string]bool)
		}
		k.data[s][kata] = true
	}
}

// Mengambil semua sinonim dari sebuah kata
func (k *Kamus) AmbilSinonim(kata string) []string {
	sinonimSet, exists := k.data[kata]
	if !exists {
		return nil
	}

	result := make([]string, 0)
	for sinonim := range sinonimSet {
		result = append(result, sinonim)
	}

	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("Sinonim dari 'big':", kamus.AmbilSinonim("big"))
	fmt.Println("Sinonim dari 'huge':", kamus.AmbilSinonim("huge"))
	fmt.Println("Sinonim dari 'gigantic':", kamus.AmbilSinonim("gigantic"))
	fmt.Println("Sinonim dari 'colossal':", kamus.AmbilSinonim("colossal"))
}
