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.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

challenge icon

Desafío

Fácil

Crea una aplicación de temporizador de cuenta regresiva que utilice time.NewTicker para contar hacia atrás 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 para crear una aplicación de temporización funcional.

Recibirás dos entradas:

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

Tu tarea es:

  1. Analizar la primera entrada dividiéndola por los dos puntos para extraer el valor y la unidad de la duración de la cuenta regresiva
  2. Analizar la segunda entrada dividiéndola por los 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 tanto para la duración de la cuenta regresiva como para el intervalo de actualización utilizando 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 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 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 de ticker y duración, el paquete strings para dividir las cadenas de entrada, el paquete strconv para convertir cadenas a enteros y el paquete fmt para la salida. Recuerda que time.NewTicker devuelve un ticker que envía valores por 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 de cuenta regresiva práctico utilizando los mecanismos de temporización 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