Эта проблема вдохновлена xkcd :
Вызов:
Вы будете имитировать копирование большого файла (1 гигабайт). Скорость передачи данных будет варьироваться от 10 кБ / с до 100 МБ / с. Ваша задача - вывести оставшееся время передачи файла. Вывод должен выглядеть так:
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)
Лидирующие нули не обязательно должны отображаться в течение нескольких минут и часов (необязательно), а должны отображаться в течение нескольких секунд. Показывать оставшееся время, используя только секунды, не в порядке.
Передача файлов:
- Скорость передачи начнется с 10 МБ / с.
- Каждую секунду будет 30% вероятность того, что скорость передачи будет меняться
- Новая скорость передачи должна выбираться случайным образом (равномерное распределение) в диапазоне
[10 kB/s, 100 MB/s]
с шагом 10 кБ / с.
Примечание. Вам не нужно копировать файл.
Вы можете использовать:, 1 GB = 1000 MB, 1 MB = 1000 kB, 1 kB = 1000 B
или 1 GB = 1024 MB, 1 MB = 1024 kB, 1 kB = 1024 B
.
Выход:
- Вы начинаете
01:40
, а не01:39
. - Вы отображаете время после изменения скорости передачи, но до того, как что-либо передается по этой скорости
- Секунды должны отображаться как целые числа, а не как десятичные дроби. Необязательно округлять вверх / вниз / ближе всего.
- Вы должны очищать экран каждую секунду, если это невозможно на вашем языке.
- Вывод должен быть постоянным:
Time remaining: 00:00
когда передача файла закончена.
Пример:
Я собрал все десятичные секунды. Предположим, что строки ниже показаны с интервалом в 1 секунду, и экран очищается между каждым:
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
(или 1:42
) не 1:39
(или 1:41
)»?
1024
версию, какие размеры шагов мы должны использовать?
00:00:10
например?