Menu
Coddy logo textTech

Riepilogo - Timer semplice

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 65 di 68.

challenge icon

Sfida

Facile

Crea un'applicazione con timer per il conto alla rovescia che usa time.NewTicker per contare alla rovescia da una durata specificata fino a zero, mostrando messaggi di avanzamento a intervalli regolari. Questa sfida metterà alla prova la tua capacità di combinare ticker, cicli e calcoli delle durate per creare un'applicazione di cronometraggio funzionante.

Riceverai due input:

  • Una stringa contenente la durata del conto alla rovescia nel formato "value:unit" (ad es., "10:Second" o "3:Minute")
  • Una stringa contenente l'intervallo di aggiornamento nel formato "value:unit" (ad es., "1:Second")

Il tuo compito è:

  1. Analizzare il primo input suddividendolo in corrispondenza dei due punti per estrarre il valore e l'unità della durata del conto alla rovescia
  2. Analizzare il secondo input suddividendolo in corrispondenza dei due punti per estrarre il valore e l'unità dell'intervallo di aggiornamento
  3. Convertire i valori stringa in interi usando il pacchetto strconv
  4. Creare oggetti time.Duration sia per la durata del conto alla rovescia sia per l'intervallo di aggiornamento, usando le costanti appropriate:
    • Per "Second": moltiplicare per time.Second
    • Per "Minute": moltiplicare per time.Minute
    • Per "Hour": moltiplicare per time.Hour
  5. Mostrare l'intestazione del timer: "=== COUNTDOWN TIMER ==="
  6. Mostrare la configurazione del timer: "Starting countdown from [countdown_duration_object]"
  7. Mostrare la frequenza di aggiornamento: "Updates every [update_interval_object]"
  8. Creare un ticker usando time.NewTicker con la durata dell'intervallo di aggiornamento
  9. Inizializzare una variabile del tempo rimanente con la durata del conto alla rovescia
  10. Usare un ciclo per effettuare il conto alla rovescia:
    • Attendere ogni evento del ticker usando <-ticker.C
    • Sottrarre l'intervallo di aggiornamento dal tempo rimanente
    • Se il tempo rimanente è maggiore di 0, mostrare: "Time remaining: [remaining_time_object]"
    • Se il tempo rimanente è 0 o inferiore, mostrare: "Time's up!" e uscire dal ciclo
  11. Arrestare il ticker usando ticker.Stop()
  12. Mostrare le statistiche di completamento:
    • "=== TIMER COMPLETE ==="
    • "Original duration: [countdown_duration_object]"
    • "Update interval: [update_interval_object]"
    • "Total updates displayed: [number_of_updates]" (calcolare quante volte è stato mostrato il tempo rimanente)
  13. Mostrare il messaggio di completamento: "Countdown timer finished successfully"

Usa il pacchetto time per le operazioni con ticker e durate, il pacchetto strings per suddividere le stringhe di input, il pacchetto strconv per convertire le stringhe in interi e il pacchetto fmt per l'output. Ricorda che time.NewTicker restituisce un ticker che invia valori sul suo canale a intervalli regolari e che, quando hai finito, devi chiamare ticker.Stop() per liberare le risorse. Questa sfida mostra come creare un pratico timer per il conto alla rovescia usando i meccanismi di cronometraggio di Go.

Provalo tu

package main

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

func main() {
	// Leggi l'input
	var countdownInput string
	var intervalInput string
	fmt.Scanln(&countdownInput)
	fmt.Scanln(&intervalInput)
	
	// Analizza l'input della durata del conto alla rovescia
	countdownParts := strings.Split(countdownInput, ":")
	countdownValue, _ := strconv.Atoi(countdownParts[0])
	countdownUnit := countdownParts[1]
	
	// Analizza l'input dell'intervallo di aggiornamento
	intervalParts := strings.Split(intervalInput, ":")
	intervalValue, _ := strconv.Atoi(intervalParts[0])
	intervalUnit := intervalParts[1]
	
	// TODO: Scrivi il tuo codice qui sotto
	// Converti in oggetti time.Duration usando istruzioni switch
	// Crea il timer del conto alla rovescia (simula senza ritardi effettivi per i test)
	// Implementa il ciclo del conto alla rovescia
	// Visualizza tutti i messaggi e le statistiche richiesti
	// Nota: ai fini dei test, simula il comportamento del ticker senza ritardi reali
	
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online