J'aimerais que vous me construisiez une horloge qui affiche l'heure dans ce format:
18 ----------
19 --------------------------------------------------
Cela affiche '18: 10 '. L'heure actuelle et l'heure suivante sont affichées au début de la ligne, suivies d'un espace et d'un certain nombre de tirets: sur la première ligne, le nombre de minutes qui se sont écoulées pendant cette heure, et la deuxième ligne indique combien de minutes de plus aller dans cette heure.
Clarifier
- L'horloge doit afficher l'heure du système. Si récupérer l'heure d'une autre source est plus pratique, c'est bien aussi. Il peut ne pas être fourni en entrée.
- À
18:00
, la ligne du haut est juste18
(espaces de fin autorisés mais non requis) - À
18:59
, la ligne de fond est19 -
- Les heures <10 sont pré-remplies avec un
0
(01 -----
) ou alignées à droite (1 -----
). Un chiffre unique aligné à gauche n'est pas autorisé, même si les tirets commencent au bon endroit (1 -----
n'est pas valide). - L'horloge doit afficher les heures au format 24h.
- Bien que cela s'appelle le format 24h, il n'y en a pas réellement
24
. Pendant la 23e heure, la deuxième ligne commence par00
ou0
. - L'affichage doit être mis à jour au moins une fois par minute, mais cela ne doit pas se produire à exactement
00
secondes. Vous pouvez mettre à jour plus fréquemment / en continu si cela est plus pratique, mais le résultat doit bien sûr toujours être lisible - pas une tache sur l'écran.
Contribution
Aucun.
Sortie
- Comme décrit ci-dessus. Les espaces de fin pour placer l'horloge à 60 positions sont autorisés sur les deux lignes, une nouvelle ligne de fin est également autorisée.
- L'écran doit être effacé lors de l'affichage de la minute suivante: soit avec une commande d'effacement d'écran soit en ajoutant pas moins de 30 nouvelles lignes.
Règles supplémentaires
- Les failles standard sont interdites
- code-golf , réponse la plus courte en octets gagne.
Réponses:
MATL , 41 octets
Merci à @Kundor d'avoir remarqué une erreur, maintenant corrigée
Essayez-le sur MATL en ligne! Mais notez que le programme est tué au bout de 30 secondes, il est donc difficile de détecter tout changement dans la sortie.
Comment ça marche
la source
TI-Basic, 94 octets
Relativement simple. C'est une chaîne avec un espace au début. Les heures sont alignées à droite. Cela ne fonctionne que sur les calculatrices TI-84 + car la TI-83 n'a pas d'horloge interne.
Edit: Merci @kundor d'avoir remarqué que je n'ai pas fermé la dernière boucle. Corrigé maintenant (+2 octets).
Edit # 2: La première heure doit être zéro, pas vingt-quatre. Corrigé au coût de +14 octets.
la source
Str1
,getTime
etsub(
sont deux octets chacun. Vous pouvez en savoir plus sur tibasicdev.wikidot.com/tokensLot, 197 octets
Remarque: la 10e ligne a un espace de fin. Pour moi,
%time%
formate les heures avec un espace de début mais les minutes avec un zéro de début. J'ai décidé qu'un zéro de tête était un format de sortie plus facile, car tout ce que je dois faire pour cela est d'ajouter 100 heures et de supprimer le premier chiffre. Minutes sont plus délicat que08
ou09
causeront erreurs d'analyse octal, donc je préfixe un1
ajout de 100 minutes efficacement, le réglage de cette compensation par la boucle appropriée, ce qui est un octet plus courte que la soustraction de la 100.la source
Python 3.6,
110114112 octetsCela utilise le nouveau formatage de chaîne f pour enregistrer un octet (
f'\n{h+1:2} '
vs.'\n%2d '%(h+1)
) Vous pouvez modifier[sleep(9)]
pour1
sauver 8 octets, mais il juste l'écran envoie des pourriels.Changement d'un octet enregistré
while 1:...;sleep 60
enwhile[sleep(60)]:...
, grâce à TuukkaX.J'ai dû utiliser 5 octets de plus pour afficher l'heure suivante après 23 à 0, au lieu de 24, comme OP vient de le commenter. :-(
Récupéré un octet en dormant seulement 9 secondes au lieu de 60.
Enregistré deux octets en utilisant un bit-fiddling pour raccourcir
(h+1)%24
, emprunté à la réponse Ruby de Value Ink .la source
sleep
renvoieNone
, ce qui est faux.sleep
est également dans letime
module, il est donc préférable d'importer *.Rubis,
989591 octetsMises à jour toutes les 5 secondes. Fonctionne uniquement sur les terminaux de type Unix.
Version d'invite de commande Windows,
9592 octets:la source
`cls`
vssystem'cls'
h=t.hour
puis utiliser à lah
place du secondt.hour
, ce qui économise 3 octets.cls
. Merci pour votre autre suggestion!puts`clear`
être la voie à suivre si vous utilisez des terminaux Unix. Cela ne fonctionne tout simplement pas avec l'invite de commande Windowscls
.puts"\e[H\e[2J"
effacer la console, qui je pense rase quatre octets. Cela ferait lire votre première ligneloop{t=Time.now;puts"\e[H\e[2J%02d %s
Perl 6 , 113 octets
Essayez-le une fois avec un délai d'une seconde.
Ou essayez une version modifiée qui génère le résultat d'une exécution pendant plusieurs heures.
Étendu:
la source
[\+]
y ajoute et[\-]
il semble soustraire. Est-ce que cela fonctionne avec la multiplication et autres?[+] LIST
qui est réduit, sauf qu'il vous donne les valeurs intermédiaires. Voir la page des documents pour les produitsQBasic,
120127121 octetsNe l'exécutez pas très longtemps ou votre ordinateur portable prendra feu.Maintenant 99.several9s% plus économe en CPU.Non golfé et explication
Nous commençons par effacer l'écran, puis obtenons les heures et les minutes
TIMER
, ce qui renvoie le nombre de secondes depuis minuit.C'est la première fois que j'essaie
PRINT USING
, donc j'ai été ravi de découvrir qu'il ne souffre pas de la bizarrerie QBasic habituelle que les nombres positifs sont imprimés avec un espace de tête.##
car le spécificateur de format garantit que les nombres à un chiffre sont alignés à droite et remplis d'un espace, selon les besoins. Nous devons utiliser une boucle pour les tirets, malheureusement, car QBasic n'a pas de fonction de répétition de chaîne. (Si je me trompe, faites-le moi savoir!)Toutes les
PRINT
instructions se terminent par;
pour supprimer la nouvelle ligne; mais après les tirets, nous avons besoin d'une nouvelle ligne; ainsi, le solitaire?
après laFOR
boucle intérieure .Le
SLEEP 1
est maintenant nécessaire. Sans cela, l'écran est effacé si rapidement après l'impression que ce n'est qu'un gâchis vacillant. (J'ai utiliséLOCATE 1
au lieu deCLS
d'abord pour cette raison, jusqu'à ce que je réaliseCLS
qu'avecSLEEP
est plus court de toute façon.)RUN
Redémarre le programme par le haut - le moyen le plus court pour obtenir une boucle infinie.la source
Java 8,
313300299 octetsCela ne met à jour que toutes les 30 itérations de la boucle while. Les 29 autres itérations impriment simplement de nouvelles lignes.
Mis à jour
Enregistré
1314 octets grâce à l'aide de Kevin Cruijssen! Merci!la source
void f(){...}
- dire et vous devrez ajouter les importations nécessaires (dans votre casimport java.time.*;
). Cela étant dit, votre code peut être joué à plusieurs endroits pour le réduire à 311 octets (même avec la méthode ajoutée) -déclaration et importation.) (Comme il est trop long pour ce commentaire, je l'ai placé dans le commentaire suivant .. xD)import java.time.*;void f(){for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>99){c=0;String l="",u,d;for(i=0;i++<61;)l+="-";u=l.substring(0,m);d=l.substring(m);System.out.println((h<10?"0":"")+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}}
( 303 octets ) Je recommande la lecture de Tips for Golfing in Java et de Tips for golfing in <all languages> . Profitez de votre séjour.for(i=0;i++<60
au lieu de 61 et(h<10?
au lieu de 9. Merci de m'avoir informé de la déclaration de méthode et de quelques conseils de golf!for(i=0;++i<61
au lieu defor(i=0;i++<61
(dans ce deuxième cas, il devrait en effet être 60, et même si c'est la même quantité d'octets, c'est probablement plus évident / lisible). Leh<9
dans mon code est correct, cependant. Vous l'aviezh+1<10
avant et j'ai simplement changé celah<9
en supprimant 1 des deux côtés. :)h<9
. Je vais le modifier pour enregistrer 1 octet de plus. Merci encore!C,
176162161160 160156 octetsIl s'agit d'un abus flagrant de pointeurs mais compile et s'exécute comme spécifié. Assurez-vous de compiler sans optimisation, sinon vous risquez de rencontrer un défaut de segmentation.
Non golfé:
la source
JavaScript (ES6), 162 octets
Mises à jour une fois par seconde
la source
console.clear()
à l'intérieur de l'console.log
argument) et en affectant autant que possible entre parenthèses inutilisées. Version pour 154B:setInterval(c=>c.log(H(h,c.clear(d=new Date))+` ${'-'.repeat(m)} ${H(h+1)} `+'-'.repeat(60-m)),1e3,console,m=d.getMinutes(h=d.getHours(H=$=>$<9?'0'+$:$)))
.m=>`0${h++} \.slice(-3)+'-'.repeat(m)
.Python 2,
131129127 127 octetsenregistré un octet grâce à @TuukkaX
la source
while 1:
19 - \n 20 -----------------------------------------------------------
. Les heures ne sont pas mises à jour ...C
251267251 octetsVersion non golfée
Obtient le travail! Peut certainement être raccourci d'une manière ou d'une autre. Supposons que le
unistd.h
fichier soit inclus.@Neil Merci pour l'info.
@Seth Merci d'avoir économisé 8 octets.
la source
time_t
etstruct tm
) dans votre nombre d'octets.printf("\n");
vous pouvez utiliserputs("");
Golf pour la première fois ...
Powershell, 116 octets (au lieu de 122)
Modifier: à partir des conseils de @ AdmBorkBork, changé Get-Date à ce jour et Clear à cls, pour une économie de 6 octets.
la source
cls
place declear
et (tant que vous êtes sur Windows) à ladate
place deget-date
. Je suis également sûr qu'il existe un moyen plus simple de produire le formatage - je joue avec et je vous ferai savoir si je trouve quelque chose.while($d=date){cls;"{0,2} {2}``n{1,2} {3}"-f($h=$d.Hour),(++$h%24),('-'*($m=$d.Minute)),('-'*(60-$m));Sleep 9}
. Utilisez LF saut de ligne dans votre éditeur au lieu de `` n`PHP,
104105 octetsvitrine pour
printf
ses personnages de remplissage personnalisé:"%'-Ns"
= chaîne de gauche de la tablette avec-
pourN
personnages.imprimera 99 sauts de ligne (toutes les 6 secondes) au lieu d'effacer l'écran.
La première nouvelle ligne doit être un seul caractère. Donc, sous Windows, il doit être remplacé par
\n
.la source
Langue GameMaker, 134 octets
Dans les paramètres, vous devez ignorer les erreurs non fatales pour que cela fonctionne. En outre, en GML,
#
est équivalent à\n
dans la plupart des langues.la source
Perl 6 , 104 octets
Doit être exécuté sur un terminal compatible ANSI pour que la séquence de contrôle de réinitialisation du terminal fonctionne.
Assez basique (car les approches les plus obscures que j'ai essayées se sont avérées plus longues):
DateTime.now.&{" "}.say xx*
: Transformez l'heure actuelle en une chaîne (voir ci-dessous) et dites-la, et répétez tout cela un nombre infini de fois. La chaîne est construite comme ceci:\ec
: Code de contrôle ANSI<ESC>c
pour réinitialiser le terminal, ce qui efface l'écran.{.hour.fmt: '%2s'}
: heure, aligné à droite sur 2 colonnes: espace
{'-'x.minute}
: tiret répété fois la minute\n
: nouvelle ligne{(.hour+1).fmt: '%2s'}
: heure suivante, aligné à droite sur 2 colonnes: espace
{'-'x 60-.minute}
: tiret répété fois 60 moins la minutela source
AWK, 190 octets
Puisqu'il
AWK
n'a pas desleep
fonction intégrée, je le fais simplement vérifier continuellement l'horloge pour voir si la minute a encore changé. L'essentiel est que cela fonctionne ... non? :)la source
Python 3.5,
127120117octetsla source
print('\n'*50)
au lieu de leos.system('cls')
faire fonctionner à la fois sur * nix et Windows? Économiserait quelques octets car vous pouvez perdre l'os
importation et OP dit que cela est autorisé.Python,
115113 octetséconomisé quelques octets grâce à @kundor et @Phlarx
la source
:02
simplement les formats:2
.:02
format pour saisir à droite un chiffre d'une heure avec des zéros.:2
des pads gauche avec des espaces, ce que le défi dit est OK.C # interactif (138 octets)
la source
d
au lieu dedt
? et 2) utilisersleep(1e3)
ou999
au lieu de1000
?PHP,
112120 octetsComme il n'y a aucun moyen d'effacer l'écran (que je peux trouver), j'ai dû y aller avec une pile de nouvelles lignes. De plus, la question mise à jour à "au moins" une fois par minute enregistre un octet avec
9
au lieu de60
.edit: @Titus a remarqué un bug dans le rembourrage de la deuxième heure. Le réparer coûte 8 octets.
la source
Notice: Use of undefined constant str_pad - assumed 'str_pad' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant H - assumed 'H' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant i - assumed 'i' in C:\wamp64\www\my-site\a.php on line 2
. Quelque chose sur Meta à ce sujet?-n
ouerror_reporting(22519);
H
réglage de la date va de 00 à 23, mais je l'ai oublié pour la deuxième heure.Bash (3 et 4): 90 octets
En raison de l'utilisation de
$0
, ce script doit être placé dans un fichier, et non collé dans un shell bash interactif.La première commande définit
$d
60 traits d'union; il s'appuie sur le fait que la première ligne de ce script comporte 60 caractères. C'est trois caractères de moins que la meilleure chose que je pourrais trouver:Si vous ne voulez pas que cela finisse par exécuter votre boîte à partir de PID ou de mémoire, vous pouvez ajouter
eval
au début de la dernière ligne, ce qui ferait ces 95 octets.la source
let: h=09: value too great for base (error token is "09")
. Le problème est que les zéros non significatifs sont interprétés comme des constantes octales, donc 09 n'est pas valide.BASH,
165141155 155 octetsla source
sleep 9
à l'état de la boucle while; supprimez le-
devant de M dans la chaîne de format à la ligne 4. Vous n'avez pas non plus besoin d'utiliser $ devant les noms de variables dans les expressions arithmétiques, cela$((60-$m))
peut donc être$((60-m))
h=23; echo $((10#$h+1))
imprime 24 pour moi.Gura , 138 octets
Assez court et simple :)
la source
Gura.exe
et coller dans ce code me donne une erreur de syntaxesymbol k is not defined
.Ok, je n'ai pas fait de golf de code depuis un moment, alors voici ma triste tentative :)
Unix Korn Shell:
177171170 octetsla source
Mathematica, 235 octets
la source
Traitement,
204200198197 octets5 octets enregistrés grâce à @L. Serné en utilisant des ternaires plus intelligents
Cela génère plus de 30 nouvelles lignes pour chaque mise à jour (qui a lieu lorsque le cadre est mis à jour)
Non golfé
la source
((i=hour())<10?" ":"")+i
en((i=hour())>9?i:" "+i)
économiserait 2B deux fois ... Bonne chance pour le golf!((i=hour()+1)>24?i=0:i)>9
devient(i=hour()+1)>9
, depuishour
génère un nombre compris entre 0 et 23, et même avec 1 ajouté, il ne sera jamais supérieur à 24. De plus, vous devez déplacer l'incrément de l'i
intérieur de la condition dans lafor
boucle comme vous l'avez fait dans la toute dernière boucle. Devrait économiser 13B au total.i
intérieur de la condition de la boucle for,i
démarrera comme1
au lieu de0
et je dois ajouter un octet de plusi++<=minute()
et le nombre d'octets sera toujours le même. Mais néanmoins, merci de m'avoir aidé àC, 239 octets
Inspiré par les entrées de Seth et Abel, cela affichera 0 au lieu de 24 pour l'heure suivante, comme requis, et utilisera 30 lignes pour effacer l'écran.
la source
SmileBASIC, 55 octets
Explication:
Remarque: SmileBASIC ne dispose que de 50 colonnes de texte, donc il n'aura pas l'air bien ...
la source
C #
181176Ce code suppose que le
using System.Threading;
ligne est incluse.Classe complète:
la source
Console.ReadKey
instruction est redondante. La seule façon de sortir est de fermer la fenêtre de la console ouCtrl+Break
...using System.Threading;
doit également être inclus dans le nombre d'octets si vous l'utilisez. Même chose avecUsing System;
.