Eh bien, le Brexit est arrivé . Et Sky News, étant les génies qu'ils sont, a décidé de créer un compte à rebours sur le côté d'un bus.
Votre travail consiste à faire quelque chose de similaire. Le Royaume-Uni quitte l'UE le 31 mars 2019 et vous devez créer un compte à rebours numérique qui change chaque seconde (avec un écart de 0,05 seconde autorisé).
Contribution
Votre programme ne devrait accepter aucune contribution. C'est interdit!
Sortie
Il devrait afficher le temps jusqu'au Brexit au format ddd:hh:mm:ss
. Les sauts de ligne de début et de fin sont autorisés, mais l'affichage doit rester au même endroit à chaque fois. Il devrait ressembler à une diminution en place. Comme l'a souligné @AnthonyPham, cela ne signifie pas imprimer suffisamment de nouvelles lignes pour «effacer» l'écran, cela signifie que vous devez réellement effacer l'écran.
Une sortie comme celle-ci n'est pas autorisée:
100:20:10:05
100:20:10:04
Ce n'est pas non plus
100:20:10:05
*A thousand newlines*
100:20:10:04
car ils sont sur plusieurs lignes.
Vous n'avez pas à vous inquiéter après le Brexit. Votre programme n'a qu'à fonctionner jusqu'au 31/03/2019
Règles
- Les failles standard sont interdites
- C'est le code-golf donc le code le plus court en octets gagne.
- Les messages d'erreur (bien que je ne sache pas comment) sont interdits
- Le code devrait pouvoir être exécuté dans 2 ans (lorsque le Royaume-Uni quitte l'UE) et devrait afficher l'heure réelle et ne pas recommencer à partir de 730 (voir ci-dessous)
Règle de compte à rebours
Le compte à rebours ne doit pas être codé en dur et doit pouvoir s'exécuter à tout moment avant la fin du Brexit et toujours produire le résultat correct. Lorsqu'une nouvelle journée commence, l'heure doit suivre le format ci-dessous
712:00:00:01
712:00:00:00
711:23:59:59
Permettez-moi de répéter que la date de fin du Brexit est le 31/3/2019 à minuit pour plus de commodité (31: 3: 19 00:00:00 ou 31: 3: 2019 00:00:00 ou tout autre format que vous souhaitez)
NB: Je pense que j'ai tout mais je n'ai pas posté ça dans le Sandbox, sinon le timing aurait pu être décalé. N'hésitez pas à poster des suggestions d'amélioration car ce n'est pas parfait.
1000
si je veux que ça change une fois par seconde. MerciRéponses:
JavaScript,
134129113 octetsEdit: sauvé 2 octets grâce à @Shaggy. 11 octets enregistrés grâce à @ l4m2.
la source
<a id=0>
? Ou quelque chose comme ça?document.body.innerHTML
au lieu deo.innerHTML
<tt>
.PowerShell,
70635553 octetsDouble guillemets exclus, facile -2 grâce à @Joey
L'exécution de ceci avec sommeil ajoute 8 octets, mais l'entrée est surtout invisible si elle est exécutée sans eux, version (63 octets) avec sommeil:
for()
est une boucle infinie, et dans cette boucle ..cls
pour effacer l'écran,obtenir en
31/3/19
tantDateTime
qu'objet, et-
la date actuelle de celui-ci, pour donner le temps restant, puis.ToString()
(|% T*
) avec le format correct.cela affichera un temps négatif après le brexit.
la source
T*
fonctionne. Je ne connais pas ça.%
foreach récupère en fait l'T
objet oString et acceptera la chaîne suivante comme argument. concernant le format datetime pourquoi ne fonctionnera-t-il pas sur des machines américaines? Je pensais que lesdd
etc étaient insensibles à la culture.3/31/19
. Fonctionnerait également2019-03-31
n'importe où, mais cela vous coûte quelques octets.31Mar19
lieu de31/3/19
laquelle devrait, espérons-le, la corriger?Excel VBA,
918482 octetsEnregistré 7 octets grâce à JoeMalpass soulignant qu'Excel considère les dates comme des nombres.
Enregistré 2 octets grâce à JoeMalpass
La sortie est vers la cellule
A1
de la feuille Excel active.la source
("2019-3-31")
avec(43555)
. Cependant, lorsque j'essaie de l'exécuter dans Excel, il se fige après environ 5-6 secondes ...Now
()
Python 3.6, 146 octets
la source
C #,
173172156 156150127 octets16 octets enregistrés grâce à @Bob 6 octets enregistrés grâce à @ Søren D. Ptæus
Version formatée:
la source
(TimeSpan)0
? Au téléphone, je ne peux pas tester pour le moment. Vous pouvez toujours supprimer le clear car le retour chariot s'en occupe: il remet le curseur en début de ligne.Clear
! Que je suis bête. Et personne ne peut se convertirint
à,TimeSpan
j'avais déjà essayé celui-là.(t = new DateTime(2019, 3, 31) - DateTime.Now).Ticks > 0
.JavaScript ES5,
320319316305295284 octetsMerci à @Fels pour le référencement
Math
, @dgrcode pour le référencementconsole
Non golfé
la source
g=Math;
Math
puisse encore économiser 2 octets, non?var
. Choisissez également des noms plus courts pour les variables, commeh
au lieu dehours
oum
au lieu deminutes
. Celac=console
permettra probablement d' économiser quelques octets supplémentaires. Aussi1e3
au lieu de1000
PHP, 84 octets
Assez simple. 1553990400 est l'horodatage du 31-3-2019 00:00:00 en UTC. Il boucle indéfiniment, en utilisant DateTime-> diff () -> format () pour afficher le temps restant. Après le Brexit, il commencera à compter à partir de 0.
Version commentée / plus lisible:
la source
<?
balise ici? 2. Je pense que vos parenthèses sont fausses, en ce moment vous appelez->diff
l'écho plutôt que l'objet DateTime. 3. l'écho fonctionne de toute façon sans parenthèses. 4. Même après avoir corrigé cela, cela ne fonctionne pas pour moi, mais je suis nouveau dans le golf, ce qui pourrait juste être moi un idiot.CJam,
69625957 octets7 octets enregistrés en convertissant au format d'heure différemment
Enregistré 3 octets grâce aux suggestions de Martin Ender
Enregistré 2 octets en utilisant un retour chariot au lieu d'espaces arrière
Ne peut pas être exécuté sur TIO pour des raisons évidentes.
Il réécrit constamment l'affichage dans une boucle infinie de sorte que le texte clignote (au moins dans ma console), bien qu'il ne mette à jour l'heure qu'une fois par seconde.
Cette version de 70 octets n'imprime qu'une fois par seconde:
Explication
la source
Ab
pars
, et enregistrer un octet en faisant d'1e3/
abord, puis en le divisant dans l'ordre inverse60md\60md\24md\]W%
.{60md\}2*
sauve un autre.Python 3.5 (118 octets)
la source
C # 6, 149 octets
Merci à Bob d' avoir économisé 57 octets!
Programme non golfé:
C #,
210206159 octetsMerci à Bob d' avoir enregistré encore 47 octets!
Merci à Martin Smith d' avoir économisé 4 octets!
Programme non golfé:
la source
new DateTime(2019,3,31)
est plus court.Console.Clear
et ajouter"\r"
à la place la chaîne, par exemple"\r"+(x-a)...
(x-a).ToString(@"d\:hh\:mm\:ss")
équivaut à `String.Format (" \ r {0: d \\: hh \\: mm \\: ss} ", xa)` est équivalent à$@"{x-a:d\:hh\:mm\:ss}"
(chaîne interpolée plus courte en C # 6.0). Si vous faites cela, vous pouvez raccourcir encore la pleine"\r"+$@"{x-a:d\:hh\:mm\:ss}"
dans$"\r{x-a:d\\:hh\\:mm\\:ss}"
.C, 104 octets
Panne
Repose sur
time
nombre de secondes depuis le 01/01/1970, ce qui est le cas pour moi (en utilisant Clang / GCC sur macOS) et devrait être le cas pour la plupart des trucs UNIX.Utilise les séquences d'échappement du terminal
bashpour déplacer le curseur (<esc>[1A
déplace le curseur d'une ligne vers le haut). Ce serait plus agréable de pouvoir simplement utiliser\r
, maisprintf
ne videra pas tant qu'il ne verra pas de nouvelle ligne, et le vider manuellement en prendra beaucoup plus.Probablement le compte à rebours le plus intensif que j'ai jamais vu. Fonctionne dans une boucle chaude pour s'assurer qu'il est toujours aussi précis que possible. S'il est exécuté après la date limite, il produira des trucs assez étranges (négatifs partout!)
la source
main(x)
n'est pas une forme valide de main, int implicite a été supprimé du langage. Je crois que la version minimale et sûre estint main(){}
.AHK , 145 octets
Ce n'est pas la réponse la plus courte mais le résultat donne une très belle sensation de malheur, je pense. À l'origine, j'ai essayé d'envoyer les touches Ctrl+ Asuivies de DELl'heure, mais quelle que soit l'heure, mais le taux de rafraîchissement était trop lent et cela détruirait l'environnement dans lequel vous vous trouviez. Au lieu de cela, j'ai opté pour l'interface graphique. Il s'est avéré qu'il fallait moins d'octets pour détruire complètement la fenêtre et la recréer que pour mettre à jour le contrôle encore et encore, donc je suis allé avec ça. C'est un bel effet.
la source
C #,
128127 octetsCode non golfé:
Je n'aurais pas compris l'astuce \ r sans l'aide des autres réponses C # ici.
Pour ceux qui recherchent une amélioration supplémentaire, vous pouvez également placer l'expression Write () dans la boucle for. Il semble que je devrais pouvoir enregistrer un octet d'une manière ou d'une autre ici, car cela me permet d'économiser le point-virgule pour cette déclaration, mais cela fonctionne au même nombre car vous ne pouvez pas avoir un corps entièrement vide:
la source
Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");
ddd
tampons les zéros, semble mieux que la méthode des deux espaces sympa.Rubis (83 octets)
Non golfé
Fondamentalement, l'une des soumissions Python, avec quelques améliorations. Nous émettons juste un "\ r" pour aller au début de la chaîne avant de re-rendre. Et pour le format de chaîne de
"%03d:%02d:%02d:%02d"
, nous ne nous soucions vraiment pas de la largeur sur le premier spécificateur… donc nous pouvons simplement faire"%02d"*4
, et émettre un retour arrière et un espace pour effacer les deux points inutiles supplémentaires.De plus, je trouve un court deux caractères
print
:$><<
.$>
est un raccourci global pour$defout
, qui est le flux de sortie pourprint
etprintf
et par défautSTDOUT
.IO#<<
écrit le côté droit de celui-ci dans le flux. Comment ces deux caractères sont-ils plus courts? Eh bien, je peux maintenant omettre l'espace qui menait avant la parenthèse enveloppant la chaîne de format.À ce stade, je pense sincèrement qu'il n'y a aucun moyen possible de raccourcir davantage ce programme dans Ruby.
Edit: j'avais tort. Au lieu de la première
Time.new(2019,3,31)
, nous pouvons simplement utiliser le temps UNIX brut:1553990400
.Edit 2: J'ai essayé de jouer avec la factorisation des minutes et la division de l'horodatage UNIX par cette constante, mais cela ne permet pas d'économiser d'octets. :(
Edit 3: Désactive la mise en cache
h=3600
en m'a fait du mal de deux octets. Oups.Edit 4: 3 octets enregistrés grâce à @EricDuminill. Il a utilisé des flotteurs, mais les rationnels fonctionnent sans perte de précision!
Edit 5:
Array#*
comme alias pourArray#join
, avec la?
syntaxe Ruby pour les personnages individuels!la source
loop{h=431664-Time.now.to_f/3600;$><<('%02d:'*4+"\b \r")%[h/24,h%24,h%1*60,3600*h%60]}
secondes peuvent cependant être réduites de 1, en raison de l'arrondissement.to_r
au lieu deto_f
préserver la précision..to_r
au lieu de.to_f
+"\r"
vers la droite du tableau. Cela vous permet d'utiliser['%02d']*4*?:
au lieu de'%02d:'*4+"\b "
afin que vous puissiez perdre les parenthèses, ce qui vous met en réseau un octet. Enregistrez encore un autre octet en écrivant à la+?\r
place de+"\r"
.JavaScript + HTML, 136 + 7 = 143 octets
la source
C #, 142 octets
Programme non golfé:
la source
ToString()
octets et à la place de construire la mise en forme dans la méthode Write (), ou peut-être une chaîne interpoléegoto
idée de base .Date Bash + GNU, 128 octets
2 octets rasés grâce à @muru, et 2 plus tôt grâce à @This Guy.
Non golfé
la source
while[1]
:?line 1: [1]: command not found
erreur. Les espaces sont obligatoires il me semble :-(3600
à une variable pour enregistrer 2 octets? Vous pourriez également être en mesure de passerB=3600;A=86400
àB=3600;A=24*B
un autre octet?A=$[24*B]
donc pas possible là-bas cependantC=:%02d;printf "%03d$C$C$C\r"
enregistrer un octet? Et déplacer les affectations vers A et B dans le contexte arithmétique:D=$[B=3600,A=24*B,1553990400-`date +%s`]
pour en sauver une autre?MATL, 45 octets
TIO ne prend apparemment pas en charge l'effacement de la sortie, mais heureusement MATL Online le fait !
À 2 octets de plus, une version un peu plus conviviale du processeur qui fait un
pause
(sommeil) chaque seconde:Essayez ceci sur MATL Online
737515
est le "31 mars 2019" représente le format d'époque par défaut de MATLAB - nombre de jours à partir du 0 janvier 0000, comprenant éventuellement une partie fractionnaire pour représenter l'heure de la journée. (J'ai essayé de raccourcir cela en le calculant d'une manière ou d'une autre, mais ses seuls facteurs sont 5 et un autre nombre à six chiffres (147503), et je n'ai pas pu trouver un moyen de le faire en moins de 6 octets.)la source
PHP, 64 octets
Cela comptera exactement jusqu'à ce que
0:00:00:00
puis pause / sortie. Courez avec-r
.-2 octets si je n'aurais pas à imprimer le 0.
la source
RPL,
8378 octetsEn supposant que votre HP48, ou similaire, est configuré avec l'heure et la date (UK) correctes, le format de date mm / jj et le format d'heure 24h:
J'ai été surpris de pouvoir économiser 2 octets en supprimant les espaces autour
":"
. 1.1 est la date valide la plus courte, ultérieurement vidée parSUB
. Soyez prudent avec les émulateurs, le temps peut courir plus vite ou plus lentement (ou pas du tout) que votre horloge murale. Avec un vrai HP, vous pouvez arrêter ce programme en appuyant sur la touche ON… ou attendre que les piles soient vides.la source
PHP,
1029590 octets7 octets enregistrés grâce à @TheLethalCoder et en ne prenant pas en compte
Enregistré encore 5 octets en concaténant
C'est mon premier golf, donc il me manque probablement pas mal de tours, mais ici vous êtes malgré tout.
Quant à la réponse PHP de @chocochaos qui l'emporterait autrement, je pense qu'elle est défectueuse pour les raisons que j'ai expliquées dans mes commentaires, mais comme je suis nouveau ici, je peux me tromper.Ou je suis juste un débutant :)la source
$a
qu'une seule fois, il est donc préférable d'utiliser le numéro en place. Je ne connais pas trop le php, mais il pourrait y avoir plus d'améliorationsflawed because of reasons stated in the comments
? Si vous voulez dire les commentaires sur leur réponse, vous êtes le seul à avoir commenté.<?=
balise d'ouverture et en supprimant l'écho, en l'attribuant$b
à l'endroit où vous l'avez utilisé pour la première fois. De plus, vous pouvez enregistrer 3 octets en utilisant^0
au lieu defloor
. C'est au niveau du bit ou et implique un transtypage en entier, c'est le moyen le plus court de transtyper en entier que j'ai vu.AWK , 78 octets
Essayez-le en ligne!
C'était plus longtemps avant de réaliser que je pouvais précalculer l'heure de fin. Parfois, il vaut la peine d'être un peu en retard et d'avoir des idées des autres.
Pour info, le lien TIO ne fonctionne pas très bien, car il ne s’implémente pas
\r
correctement.la source
F #, 142 octets
J'ai grandi en Irlande à environ un demi-kilomètre de la frontière. À part un panneau "Bienvenue à Fermanagh" et le changement des marquages routiers, vous ne sauriez pas que vous êtes entré dans un autre pays. Utilisé pour le traverser deux fois sur le chemin de l'école.
la source
c, gcc 114 octets
Rien d'omis, programme complet. Le programme se compile en gcc sur Ubuntu. Le compte à rebours n'affichera pas une longue traînée d'instructions d'impression en raison de l'appel système à effacer et s'arrête lorsque le compte à rebours atteint 0 seconde.
UnGolfed
la source