Este desafio é inspirado no xkcd :
Desafio:
Você simulará a cópia de um arquivo grande (1 Gigabyte). A taxa de transferência varia entre 10 kB / segundo e 100 MB / segundo. Sua tarefa é gerar o tempo restante da transferência de arquivos. A saída deve se parecer com:
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)
Os zeros à esquerda não precisam ser exibidos por minutos e horas (opcional), mas devem ser mostrados por segundos. Mostrar o tempo restante usando apenas alguns segundos não está OK.
A transferência de arquivos:
- A taxa de transferência começará em 10 MB / segundo.
- A cada segundo, haverá uma chance de 30% de que a taxa de transferência mude
- A nova taxa de transferência deve ser escolhida aleatoriamente (distribuição uniforme) na faixa
[10 kB/s, 100 MB/s]
, em passos de 10 kB / s.
Nota: Você não precisa copiar um arquivo.
Você pode optar por usar:, 1 GB = 1000 MB, 1 MB = 1000 kB, 1 kB = 1000 B
ou 1 GB = 1024 MB, 1 MB = 1024 kB, 1 kB = 1024 B
.
Saída:
- Você começa às
01:40
, não01:39
. - Você exibe o tempo após a alteração da taxa de transferência, mas antes de qualquer coisa ser transferida nessa taxa
- Os segundos devem ser exibidos como números inteiros, não decimais. É opcional arredondar para cima / baixo / mais próximo.
- Você deve limpar a tela a cada segundo, a menos que seja impossível no seu idioma.
- A saída deve ser constante:
Time remaining: 00:00
quando a transferência do arquivo terminar.
Exemplo:
Arredondei todos os segundos decimais. Suponha que as linhas abaixo sejam mostradas com 1 segundo no meio e a tela seja limpa entre cada uma:
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
(ou 1:42
) não 1:39
(ou 1:41
)"?
1024
versão, quais são os tamanhos das etapas que devemos usar?
00:00:10
por exemplo?