Menu
Coddy logo textTech

Recapitulação - Timer Simples

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 65 de 68.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Crie um aplicativo de cronômetro de contagem regressiva que use time.NewTicker para fazer a contagem regressiva de uma duração especificada até zero, exibindo mensagens de progresso em intervalos regulares. Este desafio testará sua habilidade de combinar tickers, loops e cálculos de duração para criar uma aplicação de cronometragem funcional.

Você receberá duas entradas:

  • Uma string contendo a duração da contagem regressiva no formato "value:unit" (ex: "10:Second" ou "3:Minute")
  • Uma string contendo o intervalo de atualização no formato "value:unit" (ex: "1:Second")

Sua tarefa é:

  1. Analisar a primeira entrada dividindo-a nos dois pontos para extrair o valor e a unidade da duração da contagem regressiva
  2. Analisar a segunda entrada dividindo-a nos dois pontos para extrair o valor e a unidade do intervalo de atualização
  3. Converter os valores de string para inteiros usando o pacote strconv
  4. Criar objetos time.Duration tanto para a duração da contagem regressiva quanto para o intervalo de atualização usando as constantes apropriadas:
    • Para "Second": multiplique por time.Second
    • Para "Minute": multiplique por time.Minute
    • Para "Hour": multiplique por time.Hour
  5. Exibir o cabeçalho do cronômetro: "=== COUNTDOWN TIMER ==="
  6. Exibir a configuração do cronômetro: "Starting countdown from [countdown_duration_object]"
  7. Exibir a frequência de atualização: "Updates every [update_interval_object]"
  8. Criar um ticker usando time.NewTicker com a duração do intervalo de atualização
  9. Inicializar uma variável de tempo restante com a duração da contagem regressiva
  10. Usar um loop para a contagem regressiva:
    • Aguardar por cada evento do ticker usando <-ticker.C
    • Subtrair o intervalo de atualização do tempo restante
    • Se o tempo restante for maior que 0, exibir: "Time remaining: [remaining_time_object]"
    • Se o tempo restante for 0 ou menos, exibir: "Time's up!" e sair do loop
  11. Parar o ticker usando ticker.Stop()
  12. Exibir estatísticas de conclusão:
    • "=== TIMER COMPLETE ==="
    • "Original duration: [countdown_duration_object]"
    • "Update interval: [update_interval_object]"
    • "Total updates displayed: [number_of_updates]" (calcule quantas vezes o tempo restante foi exibido)
  13. Exibir a mensagem de conclusão: "Countdown timer finished successfully"

Use o pacote time para operações de ticker e duração, o pacote strings para dividir as strings de entrada, o pacote strconv para converter strings em inteiros e o pacote fmt para saída. Lembre-se que time.NewTicker retorna um ticker que envia valores em seu canal em intervalos regulares, e você deve chamar ticker.Stop() quando terminar para liberar recursos. Este desafio demonstra como criar um cronômetro de contagem regressiva prático usando os mecanismos de temporização do Go.

Experimente você mesmo

package main

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

func main() {
	// Ler entrada
	var countdownInput string
	var intervalInput string
	fmt.Scanln(&countdownInput)
	fmt.Scanln(&intervalInput)
	
	// Analisar a entrada da duração da contagem regressiva
	countdownParts := strings.Split(countdownInput, ":")
	countdownValue, _ := strconv.Atoi(countdownParts[0])
	countdownUnit := countdownParts[1]
	
	// Analisar a entrada do intervalo de atualização
	intervalParts := strings.Split(intervalInput, ":")
	intervalValue, _ := strconv.Atoi(intervalParts[0])
	intervalUnit := intervalParts[1]
	
	// TODO: Escreva seu código abaixo
	// Converter para objetos time.Duration usando instruções switch
	// Criar o cronômetro de contagem regressiva (simular sem atrasos reais para testes)
	// Implementar o loop de contagem regressiva
	// Exibir todas as mensagens e estatísticas necessárias
	// Nota: Para fins de teste, simule o comportamento do ticker sem atrasos de tempo reais
	
}

Todas as lições de Lógica & Fluxo