Herausforderung
Sie müssen die aktuelle Zeit fortlaufend (bis sie durch einen Interrupt abgebrochen wird) einmal pro Sekunde auf eine der folgenden Arten ausgeben:
- Es muss im 24-Stunden- oder AM / PM-Format vorliegen.
- Wenn es das erstere ist, muss es mit Doppelpunkten voneinander getrennt werden (dh 15:47:36).
- Wenn es das letztere ist, muss es mit Doppelpunkten abgesetzt sein und die folgende AM / PM haben (dh 3:47:36 PM)
- Es kann aus dem Internet gezogen werden.
- Es kann die Systemzeit sein.
- Es muss jede natürlich zugängliche Ausgabeform ausgegeben werden, die von Ihnen ausgewählten Text unterstützt.
- Die Ausgabe enthält möglicherweise neben der Zeit zusätzliche Informationen, Sie müssen jedoch eine und nur eine Zeitausgabe pro Sekunde garantieren.
- Die kontinuierliche Ausgabe muss eine Sekunde voneinander entfernt sein - wenn Sie warten, bis sich die Sekunde zwischen den Ausgaben ändert, ist das in Ordnung. Wenn Sie zwischen den einzelnen Ausgaben eine Sekunde warten, ist dies trotz des möglichen Genauigkeitsverlusts durchaus akzeptabel.
Da es sich um einen Katalog handelt, dürfen Sprachen, die nach dieser Herausforderung erstellt wurden, miteinander konkurrieren. Beachten Sie, dass ein Dolmetscher vorhanden sein muss, damit die Einreichung getestet werden kann. Es ist erlaubt (und sogar empfohlen), diesen Dolmetscher für eine zuvor nicht implementierte Sprache selbst zu schreiben. Ansonsten müssen alle Standardregeln des Code-Golfs eingehalten werden. Einsendungen in den meisten Sprachen werden in Bytes in einer geeigneten, bereits vorhandenen Codierung (normalerweise UTF-8) bewertet.
Katalog
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sleep 1
Antworten unterbrechen Regel 5: Sie müssen eine und nur eine Ausgabe der Zeit pro Sekunde garantieren. !!Antworten:
Minecraft 1.8.7, 7 + 8 = 15 Blytes (Bytes + Blöcke)
Nur ein Befehlsblock beteiligt:
Die Ausgabe erfolgt folgendermaßen an der Client-Konsole:
Im Rahmen der normalen Ausgabe.
Dies ist das System:
xp
Gibt einem bestimmten Spieler mit der Syntax eine bestimmte Menge an Erfahrungxp <amount> <player>
. Ich bin mir ziemlich sicher, dass dies der kleinste Befehl ist, der eine singuläre Ausgabe hat, die ich jetzt bekommen kann.quelle
JavaScript, 32 Bytes
Verwendet die Tatsache, dass setInterval Code auswertet. Dies wird nicht empfohlen, aber wann war das ein Problem beim Code-Golf?
Date()
Gibt die aktuelle Uhrzeit und das aktuelle Datum in einem Format wie diesem zurück (kann je nach System variieren).quelle
setInterval(alert,1e3,Date())
stattdessen funktionieren?Date()
wird nur einmal ausgewertet werden , wenn Sie das Intervall erstellensh (+ watch), 11 Bytes
Skript:
(kein abschließender Zeilenumbruch)
Ausgabe:
Die Anzahl der Leerzeichen hängt von der Klemmenbreite ab.
Getestet unter Debian8 und NetBSD7.
quelle
watch
ist ein Coreutil. Die eigentliche Sprache ist bash / sh.Bash (distribution)
, nichtwatch
? @Doorknob-p
Schalter verwenden, um die Regel nicht zu brechen. Sie müssen eine und nur eine Ausgabe der Zeit pro Sekunde garantieren. !!Einrasten ,
876 Blöcke(Ja, ich habe es in MS Paint geändert, weil ich zu faul war, um einen weiteren Screenshot zu erstellen. Na und? Zumindest ist es lesbar.)
Klicken Sie auf das Skript, um die
24-Stunden-Uhr auszuführen .
quelle
9:21:08
?Python 2, 47 Bytes
Kein Online-Link, da ideone das Zeitlimit überschreitet (huehuehue), bevor etwas gedruckt wird.
Vielen Dank an @xsot für den
while[sleep(1)]
Trick und denctime
Trick.Druckt das aktuelle Datum und die aktuelle Uhrzeit folgendermaßen aus:
Fri Nov 27 21:23:02 2015
quelle
sleep 1
Antwortunterbrechungsregel 5: Sie müssen eine und nur eine Ausgabe der Zeit pro Sekunde garantieren.sleep 1
bewirkt, dass der aktuelle Thread genau eine Sekunde lang in den Ruhezustand wechselt. Es entspricht den Regeln.sleep(1)
sowohl in seiner AppleScript-Lösung als auch in seiner Vitsy + bash-Lösung das Äquivalent von verwendet , ist dies eindeutig akzeptabel.Perl, Befehlszeile, 24 Bytes
Dies muss über die Befehlszeile ausgeführt werden, da
perl -E'sleep(say)while$_=gmtime'
(unter Windows stattdessen doppelte Anführungszeichen verwenden). Das Datum wird zusammen mit der Zeit ausgegeben, was zulässig zu sein scheint .Perl, 25 Bytes
Gibt in einem skalaren Kontext
gmtime
eine Zeichenfolge zurück, die der folgenden ähneltSat Nov 28 10:23:05 2015
. Das Ergebnis vonprint
, immer 1, wird als Parameter für verwendetsleep
.do$0
wird verwendet, um das Skript nach Ablauf des Timers erneut auszuführen.quelle
{sleep say~~gmtime;redo}
.sleep 1
Antwortpausenregel 5: Sie müssen eine und nur eine Ausgabe pro Sekunde garantieren .Javascript ES6, 43 39 Bytes
Funktioniert zumindest mit meinen aktuellen Zeiteinstellungen (die sich seit einiger Zeit nicht geändert haben, danke).
4 Bytes von Conor O'Brien gespeichert.
quelle
.toTimeString()
in Chrome und FF.new Date()
mitDate()
Arcyóu , 27 Bytes
Ich musste zwei neue Funktionen für diese Herausforderung zusammenfassen
zz
undst
.pn
: Genau wie bei Lispprogn
.zz
: Direkter Link zu Pythonstime.sleep
.st
: Direkter Link zu Pythonstime.strftime
.Normalerweise sind Anführungszeichen um die Formatzeichenfolge erforderlich. Da jedoch keine Leerzeichen vorhanden sind, wird sie als Symbol analysiert. Der Interpreter wertet undefinierte Symbole als sich selbst aus, sodass wir einen String erhalten.
quelle
Bash,
5131242120 BytesVielen Dank an @quartata für einige sehr hilfreiche Kommentare. Vielen Dank an @Dennis für die Klarstellung und für das Abschneiden von noch mehr Bytes. Vielen Dank an @VoteToClose für die Klarstellung der Regeln (die ich anscheinend schlecht lesen kann), die die Bytes weiter reduzieren.
date
zeigt das vollständige Datum im 24-Stunden-Format an.sleep 1
schläft für eine Sekunde.exec $0
Schleifen das Skript unendlich.quelle
true
durch dassleep 1
da ersetzen wassleep
ein zurückgibt1
.date +%T;sleep 1;exec $0
ist etwas kürzer. @quartata Nitpicking:sleep
hat den Exit-Code Null, weshalb eswhile
weitergeht.date
wird nicht benötigt, das sind also nur 20 Bytes.Befunge 98, 53 Bytes
Anmerkungen:
.
Befehl am Ende ein implizites Leerzeichen ausgibt.d
Wert in der ersten Zeile in einena
quelle
"EMIT"4(
zu Beginn des Programms sagt die Dolmetscherin die ladenTIME
Fingerabdruck, die es ermöglicht , dieH
,M
undS
Anweisungen. (Nein, es gibt nicht die Nummer 4 aus).mIRC 7.49
2016 Bytesquelle
say
Verbindung zu einem Server herstellen und dann einem Kanal beitreten müssen. Andernfalls würden Sieecho
anstelle von verwendensay
. mIRC hat eine eigene Skriptsprache mSL (mIRC scripting language)AutoHotkey, 50 Bytes
Anmerkungen:
quelle
x
.C (unter Linux x64):
179177175168159 ByteUngolfed:
Nur auf Linux x64 getestet und funktioniert wahrscheinlich nur unter Linux x64 (x32 funktioniert möglicherweise, andere Plattformen jedoch wahrscheinlich nicht).
Der Hauptunterschied zwischen diesem Programm und dem anderen veröffentlichten C-Programm besteht in der Verwendung von Linux-exklusiven Funktionsaufrufen, die, obwohl sie für echte Software furchtbar sind, einige Bytes einsparen ... wenn Sie alle Compiler-Warnungen ignorieren.
quelle
#include
und entfernen<...>
. Auch können Sie1e6
anstelle von verwenden1000000
?#include
s. Es sieht jedoch nicht so aus, als ob usleep () 1e6 akzeptiert - basierend darauf, wie schnell es Zeitstempel ausspuckt, interpretiert es dies einfach als 1.%T
als Formatspezifikation in verwendenstrftime
.Jolf ,
1487 BytesDurchgestrichen 14 ist eine gestrichene 1? Naw, es wird sich nie durchsetzen;)
Probieren Sie es hier aus! Klicken Sie auf Ausführen, klicken Sie nicht auf etwas anderes ^ _ ^ Die Seite ist hochexplosiv. Ja. Fixes Ausgabesystem mit Update.
(Ich habe einige Konstanten hinzugefügt, und
~1
zu~4
sind Mächte von10
.)Erläuterung
quelle
Dyalog APL ,
27 1816 BytesProbieren Sie es online!
⎕TS
YMD hmst prepend':',¨
: zu jeder⋄
neuen Anweisung⎕DL 1
eine Sekunde warten und die tatsächliche Wartezeit zurückgeben; 1,0 Sekunden entsprechen≢
der tatsächlichen Wartezeit und geben 1→
go to line (1 = diese Zeile)quelle
Perl 6 , 29 Bytes
Der richtige Weg, dies zu tun:
Die Golfversion
Da die Ausgabe nicht auf die Zeit beschränkt sein muss, kann ich sie etwas kürzer machen.
quelle
R, 38 Bytes
Dies gibt die aktuelle Uhrzeit in folgendem Format aus:
quelle
Powershell, 19 Bytes
quelle
for(){date;sleep 1}
PHP, 37 Bytes
Gibt die formatierte Serverzeit aus und legt fest, dass die Seite jede Sekunde aktualisiert wird.
Natürlich hängt es von Ihrer Internetverbindung ab und wie schnell Ihr Server reagiert :)
Demo
quelle
Warning: Cannot modify header information - headers already sent
<?=header('refresh:1').date('G:i:s');
sollte mit beiden Einstellungen für die Ausgabebereitstellung funktionieren.VBA, 69 Bytes
Es ist ganz einfach, die Zeit zu ermitteln. Es wird
now()
nur jede Sekunde ausgegeben. VIEL ausführlicher.Dies ist die "richtige" Art, 1 Sekunde in VBA zu warten. 78 Bytes
Oder wenn Sie einige Ecken abschneiden möchten und nur in 86% der Fälle richtig liegen, sind 63 Bytes ausreichend.
Wenn Sie eine SigFig hinzufügen, erreichen Sie eine Genauigkeit von 95% und eine dritte von 99,36%
Wenn Sie die obige Methode auf 100% bringen möchten, benötigen Sie 69 Bytes
(1/86400)
Alle diese Methoden würden auf einer Schaltsekunde stolpern, weil sie nicht für 1 Sekunde warten, sondern bis 1 Sekunde warten. Um Mitternacht, wenn die Uhren eine Stunde zurückfallen, stoppt diese Uhr für eine Stunde und hebt dann dort auf, wo sie aufgehört hat.
VBA erlaubt die Schlafmethode, aber Ihr Byte-Couter ist ruiniert. 97 Bytes
quelle
JavaScript,
473835 BytesErläuterung
Überprüft fortlaufend, ob sich die Uhrzeit geändert hat, und überprüft, ob sie sich geändert
alert
hat.quelle
+""
, wie ohnenew
,Date()
eine Zeichenfolge zurückgibt.new
. Danke, dass du das verstanden hast!AppleScript,
51-35BytesZiemlich offensichtlich. Druckt das aktuelle Datum, das die Uhrzeit enthält, verzögert eine Sekunde und fährt dann fort.
quelle
𝔼𝕊𝕄𝕚𝕟 13 Zeichen / 25 Byte
Try it here(Firefox only).
Dies ist überraschend lesbar.
quelle
Dyalog APL, 36 Bytes
Diesmal nicht sehr kurz.
Dies gibt eine 24-Stunden-Zeit aus, dh:
Erläuterung:
{
...}1
: definiere eine Funktion und rufe sie auf (das Argument wird ignoriert, aber wir brauchen die Funktion, um sie rekursiv aufzurufen)⎕TS
: Eine Systemfunktion, die das aktuelle Datum und die aktuelle Uhrzeit im Format Jahr - Monat - Tag - Stunde - Minute - Sekunde - Millisekunde zurückgibt . (⎕TS
= T ime s Stampf)3↑3↓
: Lasse die ersten 3 Gegenstände fallen (dh Jahr - Monat - Tag) und nimm dann die ersten 3 verbleibenden Gegenstände (Stunde - Minute - Sekunde).'⊂:⊃,ZI2'⎕FMT
: Formatieren Sie jede Zahl als zweistellige Ganzzahl (I2
) mit führenden Nullen (Z
) und vorangestelltem Doppelpunkt (⊂:⊃
). (Dies ergibt eine Matrix.)∊
: Liefert alle Elemente in der Matrix in Zeilenreihenfolge. (Dies ergibt einen Vektor, in diesem Fall eine Zeichenkette.)1↓
: lösche das erste Zeichen (das ist ein Extra:
)⎕←
: gib es aus⎕DL 1
: dann warte eine Sekunde (⎕DL
= d e l ay)∇
: rufe die Funktion rekursiv aufquelle
{⎕←1↓∊':',¨⍕¨3↑3↓⎕TS⋄∇⎕DL 1}1
für 28 Bytes reicht es laut OP .QBasic, 18 Bytes
quelle
Haskell,
989685 BytesAlternative Version unter Verwendung der do-Notation:
Ruft die aktuelle Zeit mit
getCurrentTime
aus derData.Time
Bibliothek ab, leitet sie dann weiterprint
, wartet 1.000.000 Mikrosekunden (1 Sekunde) und ruft sich selbst auf.Danke an Nimi und Mauris!
quelle
m@main=...>>m
ist immer kürzer alsmain=...>>main
threadDelay
es ohnehin GHC-spezifisch ist, können Sie es auch ausGHC.Conc
Batch - 34
40BytesIch liebe eingebaute Variablen:
Es muss auf jeden Fall
sleep
bald einen Befehl in Batch geben.quelle
ping ...
mit ersetzentimeout 1
. Auch die Uhr ist bei der Benutzung nicht sehr genauping
. Es ist besser mittimeout
;):A
und Ersetzengoto A
mit%0
Python 3, 99 Bytes
Entschuldigung, wenn es den Code seltsam formatiert, dies von einem iPad. (frag nicht). Ich weiß, dass dieser Code in Anbetracht einiger anderer Antworten groß ist, aber ich habe noch keinen Python gesehen, deshalb wollte ich ihn hinzufügen.
quelle
True
mit1
, und wenn Sie das setzenprint
undsleep
Linien auf der gleichen Linie wie diewhile
(getrennt durch ein Semikolon) es erspart Ihnen die Leerzeichen.Java,
300166137125124 BytesFastmehr als die Hälfte dank VoteToClose, Paülo Ebermann und janschweizer!Ungolfed:
quelle
java.util.*
Anstelle der beidenjava.util
Importe,java.text.*
aus den gleichen Gründen. Verwenden Siefor(;;)
für Endlosschleifen. VerwendungString[]a
in der Hauptdeklaration. Verwenden Sieinterface A{static void main(...
, da dies es noch mehr verkürzen wird. Sie können mitException
überInterruptedException
, und Sie können ersetzenex
mite
. Sie können auch den gesamten Text im Verschluss entfernen, da dies sowieso nichts bewirkt.DateFormat
und dieCalendar
Variablendeklaration gemeinsam entfernen. Sie ersetzen den Inhalt der for-Schleife durchSystem.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));try{Thread.sleep(1000);}catch(Exception e){}
.import java.util.*;import java.text.*;interface A{static void main(String[]a){for(;;){System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));try{Thread.sleep(1000);}catch(Exception e){}}}}
throws Exception
kürzer ist als eine try / catchPerl,
9981755140362927 Bytesquelle
gmtime
anstelle von verwendenlocaltime
.printf"%02d:%02d:%02d\n",(gmtime)[2,1,0]
gmtime."\n"
wird einen skalaren Kontext erzwingen.."\n"
Golf spielen müssen: Verwenden Sie.$/
diese Option, um 2 Bytes zu sparen. Verwenden Sie mindestens eine wörtliche Newline, anstatt\n
1 Byte zu speichern.