Ce défi est inspiré de xkcd :
Défi:
Vous simulerez la copie d'un fichier volumineux (1 gigaoctet). Le taux de transfert variera entre 10 ko / seconde et 100 Mo / seconde. Votre tâche consiste à afficher le temps restant du transfert de fichier. La sortie devrait ressembler à:
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)
Les zéros au début ne doivent pas nécessairement être affichés pendant des minutes et des heures (facultatif), mais doivent être affichés pendant des secondes. Afficher le temps restant en secondes seulement n’est pas correct.
Le transfert de fichier:
- Le taux de transfert débutera à 10 Mo / seconde.
- Chaque seconde, il y aura 30% de chances que le taux de transfert change
- Le nouveau taux de transfert doit être choisi de manière aléatoire (distribution uniforme) dans la plage
[10 kB/s, 100 MB/s]
, par incréments de 10 kB / s.
Remarque: vous n'avez pas besoin de copier un fichier.
Vous pouvez choisir d'utiliser:, 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
.
Sortie:
- Vous commencez à
01:40
, non01:39
. - Vous affichez l'heure après que le taux de transfert ait changé, mais avant que rien ne soit transféré à ce taux
- Les secondes doivent être affichées sous forme de nombres entiers et non de décimales. Il est facultatif d'arrondir haut / bas / le plus proche.
- Vous devriez vider l'écran toutes les secondes, à moins que ce ne soit impossible dans votre langue.
- La sortie doit être constante:
Time remaining: 00:00
lorsque le transfert de fichier est terminé.
Exemple:
J'ai arrondi toutes les secondes décimales. Supposons que les lignes ci-dessous sont affichées avec une seconde d'intervalle et que l'écran est effacé entre elles:
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
) pas 1:39
(ou 1:41
)"?
1024
version, quelles sont les tailles de pas que nous devrions utiliser?
00:00:10
par exemple?