Go pointer receiver и встраивание struct: изменяемый счётчик
Счётчик раунда
В спортивных турнирах каждый раунд принято фиксировать отдельно: у него есть собственное название и накопленный счёт, который растёт по мере добавления очков и обнуляется перед следующим этапом. Удобнее всего такую логику оформить так, чтобы сам счётчик жил своей жизнью и ничего не знал о метке, а раунд просто брал его возможности себе — без дублирования кода и лишних прослоек.
В этой задаче Round встраивает Counter как значение. Мы передаём раунд по адресу, поэтому его встроенный счётчик доступен для изменяющих методов. В другом дизайне можно было бы хранить и указатель; это не является требованием pointer-receiver.
Что нужно сделать
Допишите методы Add, Reset и Value у Counter, добавьте анонимно встроенный счётчик в Round и закончите scoreRound. Внутри неё последовательно добавьте три числа через продвинутые методы раунда, сохраните сумму, сбросьте счётчик и верните оба наблюдаемых значения.
Формат ввода
В первой строке метка раунда без пробелов. Во второй — три целых числа.
Формат вывода
Две строки: LABEL: SUM, затем LABEL: 0.
Пример
Ввод: final 2 3 4 Вывод: final: 9 final: 0
Пример
- Ввод
final 2 3 4
- Вывод
final: 9 final: 0
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Go: композиция интерфейсов ReaderNotifier и обработка ошибки
- Go type assertion с ok: дополнительный интерфейс для объекта
- Go: подмена зависимостей интерфейсами и fake-уведомитель
- Go fmt.Sprintf: форматирование строки и числа с двумя знаками
- Go if и switch: несколько значений в одной ветке
- Go strings.Split и strconv.ParseFloat: сумма чисел в строке
