fork download
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type Kamus struct {
  6. sinonim map[string][]string
  7. }
  8.  
  9. func NewKamus() *Kamus {
  10. return &Kamus{sinonim: make(map[string][]string)}
  11. }
  12.  
  13. func contains(daftar []string, kata string) bool {
  14. for _, s := range daftar {
  15. if s == kata {
  16. return true
  17. }
  18. }
  19. return false
  20. }
  21.  
  22. func (k *Kamus) pastikanAda(kata string) {
  23. if _, ok := k.sinonim[kata]; !ok {
  24. k.sinonim[kata] = []string{}
  25. }
  26. }
  27.  
  28. func (k *Kamus) hubungkan(a, b string) {
  29. if a == b {
  30. return
  31. }
  32. k.pastikanAda(a)
  33. k.pastikanAda(b)
  34. if !contains(k.sinonim[a], b) {
  35. k.sinonim[a] = append(k.sinonim[a], b)
  36. }
  37. if !contains(k.sinonim[b], a) {
  38. k.sinonim[b] = append(k.sinonim[b], a)
  39. }
  40. }
  41.  
  42. func (k *Kamus) tambah(kata string, sinonim []string) {
  43. k.pastikanAda(kata)
  44. for _, s := range sinonim {
  45. k.hubungkan(kata, s)
  46. }
  47. }
  48.  
  49. func (k *Kamus) ambilSinonim(kata string) []string {
  50. daftar, ok := k.sinonim[kata]
  51. if !ok {
  52. return nil
  53. }
  54. hasil := make([]string, len(daftar))
  55. copy(hasil, daftar)
  56. return hasil
  57. }
  58.  
  59. func tampil(hasil []string) {
  60. if hasil == nil {
  61. fmt.Println("null")
  62. return
  63. }
  64. fmt.Println(hasil)
  65. }
  66.  
  67. func main() {
  68. kamus := NewKamus()
  69. kamus.tambah("big", []string{"large", "great"})
  70. kamus.tambah("big", []string{"huge", "fat"})
  71. kamus.tambah("huge", []string{"enormous", "gigantic"})
  72.  
  73. tampil(kamus.ambilSinonim("big"))
  74. tampil(kamus.ambilSinonim("huge"))
  75. tampil(kamus.ambilSinonim("gigantic"))
  76. tampil(kamus.ambilSinonim("colossal"))
  77. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
[large great huge fat]
[big enormous gigantic]
[huge]
null