/
zxcqwe
/
test
Обзор
Документация
Войти
/
zxcqwe
/
test
Код
Запросы
2
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
sameBranch
structs/structs.go
128 строк
3 KB
Vasily Parshentsev
update
25 дек 2024, 14:38
25 дек 2024, 14:38
00a36d2
Код
Авторство
О чём код?
package main import ( "bufio" "fmt" "io" "log" "os" "sort" "strings" ) // result представляет результат матча type result byte // возможные результаты матча const ( win result = 'W' draw result = 'D' loss result = 'L' ) // team представляет команду type team byte // match представляет матч // содержит три поля: // - first (первая команда) // - second (вторая команда) // - result (результат матча) // например, строке BAW соответствует // first=B, second=A, result=W type match struct { first team second team result result } func (m *match) calcPoint() (int, int) { switch m.result { case win: return 3, 0 case draw: return 1, 1 default: return 0, 3 } } // rating представляет турнирный рейтинг команд - // количество набранных очков по каждой команде type rating map[team]int // tournament представляет турнир type tournament []match // calcRating считает и возвращает рейтинг турнира func (t *tournament) calcRating() rating { result := rating(make(map[team]int)) for _, value := range *t { pointFirstTeam, pointsSecondTeam := value.calcPoint() result[value.first] += pointFirstTeam result[value.second] += pointsSecondTeam } return result } // ┌─────────────────────────────────┐ // │ не меняйте код ниже этой строки │ // └─────────────────────────────────┘ // код, который парсит результаты игр, уже реализован // код, который печатает рейтинг, уже реализован // ваша задача - реализовать недостающие структуры и методы выше func main() { src := readString() trn := parseTournament(src) rt := trn.calcRating() rt.print() } // readString считывает и возвращает строку из os.Stdin func readString() string { rdr := bufio.NewReader(os.Stdin) str, err := rdr.ReadString('\n') if err != nil && err != io.EOF { log.Fatal(err) } return str } // parseTournament парсит турнир из исходной строки func parseTournament(s string) tournament { descriptions := strings.Split(s, " ") trn := tournament{} for _, descr := range descriptions { m := parseMatch(descr) trn.addMatch(m) } return trn } // parseMatch парсит матч из фрагмента исходной строки func parseMatch(s string) match { return match{ first: team(s[0]), second: team(s[1]), result: result(s[2]), } } // addMatch добавляет матч к турниру func (t *tournament) addMatch(m match) { *t = append(*t, m) } // print печатает результаты турнира // в формате Aw Bx Cy Dz func (r *rating) print() { var parts []string for team, score := range *r { part := fmt.Sprintf("%c%d", team, score) parts = append(parts, part) } sort.Strings(parts) fmt.Println(strings.Join(parts, " ")) }