dary!
Bei Ereignissen, die nichts mit dem zu tun haben, was mir hoffentlich in den nächsten Tagen widerfahren wird, fordere ich Sie auf, Code zu schreiben, der folgende Aufgaben erfüllt:
Drucken
Legen... wait for it...
sofort mit einem nachgestellten Zeilenumbruch.
Warten Sie bis zur nächsten vollen Stunde (wenn der Cron-Job für die Vergabe des Badges ausgeführt wird).
Drucken
dary!
mit einem optionalen nachgestellten Zeilenumbruch.
Zusätzliche Regeln
Sie können ein Programm oder eine Funktion schreiben, aber die Ausgabe muss nach STDOUT (oder der nächstgelegenen Alternative Ihrer Sprache) gedruckt werden.
Sie müssen bis zur nächsten vollen Stunde warten , nicht nur 60 Minuten. Wenn der Code um 6:58 Uhr ausgeführt wird, sollte die zweite Zeile um 7:00 Uhr gedruckt werden.
Die letzte Zeile muss spätestens eine Sekunde nach der nächsten vollen Stunde gedruckt werden.
Falls das Programm in der ersten Sekunde einer vollen Stunde gestartet wird, sollte es auf die nächste volle Stunde warten.
Sie können die lokale oder UTC-Zeit abfragen.
Es gelten die Standardregeln für Code-Golf .
Antworten:
Pyth,
4241Unten ist ein Hexdump des Codes:
1 Byte dank @isaacg gespeichert
Verwendet die
.d
Funktion, um auf die Ortszeit bezogene Werte abzurufen..d6
Gibt die aktuelle Stunde zurück. Dadurch wird die erste Zeichenfolge gedruckt, und es wird gewartet, bis sich die Stunde von der Stunde und dem Start des Programms unterscheidet. Anschließend wird die zweite Zeichenfolge gedruckt.Sie können es online mit
.d7
oder.d8
für Minuten / Sekunden versuchen, aber der Online-Compiler druckt nur etwas, wenn das Programm beendet wird.Herzlichen Glückwunsch, Dennis! :)
quelle
0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
.
es die gleiche Länge machen würde. Dumme Fehler nacheinander: Pdary
, aber neinlegen
! Und Pyth behauptet, für diejenigen, die an konventionelles Programmieren."
bedeutet, dass für die Zeichenfolge einige Operationen ausgeführt werden müssen, um die echte Zeichenfolge abzurufen. Es ist nur ein Kompressionstrick zum Golfen. Wenn Sie versuchen möchten, Pyth zu lernen, wünschen wir Ihnen viel Glück! Vergiss nicht, dass es auch einen Chatroom dafür gibt :)JavaScript (ES6), 74 Byte
Möglicherweise möchten Sie die Systemuhr vor dem Testen ändern. Glückwunsch, wenn Sie um 59 Minuten nach hier gelandet sind.
quelle
36e5
anstelle von arbeiten3.6e6
?setTimeout
würdeeval
für mich. Richtig ... Ich habe ursprünglich versucht, zu verwenden,console.log
aber das funktioniert nicht einmal, wenn es aufgrund des Kontexts in einer Variablen gespeichert wird. Sie sind auch hübsch!setTimeout
richtig verwenden und sogar ein Byte speichern:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
CJam,
4948 BytesVerwendet die Ortszeit. Zu Testzwecken können Sie die beiden Instanzen von
3
durch4
oder ersetzen5
, damit sie zu Beginn der nächsten Minute / Sekunde gedruckt werden.Teste es hier. Beachten Sie jedoch, dass der Online-Interpreter keine Ausgabe anzeigt, bis das Programm beendet wird. Alternativ können Sie es auch unter Online testen ausführen , wobei die Ausgabe fast sofort angezeigt wird, anstatt gepuffert zu werden (wenn Sie sie jedoch mit Sekunden anstelle von Stunden testen, wird die Verzögerung spürbar). Auf jeden Fall funktioniert es wie ein Zauber, wenn Sie es lokal mit dem Java-Interpreter ausführen.
Erläuterung
Dies macht Gebrauch von CJam,
et
das Ihnen eine Reihe von Möglichkeiten bietetHier ist eine Aufschlüsselung des Codes:
Bonus
Dies funktioniert auch für die gleiche Byteanzahl:
Anstatt die Stunde auszuwählen, wählen wir das Präfix mit dem Datum und der Stunde aus und lassen die Schleife weiterlaufen, solange das datetime-Array dieses Präfix noch hat.
quelle
AppleScript,
157149 BytesHuh. Überraschenderweise streiten.
Da
log
im Skript-Editor im Bereich "Nachrichten" gedruckt wird, ist dies meiner Meinung nach die STDOUT-Ausgabe am nächsten. Wenn Sie die Zeitzeichenfolge des aktuellen Datums abrufen, geschieht Folgendes:Code:
Ausgabe:
Es wird die erste Zahl (
5
) vor dem Doppelpunkt erfassen.Eigentlich dachte ich, es würde viel länger dauern. xD
quelle
"1"
vonnumber 1 in time string of(current date)
...first number in time string of (current date)
.first number
gibt mir auch nur die erste"0"
ziffer der zeit ( im moment um 04:38).Schneemann - 1.0.2 ,
7069 BytesErläuterung:
quelle
PHP,
76, 70, 65, 62,51 BytesVorherige Logik (63b):
Diese Art der Codierung führt dazu, dass Sie Ihren Job verlieren. Dies geschieht jedoch so lange, bis die Zeit 1 Stunde hinter init liegt.
-1 Byte durch Ersetzen von
{}
nach;
(danke manatwork)-5 Byte durch Ersetzen
echo'dary!';
von?>dary!
(danke manatwork)-4 Byte durch Ersetzen
<?php
der Kurzversion<?
(danke primo)-1 Byte durch Ersetzen der
while
für einfor
-3 Byte durch Ersetzen
date(G)!=$h+1
vondate(G)==$h
(danke primo)quelle
{}
→;
undecho
→?>
würden es etwas reduzieren. Obwohl ich es vorziehen würdeLegen... wait for it...↵<?php while(+date('is'));?>dary!
<?
anstatt<?php
). Die Verwendungfor(;;)
hat die gleiche Länge wiewhile()
, ermöglicht jedoch das Verschieben der$h
Zuweisung, ohne dass ein Semikolon (for($h=date(h);...
) erforderlich ist . Das{}
war nicht nötig, aber das;
Vorhergehende auch nicht?>
. Möglicherweise liegt das Problem bei$h
12 (date(h)
wird jedoch niemals 13 sein).date(G)!=$h+1
zudate(G)==$h
. Kürzere und löst das Stundenproblem;) Entfernen Sie auch das Semikolon vor?>
.HH:00:00
, dh innerhalb der ersten Sekunde einer vollen Stunde.Perl 6 , 60 Bytes
quelle
60²
das erst vor ein paar Tagen hinzugefügt wurdeJavascript
94 9087 BytesNicht so viel Golf gespielt ...
Downgoat-Version:
Es speichert die aktuelle Stunde und läuft so lange, wie die "alte" Stunde gleich der aktuellen ist. Sobald sich die Stunde geändert hat, wird der Rest gedruckt! : D
Haftungsausschluss: Wenn es Ihrem Browser nicht gefällt, wurden Sie gewarnt.
quelle
(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
MATLAB - 89 Bytes
Ziemlich selbsterklärend. Erstellen Sie zunächst ein Funktionshandle, um die aktuelle Stunde der Systemuhr abzufragen. Dann zeigen
Legen... wait for it...
wir mit einem Wagenrücklauf an und gehen dann in einewhile
Schleife, in der wir ständig prüfen, ob die aktuelle Stunde, zu der eine 1 hinzugefügt wurde, nicht mit der aktuellen Stunde übereinstimmt. Wenn dies der Fall ist, wiederholen Sie die Schleife. Nur bis zum Zeitpunkt der nächsten Stunde wird angezeigtdary!
und danach erfolgt ein Wagenrücklauf.Die Stunden von MATLAB basieren auf einer 24-Stunden-Indexierung, sodass der
mod
Betrieb mit Basis 24 von 23:00 Uhr bis 24:00 Uhr ausgeführt werden muss.Kleinere Anmerkung
Für diese
hour
Funktion ist die Toolbox Financial Time Series erforderlich. Dienow
Funktion unterliegt nicht dieser Einschränkung, sondern ruft das aktuelle Datum und die aktuelle Uhrzeit als Seriennummer ab, anhand dererhour
die aktuelle Stunde berechnet wird.Möchten Sie dies in Octave ausführen?
Sicher! Da Octave diese Toolbox nicht hat, müssen wir die
hour
Funktion nur so ändern , dass siedatevec
einen Vektor von 6 Elementen zurückgibt - jeweils eines für Jahr, Monat, Tag, Stunde, Minuten und Sekunden. Sie müssten nur das vierte Element der Ausgabe extrahieren:Die zusätzlichen Zeichen erhöhen die Größe der Lösung auf 98 Byte. Sie können dies jedoch in Octave ausführen. Beachten Sie die In-Place-Indizierung ohne temporäre Variable im Funktionshandle.
Keine finanzielle Zeitreihen-Toolbox?
Wenn Sie dies in MATLAB ohne die Financial Time Series Toolbox ausführen möchten , weil Sie nicht sofort ohne temporären Index in Variablen indizieren können, dauert das Schreiben etwas länger:
Dieser ermittelt zunächst die aktuelle Uhrzeit und das aktuelle Datum und speichert es in der Variablen
h
sowie in der aufgerufenen automatischen Variablenans
. Danach wiederholen wir die Schleife und prüfen, ob die aktuelle Stunde nicht mit der nächsten Stunde übereinstimmt. Bei jeder Iteration aktualisieren wir die automatische Variable mit der aktuellen Uhrzeit und dem aktuellen Datum. Sobald die nächste Stunde mit der aktuellen Uhrzeit und dem aktuellen Datum übereinstimmt, zeigen wir den letzten Teil der Zeichenfolge an und beenden. Dies erhöht die Byteanzahl auf 114.Beachten Sie auch, dass Sie dies nicht online ausprobieren können. Octave-Interpreter online haben ein Zeitlimit
while
für die Ausführung von Code. Da dies eine Schleife ist, die auf die nächste Stunde wartet, wird eine Zeitüberschreitung auftreten, während auf die Ausführung des Codes gewartet wird. Das Beste, was Sie tun können, ist, es auf Ihrem eigenen Computer auszuführen und zu überprüfen, ob es funktioniert.quelle
now
in der while - Schleife:a=@()disp('Legen... wait for it...');while floor(mod(now*86400,3600))end;disp('dary!')
. Sie können auch weitere 5 Byte einsparen, indem Sie dasa=@()
Bit entfernen, da der Code wie er ist ein vollständiges Programm darstellt. Für den angehängten Code ist auch keine FTS-Toolbox erforderlich.hour
funktioniert? :-)Mathematica,
858481 Bytesquelle
C 163 Bytes
quelle
Mikroskript II, 45 Bytes
Zum Schluss noch eine Verwendung für die
D
Anleitung.Druckt die erste Zeichenfolge, wiederholt die UTC-Zeit in Millesekunden Modulo 3.600.000, bis dies 0 ergibt, und erzeugt dann die zweite Zeichenfolge, die implizit gedruckt wird. Die 3.600.000 wird im Code als 36x10 dargestellt 5 .
quelle
TI-BASIC,
7064 BytesVerfluche diese 2-Byte-Kleinbuchstaben!
getTime
Gibt eine Liste mit drei Elementen zurück{hours minutes seconds}
, sodass die Summe vom 1. Element bis zum 1. Element die Stunden sind. Wenn zwischen den Anfangsstunden und den aktuellen Stunden ein Unterschied besteht, endet die Schleife. Vielen Dank an @FryAmTheEggman für diese Beobachtung.quelle
R - 97 Bytes
quelle
Python 3 -
9289 Bytesquelle
Python 2,
8281 BytesEin zu niedriger Ruf, um einen Kommentar abzugeben. Python 2-Version von Alexander Nigls Lösung. Speichert in Klammern verlorene Zeichen. Außerdem werden 3600 in der Schlafzeitberechnung nicht benötigt.
Insgesamt 7 Zeichen gespeichert.
Edit: -1 Byte dank @Kevin Cruijssen
quelle
;
am Ende des Programms gespeichert werden . Scheint gut zu funktionieren, ohne es. :) Schöne Antwort, also +1 von mir (jetzt können Sie kommentieren).Windows-Befehlsskript, 87 Byte
Dies vergleicht fortlaufend eine zu Beginn gespeicherte Stundenvariable mit der aktuellen Stunde und ist erfolgreich, wenn sie unterschiedlich ist.
quelle
Perl, 62 Bytes
Die spezielle Variable
$^T
(aka$BASETIME
) zeichnet die Anzahl der Sekunden seit dem Start des Skripts auf. Zum Glück werden Schaltsekunden nicht mitgezählt, so dass Folgendes gleichwertig ist:Überraschenderweise ist diese Variable nicht schreibgeschützt.
quelle
-E
scheint hier an der Tagesordnung zu sein, so dass Sie mit 5 Bytes sparen könnensay
.perl -E
Einsendungen und Sprachen, die nur Online-Dolmetscher haben.-E
standardmäßig erlaubt sein sollte. In den meisten Fällen ist die Verbesserung ohnehin trivial und uninteressant.Japt ,
7261 BytesJedes
?
stellt ein nicht druckbares Unicode-Zeichen dar. So erhalten Sie den vollständigen Text:Alternativ ist hier ein (hoffentlich umkehrbarer) Hexdump:
Dieser Code basiert auf der JavaScript-Antwort von George Reith mit einigen Japt-spezifischen Änderungen. Ich habe neulich herausgefunden, dass der Code automatisch dekomprimiert wird, wenn Sie ihn komprimieren und in einen Backtick-umbrochenen String einfügen. So wird es durch Kompilierung verarbeitet:
In JS wird durch ein Klammernpaar der letzte innere Wert zurückgegeben.
'Legen...'
Daher setzt dieser Code das zeitgesteuerte Ereignis und gibt dann die Zeichenfolge zurück, die automatisch an STDOUT gesendet wird. Da Japt derzeit keine andere Möglichkeit zum Hinzufügen von Inhalten zu STDOUT bietet als die automatische Ausgabe beim Kompilieren, habe ich stattdessen die Vanilla-JS-Funktionalert
für die zeitgesteuerte Ausgabe verwendet. Ich hoffe das ist erlaubt.quelle
Powershell,
5251 Bytes-1 Byte danke @Veskah
Dieser Ausdruck
Date|% M*e
erhält den Wert derMinute
Eigenschaft aus dem Current DateTime-Wert. Die Schleife endet beiMinute
0.quelle
Python, 112 Bytes
Ziemlich selbsterklärend.
quelle
Python - 159 Bytes
quelle
Mouse-2002 , 62 Bytes
Der Benutzer muss die Eingabetaste drücken. Ich denke.
Okay, gut, während wir viele Bytes nehmen und nichts gewinnen, lass uns ein bisschen Spaß haben.
Stichprobe:
Sehen Sie, es ist ein Countdown-Timer für die nächste Stunde! Es nutzt die while-Schleife, die auch dann noch gar nichts ausmacht, wenn sie einen Kern belegt.
quelle
BASIC, 90 Bytes
Unkompliziert, mit den Typpräfixen und der impliziten
End
Anweisung golfen . Kosten ist, dass es nur in FreeBasic Dialekt funktioniertfblite
.quelle
Befunge 98 -
6963 BytesDer Code enthält ein nicht druckbares Zeichen (dargestellt
<ETB>
als nicht druckbare Zeichen scheinen nicht in Codeblöcken zu erscheinen). Sein Zeichencode ist 23 (ein Ende-Übertragungsblock-Zeichen ).Warnung: Der vorhergehende Code wird in einer Busy-Schleife ausgeführt, wobei der Stapel bei jeder Wiederholung größer wird und daher möglicherweise viel Speicher belegt.
quelle
Jelly ,
4847 Bytes , nicht konkurrierend-1 Byte dank Erik the Golfer (benutze "Leg" als Wort in der Komprimierung)
TryItOnline! oder führen Sie eine Testversion mit einer hartcodierten zeitformatierten Zeichenfolge von
“59:57”
("mm: ss") aus.Jellys erstes Commit wurde von Dennis wenige Tage nach der Erstellung dieser Herausforderung ausgeführt. Ich bin mir nicht sicher, an welchem Datum dieser Code zum ersten Mal funktioniert hätte, aber er ist auf jeden Fall nicht konkurrierend.
Zum Zeitpunkt des Schreibens gibt es nur eine Möglichkeit, über eine formatierte Zeichenfolge auf die Zeit zuzugreifen
ŒT
.Dieser Code berechnet, wie lange gewartet werden muss und wie lange dann der Schlaf dauert. Wenn bei genannt
hh:00:00
es wartet3600
Sekunden: wandelt es"00:00"
um[0,0]
dann , daß aus subtrahiert ,59
um die Ausbeute[59,59]
, wandelt diese von der Basis sechzig zu geben3599
, dann fügt man für eine Gesamtwartezeit von3600
Sekunden.Vielleicht könnte eine Schleife gemacht werden; oder eine komprimierte Zeichenfolge mit dem ganzen Wort "Legendary" könnte irgendwie verwendet werden?
quelle
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»
anstelle von“¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷»
.Leg
(vonLegen
) ist auch ein Wort :) Auch diese Antwort ist ungültig, weil es von den Minuten und den Sekunden abhängt, die beide sind00
. Sie sollten4ŒT
stattdessen etwas unternehmen , da es eine Regel gibt, die besagt:In the event that the program is started in the first second of a full hour, it should it wait for the next full hour.
00:00
da er nicht auf diese Bedingung überprüft. Er berechnet die Anzahl der Sekunden bis zum nächsten"00:00"
und wartet dann. Also würde es konvertieren"00:00"
, um zu[0,0]
subtrahieren, um59
zu ergeben,[59,59]
konvertieren, dass von der Basis sechzig zu erhalten3599
und fügen Sie dann eine zu erhalten3600
(testen Sie es mit der Testversion mit"00:00"
anstelle von"59:57"
)60*(59-m)+(59-s)
dies60*(59-m)+(59-s)+1
stattdessen das zweite Mal sein muss , wenn es erscheint?sleep x seconds then return y
ertragen<dyad>@
können , kann ich ihn bearbeiten. Außerdem würde ich empfehlen, x / y als left / right zu verwenden und einfach zu sagen - weil dies als eine andere Dyade mit vertauschten Argumenten definiert werden kann.MathGolf , 39 Bytes
Probieren Sie es online!
Beinahe Pyth schlagen ...
Erläuterung
quelle
Pyth - 36 Bytes
Wartet mit einer while-Schleife, bis die Minuten 0 sind.
quelle
:00:00
Java, 136 Bytes
Wie viele Millisekunden seit der letzten vollen Stunde vergangen sind, ist das Ergebnis von
System.currentTimeMillis()
Mod 3.600.000.Das entsprechende monolithische Programm ist 159 Byte lang:
quelle
QBIC , 58 Bytes
Erläuterung
quelle