Écrivez un programme qui affiche l'heure actuelle du système sous forme d'horloge analogique, en utilisant des graphiques ASCII. L'horloge doit afficher au moins les pointeurs des heures et des minutes et doit avoir une résolution suffisante d'au moins 5 minutes.
L'affichage peut être aussi petit et aussi laid que vous le souhaitez, mais l'heure affichée doit être facilement reconnaissable.
Le programme doit fonctionner en continu et mettre à jour son statut. Si votre système peut effacer l'écran, utilisez-le, sinon il suffit de repeindre l'horloge lorsque son état change.
Vous obtenez un bonus de -20% sur le nombre de personnages si l'horloge a une résolution d'au moins 1 minute.
Réponses:
Mathematica 207 - 42 = 165
Les graduations et les étiquettes des heures sont placées sur le cercle unitaire.
H
etM
tournent autour du centre de l'horloge indiquant le nombre total d'heures et de minutes terminées, respectivement.S
met à jour sa position plusieurs fois par seconde.Deux versions sont affichées: une version qui trace le texte dans le plan cartésien et une autre qui affiche les caractères du texte dans une grille.
Cette version trace les caractères dans le plan cartésien.
L'horloge ci-dessous indique l'heure 3:08:17 .
Version Terminal ou Grille :
430316 caractères (253 avec réduction de bonus)Cette version fonctionne à peu près de la même manière, mais place les personnages dans une grille de cellules 61 x 61 plutôt que dans le plan cartésien. Cela pourrait encore être joué un peu, mais je voulais simplement montrer une sortie de type terminal (plus bâclée) dans Mathematica .
L'horloge ci - dessous affiche 11:06 .
Juste pour le fun:
Voici une version non-Ascii de l'horloge analogique. (60 caractères) Aucune bibliothèque externe n'a été utilisée.
la source
Javascript 370 - 74 = 296
http://jsfiddle.net/wBKQ6/7/
(Cela ne fonctionne que dans Chrome, car j'abuse du fait que les ID d'élément sont ajoutés à la portée globale).
Golfé (370):
Exemple de sortie (beaucoup plus condensé dans la démo):
la source
Python, 328 - 65 = 263
Imprime une nouvelle horloge toutes les secondes, l'aiguille des minutes se mettant à jour toutes les minutes.
Les horloges qu'il imprime ressemblent à ceci (ce n'est pas aussi étiré dans mon terminal):
la source
100% pur bash uniquement! Sans fourchette!
Une version finalisée et améliorée peut être trouvée ici ou sur cette page: ascii-clock for geeks . Mais ne l'utilisez pas! Lisez la note à la fin de cette réponse, vous avez été prévenu! Utilisez plutôt cette version Perl !
Première horloge simple sans deuxième tick.
Évolutif et modifiable:
Dessinez une horloge 21x21 (10x2 + 1) à 10H10 en moins d'une seconde.
Cela accepte 3 arguments:
Usage: ascii-clock.sh [ray of clock] [Hour] [Min]
où le rayon par défaut est 12, le dessin de l'horloge est la2 x ray + 1
hauteur des lignes et la double largeur en raison de l'espace ajouté pour essayer d'obtenir une forme ronde.Si le script est appelé avec
0
ou1
argument, il se mettra en boucle pour être redessiné chaque minute. Sinon si au moins Heure (deuxième paramètre) est spécifié, il ne dessinera qu'une seule fois et sortira.Le
H
marqueur est situé à 70% du rayon et leM
marqueur est situé à 90% du rayon.Pas d'utilisation de binaires externes comme
date
oubc
pour le tirage!(Merci à @manatwork pour la fonction intégrée
read -t
si/bin/sleep
).Tout cela est donc fait par des commandes shell intégrées .
Il utilise la séquence ANSI , mais uniquement pour la boucle et pour mettre les marqueurs en gras.
Cela pourrait être exécuté comme:
Cela produira quelque chose comme:
Ou pourrait être exécuté comme:
Alternative: Avec dessin de chemin complet:
pourrait produire:
ou
Dernière version avec Secondes ticks rendu et nanosommeil à synchroniser.
Cela ne fonctionne que sur Linux récent, car cela permet
/proc/timer_list
de calculer la fraction de seconde pour dormir entre chaque rafraîchissement.Version plus obscurcie (2702 octets):
Comme demandé par @manatwork , il existe un version plus golfique .
Cette version est colorisée et présente l'heure numérique sur les coins.
Remarque: ne l'utilisez pas de toute façon!
Comme c'est un programme bash et que bash n'est pas un langage de programmation, ce n'est pas bien à utiliser pendant un certain temps.
Il y a une petite démo de consommation de mémoire en seulement 5 heures, avec un dessin de rayon de 7 caractères:
Le principal avantage de cela, c'est que lorsque j'ai besoin de mémoire, je n'ai qu'à tuer l'horloge.
( Nota: j'ai fusionné ceci, la version perl et une version javascript de celle-ci sur ascii-clock pour les geeks ;-)
la source
bash
4.1. Le 4.2 fonctionne en effet en continu et ne nécessite pas les paramètres de ligne de commande.bash
est une démonstration de grande compétence. (/ moi prend son chapeau et clique sur le lien de vote positif) Mais ces 2529 caractères pourraient encore être réduits dans l'esprit des défis de code-golf : «Code-golf est une compétition pour résoudre un problème particulier dans le moins d'octets de code source. ”Python 2 - 207
C'est très moche, mais lisible. Imprime toutes les 9 secondes (vous pouvez passer à 1 seconde si vous préférez), met à jour toutes les 5 min. Je n'ai pas beaucoup d'expérience avec le golf de code en python, donc je m'attends à ce qu'il puisse être amélioré.
Exemple de sortie:
la source
Perl 5 x 65 = 325 - 65 (20%) = 260 caractères !!
Propre, circulaire, avec un deuxième tick et mis à jour toutes les secondes.
Sur une console de 24 lignes, c'est bien (il est 00:12:56 ):
Et il existe une version colorée, plus agréable et plus intelligente:
Cette version est fortement liée à cette autre réponse , avec le principal avantage: vous pouvez l'exécuter tranquillement, pendant un certain temps! Ainsi , vous pouvez trouver une version mise à jour il ou sur ce ascii-horloge pour geeks page Web.
Comme démonstration que faire approximativement la même chose en perl nécessite moins de ressources:
pour environ les mêmes caractéristiques:
s
point pour le deuxième gestionnaire.S
en haut à gauche, en dormant (recherchez la différence avec la version bash )Plus
-a
argument pour dessiner le chemin des heures et des minutes en fraction (11h59 place le chemin des heures environ à 12h).Laissez une autre version de perl !!!
Utilisation de la (belle) image suivante:
Que vous pourriez simplement:
Ok, cela nécessite l'installation de gd2-perl. Mais vous pourriez remplacer
curl
parwget -O -
;-)(Remarque: cette image est proche de 1,5 Ko. J'ai construit une autre même image, mais d'une longueur de 900 octets. Vous pouvez trouver cette image, ainsi qu'une version javascript de celle-ci sur ascii-clock pour les geeks :-)
la source
eval
parprint
dans l'ordre avant d'exécuter du code téléchargé inconnu ;-)Tcl, 288
Ok, voici quelques explications:
while 1 {...}
- Ok, oublie l'explication.regsub -all \ +|. "oaosocowoeouooovoioxozom r n\n" \ {&} p
remplace+|.
avec_{\0}
et stocke le résultat dansp
.p
est en fait un dictionnaire foiré où la première clé est manquante (ou juste une liste avec un nombre impair d'éléments).lset p [set h [expr $h%12*2]] h
définit l'heure dans la liste de remplacementlset p [set m [expr $m/5*2]] [expr $h-$m?"m":"x"]
règle la minute. si heure et minute sont identiques, utilisezx
plutôt.string map /\ $p {rr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru}
/\ $p
est égal à"/ $p"
, j'ajoute donc la première clé (/
). Après cela, je remplace chaque occurrence d'une clérr/nrzmrann xrrr snnimrrrcnn vrrr wnnromrenrru
par sa valeur.La carte habituelle est
(Lire comme "Remplacer
/
paro
, remplacera
paro
... remplacerm
par___
(qui devraient être des espaces))Je Repace une
o
avech
et une autre avecm
,m
,r
etn
sont juste Shoren la chaîne de sortie (I remplacé plusieurs espaces avec l' un d'eux, aussi\n
avecn
). J'ajoute le premier élément plus tard pour pouvoir utiliser h * 2 à la place h * 2 + 1 pour l'index que je remplace. (enregistre 2 caractères)Quelques notes:
{}
. Ok, c'est un peu plus complexe, par exemple, vous pourriez échapper à l'espace avec un\
, mais ces détails sont documentés ailleurs .key1 value1 key2 value2
la source
Javascript 2169 - 434 = 1735
Ok, c'est beaucoup, mais ils vont bien et fonctionnent de la même manière que ma variante précédente dans les articles précédents ( bash et perl ).
Cette version est plus obscure que celle que vous pouvez trouver sur mon horloge ascii pour les geeks
la source
Python, 259 - 52 = 207
Exemple de sortie:
la source
Ruby:
230228 caractères - 46 = 182(Remarque:
^[
est un seul caractère.)Exemple de course (à 21:19:33):
Version «aussi moche que vous le souhaitez»:
191181 caractères - 36 = 145(Taille plus petite, précision inférieure, pas de secondes, rayon identique, scintillement horrible.)
Exemple de course (à 21:19):
Version sans trigonométrie:
130125 caractères (sans bonus)(Inspiré par Johannes Kuhn de solution Tcl . Je ne sais pas à quel point, comme je toujours pas déchiffré son code.)
Exemple de course (à 21:19):
la source
tr': can't convert Fixnum into String (TypeError)”? Now that you mentioned the error I dug for a version 1.8.7 and received the above error of that. Works fine on 1.9.2 and 1.9.3. Seems that
? M» a été interprété comme Fixnum dans les anciennes versions et a été changé plus tard en String.HTML et JS:
397 - 20% = 317.6 characters
Ma première itération. Je ne suis pas très satisfait de cela, mais cela fonctionne et cela montre l'heure de manière très claire.
la source
Ti-Basic 84, 587 - 20% = 469,6
Sa sortie est très jolie et détaillée.
la source
C, 554 octets, met à jour environ une fois par seconde.
Résultat:
la source