Nun, Brexit ist passiert . Und Sky News, die Genies, die sie sind, haben beschlossen, einen Countdown an der Seite eines Busses zu starten.
Ihre Aufgabe ist es, etwas Ähnliches zu tun. Großbritannien verlässt die EU am 31. März 2019 und Sie müssen dafür einen digitalen Countdown erstellen, der sich jede Sekunde ändert (wobei eine Abweichung von 0,05 Sekunden zulässig ist).
Eingang
Ihr Programm sollte absolut keine Eingabe nehmen. Es ist verboten!
Ausgabe
Es sollte die Zeit bis zum Brexit im Format ausgeben ddd:hh:mm:ss
. Führende und nachfolgende Zeilenumbrüche sind zulässig, die Anzeige sollte jedoch jedes Mal an derselben Stelle bleiben. Es sollte so aussehen, als ob es tatsächlich abnimmt. Wie von @AnthonyPham hervorgehoben, bedeutet dies nicht, dass genügend Zeilenumbrüche gedruckt werden, um den Bildschirm zu "löschen". Dies bedeutet, dass Sie den Bildschirm tatsächlich löschen müssen.
Eine Ausgabe wie diese ist nicht erlaubt:
100:20:10:05
100:20:10:04
Das ist es auch nicht
100:20:10:05
*A thousand newlines*
100:20:10:04
da sie in mehr als einer Zeile stehen.
Sie müssen sich nach dem Brexit keine Sorgen mehr machen. Ihr Programm muss nur bis zum 31.3.19 funktionieren
Regeln
- Standardlücken sind nicht zulässig
- Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes .
- Fehlermeldungen (obwohl ich mir nicht vorstellen kann, wie) sind nicht zulässig
- Der Code sollte innerhalb von 2 Jahren ausgeführt werden können (wenn das Vereinigte Königreich die EU verlässt) und sollte die aktuelle Zeit anzeigen und nicht erneut ab 730 beginnen (siehe unten).
Countdown-Regel
Der Countdown sollte nicht fest programmiert sein und jederzeit ausgeführt werden können, bevor der Brexit abgeschlossen ist, und dennoch das richtige Ergebnis liefern. Wenn ein neuer Tag beginnt, sollte die Stunde dem folgenden Format entsprechen
712:00:00:01
712:00:00:00
711:23:59:59
Lassen Sie mich noch einmal sagen, das Datum, an dem der Brexit endet, ist der 31.3.19 um Mitternacht (31: 3: 19 00:00:00 oder 31: 3: 2019 00:00:00 oder jedes andere gewünschte Format)
NB: Ich glaube, ich habe alles, aber ich habe es nicht in der Sandbox gepostet, sonst hätte das Timing falsch sein können. Zögern Sie nicht, Verbesserungsvorschläge zu veröffentlichen, da diese nicht perfekt sind.
1000
wenn ich will, dass es sich einmal pro Sekunde ändert. Vielen DankAntworten:
JavaScript,
134129113 BytesBearbeiten: 2 Bytes dank @Shaggy gespeichert. 11 Bytes dank @ l4m2 eingespart.
quelle
<a id=0>
? Oder etwas ähnliches?document.body.innerHTML
statto.innerHTML
<tt>
.PowerShell,
70635553 BytesAusgeschlossene Anführungszeichen, einfach -2 dank @Joey
Wenn Sie dies mit Schlafmodus ausführen, werden 8 Byte hinzugefügt, aber die Eingabe ist meistens unsichtbar, wenn sie ohne diese ausgeführt wird. Version (63 Byte) mit Schlafmodus:
for()
ist eine Endlosschleife, und innerhalb dieser Schleife ..cls
um den Bildschirm zu löschen,Holen Sie sich
31/3/19
alsDateTime
Objekt und-
das aktuelle Datum daraus, um die verbleibende Zeit anzugeben, dann.ToString()
(|% T*
) das mit dem richtigen Format.Dies zeigt eine negative Zeit nach dem Brexit an.
quelle
T*
funktioniert. Das kenne ich nicht.%
foreach nimmt tatsächlich dasT
oString-Objekt auf und akzeptiert den nächsten String als Argument. Was das Datum / Uhrzeit-Format betrifft, warum läuft es nicht auf US-Maschinen? Ich dachte, diedd
etc waren kulturunempfindlich.3/31/19
. Würde auch2019-03-31
überall funktionieren , aber das kostet dich ein paar Bytes.31Mar19
anstatt31/3/19
welche sollte es hoffentlich beheben?Excel VBA,
918482 Bytes7 Byte gespart dank JoeMalpass, der darauf hinweist, dass Excel Datumsangaben als Zahlen ansieht.
2 Bytes gespart dank JoeMalpass
Die Ausgabe erfolgt in eine Zelle
A1
in der aktiven Excel-Tabelle.quelle
("2019-3-31")
mit(43555)
. Wenn ich dies jedoch in Excel versuche, friert es nach ca. 5-6 Sekunden ein ...Now
funktioniert auch ohne()
...Python 3.6, 146 Bytes
quelle
C #,
173172156150127 Bytes16 Bytes dank @Bob gespeichert 6 Bytes dank @ Søren D. Ptæus gespeichert
Formatierte Version:
quelle
(TimeSpan)0
? Kann momentan nicht telefonisch testen. Sie können das Clear trotzdem fallen lassen, da der Wagenrücklauf sich darum kümmert: Er setzt den Cursor wieder an den Anfang der Zeile.Clear
! Wie dumm von mir. Und nein, ich kann nicht konvertierenint
,TimeSpan
ich habe es bereits versucht.(t = new DateTime(2019, 3, 31) - DateTime.Now).Ticks > 0
.JavaScript ES5,
320319316305295284 BytesVielen Dank an @Fels für die Referenzierung
Math
, @dgrcode für die Referenzierungconsole
Nicht golfen
quelle
g=Math;
Math
kann anscheinend immer noch 2 Bytes einsparen, oder?var
. Wählen Sie auch kürzere Namen für Variablen, z. B.h
anstelle vonhours
oderm
anstelle vonminutes
. Wahrscheinlichc=console
werden dadurch ein paar Bytes mehr gespart. Auch1e3
anstelle von1000
PHP, 84 Bytes
Ziemliech direkt. 1553990400 ist der Zeitstempel für den 31-3-2019 00:00:00 in UTC. Mit DateTime-> diff () -> format () wird eine Endlosschleife ausgeführt, um die verbleibende Zeit auszugeben. Nach dem Brexit wird von 0 aufwärts gezählt.
Kommentierte / besser lesbare Version:
quelle
<?
Tag hier weglassen ? 2. Ich glaube, Ihre Klammern->diff
stimmen nicht. Im Moment rufen Sie das Echo und nicht das DateTime-Objekt auf. 3. echo funktioniert sowieso ohne runde klammern. 4. Auch nachdem ich das behoben habe, funktioniert das nicht für mich, aber ich bin neu im Golfspielen, so dass ich nur ein Idiot sein könnte.CJam,
69625957 Bytes7 Bytes gespart durch Konvertierung in ein anderes Zeitformat
3 Bytes gespart dank Martin Enders Vorschlägen
2 Bytes mit einem Wagenrücklauf anstelle von Leerzeichen gespart
Kann aus offensichtlichen Gründen nicht auf TIO ausgeführt werden.
Die Anzeige wird ständig in einer Endlosschleife neu geschrieben, sodass der Text (zumindest in meiner Konsole) ein- und ausgeblendet wird, obwohl die Uhrzeit nur einmal pro Sekunde aktualisiert wird.
Diese 70-Byte-Version druckt nur einmal pro Sekunde:
Erläuterung
quelle
Ab
mits
, und ein Byte speichern , indem Sie1e3/
zuerst und dann in umgekehrter Reihenfolge teilen60md\60md\24md\]W%
.{60md\}2*
rettet einen anderen.Python 3.5 (118 Bytes)
quelle
C # 6, 149 Bytes
Vielen Dank an Bob für das Speichern von 57 Bytes!
Ungolfed-Programm:
C #,
210206159 BytesVielen Dank an Bob für das Speichern von weiteren 47 Bytes!
Vielen Dank an Martin Smith für das Speichern von 4 Bytes!
Ungolfed-Programm:
quelle
new DateTime(2019,3,31)
ist kürzer.Console.Clear
und stattdessen voranstellen"\r"
, z. B."\r"+(x-a)...
(x-a).ToString(@"d\:hh\:mm\:ss")
Entspricht "String.Format" ("\ r {0: d \\: hh \\: mm \\: ss}", xa). Entspricht$@"{x-a:d\:hh\:mm\:ss}"
(kürzerer, interpolierter String in C # 6.0). Wenn Sie das tun, können Sie dann weiter die volle verkürzen"\r"+$@"{x-a:d\:hh\:mm\:ss}"
in$"\r{x-a:d\\:hh\\:mm\\:ss}"
.C 104 Bytes
Nervenzusammenbruch
Verlässt sich auf
time
die Anzahl der zurückgegebenen Sekunden seit dem 01.01.1970, was für mich der Fall ist (mit Clang / GCC unter macOS) und für die meisten UNIX-Dinge der Fall sein sollte.Bewegt den Cursor mithilfe von
Bash-Terminal-Escape-Sequenzen um eine<esc>[1A
Zeile nach oben. Es wäre schöner, wenn man es einfach benutzen könnte\r
, aber esprintf
wird erst dann geleert, wenn eine neue Zeile angezeigt wird, und das manuelle Leeren nimmt viel mehr Zeit in Anspruch.Wahrscheinlich der CPU-intensivste Countdown, den ich je gesehen habe. Läuft in einer Hot-Loop, um sicherzustellen, dass sie immer so genau wie möglich ist. Wenn sie nach Ablauf der Frist ausgeführt werden, entstehen ziemlich seltsame Dinge (überall Negative!)
quelle
main(x)
ist keine gültige Form von main, implicit int wurde aus der Sprache entfernt. Ich glaube die minimale, sichere Version istint main(){}
.AHK , 145 Bytes
Dies ist nicht die kürzeste Antwort, aber das Ergebnis gibt ein sehr gutes Gefühl des Untergangs, denke ich. Ich habe ursprünglich versucht, die Tastenanschläge Ctrl+ Agefolgt von DELund dann zu jeder Zeit zu senden, aber die Aktualisierungsrate war zu langsam und würde die Umgebung zerstören, in der Sie sich befanden. Stattdessen habe ich mich für die grafische Benutzeroberfläche entschieden. Es stellte sich heraus, dass weniger Bytes erforderlich waren, um das Fenster vollständig zu zerstören und neu zu erstellen, als um die Steuerung immer wieder zu aktualisieren. Es ist ein schöner Effekt.
quelle
C #,
128127 BytesUngolfed-Code:
Ich hätte den \ r Trick nicht ohne die Hilfe der anderen C # -Antworten hier herausgefunden.
Wenn Sie nach weiteren Verbesserungen suchen, können Sie auch den Write () - Ausdruck in die for-Schleife einfügen. Scheint, als könnte ich hier irgendwie ein Byte speichern, weil das mir das Semikolon für diese Anweisung erspart, aber die gleiche Zahl ergibt sich, weil Sie keinen vollständig leeren Körper haben können:
quelle
Console.Write($"\r{new DateTime(2019,3,31)-DateTime.Now:ddd\\:hh\\:mm\\:ss}");
ddd
füllt die Nullen auf, sieht besser aus als die Zwei-Leerzeichen-Methode.Ruby (83 Bytes)
Ungolfed
Grundsätzlich eine der Python-Einsendungen mit einigen Verbesserungen. Wir geben nur ein "\ r" aus, um vor dem erneuten Rendern an den Anfang der Zeichenfolge zu springen. Und für das String-Format von
"%03d:%02d:%02d:%02d"
ist uns die Breite des ersten Spezifizierers wirklich egal ... also können wir einfach"%02d"*4
ein Backspace und ein Leerzeichen ausgeben, um den zusätzlichen unnötigen Doppelpunkt zu löschen.Auch ich fand einen zweistelligen kürzer
print
:$><<
.$>
ist eine Abkürzung für global$defout
, die der Ausgangsstrom für istprint
undprintf
auf und StandardwerteSTDOUT
.IO#<<
Schreibt die rechte Seite in den Stream. Wie ist das zwei Zeichen kürzer? Nun, ich kann jetzt den Raum weglassen, der vor der Klammer geführt hat, die die Formatzeichenfolge umschließt.Zu diesem Zeitpunkt denke ich wirklich, dass es keine Möglichkeit gibt, dieses Programm in Ruby weiter zu verkürzen.
Edit: Ich habe mich geirrt. Anstelle der ersten
Time.new(2019,3,31)
, können wir verwenden nur die rohe UNIX Zeit:1553990400
.Bearbeiten 2: Ich habe versucht, mit dem Ausklammern von Minuten und dem Teilen des UNIX-Zeitstempels durch diese Konstante herumzuspielen, aber es spart tatsächlich keine Bytes. :(
Edit 3: Stellt sich heraus, dass Caching
h=3600
mich tatsächlich um zwei Bytes verletzt. Hoppla.Edit 4: 3 Bytes dank @EricDuminill gespeichert. Er benutzte Posen, aber die Rationals funktionieren ohne Präzisionsverlust!
Edit 5:
Array#*
als Alias fürArray#join
, mit der Ruby-?
Syntax für einzelne Charaktere!quelle
loop{h=431664-Time.now.to_f/3600;$><<('%02d:'*4+"\b \r")%[h/24,h%24,h%1*60,3600*h%60]}
Sekunden können jedoch aufgrund von Rundungen um 1 verschoben sein.to_r
stattto_f
Präzision zu erhalten..to_r
statt.to_f
+"\r"
rechts vom Array bewegen . Auf diese Weise können Sie['%02d']*4*?:
anstelle von'%02d:'*4+"\b "
die Klammern verlieren, wodurch Sie ein Byte erhalten. Speicher noch ein weiteres Byte durch das Schreiben+?\r
statt+"\r"
.JavaScript + HTML, 136 + 7 = 143 Bytes
quelle
142 Bytes
Ungolfed-Programm:
quelle
ToString()
Bytes übersprungen werden und stattdessen die Formatierung in die Write () -Methode oder eine interpolierte Zeichenfolgegoto
.Bash + GNU Datum, 128 Bytes
Dank @muru 2 Bytes und dank @This Guy 2 Bytes früher.
Ungolfed
quelle
while[1]
?line 1: [1]: command not found
Fehler. Die Räume sind obligatorisch es scheint :-(3600
Variablen zuweisen , um 2 Bytes zu sparen? Vielleicht haben Sie auch in der Lage zu ändern ,B=3600;A=86400
umB=3600;A=24*B
für ein anderes Byte?A=$[24*B]
so nicht möglich seinC=:%02d;printf "%03d$C$C$C\r"
ein Byte speichern? Und verschieben Sie die Zuweisungen im arithmetischen Kontext nach A und B:D=$[B=3600,A=24*B,1553990400-`date +%s`]
um eine andere zu speichern?MATL, 45 Bytes
TIO unterstützt das Löschen der Ausgabe anscheinend nicht, aber zum Glück tut es MATL Online !
Mit 2 Bytes mehr, eine etwas CPU-freundlichere Version, die
pause
jede Sekunde einen (Ruhezustand) ausführt:Versuchen Sie dies auf MATL Online
737515
"31. März 2019" steht für MATLABs Standard-Epochenformat - Anzahl der Tage ab dem 0. Januar 0000, optional einschließlich eines Bruchteils zur Darstellung der Tageszeit. (Ich habe versucht, dies zu verkürzen, indem ich es irgendwie berechnet habe, aber seine einzigen Faktoren sind 5 und eine weitere sechsstellige Zahl (147503), und ich konnte keinen Weg finden, dies in weniger als 6 Bytes zu tun.)quelle
PHP, 64 Bytes
Dies zählt genau bis
0:00:00:00
und dann Pause / Exit. Laufen Sie mit-r
.-2 Bytes, wenn ich die 0 nicht drucken müsste.
quelle
RPL,
83-78BytesAngenommen, Ihr HP48 oder ein ähnliches Gerät ist mit der korrekten Uhrzeit und dem korrekten Datum (UK), dem mm / tt-Datumsformat und dem 24-Stunden-Zeitformat eingerichtet:
Ich war überrascht, dass ich durch Entfernen von Leerzeichen 2 Byte einsparen konnte
":"
. 1.1 ist das kürzeste gültige Datum, das später von abgeladen wirdSUB
. Seien Sie vorsichtig mit Emulatoren, die Zeit läuft möglicherweise schneller oder langsamer (oder gar nicht) als Ihre Wanduhr. Bei einem echten HP können Sie dieses Programm beenden, indem Sie die Taste ON drücken ... oder auf leere Batterien warten.quelle
PHP,
1029590 Bytes7 Bytes gespart dank @TheLethalCoder & ohne Faktorisierung
Durch Verketten weitere 5 Byte gespeichert
Dies ist mein erstes Golfspiel, daher fehlen mir wahrscheinlich einige Tricks, aber hier bist du trotzdem.
Was die PHP-Antwort von @chocochaos betrifft, die dies sonst übertrumpfen würde, glaube ich, dass sie aus Gründen fehlerhaft ist, die ich in meinen Kommentaren erläutert habe, aber da ich neu hier bin, könnte ich mich irren.Oder ich bin nur ein Neuling :)quelle
$a
die Nummer auch nur einmal verwenden. Ich bin nicht so vertraut mit PHP, aber es sieht so aus, als ob es weitere Verbesserungen geben könnteflawed because of reasons stated in the comments
? Wenn Sie die Kommentare zu ihrer Antwort meinen, sind Sie der einzige, der kommentiert hat.<?=
Eröffnungs-Tag verwenden und das Echo$b
an der Stelle ablegen, an der Sie es zum ersten Mal verwenden. Zusätzlich können Sie 3 Bytes mit^0
anstelle von speichernfloor
. Es ist bitweise oder und beinhaltet eine Besetzung auf int, es ist der kürzeste Weg, um auf int zu wirken, den ich gesehen habe.AWK , 78 Bytes
Probieren Sie es online!
Es dauerte länger, bis mir klar wurde, dass ich die Endzeit vorberechnen konnte. Manchmal lohnt es sich, etwas zu spät zum Spiel zu kommen und Ideen von anderen zu bekommen.
Zu Ihrer Information, die TIO-Verbindung funktioniert nicht sehr gut, da sie nicht
\r
richtig implementiert wird.quelle
F #, 142 Bytes
Ich bin in Irland ungefähr einen halben Kilometer von der Grenze entfernt aufgewachsen. Abgesehen von einem "Welcome to Fermanagh" -Schild und den sich ändernden Straßenmarkierungen wüssten Sie nicht, dass Sie in ein anderes Land eingereist sind. Auf dem Schulweg zweimal überquert.
quelle
c, gcc 114 Bytes
Nichts ausgelassen, volles Programm. Das Programm wird unter Ubuntu in gcc kompiliert. Der Countdown zeigt aufgrund des Systemaufrufs zum Löschen keine langen Spuren von Druckanweisungen an und wird angehalten, wenn der Countdown 0 Sekunden erreicht.
Ungolfed
quelle