fork download
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "sort"
  6. "strconv"
  7. "strings"
  8. )
  9.  
  10. type Klasemen struct {
  11. poin map[string]int
  12. }
  13.  
  14. func NewKlasemen(klubList []string) *Klasemen {
  15. poin := make(map[string]int)
  16. for _, klub := range klubList {
  17. poin[klub] = 0
  18. }
  19. return &Klasemen{poin: poin}
  20. }
  21.  
  22. func (k *Klasemen) CatatPermainan(klubKandang, klubTandang, skor string) {
  23. skorParts := strings.Split(skor, ":")
  24. skorKandang, _ := strconv.Atoi(skorParts[0])
  25. skorTandang, _ := strconv.Atoi(skorParts[1])
  26.  
  27. if skorKandang > skorTandang {
  28. k.poin[klubKandang] += 3
  29. } else if skorKandang < skorTandang {
  30. k.poin[klubTandang] += 3
  31. } else {
  32. k.poin[klubKandang] += 1
  33. k.poin[klubTandang] += 1
  34. }
  35. }
  36.  
  37. func (k *Klasemen) CetakKlasemen() map[string]int {
  38. return k.poin
  39. }
  40.  
  41. func (k *Klasemen) AmbilPeringkat(nomorPeringkat int) string {
  42. type KlubPoin struct {
  43. klub string
  44. poin int
  45. }
  46.  
  47. var klubPoinList []KlubPoin
  48. for klub, poin := range k.poin {
  49. klubPoinList = append(klubPoinList, KlubPoin{klub, poin})
  50. }
  51.  
  52. sort.Slice(klubPoinList, func(i, j int) bool {
  53. if klubPoinList[i].poin == klubPoinList[j].poin {
  54. return klubPoinList[i].klub < klubPoinList[j].klub
  55. }
  56. return klubPoinList[i].poin > klubPoinList[j].poin
  57. })
  58.  
  59. if nomorPeringkat > 0 && nomorPeringkat <= len(klubPoinList) {
  60. return klubPoinList[nomorPeringkat-1].klub
  61. }
  62. return ""
  63. }
  64.  
  65. func main() {
  66. klasemen := NewKlasemen([]string{"Liverpool", "Chelsea", "Arsenal"})
  67.  
  68. klasemen.CatatPermainan("Arsenal", "Liverpool", "2:1")
  69. klasemen.CatatPermainan("Arsenal", "Chelsea", "1:1")
  70. klasemen.CatatPermainan("Chelsea", "Arsenal", "0:3")
  71. klasemen.CatatPermainan("Chelsea", "Liverpool", "3:2")
  72. klasemen.CatatPermainan("Liverpool", "Arsenal", "2:2")
  73. klasemen.CatatPermainan("Liverpool", "Chelsea", "0:0")
  74.  
  75. fmt.Println("Klasemen:", klasemen.CetakKlasemen())
  76. fmt.Println("Peringkat 2:", klasemen.AmbilPeringkat(2))
  77. }
Success #stdin #stdout 0.01s 5324KB
stdin
Standard input is empty
stdout
Klasemen: map[Arsenal:8 Chelsea:5 Liverpool:2]
Peringkat 2: Chelsea