88 lines
1.3 KiB
Go
88 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
)
|
|
|
|
type Player struct {
|
|
name string
|
|
}
|
|
|
|
type Team struct {
|
|
Name string
|
|
Members []Player
|
|
}
|
|
|
|
type League struct {
|
|
Wins map[string]int
|
|
}
|
|
|
|
type Ranker interface {
|
|
Ranking () []string
|
|
}
|
|
|
|
func (l League) MatchResult(ft, st string, fscore, sscore int) {
|
|
l.Wins[ft] += fscore
|
|
l.Wins[st] += sscore
|
|
}
|
|
|
|
func (l League) Ranking() []string {
|
|
for k, v := range l.Wins {
|
|
fmt.Printf("Command %s has %d scores\n", k, v)
|
|
}
|
|
keys := make([]string, 0, len(l.Wins))
|
|
for k := range l.Wins {
|
|
keys = append(keys, k)
|
|
}
|
|
|
|
sort.Slice(keys, func(i, j int) bool {
|
|
return l.Wins[keys[i]] > l.Wins[keys[j]]
|
|
})
|
|
|
|
for _, k := range keys {
|
|
fmt.Println(k, l.Wins[k])
|
|
}
|
|
|
|
return keys
|
|
}
|
|
|
|
func main() {
|
|
Spartak := Team{
|
|
Name: "Spartak",
|
|
Members: []Player{
|
|
{name: "Titov"},
|
|
{name: "Dzuba"},
|
|
},
|
|
}
|
|
|
|
Dinamo := Team{
|
|
Name: "Dinamo",
|
|
Members: []Player{
|
|
{name: "Ivanov"},
|
|
{name: "Petrov"},
|
|
},
|
|
}
|
|
|
|
Torpedo := Team{
|
|
Name: "Torpedo",
|
|
Members: []Player{
|
|
{name: "Sidorov"},
|
|
{name: "Zalupkin"},
|
|
},
|
|
}
|
|
|
|
league := League{
|
|
Wins: make(map[string]int),
|
|
}
|
|
|
|
league.MatchResult(Spartak.Name, Dinamo.Name, 2, 4)
|
|
league.MatchResult(Torpedo.Name, Dinamo.Name, 3, 3)
|
|
league.MatchResult(Spartak.Name, Torpedo.Name, 1, 2)
|
|
|
|
fmt.Println(league)
|
|
|
|
fmt.Println(league.Ranking())
|
|
|
|
}
|