Diese Herausforderung ist inspiriert von xkcd :
Herausforderung:
Sie simulieren das Kopieren einer großen Datei (1 Gigabyte). Die Übertragungsrate variiert zwischen 10 kB / s und 100 MB / s. Ihre Aufgabe ist es, die verbleibende Zeit der Dateiübertragung auszugeben. Die Ausgabe sollte folgendermaßen aussehen:
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)
Führende Nullen müssen nicht für Minuten und Stunden angezeigt werden (optional), sondern müssen für Sekunden angezeigt werden. Es ist nicht OK, die verbleibende Zeit in Sekunden anzugeben.
Die Dateiübertragung:
- Die Übertragungsrate beginnt bei 10 MB / Sekunde.
- Jede Sekunde besteht eine Wahrscheinlichkeit von 30%, dass sich die Übertragungsrate ändert
- Die neue Übertragungsrate sollte zufällig (gleichmäßige Verteilung)
[10 kB/s, 100 MB/s]
in Schritten von 10 kB / s ausgewählt werden.
Hinweis: Sie müssen eine Datei nicht wirklich kopieren.
Sie können wählen:, 1 GB = 1000 MB, 1 MB = 1000 kB, 1 kB = 1000 B
oder 1 GB = 1024 MB, 1 MB = 1024 kB, 1 kB = 1024 B
.
Ausgabe:
- Du fängst bei an
01:40
, nicht01:39
. - Sie zeigen die Zeit an, nachdem sich die Übertragungsrate geändert hat, aber bevor etwas mit dieser Rate übertragen wird
- Die Sekunden sollten als ganze Zahlen und nicht als Dezimalzahlen angezeigt werden. Es ist optional, auf / ab / am nächsten zu runden.
- Sie sollten den Bildschirm jede Sekunde löschen, es sei denn, dies ist in Ihrer Sprache nicht möglich.
- Die Ausgabe sollte konstant sein:
Time remaining: 00:00
wenn die Dateiübertragung beendet ist.
Beispiel:
Ich habe alle Dezimalsekunden aufgerundet. Angenommen, die folgenden Zeilen werden mit einem Abstand von 1 Sekunde angezeigt und der Bildschirm wird zwischen den einzelnen Zeilen gelöscht:
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
(oder 1:42
) nicht 1:39
(oder 1:41
)"?
1024
Version verwenden, welche Schrittgrößen sollten wir verwenden?
00:00:10
zum Beispiel belassen ?