Votre tâche consiste à créer un programme qui imitera Big Ben (Twitter) .
Tâche
Chaque fois qu'une nouvelle heure a commencé (en fonction de l'heure locale ou de l'heure UTC de votre ordinateur), vous devez générer BONG
des hour
temps répétés (avec un espace entre les mots). Par exemple, quand il est 3 heures, vous devez sortir BONG BONG BONG
. Le format de l'heure suit le format de l'heure de 12 heures, c'est-à-dire qu'après midi, nous en avons 1 et non pas 13. Le programme / la fonction doit être exécuté à l'infini.
Exemple:
ne pas sortir des choses à l'intérieur des crochets
(start: 00:34 for example)
BONG (01:00)
BONG BONG (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG (01:00 again)
(...)
(it continues forever)
Règles
- Chaque série de
BONG
s doit être séparée par une nouvelle ligne - Les retours à la ligne sont autorisés
- Cependant, les espaces de début / fin ne sont pas autorisés
- La soumission doit durer éternellement
- Votre sortie peut être imprimée à ± 3 secondes du début de l'heure.
- Vous ne pouvez pas supposer que le programme est exécuté à une heure spécifique
C'est du code-golf , alors le programme avec le plus petit décompte gagne!
code-golf
string
kolmogorov-complexity
date
Kritixi Lithos
la source
la source
TIMESKEW="60 1"
fait couler les minutes comme des secondes.Réponses:
05AB1E , 43 octets
Essayez-le en ligne! (lol cela ne fonctionnera pas, il expirera dans 60 secondes. Téléchargez l' interpréteur 05AB1E pour cela)
Explication:
Cela m'a pris du temps au golf! Je pourrais peut-être jouer un peu plus au golf, mais ça bat
*><>
, alors c'est cool :)Version rapide:
Attendra une seconde au début et une seconde entre les BONG
la source
Frapper,
71,70, 69 octetsEDITS:
Golfé
A expliqué
Version d'essai
Fonctionne avec des minutes plutôt que des heures
la source
yes BONG|sed 12q
*> <> ,
484744 octetsEssayez-le ici! ( ou cette version qui le fait chaque minute pour les tests )
Cela génère un nombre de
BONG
s séparés par des espaces en fonction de l'heure (et 13 correspond à 1, etc.). Il n'y a pas d'espace de fin après la finaleBONG
et il y a une nouvelle ligne.Techniquement, cela ne fonctionne pas éternellement (mais c'est le cas fondamentalement). Il fuit ~ 28 octets par jour (en ignorant les frais généraux de l'interprète ...). Cela prendrait environ 105062 ans pour qu'il s'écoule 1GiB.
En se rapprochant des frais généraux d’interprète, la pile n’est qu’une tranche de
float64
s sur l’interprète de Golang. Je me suis donc contenté28*8
de créer 224 octets par jour. J'ai divisé ce nombre par le nombre d'octets dans un gibibyte (1073741824), puis 365 pour indiquer qu'il faudrait 13132,85 années pour perdre 1 Go.Note sur les interprètes
L'interprète en ligne est en Javascript. La page doit être ouverte et visible pour pouvoir vérifier l'heure et afficher les BONG. L' interprète de Golang n'a pas cette limitation.
Explication
la source
JavaScript (ES6),
9993 octetsCeci utilise le temps UTC (qui s'aligne avec la chose réelle). En raison de la nature intempestive du code, vous pouvez essayer ce qui suit, qui fait la même chose, mais toutes les 60 secondes:
Voici une version bonus de 99 octets qui utilise l'heure locale:
la source
alert
est chaque minute pour moi (mais le nombre deBONG
s est correct), mais le programme est supposé sortir toutes les heures seulementJavaScript (ES6),
125123117115 octetsMerci à @ Flp.Tkc pour avoir économisé 5 octets!
Merci à @BenAston d'avoir économisé 2 octets supplémentaires!
Snack Snippet
la source
Lot, 142 octets
Comme le fichier fonctionne comme une boucle infinie, je commence par un retard de 1 seconde, car j'en ai besoin quand même après les bongs, ce qui économise les cycles de traitement. Le
>nul
est positionné avec soin pour sauvegarder un octet (1>nul
le 1 serait mangé par la redirection). Nous bouclons ensuite jusqu'à ce que les minutes et les secondes soient à zéro. Les bangs sont construits en prenant l’heure négative modulo 12 et en demandant les derniersh
caractères d’une chaîne de 12 caractères. Quandh
est égal à zéro, cela nous donne en fait la chaîne entière, donc 12 bangs. Il suffit alors de remplacer les caractères par le motBONG
. Lorsqu'elle est exécutée, elle ressemble à ceci (notez que l'image ne se boucle pas, vous devrez donc recharger de force pour voir à nouveau l'animation):la source
Bash + Linux crontab, 90
J'espérais que ce serait plus court que les autres réponses shell. Néanmoins, je pense que c'est une approche intéressante:
Le script s'exécute une fois, remplit la crontab, puis se ferme. Toutefois, la sortie des tâches cron est envoyée au terminal à partir duquel le script a été exécuté. Je pense que cela satisfait la soumission doit courir pour toujours l' exigence.
Avertissement - cela effacera toutes les entrées de crontab existantes, alors assurez-vous de les avoir déjà sauvegardées.
Cela fonctionne sur Ubuntu 16.04, qui utilise Vixie
cron
par défaut.la source
BONG
que nécessaire.cron
utilisez-vous?/proc/<PID>/fd/<N>
.Ruby,
112 à99 octetsAncienne version
Merci à QPaysTaxes pour les astuces
la source
sleep(60)
cela se produiseCheddar v1.0.5, 162 octets
Cheddar n'a pas de lecteur de temps intégré / lecteur de sortie cmd, j'ai donc dû improviser!
Golfé:
Ungolfed:
Explication:
En raison de la bibliothèque standard limitée de Cheddar, j'ai dû utiliser cmd pour générer le temps. Je l'ai fait en sauvegardant la sortie de "time / t", qui affiche l'heure au format 12 heures, dans un fichier nommé "c". IO.read renvoie un tampon que j'ai converti en chaîne et scindé par ":", ce qui garantit que l'heure est toujours à l'indice zéro. J'ai sauvegardé toute cette opération dans une expression lambda qui m'a sauvé 44 octets. Il passe ensuite à la logique suivante: "si l'heure enregistrée ne correspond pas à l'heure courante, définissez l'heure précédente sur l'heure actuelle et imprimez BONG n fois, coupez l'espace de fin".
Le cheddar n'est peut-être pas le langage le moins bavard, mais il peut être amusant de trouver des solutions de rechange comme celle-ci!
Malheureusement, il s’agit d’une solution exclusivement Windows.
Éditer 1: deux octets sauvegardés en remplaçant "0 <1" dans la condition for par "1". Je ne m'attendais pas à ce que 1 soit évalué à true dans cette langue!
la source
Ruby,
8281 octetsChaque seconde, nous vérifions si c'est la dernière seconde de l'heure et BONG en conséquence. Pourrait probablement être joué au golf plus loin avec quelques mauvais tours, mais je n'en connais pas beaucoup. En outre, cela fonctionne différemment de l'autre réponse Ruby.
Un octet économisé grâce à la courtoisie de QPaysTaxes.
la source
if
?puts
avoir oublié celui-là.Python 2 ,
105106 octetsmodifier
Ajout d'un octet en remplaçant <en! = Après les commentaires de @ pinkfloydx33. Bon endroit.
Testé autant que possible localement, mais ne fonctionne pas sur TIO car il dépasse (évidemment) la limite d'exécution de 60 secondes. N'hésitez pas à tester localement :-)
Au fait, perdre cet encombrant espace de fuite m'a coûté 7 octets, sinon cela aurait été inférieur à 100.
En l'absence de TIO, la sortie est attendue après une heure. Prog a été lancé à 15h27 avec du code de débogage supplémentaire pour afficher l'heure de l'impression (format 12 heures).
C'est assez simple, mais voici une explication pour quiconque est intéressé.
la source
11>0
, alorsh>c
ou est-ce que je manque quelque chose?Python 3 -
1009792 octetsExplication:
la source
from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])
est de 93 octetsfrom time import*
, comme çaC, 238 octets
Je ne sais pas si cela fonctionne correctement, je suis mobile et mon téléphone ne dispose pas d'un compilateur C. (Fonctionne uniquement sur les systèmes de type UNIX)
la source
f
au lieu demain
? Comment cela est-il censé fonctionner?sh, 66 octets
A expliqué
la source
%I
par%M
et ça marche pendant quelques minutes.C, 198 octets
la source
Javascript ES6 87 octets
Edit: Empruntez le
new Date/36e5%12|0||12
code de @ETHProductions sans vergogne pour économiser 6 octetsla source
R,
104105 octetsÀ chaque seconde, il va (devrait) vérifier si nous en sommes au bout d'une heure, puis afficher cette quantité de
BONG
s.la source
12:00:01
?Sys.sleep(60)
cela se produisewhile(1)
parrepeat
.BONG
pendant 1 seconde au lieu d'une seule fois. Ceci permet de s’assurer qu’il ne vérifie qu’une fois par seconde.JavaScript ES2015,
1009998969488 octetsExplication:
h
est une fonction qui obtient l'heure du jour sur une base de 12 heures en utilisant l'opérateur restant (%12
).36e5
est le nombre de millisecondes en une heure en utilisant la syntaxe exponentielle pour sauvegarder les caractères. Parnew
conséquent, l'opérateur n'exige pas que les parenthèses soient utilisées avec des fonctionsnew Date
. JavaScript a uniquement une arithmétique en virgule flottante, l'|
opérateur OU au niveau du bit force le nombre à être un entier car les opérateurs au niveau du bit JS fonctionnent avec le sous-ensemble entier des nombres représentés par la virgule flottante IEEE 754.La virgule délimite les sous-expressions.
p
est initialisé à l'heure courante (p=h()
).for(;;)
est utilisé pour vérifier à plusieurs reprises si desBONG
s doivent être alertés. La vérification est effectuée aussi rapidement que le temps d'exécution le permet.Si l'heure a changé (
h()!=p
), alors nous mettons à jour p, puis nous alertons leBONG
s. L'opérateur AND logique sert de garde (il court-circuite sih()===p
) pour déterminer si lesBONG
s sont sortis.String.prototype.repeat
est nouvelle dans ES2015 et enregistre certains caractères en utilisant quelque chose comme ES5Array.prototype.join
.h
renvoie zéro pour les multiples exacts de 12 (c'est-à-dire 12h, 12h), nous le changeons en 12 en utilisant le OU logiquep||12
.Merci à Kritixi Lithos et à ETHProductions pour leurs idées.
la source
Excel VBA, 143 octets
Sorties de code dans la fenêtre Immédiatement VBE
Version amusante, 143 octets (non compétitif)
Bien qu’il soit assez difficile d’obtenir Excel pour aller au BONG, c’est assez simple d’obtenir l’excellence pour aller
Beep
. L'Beep
appel émet un bip et le code ci-dessous l'utilise pour émettre des bips indiquant l'heure, heure par heure, séparés par des pauses d'une seconde.Comme avec ce qui précède, ce code donne l'impression que Excel ne répond pas et
:DoEvents
il est recommandé d' ajouter un appel à la fin de la première ligne car cela améliore l'expérience de l'utilisateur. Toutefois, cela n'est pas nécessaire pour une exécution correcte du code.Version non-golfée
la source
Beep
ouDoEvents
ne fonctionnent pas correctement sur les ordinateurs Mac.C # 234 octets
Je ne prévois pas de gagner de prix ici, mais une implémentation de C # est obligatoire.
Ungolfed avec des commentaires:
la source
for(;;)
, changezh=()=>1+(DateTime.Now.Hour-1)%12;
(notez les espaces non plus), puis Enumerable.Repeat devient("BONG",t)
(vous enregistre deux ou trois) puis supprimez les espaces supplémentaires, c.-à-dif(...)
. Notez également que cela imprimera tous les bangs concaténés, utilisera probablement ces économies en octets pour transformer concat en jointure avec un espace comme premier argument.Groovy, 72 octets
Comment?
Stocker une méthode pour obtenir les heures actuelles.
Stocker les premières heures.
Si vrai, si l’heure actuelle n’est pas la même que l’heure précédente, affichez l’heure actuelle multipliée par "BONG" pour afficher l’heure actuelle des bongs.
+3 octets
%12
pour les bangs non militaires.la source
perl, 60 octets
Mise à jour
Remplacé
" "
par$"
, enlevéCORE::
, nombre corrigé.Le golf
Cela doit être exécuté avec
perl -E
.Remarques
x while y
est équivalent àwhile(y){x}
(oùx
est une seule déclaration) mais n'a pas besoin des crochets.sleep
est exécuté la première fois avant que quoi que ce soit est imprimé.time
utilise UTC. Le Big Ben original est à l'heure d'été (heure d'été britannique, BST) de la fin mars à la fin octobre.sleep
renvoie le nombre de secondes attendu. Ce sera toujours vrai.la source
-E
drapeau est à +1 octet (il y a une page quelque part sur la mesure des drapeaux ...). 2 , je ne suis pas sûr de savoir comment exécuter cela carperl -E golf.pl
semble se terminer immédiatement.QBIC , 82 octets
Vraiment besoin de changer le jeton pour les littéraux de code (
$
) et d’implémenter une fonctionnalité de sous-chaîne (left$(x,y)
peut être plus courte).Le fonctionnement interne:
Mise à jour (NC): le
$
n'est plus utilisé dans le jeu d'instructions QBIC, il peut donc maintenant être utilisé librement comme code pour QBasic sans nécessiter de littéraux de code. Dans ce cas, il enregistre 4 octets, ce qui porte la QBIC à 78 octets:la source
SmileBASIC,
7467 octetsGénère un grand nombre de sauts de ligne "de fuite";)
Edit: sauvegardé 7 octets avec un meilleur algorithme 24-> 12 heures.
la source
PHP, 63 octets
Je pourrais économiser deux octets supplémentaires avec ASCII étendu. Mais je suis actuellement trop paresseux pour cela.
imprime les BONG avec un saut de ligne de tête précisément à l'heure complète. Courez avec
-nr
.la source
-n
est un peu implicite (ignorer php. et revenir aux valeurs de configuration par défaut);-r
indique à PHP d’exécuter du code à partir d’un paramètre de ligne de commande plutôt que d’un fichier.C, 152
Lisible:
la source