package main
import (
"fmt"
"sort"
"strconv"
"strings"
)
type Klasemen struct {
poin map[string]int
}
func NewKlasemen(klubList []string) *Klasemen {
poin := make(map[string]int)
for _, klub := range klubList {
poin[klub] = 0
}
return &Klasemen{poin: poin}
}
func (k *Klasemen) CatatPermainan(klubKandang, klubTandang, skor string) {
skorParts := strings.Split(skor, ":")
skorKandang, _ := strconv.Atoi(skorParts[0])
skorTandang, _ := strconv.Atoi(skorParts[1])
if skorKandang > skorTandang {
k.poin[klubKandang] += 3
} else if skorKandang < skorTandang {
k.poin[klubTandang] += 3
} else {
k.poin[klubKandang] += 1
k.poin[klubTandang] += 1
}
}
func (k *Klasemen) CetakKlasemen() map[string]int {
return k.poin
}
func (k *Klasemen) AmbilPeringkat(nomorPeringkat int) string {
type KlubPoin struct {
klub string
poin int
}
var klubPoinList []KlubPoin
for klub, poin := range k.poin {
klubPoinList = append(klubPoinList, KlubPoin{klub, poin})
}
sort.Slice(klubPoinList, func(i, j int) bool {
if klubPoinList[i].poin == klubPoinList[j].poin {
return klubPoinList[i].klub < klubPoinList[j].klub
}
return klubPoinList[i].poin > klubPoinList[j].poin
})
if nomorPeringkat > 0 && nomorPeringkat <= len(klubPoinList) {
return klubPoinList[nomorPeringkat-1].klub
}
return ""
}
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:", klasemen.CetakKlasemen())
fmt.Println("Peringkat 2:", klasemen.AmbilPeringkat(2))
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAogICAgImZtdCIKICAgICJzb3J0IgogICAgInN0cmNvbnYiCiAgICAic3RyaW5ncyIKKQoKdHlwZSBLbGFzZW1lbiBzdHJ1Y3QgewogICAgcG9pbiBtYXBbc3RyaW5nXWludAp9CgpmdW5jIE5ld0tsYXNlbWVuKGtsdWJMaXN0IFtdc3RyaW5nKSAqS2xhc2VtZW4gewogICAgcG9pbiA6PSBtYWtlKG1hcFtzdHJpbmddaW50KQogICAgZm9yIF8sIGtsdWIgOj0gcmFuZ2Uga2x1Ykxpc3QgewogICAgICAgIHBvaW5ba2x1Yl0gPSAwCiAgICB9CiAgICByZXR1cm4gJktsYXNlbWVue3BvaW46IHBvaW59Cn0KCmZ1bmMgKGsgKktsYXNlbWVuKSBDYXRhdFBlcm1haW5hbihrbHViS2FuZGFuZywga2x1YlRhbmRhbmcsIHNrb3Igc3RyaW5nKSB7CiAgICBza29yUGFydHMgOj0gc3RyaW5ncy5TcGxpdChza29yLCAiOiIpCiAgICBza29yS2FuZGFuZywgXyA6PSBzdHJjb252LkF0b2koc2tvclBhcnRzWzBdKQogICAgc2tvclRhbmRhbmcsIF8gOj0gc3RyY29udi5BdG9pKHNrb3JQYXJ0c1sxXSkKICAgIAogICAgaWYgc2tvckthbmRhbmcgPiBza29yVGFuZGFuZyB7CiAgICAgICAgay5wb2luW2tsdWJLYW5kYW5nXSArPSAzCiAgICB9IGVsc2UgaWYgc2tvckthbmRhbmcgPCBza29yVGFuZGFuZyB7CiAgICAgICAgay5wb2luW2tsdWJUYW5kYW5nXSArPSAzCiAgICB9IGVsc2UgewogICAgICAgIGsucG9pbltrbHViS2FuZGFuZ10gKz0gMQogICAgICAgIGsucG9pbltrbHViVGFuZGFuZ10gKz0gMQogICAgfQp9CgpmdW5jIChrICpLbGFzZW1lbikgQ2V0YWtLbGFzZW1lbigpIG1hcFtzdHJpbmddaW50IHsKICAgIHJldHVybiBrLnBvaW4KfQoKZnVuYyAoayAqS2xhc2VtZW4pIEFtYmlsUGVyaW5na2F0KG5vbW9yUGVyaW5na2F0IGludCkgc3RyaW5nIHsKICAgIHR5cGUgS2x1YlBvaW4gc3RydWN0IHsKICAgICAgICBrbHViIHN0cmluZwogICAgICAgIHBvaW4gaW50CiAgICB9CiAgICAKICAgIHZhciBrbHViUG9pbkxpc3QgW11LbHViUG9pbgogICAgZm9yIGtsdWIsIHBvaW4gOj0gcmFuZ2Ugay5wb2luIHsKICAgICAgICBrbHViUG9pbkxpc3QgPSBhcHBlbmQoa2x1YlBvaW5MaXN0LCBLbHViUG9pbntrbHViLCBwb2lufSkKICAgIH0KICAgIAogICAgc29ydC5TbGljZShrbHViUG9pbkxpc3QsIGZ1bmMoaSwgaiBpbnQpIGJvb2wgewogICAgICAgIGlmIGtsdWJQb2luTGlzdFtpXS5wb2luID09IGtsdWJQb2luTGlzdFtqXS5wb2luIHsKICAgICAgICAgICAgcmV0dXJuIGtsdWJQb2luTGlzdFtpXS5rbHViIDwga2x1YlBvaW5MaXN0W2pdLmtsdWIKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGtsdWJQb2luTGlzdFtpXS5wb2luID4ga2x1YlBvaW5MaXN0W2pdLnBvaW4KICAgIH0pCiAgICAKICAgIGlmIG5vbW9yUGVyaW5na2F0ID4gMCAmJiBub21vclBlcmluZ2thdCA8PSBsZW4oa2x1YlBvaW5MaXN0KSB7CiAgICAgICAgcmV0dXJuIGtsdWJQb2luTGlzdFtub21vclBlcmluZ2thdC0xXS5rbHViCiAgICB9CiAgICByZXR1cm4gIiIKfQoKZnVuYyBtYWluKCkgewogICAga2xhc2VtZW4gOj0gTmV3S2xhc2VtZW4oW11zdHJpbmd7IkxpdmVycG9vbCIsICJDaGVsc2VhIiwgIkFyc2VuYWwifSkKICAgIAogICAga2xhc2VtZW4uQ2F0YXRQZXJtYWluYW4oIkFyc2VuYWwiLCAiTGl2ZXJwb29sIiwgIjI6MSIpCiAgICBrbGFzZW1lbi5DYXRhdFBlcm1haW5hbigiQXJzZW5hbCIsICJDaGVsc2VhIiwgIjE6MSIpCiAgICBrbGFzZW1lbi5DYXRhdFBlcm1haW5hbigiQ2hlbHNlYSIsICJBcnNlbmFsIiwgIjA6MyIpCiAgICBrbGFzZW1lbi5DYXRhdFBlcm1haW5hbigiQ2hlbHNlYSIsICJMaXZlcnBvb2wiLCAiMzoyIikKICAgIGtsYXNlbWVuLkNhdGF0UGVybWFpbmFuKCJMaXZlcnBvb2wiLCAiQXJzZW5hbCIsICIyOjIiKQogICAga2xhc2VtZW4uQ2F0YXRQZXJtYWluYW4oIkxpdmVycG9vbCIsICJDaGVsc2VhIiwgIjA6MCIpCiAgICAKICAgIGZtdC5QcmludGxuKCJLbGFzZW1lbjoiLCBrbGFzZW1lbi5DZXRha0tsYXNlbWVuKCkpCiAgICBmbXQuUHJpbnRsbigiUGVyaW5na2F0IDI6Iiwga2xhc2VtZW4uQW1iaWxQZXJpbmdrYXQoMikpCn0=