added vagrant

This commit is contained in:
a.pivkin 2025-12-13 08:13:47 +03:00
parent 7d67459626
commit 75066c8a08
2 changed files with 36 additions and 72 deletions

BIN
oreilly/goroute Executable file

Binary file not shown.

View File

@ -2,86 +2,50 @@ package main
import ( import (
"fmt" "fmt"
"sort" "os"
"strconv"
"sync"
) )
type Player struct { func go1(ch chan<- string, wg1 *sync.WaitGroup) {
name string defer wg1.Done()
for i := 1; i < 11; i++ {
ch <- "go1_" + strconv.Itoa(i)
}
} }
type Team struct { func go2(ch chan<- string, wg1 *sync.WaitGroup) {
Name string defer wg1.Done()
Members []Player for i := 1; i < 11; i++ {
ch <- "go2_" + strconv.Itoa(i)
}
} }
type League struct { func Reader(ch <-chan string, wg *sync.WaitGroup) {
Wins map[string]int defer wg.Done()
for {
if v, ok := <-ch; !ok {
fmt.Println("Channel closed")
os.Exit(1)
} else {
fmt.Println(v)
} }
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() { func main() {
Spartak := Team{ var wg1 sync.WaitGroup
Name: "Spartak", var wg sync.WaitGroup
Members: []Player{ wg.Add(1)
{name: "Titov"}, wg1.Add(2)
{name: "Dzuba"}, ch := make(chan string)
}, go go1(ch, &wg1)
} go go2(ch, &wg1)
go Reader(ch, &wg)
Dinamo := Team{
Name: "Dinamo", go func() {
Members: []Player{ wg1.Wait()
{name: "Ivanov"}, close(ch)
{name: "Petrov"}, }()
}, wg.Wait()
}
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())
} }