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(clubs []string) *Klasemen {
  15. k := &Klasemen{
  16. poin: make(map[string]int),
  17. }
  18.  
  19. for _, club := range clubs {
  20. k.poin[club] = 0
  21. }
  22.  
  23. return k
  24. }
  25.  
  26. func (k *Klasemen) CatatPermainan(kandang, tandang, skor string) {
  27. hasil := strings.Split(skor, ":")
  28.  
  29. skorKandang, _ := strconv.Atoi(hasil[0])
  30. skorTandang, _ := strconv.Atoi(hasil[1])
  31.  
  32. if skorKandang > skorTandang {
  33. k.poin[kandang] += 3
  34. } else if skorKandang < skorTandang {
  35. k.poin[tandang] += 3
  36. } else {
  37. k.poin[kandang]++
  38. k.poin[tandang]++
  39. }
  40. }
  41.  
  42. func (k *Klasemen) CetakKlasemen() map[string]int {
  43. return k.poin
  44. }
  45.  
  46. func (k *Klasemen) AmbilPeringkat(rank int) string {
  47. type Club struct {
  48. nama string
  49. poin int
  50. }
  51.  
  52. var clubs []Club
  53.  
  54. for nama, poin := range k.poin {
  55. clubs = append(clubs, Club{nama, poin})
  56. }
  57.  
  58. sort.Slice(clubs, func(i, j int) bool {
  59. if clubs[i].poin == clubs[j].poin {
  60. return clubs[i].nama < clubs[j].nama
  61. }
  62. return clubs[i].poin > clubs[j].poin
  63. })
  64.  
  65. if rank < 1 || rank > len(clubs) {
  66. return ""
  67. }
  68.  
  69. return clubs[rank-1].nama
  70. }
  71.  
  72. func main() {
  73. klasemen := NewKlasemen([]string{"Liverpool", "Chelsea", "Arsenal"})
  74.  
  75. klasemen.CatatPermainan("Arsenal", "Liverpool", "2:1")
  76. klasemen.CatatPermainan("Arsenal", "Chelsea", "1:1")
  77. klasemen.CatatPermainan("Chelsea", "Arsenal", "0:3")
  78. klasemen.CatatPermainan("Chelsea", "Liverpool", "3:2")
  79. klasemen.CatatPermainan("Liverpool", "Arsenal", "2:2")
  80. klasemen.CatatPermainan("Liverpool", "Chelsea", "0:0")
  81.  
  82. fmt.Println(klasemen.CetakKlasemen())
  83. fmt.Println(klasemen.AmbilPeringkat(1))
  84. fmt.Println(klasemen.AmbilPeringkat(2))
  85. }
  86.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
map[Arsenal:8 Chelsea:5 Liverpool:2]
Arsenal
Chelsea