Mettez en place un chronomètre numérique simple , qui affichera le temps écoulé en secondes et minutes, comme décrit ci-dessous.
Important
Veuillez lire les sections Affichage et Commandes !
Afficher
Le temps écoulé, doit être affiché au MM:SS
format, en remplaçant la chaîne de temps précédemment affichée "en place" (l'effacement de tout ou partie de l'écran est également autorisé).
Le chronomètre doit être mis à jour au moins toutes les secondes.
Exemples:
0 minutes, 0 secondes
00:00
0 minutes, 33 secondes
00:33
1 minute, 50 secondes
01:50
Initialement, vous pouvez commencer par '00: 00 'ou avec toute autre valeur dans la plage [00: 00-59: 59].
Une fois votre chronomètre atteint 59:59
, il devrait se réinitialiser 00:00
et recommencer.
Vous pouvez utiliser une base différente (au lieu de décimale) ou même un système numérique différent si vous le souhaitez, tant que vous suivez le schéma général.
Par exemple, 13:03
peut être affiché comme:
13:03
0D:03
N:D
10101:3
XIII:III
Attention, si vous utilisez un système / base numérique non décimal, il doit être codé en utilisant des caractères ASCII (ou Unicode) imprimables, par exemple en utilisant deux octets binaires (non imprimables) pendant minutes et secondes n'est pas autorisé.
Vous devez également remplir votre sortie avec des zéros, le cas échéant, si votre système numérique le permet.
Le remplacement du caractère séparateur :
par tout autre caractère imprimable (y compris les chiffres) est également acceptable.
Les contrôles
Le chronomètre doit démarrer en pause , et rester dans cet état, jusqu'à ce que l'utilisateur le démarre explicitement , en appuyant sur la touche «contrôle» (voir ci-dessous).
Si, pendant que le chronomètre compte, l'utilisateur appuie à nouveau sur la touche «contrôle» , le chronomètre doit s'arrêter (en gardant l'heure actuelle), jusqu'à ce que la touche «contrôle» soit enfoncée une fois de plus.
La touche «contrôle» peut être une seule touche, par exemple s
, ou n'importe quelle combinaison de touches, par exemple Ctrl+Shift+X
, mais elle doit être «atomique», s
il Enter
n'est pas permis d' appuyer sur plusieurs touches en séquence, par exemple alors .
La même touche (ou combinaison) de contrôle doit être utilisée pour mettre en pause et reprendre le chronomètre.
Vous devez utiliser une clé de «contrôle» spécifique , c'est-à-dire que «toute clé» n'est pas autorisée.
Alternativement, vous pouvez utiliser un simple ou double clic de souris, au lieu d'une pression de touche pour «contrôler».
Règles
- C'est le code-golf , la réponse la plus courte en octets gagne;
- Les failles de code-golf standard s'appliquent;
- Votre programme doit (théoriquement) être capable de fonctionner pour toujours.
la source
00:05
impression, puis reprend à un certain point, doit-il00:06
apparaître 3000 millisecondes après avoir appuyé sur la touche de reprise, ou est-il correct de l'imprimer une seconde complète après avoir appuyé sur la touche de reprise?Réponses:
SmileBASIC,
867771 octetsDIALOG
affiche une zone de texte sur l'écran tactile.N
est le nombre de secondes pendant lesquelles la zone de texte restera à l'écran avant de disparaître. Si telN
est le cas0
, il reste jusqu'à ce que l'utilisateur appuie sur le bouton de l'écran tactile.DIALOG
Renvoie1
si l'utilisateur a appuyé sur le bouton et0
s'il s'est fermé automatiquement. Ainsi, lorsque l'utilisateur appuie sur le bouton de pause, il revient1
et la durée d'affichage est réglée sur0
, mettant le chronomètre en pause. Une fois que l'utilisateur a appuyé à nouveau sur le bouton, nous avons rétabli la durée d'affichage à1
, en reprenant la minuterie. Fondamentalement, à chaqueDIALOG
retour1
, le temps d'affichage bascule entre1
et0
utilise!=
, ce qui équivaut à un XOR logique tant que les deux entrées sont 1 ou 0.la source
Python 2,
167129 octets-36 octets principalement * en utilisant l'idée de Maltysen d'attraper en
ctrl-c
utilisant une exception - allez donner du crédit!-4 octets grâce à DLosc (init
n
etb
à 0 plutôt quef()
)-1 octet grâce à FlipTack (utiliser
p^=1
plutôt quep=1-p
)-2 octets grâce à Felipe Nardi Batista (supprimer les spécificateurs de précision)
Fonctionne de la même manière que mon original, ci-dessous, mais avec la séquence de touches de contrôle de
ctrl+c
.(Testé par moi avec Python 2.7.8 sur Windows 7, 64 bits;
Testé par Brian Minton avec Python 2.7.13 sur linux, 64 bits)
* a également réduit la
if
déclaration à une recherche de liste afin d'obtenir letry
comme une ligne.Mon original:
(Testé par moi avec Python 2.7.8 sur Windows 7, 64 bits - ce code, cependant, est spécifique à Windows en raison de l'utilisation de la
msvcrt
bibliothèque)La touche de commande est «p».
n
etb
sont initialisés à la même valeur au démarrage, donnant un "décalage" de 0;p
est initialisé à 0, indiquant un état de pause.Chaque fois que la touche de commande est enfoncée, la valeur de
p
est modifiée. Lors du passage d'un état en pause à un état actif,b
une nouvelle valeur est mise à jour en conservant tout décalage actuel par rapport au ou aux états actifs précédents avecb-n
.Pendant un état actif
n
est mis à jour à plusieurs reprises à l'heure actuelle en appelanttime.time()
.La différence entre
n
etb
,t
est alors le nombre total de secondes (y compris une partie fractionnaire) écoulées pendant le ou les états actifs.Les minutes écoulées sont alors
t/60
et chacune des minutes et des secondes est affichée mod 60 avec(t/60%60,t%60)
. Les zéros de tête sont ajoutés pour chacun en utilisant le formatage de chaîne de la partie entière avec'...%0.2d...'
. L'impression d'un tuple (le dernier,
) où le premier élément a un retour chariot principal (le\r
) entraîne l'écrasement du texte précédemment imprimé.la source
^=
mais j'ai changé à un moment donné lors de la formulation..
entrée%0.2d
? cela fonctionne très bien comme%02d
Python -
160159143 octetsMerci à @JonathanAllan de m'avoir sauvé 18 octets!
N'utilise que des bibliothèques intégrées, donc la clé de contrôle est
ctrl-c
, l'attrapant avec unexcept keyboardInterrupt
.la source
except:
? J'ai une version de travail en train de le faire ...utilitaires bash + Unix, 90 ou 93 octets
Version 90 octets:
Version 93 octets:
Ctrl-C est le caractère de reprise / pause. Un espace est le délimiteur entre les minutes et les secondes.
La différence entre les deux versions est que le programme de 90 octets fonctionnera pendant 2 ^ 63 secondes (à ce moment-là, bash me donnera un débordement d'entier).
La version 93 octets fonctionnera vraiment pour toujours.
Le problème d'origine comprenait l'exigence: "Votre programme doit (théoriquement) être capable de fonctionner pour toujours."
Si l'exécution pendant 2 ^ 63 secondes est suffisante pour répondre à cette exigence, la solution à 90 octets fonctionne. Cette durée est plus de 20 fois l'âge de l'univers!
Si le programme doit pouvoir fonctionner plus longtemps que cela, je devrai opter pour la solution de 93 octets.
Je devrais probablement signaler que cette solution, ainsi que certaines au moins des autres affichées, prendront très lentement du retard sur le temps réellement écoulé. Ce glissement est dû au fait que le programme dort pendant une seconde entre chaque exécution du corps de la boucle, mais le corps de la boucle prend un tout petit peu de temps à s'exécuter. Ce sera sans conséquence dans la pratique.
la source
Initially, you can start with '00:00' or with any other value in range [00:00-59:59]
, qui restera à l'écran jusqu'à ce que vous appuyiez sur «contrôle» pour la première fois. Désolé si je n'ai pas pu formuler cela assez clairement!QBasic,
213211 octetsLa clé de contrôle est tab. Laisser cette fonction peut provoquer des incendies d'ordinateurs portables. Tu étais prévenu.
Ici, il est en action, s'arrêtant à 10, 15 et 20 secondes:
Non golfé et commenté
Notez que les valeurs de
TIMER
sont à virgule flottante. Cela n'affecte pas la sortie, carMOD
et\
tronquer en entiers. Mais cela ajoute de la précision à la quantité de temps gagné: si vous mettez la minuterie en pause juste avant un tick, vous verrez au redémarrage que le nombre change en moins d'une seconde.la source
Lot, 132 octets
Appuyez sur
n
pour (dé) interrompre la minuterie. Le scintillement de sortie peut être réduit au coût de trois (ou quatre) octets.la source
Pure bash, 141 octets
Cela n'utilise rien d'autre que les commandes internes de Bash (pas d'outils externes). Le caractère de contrôle est Ctrl-Z, de sorte que la
SIGTSTP
gestion standard suspend le chronomètre.set -m
active le contrôle des travaux , qui est généralement désactivé dans un script.&
- plan ( ) .read -t 1
attend une seconde l'entrée de l'utilisateur , puis échoue.until
boucle continue tant qu'elleread
échoue.printf
sorties le temps correctement rembourré et -formatted$[s=s>3598?0:s+1,s/60]
l'expansion arithmétique calcule d' abord le temps mis à jour, vérifiant s'il faut envelopper et incrémenter autrement le compteur de secondess
, puis retourne la division au sols/60
.$[s%60]
donne le reste des secondes.trap
gestionnaire pourTSTP
le signal Ctrl-Zgénéré. Lorsque vous Ctrl-Zappuyez sur pendant l'exécution du script externe, il s'exécutefg>/dev/null
et remet le sous-shell au premier plan .>/dev/null
est nécessaire pour arrêter l'fg
impression de la commande subshell à chaque fois.00:00
et envoie unSTOP
signal au processus enfant$!
, qui suspendra le processus.read
attend la saisie pour toujours, gardant le script en vie.Si Ctrl-Zest enfoncé pendant que le sous-shell est au premier plan, il suspendra l'exécution et remettra le script externe au premier plan, où il attendra en silence. Si le script externe est au premier plan, le gestionnaire d'interruption reprendra l'exécution du sous-shell, et il comptera à nouveau.
la source
Javascript dans la console Chrome, 143 octets
Lorsqu'il est entré dans la console, il met le compteur à 00:00 et active ensuite la commande qui est en appuyant sur le document.
Pas beaucoup de magie en cours, notamment les
(i/60)|0
étages le nombreFait et testé dans la console Chrome
la source
m=s=g=i=0;(f=document).onclick=_=>g++;setInterval("g%2&&f.close(f.write(`${(m=i/60%60|0)>9?m:'0'+m}:`+((s=i++%60)>9?s:'0'+s)))",1e3)
HTML + JavaScript (ES6),
191 192 187 183174 174 octetsExplication
Cliquez sur la minuterie pour démarrer ou mettre en pause le chronomètre. En tant que tel, un seul clic est la clé de contrôle . Le séparateur entre les deux valeurs est un deux-points.
Chaque fois que l'utilisateur clique sur le clic, la valeur de
b
est vérifiée. Elle est initialisée à0
laquelle est évaluéefalse
, de sorte qu'une chaîne de code est évaluée toutes les 1000 millisecondes. Cela définit la variable sur l'id de l'intervalle, afin qu'elle puisse être arrêtée plus tard. Sib
contient un nombre, il est évalué àtrue
, donc l'intervalle est arrêté. Cela renvoie la valeurundefined
, donc le cycle continue.La chaîne de code change le html de l'élément avec id
a
(le chronomètre). D'abord, les minutes sont analysées en prenant la valeur du chronomètre précédente, en la divisant par les deux-points et en obtenant la valeur des minutes, qui est augmentée de 0 si la valeur des secondes n'est pas 59 (supérieure à 58), et 1 sinon, modulo 60 Ensuite, cette valeur est complétée. Viennent ensuite les deux points, et enfin les secondes. Le code obtient simplement l'ancienne valeur, l'augmente de 1, prend le modulo 60 et le remplit éventuellement.la source
C
309179 octetsVersion non golfée:
Utilisation: appuyez sur Enterpour mettre en pause et reprendre le chronomètre.
Explication:
break
la premièrewhile
boucle et attendez la prochaine Enter.goto
premièrewhile
boucle et reprendre le comptage.Maintenant, je sais que
goto
c'est une mauvaise pratique de codage en C, mais je ne pouvais pas trouver une autre façon.la source
getchar()
bloque jusqu'à ce que vous appuyiez sur un caractère.m=0,s=0;
il échoue, car vous n'avez déclaré ces variables nulle part.Javascript, 124 octets
La «clé de contrôle» est un clic sur le document. Pour tester cela, collez le code dans la console ou dans un fichier html à l'intérieur de la
<script>
balise.Explication:
Testé dans Chrome
la source
PHP,
9491 octetsJe suppose que 32 est le code clé de la barre d'espace (ce qui n'est probablement pas le cas);
Je n'ai actuellement aucun moyen de tester ncurses. Mais le reste du code fonctionne bien.
commence à
00:00
, mais augmente immédiatement à la fin de la pauseSi vous (comme moi) n'avez pas de ncurses, vous pouvez tester en remplaçant le deuxième
date
paramètre par$t+=$r^=!rand(sleep(1),19);
ou$t+=$r^=++$x%20<1+sleep(1);
. (sleep
revient toujours0
.)panne
la source
C # 220 octets
Golfé
Utilisation de la
s
touche pour démarrer / arrêter. Tout le programme fonctionne en se souvenant de TimeDelta en utilisantDateTime.Now
La plupart des C # -Magic proviennent de la fonctionnalité C # 7.0
using static
.la source
Bash, 65 octets
trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}
Notez qu'il doit être écrit dans un script de fichier pour fonctionner correctement, sinon essayez:
bash -c 'trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}'
Version étendue pour l'expliquer:
Le
%(...)T
format à printf est valide en bash 5+.la source
00:00
et incrémente simplement un compteur lorsque vous frappezCtrl-C
. Il n'y a pas d'animation de la minuterie. (Testé sur bash 5.0.7)bash -c 'trap d=\$[!d] 2;for((;;)){ printf "\r%(%M:%S)T" $[n+=d];sleep 1;}'
. @roblogicbash -c
:)C (gcc) ,
121115 octetsEssayez-le en ligne!
Définit un gestionnaire de signal pour SIGINT, qui est déclenché en appuyant sur Ctrl-C. Nous conservons un décalage horaire
b
et affichons le temps de l'horloge murale moins le décalage horaire. Si nous sommes en pause, incrémentez la base de temps à chaque fois que l'horloge murale coche pour figer l'heure affichée.Merci à @ceilingcat d'avoir rasé 6 octets!
la source
Date Zsh + Gnu, 242 octets
Avec 1 / 100e de seconde! Il nécessite un terminal interactif, mais voici quand même un lien TIO .
Appuyez sur Enterpour démarrer / arrêter le chronomètre; Ctrl-Cpour quitter.
Commentaires (un peu dépassés):
la source
Commodore BASIC (C64 / TheC64 Mini, VIC-20, PET, C16 / + 4) - 147 octets tokenisés et BASIC
{clear}
dans la liste estSHIFT+CLR/HOME
qui sort comme un seul caractère PETSCII lorsque vous suivez un guillemet d'ouverture, tandis que{home}
laCLR/HOME
clé sans le décalage est dans la même condition que de suivre un guillemet d'ouverture.Utilisez la barre d'espace comme touche de contrôle.
Pour travailler avec le Commodore 128 dans BASIC 7, modifiez la liste dans les lignes suivantes:
Ajoute sept jetons supplémentaires au nombre (comme tous les nombres sont stockés dans BASIC sous forme de 7 octets, il en
goto10
est de même de 8 octets à jeton alors qu'ilgoto
n'y en a qu'un)).la source