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 (
"fmt"
"sort"
"os"
"strconv"
"sync"
)
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)
func go1(ch chan<- string, wg1 *sync.WaitGroup) {
defer wg1.Done()
for i := 1; i < 11; i++ {
ch <- "go1_" + strconv.Itoa(i)
}
keys := make([]string, 0, len(l.Wins))
for k := range l.Wins {
keys = append(keys, k)
}
func go2(ch chan<- string, wg1 *sync.WaitGroup) {
defer wg1.Done()
for i := 1; i < 11; i++ {
ch <- "go2_" + strconv.Itoa(i)
}
}
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])
func Reader(ch <-chan string, wg *sync.WaitGroup) {
defer wg.Done()
for {
if v, ok := <-ch; !ok {
fmt.Println("Channel closed")
os.Exit(1)
} else {
fmt.Println(v)
}
}
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())
var wg1 sync.WaitGroup
var wg sync.WaitGroup
wg.Add(1)
wg1.Add(2)
ch := make(chan string)
go go1(ch, &wg1)
go go2(ch, &wg1)
go Reader(ch, &wg)
go func() {
wg1.Wait()
close(ch)
}()
wg.Wait()
}