added vagrant
This commit is contained in:
parent
7d67459626
commit
75066c8a08
BIN
oreilly/goroute
Executable file
BIN
oreilly/goroute
Executable file
Binary file not shown.
106
oreilly/main.go
106
oreilly/main.go
|
|
@ -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())
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user