Menu
Coddy logo textTech

Итоги — Простой таймер

Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 65 из 68.

challenge icon

Задание

Легко

Создайте приложение обратного отсчета, которое использует time.NewTicker для отсчета времени от заданной продолжительности до нуля, отображая сообщения о прогрессе через регулярные интервалы. Эта задача проверит вашу способность комбинировать тикеры, циклы и вычисления продолжительности для создания функционального приложения для замера времени.

Вы получите два входных значения:

  • Строка, содержащая продолжительность обратного отсчета в формате "value:unit" (например, "10:Second" или "3:Minute")
  • Строка, содержащая интервал обновления в формате "value:unit" (например, "1:Second")

Ваша задача:

  1. Разобрать первый ввод, разделив его по двоеточию, чтобы извлечь значение и единицу измерения продолжительности обратного отсчета
  2. Разобрать второй ввод, разделив его по двоеточию, чтобы извлечь значение и единицу измерения интервала обновления
  3. Преобразовать строковые значения в целые числа с помощью пакета strconv
  4. Создать объекты time.Duration как для продолжительности обратного отсчета, так и для интервала обновления, используя соответствующие константы:
    • Для "Second": умножить на time.Second
    • Для "Minute": умножить на time.Minute
    • Для "Hour": умножить на time.Hour
  5. Вывести заголовок таймера: "=== COUNTDOWN TIMER ==="
  6. Вывести настройки таймера: "Starting countdown from [countdown_duration_object]"
  7. Вывести частоту обновления: "Updates every [update_interval_object]"
  8. Создать тикер с помощью time.NewTicker с длительностью интервала обновления
  9. Инициализировать переменную оставшегося времени значением продолжительности обратного отсчета
  10. Использовать цикл для обратного отсчета:
    • Ожидать каждого события тикера с помощью <-ticker.C
    • Вычитать интервал обновления из оставшегося времени
    • Если оставшееся время больше 0, вывести: "Time remaining: [remaining_time_object]"
    • Если оставшееся время 0 или меньше, вывести: "Time's up!" и выйти из цикла
  11. Остановить тикер с помощью ticker.Stop()
  12. Вывести статистику завершения:
    • "=== TIMER COMPLETE ==="
    • "Original duration: [countdown_duration_object]"
    • "Update interval: [update_interval_object]"
    • "Total updates displayed: [number_of_updates]" (рассчитайте, сколько раз было отображено оставшееся время)
  13. Вывести сообщение о завершении: "Countdown timer finished successfully"

Используйте пакет time для операций с тикером и продолжительностью, пакет strings для разделения входных строк, пакет strconv для преобразования строк в целые числа и пакет fmt для вывода. Помните, что time.NewTicker возвращает тикер, который отправляет значения в свой канал через регулярные интервалы, и вы должны вызвать ticker.Stop(), когда закончите, чтобы освободить ресурсы. Эта задача демонстрирует, как создать практичный таймер обратного отсчета, используя механизмы синхронизации Go.

Попробуйте сами

package main

import (
	"fmt"
	"strconv"
	"strings"
	"time"
)

func main() {
	// Чтение входных данных
	var countdownInput string
	var intervalInput string
	fmt.Scanln(&countdownInput)
	fmt.Scanln(&intervalInput)
	
	// Разбор входных данных длительности обратного отсчета
	countdownParts := strings.Split(countdownInput, ":")
	countdownValue, _ := strconv.Atoi(countdownParts[0])
	countdownUnit := countdownParts[1]
	
	// Разбор входных данных интервала обновления
	intervalParts := strings.Split(intervalInput, ":")
	intervalValue, _ := strconv.Atoi(intervalParts[0])
	intervalUnit := intervalParts[1]
	
	// TODO: Напишите свой код ниже
	// Преобразование в объекты time.Duration с использованием операторов switch
	// Создание таймера обратного отсчета (имитация без реальных задержек для тестирования)
	// Реализация цикла обратного отсчета
	// Отображение всех необходимых сообщений и статистики
	// Примечание: Для целей тестирования имитируйте поведение тикера без реальных задержек во времени
	
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Go