package main
import (
"fmt"
"sort"
"strconv"
"strings"
)
type Klasemen struct {
poin map[string]int
}
func NewKlasemen(clubs []string) *Klasemen {
k := &Klasemen{
poin: make(map[string]int),
}
for _, club := range clubs {
k.poin[club] = 0
}
return k
}
func (k *Klasemen) CatatPermainan(kandang, tandang, skor string) {
hasil := strings.Split(skor, ":")
skorKandang, _ := strconv.Atoi(hasil[0])
skorTandang, _ := strconv.Atoi(hasil[1])
if skorKandang > skorTandang {
k.poin[kandang] += 3
} else if skorKandang < skorTandang {
k.poin[tandang] += 3
} else {
k.poin[kandang]++
k.poin[tandang]++
}
}
func (k *Klasemen) CetakKlasemen() map[string]int {
return k.poin
}
func (k *Klasemen) AmbilPeringkat(rank int) string {
type Club struct {
nama string
poin int
}
var clubs []Club
for nama, poin := range k.poin {
clubs = append(clubs, Club{nama, poin})
}
sort.Slice(clubs, func(i, j int) bool {
if clubs[i].poin == clubs[j].poin {
return clubs[i].nama < clubs[j].nama
}
return clubs[i].poin > clubs[j].poin
})
if rank < 1 || rank > len(clubs) {
return ""
}
return clubs[rank-1].nama
}
func main() {
klasemen := NewKlasemen([]string{"Liverpool", "Chelsea", "Arsenal"})
klasemen.CatatPermainan("Arsenal", "Liverpool", "2:1")
klasemen.CatatPermainan("Arsenal", "Chelsea", "1:1")
klasemen.CatatPermainan("Chelsea", "Arsenal", "0:3")
klasemen.CatatPermainan("Chelsea", "Liverpool", "3:2")
klasemen.CatatPermainan("Liverpool", "Arsenal", "2:2")
klasemen.CatatPermainan("Liverpool", "Chelsea", "0:0")
fmt.Println(klasemen.CetakKlasemen())
fmt.Println(klasemen.AmbilPeringkat(1))
fmt.Println(klasemen.AmbilPeringkat(2))
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImZtdCIKCSJzb3J0IgoJInN0cmNvbnYiCgkic3RyaW5ncyIKKQoKdHlwZSBLbGFzZW1lbiBzdHJ1Y3QgewoJcG9pbiBtYXBbc3RyaW5nXWludAp9CgpmdW5jIE5ld0tsYXNlbWVuKGNsdWJzIFtdc3RyaW5nKSAqS2xhc2VtZW4gewoJayA6PSAmS2xhc2VtZW57CgkJcG9pbjogbWFrZShtYXBbc3RyaW5nXWludCksCgl9CgoJZm9yIF8sIGNsdWIgOj0gcmFuZ2UgY2x1YnMgewoJCWsucG9pbltjbHViXSA9IDAKCX0KCglyZXR1cm4gawp9CgpmdW5jIChrICpLbGFzZW1lbikgQ2F0YXRQZXJtYWluYW4oa2FuZGFuZywgdGFuZGFuZywgc2tvciBzdHJpbmcpIHsKCWhhc2lsIDo9IHN0cmluZ3MuU3BsaXQoc2tvciwgIjoiKQoKCXNrb3JLYW5kYW5nLCBfIDo9IHN0cmNvbnYuQXRvaShoYXNpbFswXSkKCXNrb3JUYW5kYW5nLCBfIDo9IHN0cmNvbnYuQXRvaShoYXNpbFsxXSkKCglpZiBza29yS2FuZGFuZyA+IHNrb3JUYW5kYW5nIHsKCQlrLnBvaW5ba2FuZGFuZ10gKz0gMwoJfSBlbHNlIGlmIHNrb3JLYW5kYW5nIDwgc2tvclRhbmRhbmcgewoJCWsucG9pblt0YW5kYW5nXSArPSAzCgl9IGVsc2UgewoJCWsucG9pbltrYW5kYW5nXSsrCgkJay5wb2luW3RhbmRhbmddKysKCX0KfQoKZnVuYyAoayAqS2xhc2VtZW4pIENldGFrS2xhc2VtZW4oKSBtYXBbc3RyaW5nXWludCB7CglyZXR1cm4gay5wb2luCn0KCmZ1bmMgKGsgKktsYXNlbWVuKSBBbWJpbFBlcmluZ2thdChyYW5rIGludCkgc3RyaW5nIHsKCXR5cGUgQ2x1YiBzdHJ1Y3QgewoJCW5hbWEgc3RyaW5nCgkJcG9pbiBpbnQKCX0KCgl2YXIgY2x1YnMgW11DbHViCgoJZm9yIG5hbWEsIHBvaW4gOj0gcmFuZ2Ugay5wb2luIHsKCQljbHVicyA9IGFwcGVuZChjbHVicywgQ2x1YntuYW1hLCBwb2lufSkKCX0KCglzb3J0LlNsaWNlKGNsdWJzLCBmdW5jKGksIGogaW50KSBib29sIHsKCQlpZiBjbHVic1tpXS5wb2luID09IGNsdWJzW2pdLnBvaW4gewoJCQlyZXR1cm4gY2x1YnNbaV0ubmFtYSA8IGNsdWJzW2pdLm5hbWEKCQl9CgkJcmV0dXJuIGNsdWJzW2ldLnBvaW4gPiBjbHVic1tqXS5wb2luCgl9KQoKCWlmIHJhbmsgPCAxIHx8IHJhbmsgPiBsZW4oY2x1YnMpIHsKCQlyZXR1cm4gIiIKCX0KCglyZXR1cm4gY2x1YnNbcmFuay0xXS5uYW1hCn0KCmZ1bmMgbWFpbigpIHsKCWtsYXNlbWVuIDo9IE5ld0tsYXNlbWVuKFtdc3RyaW5neyJMaXZlcnBvb2wiLCAiQ2hlbHNlYSIsICJBcnNlbmFsIn0pCgoJa2xhc2VtZW4uQ2F0YXRQZXJtYWluYW4oIkFyc2VuYWwiLCAiTGl2ZXJwb29sIiwgIjI6MSIpCglrbGFzZW1lbi5DYXRhdFBlcm1haW5hbigiQXJzZW5hbCIsICJDaGVsc2VhIiwgIjE6MSIpCglrbGFzZW1lbi5DYXRhdFBlcm1haW5hbigiQ2hlbHNlYSIsICJBcnNlbmFsIiwgIjA6MyIpCglrbGFzZW1lbi5DYXRhdFBlcm1haW5hbigiQ2hlbHNlYSIsICJMaXZlcnBvb2wiLCAiMzoyIikKCWtsYXNlbWVuLkNhdGF0UGVybWFpbmFuKCJMaXZlcnBvb2wiLCAiQXJzZW5hbCIsICIyOjIiKQoJa2xhc2VtZW4uQ2F0YXRQZXJtYWluYW4oIkxpdmVycG9vbCIsICJDaGVsc2VhIiwgIjA6MCIpCgoJZm10LlByaW50bG4oa2xhc2VtZW4uQ2V0YWtLbGFzZW1lbigpKQoJZm10LlByaW50bG4oa2xhc2VtZW4uQW1iaWxQZXJpbmdrYXQoMSkpCglmbXQuUHJpbnRsbihrbGFzZW1lbi5BbWJpbFBlcmluZ2thdCgyKSkKfQo=