Legen Sie… warten Sie darauf…

68

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:

  1. Drucken

    Legen... wait for it...
    

    sofort mit einem nachgestellten Zeilenumbruch.

  2. Warten Sie bis zur nächsten vollen Stunde (wenn der Cron-Job für die Vergabe des Badges ausgeführt wird).

  3. 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 .

Dennis
quelle
1
Ich verstehe nicht, wie sich die dritte zusätzliche Regel von der Grundregel "Warten bis zur nächsten vollen Stunde" unterscheidet
Fatalize
2
@Fatalize Das ist nur eine Klarstellung, dass Sie warten müssen, bis sich die Stunde ändert, und nicht, bis sowohl die Minuten als auch die Sekunden auf 00 stehen .
Dennis
25
Happy Legendary Badge, @Dennis!
Kritixi Lithos
36
@ ΚριτικσιΛίθος Danke! (Gott sei Dank für die Tab-Vervollständigung.)
Dennis
2
"On the hour" wäre eine üblichere (und meiner Meinung nach viel klarere) Beschreibung dessen, was Sie "die nächste volle Stunde" nennen (zumindest in amerikanischem Englisch).
jpmc26

Antworten:

12

Pyth, 42 41

J.d6." wâ«­hÖ`Ùá©h´^"WqJ.d6;"dary!

Unten ist ein Hexdump des Codes:

00000000  4a 2e 64 36 2e 22 20 77  0c 10 89 e2 ab 1b ad 68  |J.d6." w.......h|
00000010  0f 8c d6 60 d9 e1 a9 68  82 b4 5e 22 57 71 4a 2e  |...`...h..^"WqJ.|
00000020  64 36 3b 22 64 61 72 79  21                       |d6;"dary!|

1 Byte dank @isaacg gespeichert

Verwendet die .dFunktion, um auf die Ortszeit bezogene Werte abzurufen. .d6Gibt 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 .d7oder .d8für Minuten / Sekunden versuchen, aber der Online-Compiler druckt nur etwas, wenn das Programm beendet wird.

Herzlichen Glückwunsch, Dennis! :)

FryAmTheEggman
quelle
Die Zeichenfolge kann mit packet-str um 1 Byte komprimiert werden. Hexdump:0000000: 2e22 2077 0c10 89e2 ab1b ad68 0f8c d660 ." w.......h...` 0000010: d9e1 a968 82b4 5e22 0a ...h..^".
isaacg
@isaacg Hoppla, ich hatte das überprüft, aber ich muss das Zählen durcheinander gebracht haben. Ich dachte, dass es nur 1 Byte komprimiert, damit das Extra .es die gleiche Länge machen würde. Dumme Fehler nacheinander: P
FryAmTheEggman
Der Versuch, herauszufinden, was dies bewirken könnte (ohne Erfahrung mit Pyth), brachte mich zum Lachen. Ich verstehe dary, aber nein legen! Und Pyth behauptet, für diejenigen, die an konventionelles Programmieren
gewöhnt sind
@Cyoce Wenn Sie im Bearbeitungsverlauf nachschauen, finden Sie eine besser lesbare Version. Das ."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 :)
FryAmTheEggman
26

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.

setTimeout(a=alert,36e5-new Date%36e5,"dary!");a`Legen... wait for it...
`

George Reith
quelle
11
Würde 36e5anstelle von arbeiten 3.6e6?
ETHproductions
8
@ETHproductions Du Schöne!
George Reith
3
@ETHproductions Das ist eine schlechte wissenschaftliche Notation. Ich hatte keine Ahnung, dass es mit Javascript funktioniert. Heute etwas gelernt !!!
Ismael Miguel
2
@Optimizer Ich wusste nicht, setTimeoutwürde evalfür mich. Richtig ... Ich habe ursprünglich versucht, zu verwenden, console.logaber das funktioniert nicht einmal, wenn es aufgrund des Kontexts in einer Variablen gespeichert wird. Sie sind auch hübsch!
George Reith
1
Sie könnten setTimeoutrichtig verwenden und sogar ein Byte speichern:alert`Legen…`;setTimeout(alert,36e5-new Date%36e5,"dary!")
Bergi
9

CJam, 49 48 Bytes

et3="Legen... wait for it...
"o{_et3==}g;"dary!"

Verwendet die Ortszeit. Zu Testzwecken können Sie die beiden Instanzen von 3durch 4oder ersetzen 5, 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, etdas Ihnen eine Reihe von Möglichkeiten bietet

[year month day hour minute second ms weekday utc_offset]

Hier ist eine Aufschlüsselung des Codes:

et3=       e# Get the current hour.
"Legen..." e# Push the first string including the linefeed.
o          e# Print it.
{          e# While the top of stack is truthy (which is popped)...
  _        e#   Copy the original hour.
  et3=     e#   Get the current hour.
  =        e#   Check for equality.
}g
;          e# Discard the original hour.
"dary!"    e# Push the second string which is printed automatically.

Bonus

Dies funktioniert auch für die gleiche Byteanzahl:

et4<"Legen... wait for it...
"o{et1$#!}g;"dary!"

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.

Martin Ender
quelle
9

AppleScript, 157 149 Bytes

Huh. Überraschenderweise streiten.

setze d auf Nummer 1 in der Zeitfolge von (aktuelles Datum)
log "Legen ... warte ..."
Wiederholen, während d = Nummer 1 in der Zeitfolge von (aktuelles Datum)
Ende
log "dary!"

Da logim 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:

Zeitleiste von (aktuelles Datum)

Ausgabe:

17.02.03 Uhr

Es wird die erste Zahl ( 5) vor dem Doppelpunkt erfassen.

Eigentlich dachte ich, es würde viel länger dauern. xD

Addison Crump
quelle
Was passiert also, wenn Sie es um 03:03:00 Uhr ausführen?
Blacklight Shining
@BlacklightShining Es wird die Nummer 3 an der Front bekommen und warten, bis es vier ist. Es ist nur die Zahl vor dem Doppelpunkt bekannt.
Addison Crump
Oh, das habe ich verpasst. Okay. Seltsamerweise komme ich gerade "1"von number 1 in time string of(current date)...
Blacklight Shining
@BlacklightShining Sie verwenden wahrscheinlich eine ältere Version - in El Capitan entspricht dies first number in time string of (current date).
Addison Crump
Ich bin auf Yosemite, ja. first numbergibt mir auch nur die erste "0"ziffer der zeit ( im moment um 04:38).
Blacklight Shining
8

Schneemann - 1.0.2 , 70 69 Bytes

~"Legen... wait for it...
"sP3600000*vt#nDnC!*:vt+#nD!#nL;bD"dary!"sP

Erläuterung:

~              Make all variables active.
"..."sP        Print the first string.
3600000*vt#nD  Get the number of hours since the Unix epoch.
nC             Ceiling (round up), giving the time (divided by 36000) at which to
                 print the second string.
!*             Save that in a permavar.
:...;bD        Do the stuff in the block while its "return value" is truthy.
  vt+#nD       Again, get the number of hours since epoch.
  !#             Store the permavar that we saved earlier.
  nL             Is the current time less than the target time? (if so,
                   keep looping)
"..."sP        Print the second string.
Türknauf
quelle
7

PHP, 76, 70, 65, 62, 51 Bytes

Legen... wait for it...
<?while(+date(is));?>dary!

Vorherige Logik (63b):

Legen... wait for it...
<?for($h=date(G);date(G)==$h;)?>dary!

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 <?phpder Kurzversion <?(danke primo)
-1 Byte durch Ersetzen der whilefür ein for
-3 Byte durch Ersetzen date(G)!=$h+1von date(G)==$h(danke primo)

Martijn
quelle
Schön, aber {};und echo?>würden es etwas reduzieren. Obwohl ich es vorziehen würdeLegen... wait for it...↵<?php while(+date('is'));?>dary!
manatwork
1
Ein paar Tipps: Sie können kurze offene Tags verwenden (nur <?anstatt <?php). Die Verwendung for(;;)hat die gleiche Länge wie while(), ermöglicht jedoch das Verschieben der $hZuweisung, 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 $h12 ( date(h)wird jedoch niemals 13 sein).
Primo
Vielen Dank an beide, aktualisiert meine Antwort entsprechend. Ich fühle mich nicht gut, denke, ich sollte heute keine wichtige Arbeit machen, weil es deutlich zeigt, haha
Martijn
2
Wechseln Sie date(G)!=$h+1zu date(G)==$h. Kürzere und löst das Stundenproblem;) Entfernen Sie auch das Semikolon vor ?>.
Primo
1
@manatwork es wird nicht warten, wenn der Code ausgeführt wird HH:00:00, dh innerhalb der ersten Sekunde einer vollen Stunde.
Primo
7

Perl 6 , 60 Bytes

sleep 60²-now%60²+say 'Legen... wait for it..';say 'dary!'
Brad Gilbert b2gills
quelle
4
Ich möchte darauf hinweisen, dass 60²das erst vor ein paar Tagen hinzugefügt wurde
Brad Gilbert b2gills
Wow, so nah dran, für diese Herausforderung nicht in Frage zu kommen!
Katze
Herzlichen Glückwunsch zu 10k!
MD XF
5

Javascript 94 90 87 Bytes

Nicht so viel Golf gespielt ...

alert`Legen... wait for it...`,l=l=>~~(Date.now()/36e5);for(z=l();z==l(););alert`dary!`

Downgoat-Version:

(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`

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.

Stefnotch
quelle
2
87 Bytes:(a=alert)`Legen... wait for it...`,l=new Date,z=(b=l.getHours)();for(;z==b(););a`dary!`
Downgoat
@ Downgoat Danke! (Ich versuche gerade, Golf zu spielen ..)
Stefnotch
1
Noch kürzer (85 Bytes):(a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();for(;z==b(););a`dary!`
Downgoat
2
@ Downgoat Ein Byte kürzer:for((a=alert)`Legen... wait for it...`,z=(b=new Date().getHours)();z==b(););a`dary!`
Ismael Miguel
4

MATLAB - 89 Bytes

a=@()hour(now);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')

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 eine whileSchleife, 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 angezeigt dary!und danach erfolgt ein Wagenrücklauf.

Die Stunden von MATLAB basieren auf einer 24-Stunden-Indexierung, sodass der modBetrieb mit Basis 24 von 23:00 Uhr bis 24:00 Uhr ausgeführt werden muss.

Kleinere Anmerkung

Für diese hourFunktion ist die Toolbox Financial Time Series erforderlich. Die nowFunktion unterliegt nicht dieser Einschränkung, sondern ruft das aktuelle Datum und die aktuelle Uhrzeit als Seriennummer ab, anhand derer hourdie aktuelle Stunde berechnet wird.

Möchten Sie dies in Octave ausführen?

Sicher! Da Octave diese Toolbox nicht hat, müssen wir die hourFunktion nur so ändern , dass sie dateveceinen 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:

a=@()datevec(now)(4);disp('Legen... wait for it...');while(mod(a()+1,24)~=a())end;disp('dary!')

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:

disp('Legen... wait for it...');h=datevec(now);ans=h;while(mod(h(4)+1,24)~=ans(4)),datevec(now);end;disp('dary!');

Dieser ermittelt zunächst die aktuelle Uhrzeit und das aktuelle Datum und speichert es in der Variablen hsowie in der aufgerufenen automatischen Variablen ans. 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 whilefü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.

rayryeng
quelle
In Ihrem ersten konnte man 3 Bytes speichern , indem Sie stattdessen die Überprüfung nowin 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 das a=@()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.
Tom Carpenter
Woher in aller Welt wussten Sie, dass die Financial Toolbox hourfunktioniert? :-)
Luis Mendo
Jetzt verstehe ich, was Sie mit Ihrem Kommentar zur Verwendung von Zwischenvariablen für die Indizierung gemeint haben ...
Luis Mendo,
4

Mathematica, 85 84 81 Bytes

c=Print;c@"Legen... wait for it...";a:=DateValue@"Hour";b=a;While[a==b];c@"dary!"
LegionMammal978
quelle
Ich denke, Sie können 2 Bytes sparen, indem Sie "dary!" die Ausdrucksausgabe.
CalculatorFeline
@CatsAreFluffy Dann wäre es nur ein Ausschnitt und kein vollständiges Programm.
LegionMammal978
Damit? Ist die Ausdrucksausgabe in Mathematica nicht akzeptabel oder fehlt mir etwas?
CalculatorFeline
@CatsAreFluffy Mathematica-Skripte sind vorhanden, sodass erwartet wird, dass jedes vollständige Programm in einem ausgeführt wird.
LegionMammal978
4

C 163 Bytes

#include<time.h>
f(){puts("Legen... wait for it...");time_t t=time(0);struct tm l=*localtime(&t);while(l.tm_min+l.tm_sec)t=time(0),l=*localtime(&t);puts("dary!");}
Zaglo
quelle
3
Willkommen bei PPCG!
Erik der Outgolfer
155 Bytes (stören Sie nicht, es auf TIO laufen zu lassen, es wird nicht beendet, es läuft nach einer Minute ab)
MD XF
3

Mikroskript II, 45 Bytes

"Legen... wait for it..."P[36s5E*sD%_]"dary!"

Zum Schluss noch eine Verwendung für die DAnleitung.

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 .

SuperJedi224
quelle
Können Sie eine Erklärung hinzufügen? c:
Addison Crump
@VoteToClose Fertig
SuperJedi224
3

TI-BASIC, 70 64 Bytes

getTime
Disp "Legen... wait for it...
Repeat sum(getTime-Ans,1,1
End
"dary

Verfluche diese 2-Byte-Kleinbuchstaben!

getTimeGibt 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.

Lirtosiast
quelle
3

R - 97 Bytes

cat('Legen... wait for it...\n')
Sys.sleep(1)
while(as.double(Sys.time())%%3600>0){}
cat('dary!')
jbaums
quelle
3

Python 3 - 92 89 Bytes

from time import*;print("Legen... wait for it...");sleep(3600-time()%3600);print("dary!")
Alexander Nigl
quelle
3

Python 2, 82 81 Bytes

from time import*;print'Legen... wait for it...';sleep(-time()%3600);print'dary!'

Ein 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

Henry T
quelle
1
Ein zusätzliches Byte kann durch Entfernen des Trailings ;am Ende des Programms gespeichert werden . Scheint gut zu funktionieren, ohne es. :) Schöne Antwort, also +1 von mir (jetzt können Sie kommentieren).
Kevin Cruijssen
Dank lädt @ KevinCruijssen
Henry T
2

Windows-Befehlsskript, 87 Byte

@set.=%time:~,2%&echo.Legen... wait for it...
:.
@if %.%==%time:~,2% goto:.
@echo.dary!

Dies vergleicht fortlaufend eine zu Beginn gespeicherte Stundenvariable mit der aktuellen Stunde und ist erfolgreich, wenn sie unterschiedlich ist.

Robert Sørlie
quelle
2

Perl, 62 Bytes

sleep -++$^T%3600+print'Legen... wait for it...
';print'dary!'

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:

print$^T%3600;
@T=gmtime;print$T[1]*60+$T[0];

Überraschenderweise ist diese Variable nicht schreibgeschützt.

primo
quelle
Das Nichtzählen -Escheint hier an der Tagesordnung zu sein, so dass Sie mit 5 Bytes sparen können say.
Dennis
Aus der Herausforderungsbeschreibung: "Sie können ein Programm oder eine Funktion schreiben." Code, der über die Befehlszeile ausgeführt wird, ist keines von beiden.
Primo
Ich verstehe dein Argument. Die Beschränkung auf Programme oder Funktionen gilt jedoch standardmäßig für alle Herausforderungen. Wir erlauben jedoch weiterhin perl -EEinsendungen und Sprachen, die nur Online-Dolmetscher haben.
Dennis
Ich bin damit nicht einverstanden, dass -Estandardmäßig erlaubt sein sollte. In den meisten Fällen ist die Verbesserung ohnehin trivial und uninteressant.
Primo
2

Japt , 72 61 Bytes

`{?tT?e?t(Ã?t,36e5-?w D?e%36e5,'ÜÝ!'),'Leg?... Ø2 f? ?...\n'}

Jedes ?stellt ein nicht druckbares Unicode-Zeichen dar. So erhalten Sie den vollständigen Text:

  1. Öffnen Sie den Online-Dolmetscher .
  2. Fügen Sie diesen Code in das Feld Code ein:
Oc"`\{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\\n'}
  1. Führen Sie den Code aus und löschen Sie ihn im Feld Code.
  2. Wählen Sie den Inhalt des Ausgabefelds aus und ziehen Sie ihn in das Codefeld. Das Kopieren und Einfügen funktioniert nicht .
  3. Ersetzen Sie das erste Leerzeichen durch ein nicht unterbrechendes Leerzeichen.
  4. (Optional) Stellen Sie die Uhr Ihres Computers auf xx: 59 ein.
  5. Führen Sie den Code aus.

Alternativ ist hier ein (hoffentlich umkehrbarer) Hexdump:

00000000: 607b a074 548b 658c 7428 c300 742c 3336 65    `{ tT?e?t(Ã?t,36e
00000011: 352d 9a77 2044 8565 2533 3665 352c 27dc dd    5-?w D?e%36e5,'ÜÝ
00000022: 2127 293b 274c 6567 812e 2e2e 20d8 3220 66    !'),'Leg?... Ø2 f
00000033: 8e20 8a2e 2e2e 5c6e 277d                      ? ?...\n'}

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:

`{?tT?e?t(Ã?t,36e5-?w D?e%36e5,'ÜÝ!'),'Leg?... Ø2 f? ?...\n'}
"{setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\n'}"
""+(setTimeout(alert,36e5-new Date%36e5,'dary!'),'Legen... wait for it...\n')+""

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-Funktion alertfür die zeitgesteuerte Ausgabe verwendet. Ich hoffe das ist erlaubt.

ETHproductions
quelle
Kannst du einen Hexdump davon posten?
ein Spaghetto
@quartata Fertig. Ich glaube es ist richtig.
ETHproductions
2

Powershell, 52 51 Bytes

-1 Byte danke @Veskah

'Legen... wait for it...'
for(;Date|% M*e){}'dary!'

Dieser Ausdruck Date|% M*eerhält den Wert der MinuteEigenschaft aus dem Current DateTime-Wert. Die Schleife endet bei Minute0.

mazzy
quelle
1
Sie sollten in der Lage sein, den "Dary" direkt hinter die geschweiften Klammern zu setzen, oder zumindest in PSv5.
Veskah
1

Python, 112 Bytes

import time as t;print "Legen... wait for it...";n=t.ctime();t.sleep((60-n.tm_min)*60+60-n.tm_sec);print "dary!"

Ziemlich selbsterklärend.

wie auch immer
quelle
Kann 2 sparen, indem die Leerzeichen zwischen den print-Anweisungen und den folgenden Zeichenfolgen entfernt werden. :)
Henry T
1

Python - 159 Bytes

from datetime import*;from threading import*;p=print;n=datetime.now();p('Legen... wait for it...');Timer(3600-(n.minute*60+n.second),lambda:p('dary!')).start()
Elzell
quelle
1

Mouse-2002 , 62 Bytes

Der Benutzer muss die Eingabetaste drücken. Ich denke.

"Legen... wait for it..."?&HOUR 1+x:(&HOUR x.=["dary"33!'0^])

Okay, gut, während wir viele Bytes nehmen und nichts gewinnen, lass uns ein bisschen Spaß haben.

"Legen... wait for it... "?     ~ print & require keypress

&HOUR 1+ x:                     ~ get hr, add 1 and assign
(                               ~ while(1)
  &HOUR x. =                    ~ cmp current hr, stored hr
  [                             ~ if same
    #B;                           ~ backspace
    "dary"36!'                    ~ print this string and a !
    0^                            ~ exit cleanly
  ]                             ~ fi
  &MIN 59 - &ABS !              ~ get min, subtract from 59, abs & print
  ":"                           ~ record sep
  &SEC 59 - &ABS !              ~ same for second
  #B;                           ~ backspace
)
$B 8!' 8 !' 8 !' 8 !' 8 !'@     ~ backspace 5*
$                               ~ \bye

Stichprobe:

$ mouse legend.m02
Legen... wait for it... 20:32

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.

Katze
quelle
1

BASIC, 90 Bytes

Print"Legen... wait for it...":x$=Left(Time,2):Do:Loop Until x$<>Left(Time,2):Print"dary!"

Unkompliziert, mit den Typpräfixen und der impliziten EndAnweisung golfen . Kosten ist, dass es nur in FreeBasic Dialekt funktioniertfblite .

user48538
quelle
1

Befunge 98 - 69 63 Bytes

 v
v>a"...ti rof tiaw ...negeL<ETB>"k,
>"EMIT"4(MS+_"!yrad"5k,@

Der 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.

Pfeffer
quelle
1

Jelly , 48 47 Bytes , nicht konkurrierend

-1 Byte dank Erik the Golfer (benutze "Leg" als Wort in der Komprimierung)

“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»Ṅø3ŒTṣ”:V_@59ḅ60‘œS@“dary!”

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:00es wartet 3600Sekunden: wandelt es "00:00"um [0,0]dann , daß aus subtrahiert , 59um die Ausbeute [59,59], wandelt diese von der Basis sechzig zu geben 3599, dann fügt man für eine Gesamtwartezeit von 3600Sekunden.

Vielleicht könnte eine Schleife gemacht werden; oder eine komprimierte Zeichenfolge mit dem ganzen Wort "Legendary" könnte irgendwie verwendet werden?

“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»Ṅø3ŒTṣ”:V_@59ḅ60‘œS@“dary!” - Main link: no arguments
“ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»                            - compressed "Legen... wait for it..."
                    Ṅ                           - print z + '\n', return z
                     ø                          - niladic chain separation
                      3ŒT                       - '011' (3) time formatted string = "mm:ss"
                         ṣ”:                    - split on ':' -> ["mm","ss"]
                            V                   - eval -> [m,s]
                             _@59               - subtract from 59 - > [59-m, 59-s]
                                 ḅ60            - convert from base 60 -> 60*(59-m)+(59-s)
                                    ‘           - increment -> 60*(59-m)+(59-s) = y
                                        “dary!” - "dary!" = x
                                     œS@        - sleep y seconds then return x
                                                - implicit print
Jonathan Allan
quelle
1
Verwenden Sie “ÇỴġƒḃhlḂṀ⁷*Ḣ¡w*Jḷv»anstelle von “¤ßƇṪOƭ!½ȯƤxEẹ<Ȯ¹z7⁷». Leg(von Legen) ist auch ein Wort :) Auch diese Antwort ist ungültig, weil es von den Minuten und den Sekunden abhängt, die beide sind 00. Sie sollten 4ŒTstattdessen 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.
Erik the Outgolfer,
Cool, "Leg" speichert ein Byte, danke. Der Link funktioniert jedoch bei Aufruf von, 00:00da 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, um 59zu ergeben, [59,59]konvertieren, dass von der Basis sechzig zu erhalten 3599und fügen Sie dann eine zu erhalten 3600(testen Sie es mit der Testversion mit "00:00"anstelle von "59:57")
Jonathan Allan
1
Oh. Es scheint, dass ich keinen langen Jelly-Code lesen kann und nicht alle Verwendungszwecke und Erwartungen kenne :) Obwohl ich in der Erklärung denke, dass 60*(59-m)+(59-s)dies 60*(59-m)+(59-s)+1stattdessen das zweite Mal sein muss , wenn es erscheint?
Erik der Outgolfer 20.11.16
Kein Problem - der Kommentar ist nicht der klarste, den ich je geschrieben habe.
Jonathan Allan
Nun, wenn Sie den Ärger nicht sleep x seconds then return yertragen <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.
Erik die Outgolfer
1

MathGolf , 39 Bytes

"Legen... wait for it..."pÆt♪/╚÷▼"dary!

Probieren Sie es online!

Beinahe Pyth schlagen ...

Erläuterung

Æ     ▼  Repeat the next 5 characters while false
 t       push unix time in milliseconds
  ♪/     divide by 1000
    ╚÷   check if divisible by 3600 (tio solution has 3 in its place)
maxb
quelle
"Fast"? Es sieht so aus, als hättest du es getan.
Patrick Roberts
@PatrickRoberts es gibt eine andere Pyth-Lösung, die 36 Bytes lang ist und selbst mit komprimierten Zeichenfolgen und anderen Tricks nicht so recht dahin kommt.
Maxb
Oh das hier. Es ist falsch, sieh dir den Kommentar an.
Patrick Roberts
@PatrickRoberts Ich scheitere möglicherweise an dem Kriterium "Muss eine Stunde warten, wenn es um 00:00 läuft", aber ich könnte es ändern, um die Unix-Zeit in Millisekunden zu überprüfen, die durch 3600000 mit derselben Byteanzahl teilbar ist. Da der erste Druck mehr als a dauern sollte Millisekunde, es sollte immer funktionieren.
Maxb
0

Pyth - 36 Bytes

Wartet mit einer while-Schleife, bis die Minuten 0 sind.

"Legen... wait for it..."W.d7)"dary!
Maltysen
quelle
11
Sie müssen warten , bis die Minuten und Sekunden 0 sind, und auch eine volle Stunde warten , wenn das Programm zur gleichen Zeit laufen wird:00:00
lirtosiast
0

Java, 136 Bytes

class a{void A(){System.out.println("Legen... wait for it...");while(System.currentTimeMillis()%3600000!=0);System.out.print("dary!");}}

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:

interface a{static void main(String[]A){System.out.println("Legen... wait for it...");while(System.currentTimeMillis()%3600000!=0);System.out.print("dary!");}}
Dorukayhan
quelle
0

QBIC , 58 Bytes

?@Legen... wait for it...|#Dary!|{~mid$$|(_d,4,2)=@00||_XB

Erläuterung

?@Legen... wait for it...|     Define string literal "Leg[..]it..." and print it
#Dary!|                        Define string B as "Dary!", but don't use it yet
{                              Opens an indefinite DO loop
~mid$$|(...)=@00|              Translates to IF MID$(...) = C$, where C$ is "00"
    The MID$ takes two characters, starting from pos 4, from the system's time (_d)
    So, if the string "11:00" has "00" starting at pos 4,
_XB                            Terminate the program and print string B
(The DO loop and the IF are closed implicitly)
steenbergh
quelle