Menu
Coddy logo textTech

Podsumowanie — prosty timer

Część sekcji Logika i przepływ sterowania ścieżki GO w Coddy. Lekcja 65 z 68.

challenge icon

Wyzwanie

Łatwy

Utwórz aplikację minutnika odliczającego czas, która używa time.NewTicker do odliczania od określonego czasu do zera, wyświetlając komunikaty o postępie w regularnych odstępach. To wyzwanie sprawdzi Twoją umiejętność łączenia tickerów, pętli i obliczeń czasu trwania w celu utworzenia działającej aplikacji do mierzenia czasu.

Otrzymasz dwa wejścia:

  • Ciąg znaków zawierający czas odliczania w formacie "value:unit" (np. "10:Second" lub "3:Minute")
  • Ciąg znaków zawierający odstęp między aktualizacjami w formacie "value:unit" (np. "1:Second")

Twoje zadanie:

  1. Przeanalizuj pierwsze wejście, dzieląc je według dwukropków, aby wyodrębnić wartość i jednostkę czasu odliczania
  2. Przeanalizuj drugie wejście, dzieląc je według dwukropków, aby wyodrębnić wartość i jednostkę odstępu między aktualizacjami
  3. Przekonwertuj wartości tekstowe na liczby całkowite za pomocą pakietu strconv
  4. Utwórz obiekty time.Duration dla czasu odliczania i odstępu między aktualizacjami, używając odpowiednich stałych:
    • Dla "Second": pomnóż przez time.Second
    • Dla "Minute": pomnóż przez time.Minute
    • Dla "Hour": pomnóż przez time.Hour
  5. Wyświetl nagłówek minutnika: "=== COUNTDOWN TIMER ==="
  6. Wyświetl konfigurację minutnika: "Starting countdown from [countdown_duration_object]"
  7. Wyświetl częstotliwość aktualizacji: "Updates every [update_interval_object]"
  8. Utwórz ticker za pomocą time.NewTicker, używając czasu trwania odstępu między aktualizacjami
  9. Zainicjuj zmienną pozostałego czasu, ustawiając ją na czas odliczania
  10. Użyj pętli do odliczania:
    • Poczekaj na każde zdarzenie tickera za pomocą <-ticker.C
    • Odejmij odstęp między aktualizacjami od pozostałego czasu
    • Jeśli pozostały czas jest większy od 0, wyświetl: "Time remaining: [remaining_time_object]"
    • Jeśli pozostały czas wynosi 0 lub mniej, wyświetl: "Time's up!" i zakończ pętlę
  11. Zatrzymaj ticker za pomocą ticker.Stop()
  12. Wyświetl statystyki końcowe:
    • "=== TIMER COMPLETE ==="
    • "Original duration: [countdown_duration_object]"
    • "Update interval: [update_interval_object]"
    • "Total updates displayed: [number_of_updates]" (oblicz, ile razy wyświetlono pozostały czas)
  13. Wyświetl komunikat o zakończeniu: "Countdown timer finished successfully"

Użyj pakietu time do obsługi tickera i czasu trwania, pakietu strings do dzielenia ciągów wejściowych, pakietu strconv do konwertowania ciągów na liczby całkowite oraz pakietu fmt do wyświetlania danych. Pamiętaj, że time.NewTicker zwraca ticker, który wysyła wartości na swoim kanale w regularnych odstępach czasu. Gdy skończysz, musisz wywołać ticker.Stop(), aby zwolnić zasoby. To wyzwanie pokazuje, jak utworzyć praktyczny minutnik odliczający czas za pomocą mechanizmów odmierzania czasu w Go.

Spróbuj swoich sił

package main

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

func main() {
	// Odczytaj dane wejściowe
	var countdownInput string
	var intervalInput string
	fmt.Scanln(&countdownInput)
	fmt.Scanln(&intervalInput)
	
	// Przeanalizuj dane wejściowe określające czas odliczania
	countdownParts := strings.Split(countdownInput, ":")
	countdownValue, _ := strconv.Atoi(countdownParts[0])
	countdownUnit := countdownParts[1]
	
	// Przeanalizuj dane wejściowe określające interwał aktualizacji
	intervalParts := strings.Split(intervalInput, ":")
	intervalValue, _ := strconv.Atoi(intervalParts[0])
	intervalUnit := intervalParts[1]
	
	// TODO: Napisz swój kod poniżej
	// Przekształć wartości w obiekty time.Duration za pomocą instrukcji switch
	// Utwórz licznik odliczający czas (na potrzeby testów zasymuluj go bez rzeczywistych opóźnień)
	// Zaimplementuj pętlę odliczania
	// Wyświetl wszystkie wymagane komunikaty i statystyki
	// Uwaga: Na potrzeby testów zasymuluj działanie tickera bez rzeczywistych opóźnień
	
}

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Go online