From 7d674596269baad3c63f1db9dbc1c0cd6025e3a9 Mon Sep 17 00:00:00 2001 From: "a.pivkin" Date: Wed, 10 Dec 2025 11:34:00 +0300 Subject: [PATCH] puk --- oreilly/main.go | 86 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 80 insertions(+), 6 deletions(-) diff --git a/oreilly/main.go b/oreilly/main.go index 0e496aa..7eb0fc0 100644 --- a/oreilly/main.go +++ b/oreilly/main.go @@ -2,12 +2,86 @@ package main import ( "fmt" + "sort" ) -func main() { - var total int - for i := 0; i < 10; i++ { - total = total + i - fmt.Println(total) - } +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()) + }