Menu
Coddy logo textTech

Resumen - Temporizador simple

Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 65 de 68.

challenge icon

Desafío

Fácil

Crea una aplicación de temporizador de cuenta regresiva que use time.NewTicker para contar desde una duración especificada hasta cero, mostrando mensajes de progreso a intervalos regulares. Este desafío pondrá a prueba tu capacidad para combinar tickers, bucles y cálculos de duración con el fin de crear una aplicación funcional de medición del tiempo.

Recibirás dos entradas:

  • Una cadena que contiene la duración de la cuenta regresiva con el formato "value:unit" (por ejemplo, "10:Second" o "3:Minute")
  • Una cadena que contiene el intervalo de actualización con el formato "value:unit" (por ejemplo, "1:Second")

Tu tarea es:

  1. Analizar la primera entrada separándola por dos puntos para extraer el valor y la unidad de la duración de la cuenta regresiva
  2. Analizar la segunda entrada separándola por dos puntos para extraer el valor y la unidad del intervalo de actualización
  3. Convertir los valores de cadena a enteros usando el paquete strconv
  4. Crear objetos time.Duration para la duración de la cuenta regresiva y el intervalo de actualización usando las constantes apropiadas:
    • Para "Second": multiplicar por time.Second
    • Para "Minute": multiplicar por time.Minute
    • Para "Hour": multiplicar por time.Hour
  5. Mostrar el encabezado del temporizador: "=== COUNTDOWN TIMER ==="
  6. Mostrar la configuración del temporizador: "Starting countdown from [countdown_duration_object]"
  7. Mostrar la frecuencia de actualización: "Updates every [update_interval_object]"
  8. Crear un ticker usando time.NewTicker con la duración del intervalo de actualización
  9. Inicializar una variable de tiempo restante con la duración de la cuenta regresiva
  10. Usar un bucle para realizar la cuenta regresiva:
    • Esperar cada evento del ticker usando <-ticker.C
    • Restar el intervalo de actualización del tiempo restante
    • Si el tiempo restante es mayor que 0, mostrar: "Time remaining: [remaining_time_object]"
    • Si el tiempo restante es 0 o menos, mostrar: "Time's up!" y salir del bucle
  11. Detener el ticker usando ticker.Stop()
  12. Mostrar las estadísticas de finalización:
    • "=== TIMER COMPLETE ==="
    • "Original duration: [countdown_duration_object]"
    • "Update interval: [update_interval_object]"
    • "Total updates displayed: [number_of_updates]" (calcula cuántas veces se mostró el tiempo restante)
  13. Mostrar el mensaje de finalización: "Countdown timer finished successfully"

Usa el paquete time para las operaciones del ticker y de duración, el paquete strings para separar las cadenas de entrada, el paquete strconv para convertir las cadenas a enteros y el paquete fmt para la salida. Recuerda que time.NewTicker devuelve un ticker que envía valores a través de su canal a intervalos regulares, y debes llamar a ticker.Stop() cuando hayas terminado para liberar recursos. Este desafío demuestra cómo crear un temporizador práctico de cuenta regresiva usando los mecanismos de medición del tiempo de Go.

Pruébalo tú mismo

package main

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

func main() {
	// Leer entrada
	var countdownInput string
	var intervalInput string
	fmt.Scanln(&countdownInput)
	fmt.Scanln(&intervalInput)
	
	// Analizar la entrada de la duración de la cuenta regresiva
	countdownParts := strings.Split(countdownInput, ":")
	countdownValue, _ := strconv.Atoi(countdownParts[0])
	countdownUnit := countdownParts[1]
	
	// Analizar la entrada del intervalo de actualización
	intervalParts := strings.Split(intervalInput, ":")
	intervalValue, _ := strconv.Atoi(intervalParts[0])
	intervalUnit := intervalParts[1]
	
	// TODO: Escribe tu código a continuación
	// Convertir a objetos time.Duration usando sentencias switch
	// Crear el temporizador de cuenta regresiva (simular sin retrasos reales para pruebas)
	// Implementar el bucle de cuenta regresiva
	// Mostrar todos los mensajes y estadísticas requeridos
	// Nota: Para fines de prueba, simula el comportamiento del ticker sin retrasos de tiempo reales
	
}

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Go online