To wyzwanie jest inspirowane przez xkcd :
Wyzwanie:
Symulujesz kopiowanie dużego pliku (1 gigabajt). Szybkość przesyłania będzie się wahać od 10 kB / sekundę do 100 MB / sekundę. Twoim zadaniem jest określenie pozostałego czasu do przesłania pliku. Dane wyjściowe powinny wyglądać następująco:
Time remaining: 03:12 (meaning it's 3 minutes and 12 seconds left)
Time remaining: 123:12 (meaning it's 2 hours, 3 minutes and 12 seconds left)
Time remaining: 02:03:12 (optional output, meaning the same as above)
Zera wiodące nie muszą być wyświetlane przez minuty i godziny (opcjonalnie), ale muszą być wyświetlane przez sekundy. Wyświetlanie czasu pozostałego przy użyciu tylko sekund jest nieprawidłowe.
Przesyłanie pliku:
- Szybkość przesyłania rozpocznie się od 10 MB / sekundę.
- Co sekundę będzie 30% szans na zmianę szybkości transferu
- Nowa szybkość transferu powinna być wybierana losowo (rozkład równomierny) w zakresie
[10 kB/s, 100 MB/s]
, w krokach co 10 kB / s.
Uwaga: Nie musisz kopiować pliku.
Możesz wybrać opcję: 1 GB = 1000 MB, 1 MB = 1000 kB, 1 kB = 1000 B
lub 1 GB = 1024 MB, 1 MB = 1024 kB, 1 kB = 1024 B
.
Wynik:
- Zaczynasz o
01:40
nie01:39
. - Wyświetlany jest czas po zmianie szybkości przesyłania, ale zanim cokolwiek zostanie przesłane z tą prędkością
- Sekundy powinny być wyświetlane jako liczby całkowite, a nie dziesiętne. Opcjonalnie można zaokrąglać w górę / w dół / najbliżej.
- Powinieneś wyczyścić ekran co sekundę, chyba że jest to niemożliwe w twoim języku.
- Dane wyjściowe powinny być stałe:
Time remaining: 00:00
po zakończeniu przesyłania pliku.
Przykład:
Zaokrągliłem wszystkie dziesiętne sekundy. Załóżmy, że poniższe linie są pokazane z 1 sekundą pomiędzy nimi, a ekran jest czyszczony między nimi:
Time remaining: 01:40 (Transfer rate: 10 MB/s)
Time remaining: 01:39 1 GB - 10 MB
Time remaining: 01:38 1 GB - 2*10 MB
Time remaining: 01:37 1 GB - 3*10 MB
Time remaining: 01:28:54 1 GB - 4*10 MB (TR: 180 kB/s)
Time remaining: 01:28:53 1 GB - 4*10 MB - 180 kB
Time remaining: 01:28:52 1 GB - 4*10 MB - 2*180 kB
Time remaining: 00:13 1 GB - 4*10 MB - 3*180 kB (TR: 75 MB/s)
Time remaining: 00:12 1 GB - 4*10 MB - 3*180 kB - 75 MB
Time remaining: 00:11 1 GB - 4*10 MB - 3*180 kB - 2*75 MB
Time remaining: 00:10 1 GB - 4*10 MB - 3*180 kB - 3*75 MB
Time remaining: 00:09 1 GB - 4*10 MB - 3*180 kB - 4*75 MB
Time remaining: 00:08 1 GB - 4*10 MB - 3*180 kB - 5*75 MB
Time remaining: 14:09:06 1 GB - 4*10 MB - 3*180 kB - 6*75 MB (TR: 10 kB/s)
Time remaining: 14:09:05 1 GB - 4*10 MB - 3*180 kB - 6*75 MB - 10 kB
Time remaining: 00:06 1 GB - 4*10 MB - 3*180 kB - 6*75 MB - 20 kB (TR: 88.110 MB/s)
Time remaining: 00:05
Time remaining: 00:04
Time remaining: 00:03
Time remaining: 00:02
Time remaining: 00:01
Time remaining: 00:00 <- Transfer is finished. Display this.
1:40
(lub 1:42
) nie 1:39
(lub 1:41
)”?
1024
wersji, jakie rozmiary kroków powinniśmy stosować?
00:00:10
na przykład pozostawić produkcję ?