Ihre Aufgabe ist es, ein Programm zu erstellen, das Big Ben (Twitter) imitiert .
Aufgabe
Immer wenn eine neue Stunde begonnen hat (entsprechend der Ortszeit oder UTC Ihres Computers), müssen Sie BONG
wiederholte hour
Zeiten ausgeben (mit einem Leerzeichen zwischen den Wörtern). Zum Beispiel, wenn es 3 Uhr ist, müssen Sie ausgeben BONG BONG BONG
. Das Zeitformat folgt dem 12-Stunden-Format, dh nach 12 Uhr haben wir 1 und nicht 13. Das Programm / die Funktion muss für immer laufen.
Beispiel:
Gib nichts in den Klammern aus
(start: 00:34 for example)
BONG (01:00)
BONG BONG (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG (01:00 again)
(...)
(it continues forever)
Regeln
- Jede Folge von
BONG
s muss durch eine neue Zeile getrennt werden - Führende / nachfolgende Zeilenumbrüche sind zulässig
- Führende / nachfolgende Leerzeichen sind jedoch nicht zulässig
- Die Einreichung muss für immer laufen
- Ihre Ausgabe wird möglicherweise ± 3 Sekunden nach Beginn der Stunde gedruckt
- Sie können nicht davon ausgehen, dass das Programm zu einer bestimmten Stunde ausgeführt wird
Das ist Code-Golf , also gewinnt das Programm mit dem kürzesten bytecount!
code-golf
string
kolmogorov-complexity
date
Kritixi Lithos
quelle
quelle
TIMESKEW="60 1"
Minuten fließen wie Sekunden.Antworten:
05AB1E , 43 Bytes
Probieren Sie es online! (lol das wird nicht funktionieren, es wird eine Zeitüberschreitung in 60 Sekunden. Laden Sie den 05AB1E- Interpreter dafür herunter )
Erläuterung:
Ich habe eine Weile zum Golfen gebraucht! Ich könnte ein bisschen mehr Golf spielen, aber es schlägt
*><>
, also ist das cool :)Schnellversion:
Wartet beim Start eine Sekunde und zwischen den BONGs eine Sekunde
quelle
Bash,
71,7069 BytesEDITS:
Golf gespielt
Erklärt
Testversion
Arbeitet mit Minuten statt Stunden
quelle
yes BONG|sed 12q
*> <> ,
484744 ByteProbieren Sie es hier aus! ( oder diese Version, die es jede Minute zum Testen macht )
Dies gibt eine Anzahl von
BONG
s aus, die basierend auf der aktuellen Stunde durch Leerzeichen getrennt sind (und 13 ist 1 usw.). Nach dem Finale gibt es kein LeerzeichenBONG
und es gibt eine abschließende Zeile.Technisch läuft das nicht ewig (aber im Grunde tut es das). Es verliert ~ 28 Bytes pro Tag (ohne Berücksichtigung des Interpreter-Overheads ...). Es würde ~ 105062 Jahre dauern, bis 1 GB durchgesickert sind.
Ungefähr für den Interpreter-Overhead ist der Stack nur ein
float64
kleiner Teil des Golang-Interpreters. Also habe ich mir einfach28*8
224 Bytes pro Tag ausgedacht. Ich habe diese Zahl durch die Anzahl der Bytes in einem Gibibyte (1073741824) geteilt und dann durch 365, um zu schätzen, dass es 13132,85 Jahre dauern würde, bis 1 GiB verloren geht.Anmerkung zu den Dolmetschern
Der Online-Dolmetscher ist in Javascript. Die Seite muss geöffnet und sichtbar sein, damit die aktuelle Uhrzeit überprüft und die BONGs ausgegeben werden können. Der Golang-Interpreter unterliegt keiner solchen Einschränkung.
Erläuterung
quelle
JavaScript (ES6),
9993 BytesHierbei wird die UTC-Zeit verwendet (die mit der tatsächlichen Zeit übereinstimmt). Aufgrund der nicht testbaren Natur des Codes können Sie Folgendes versuchen, was dasselbe bewirkt, jedoch alle 60 Sekunden:
Hier ist eine 99-Byte-Bonusversion, die die Ortszeit verwendet:
quelle
alert
jede Minute für mich (aber die Anzahl derBONG
s ist korrekt), aber das Programm soll nur stündlich ausgegeben werdenJavaScript (ES6),
125123117115 ByteVielen Dank an @ Flp.Tkc für das Speichern von 5 Bytes!
Vielen Dank an @BenAston für das Speichern von 2 weiteren Bytes!
Snack Snippet
quelle
Batch, 142 Bytes
Da die Datei als Endlosschleife ausgeführt wird, beginne ich mit einer Verzögerung von 1s, da ich nach den Bongs sowieso eine benötige, und dies spart CPU-Zyklen. Das
>nul
wird vorsichtig positioniert, um ein Byte zu speichern (1>nul
würde dazu führen, dass die 1 von der Umleitung gefressen wird). Wir schleifen dann, bis sowohl Minuten als auch Sekunden Null sind. Die Bongs werden konstruiert, indem das negative Stundenmodul 12 genommen und die letztenh
Zeichen aus einer 12-stelligen Zeichenfolge abgefragt werden. Wennh
Null ist, erhalten wir die gesamte Saite, also 12 Bongs. Es genügt dann, die Zeichen durch das Wort zu ersetzenBONG
. Wenn es ausgeführt wird, sieht es ungefähr so aus (beachten Sie, dass sich das Bild nicht in einer Schleife befindet, Sie müssen also einen Neustart erzwingen, um die Animation erneut anzuzeigen):quelle
Bash + Linux crontab, 90
Ich hatte gehofft, dass dies kürzer sein würde als die anderen Shell-Antworten. Trotzdem halte ich es für einen interessanten Ansatz:
Das Skript wird einmal ausgeführt, füllt die Crontab und wird dann beendet. Die Ausgabe der Cronjobs wird jedoch an das Terminal gesendet, von dem aus das Skript ausgeführt wurde. Ich denke das genügt um die Einreichung für immer laufen zu lassen.
Warnung - Hierdurch werden alle vorhandenen crontab-Einträge gelöscht. Stellen Sie daher sicher, dass Sie bereits vorhandene gesichert haben.
Dies funktioniert unter Ubuntu 16.04, das standardmäßig Vixie verwendet
cron
.quelle
BONG
als nötig.cron
Sie?/proc/<PID>/fd/<N>
.Ruby,
11299 BytesAlte Version
Vielen Dank an QPaysTaxes für die Tipps
quelle
sleep(60)
dass das passiertCheddar v1.0.5, 162 Bytes
Cheddar hat keinen eingebauten Time Reader / Cmd Output Reader, also musste ich improvisieren!
Golf gespielt:
Ungolfed:
Erläuterung:
Aufgrund der begrenzten Standardbibliothek von Cheddar musste ich cmd verwenden, um die Zeit zu generieren. Ich habe dazu die Ausgabe von "time / t", die die Uhrzeit im 12-Stunden-Format ausgibt, in einer Datei mit dem Namen "c" gespeichert. IO.read gibt einen Puffer zurück, den ich in einen String umgewandelt und durch ":" geteilt habe, wodurch sichergestellt wurde, dass die Stunde immer im Index Null ist. Ich habe diese ganze Operation in einem Lambda-Ausdruck gespeichert, der mir 44 Bytes ersparte. Danach folgt die Logik: "Wenn die gespeicherte Stunde nicht der aktuellen Stunde entspricht, stellen Sie die vorherige Stunde auf die aktuelle Stunde ein und drucken Sie den BONG n-mal. Schneiden Sie das Leerzeichen nach."
Cheddar ist vielleicht nicht die am wenigsten gesprochene Sprache, aber es kann Spaß machen, solche Problemumgehungen zu finden!
Leider ist dies eine reine Windows-Lösung.
Edit 1: Zwei Bytes wurden gespeichert, indem "0 <1" in der for-Bedingung durch "1" ersetzt wurde. Ich habe nicht erwartet, dass 1 in dieser Sprache als wahr bewertet wird!
quelle
Ruby,
8281 BytesJede Sekunde prüfen wir, ob es die letzte Sekunde der Stunde ist und BONG entsprechend. Könnte wahrscheinlich mit ein paar schmutzigen Tricks weitergolfen werden, aber ich kenne nicht allzu viele. Es funktioniert auch anders als die andere Ruby-Antwort.
Ein Byte gespart dank QPaysTaxes.
quelle
if
?puts
ich diesen vergessen hatte.Python 2 ,
105106 BytesBearbeiten
Ein Byte durch Ändern von <to! = Nach Rückmeldung von @ pinkfloydx33 hinzugefügt. Gute Stelle.
Es wurde so oft wie möglich lokal getestet, funktioniert jedoch nicht mit TIO, da es (offensichtlich) das Ausführungslimit von 60 Sekunden überschreitet. Bitte zögern Sie nicht, vor Ort zu testen :-)
Übrigens hat der Verlust dieses lästigen Speicherplatzes mich 7 Bytes gekostet, sonst wäre dies unter 100 gewesen.
Bei Abwesenheit von TIO wird hier nach einer Stunde Wartezeit ausgegeben. Prog wurde um 15:27 Uhr mit zusätzlichem Debug-Code gestartet, um die Druckzeit anzuzeigen (12-Stunden-Format).
Ziemlich einfach, aber hier ist eine Erklärung für alle, die interessiert sind.
quelle
11>0
so,h>c
oder vermisse ich etwas?Python 3 -
1009792 BytesErläuterung:
quelle
from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])
ist 93 Bytesfrom time import*
, wie dieseC 238 Bytes
Ich bin nicht sicher, ob dies korrekt funktioniert, und ich bin mobil und mein Telefon verfügt nicht über einen C-Compiler. (Funktioniert nur auf UNIX-ähnlichen Systemen)
quelle
f
stattmain
? Wie soll das gehen?sh, 66 Bytes
Erklärt
quelle
%I
mit%M
und es funktioniert für Minuten.C 198 Bytes
quelle
Javascript ES6 87 Bytes
Edit: Schamlos @ETHProductions '
new Date/36e5%12|0||12
Code entlehnt , um 6 Bytes zu sparenquelle
R,
104105 BytesJede Sekunde wird (sollte) geprüft, ob wir am Ende einer Stunde sind, und dann diese Menge an
BONG
s ausgegeben.quelle
12:00:01
?Sys.sleep(60)
das möglich istwhile(1)
durchrepeat
.BONG
1 Sekunde lang anstatt nur einmal gedruckt würde . Dadurch wird sichergestellt, dass nur einmal pro Sekunde überprüft wird.JavaScript ES2015,
1009998969488 BytesErläuterung:
h
ist eine Funktion, die die auf 12 Stunden basierende Stunde des Tages mit dem Restoperator (%12
) abruft .36e5
ist die Anzahl der Millisekunden in einer Stunde, in der Zeichen mithilfe der Exponentialsyntax gespeichert werden. Dernew
Operator verlangt daher nicht, dass bei Funktionen Klammern verwendet werden, wenn keine Argumente vorhanden sindnew Date
. JavaScript hat nur Gleitkomma-Arithmetik. Der|
bitweise OR-Operator erzwingt, dass die Zahl eine Ganzzahl ist, da bitweise JS-Operatoren mit der Ganzzahl-Teilmenge der durch IEEE 754-Gleitkomma dargestellten Zahlen arbeiten.Das Komma kennzeichnet Unterausdrücke.
p
wird auf die aktuelle Stunde initialisiert (p=h()
).for(;;)
wird verwendet, um wiederholt zu prüfen, ob irgendwelcheBONG
s alarmiert werden sollen. Die Überprüfung erfolgt so schnell wie es die Laufzeit zulässt.Wenn sich die Stunde geändert hat (
h()!=p
), aktualisieren wir p und alarmieren dann dasBONG
s. Der logische AND-Operator wird als Guard verwendet (er schließt if kurzh()===p
), um zu bestimmen, ob dieBONG
s ausgegeben werden.String.prototype.repeat
ist neu in ES2015 und speichert einige Zeichen mit etwas wie ES5Array.prototype.join
.h
gibt für exakte Vielfache von 12 (dh 12 Uhr, 12 Uhr morgens) Null zurück, daher ändern wir es mit dem logischen ODER in 12p||12
.Mit Dank an Kritixi Lithos und ETHProductions für die Ideen.
quelle
Excel VBA, 143 Bytes
Code-Ausgaben in das VBE-Direktfenster
Spaßversion, 143 Bytes (nicht konkurrierend)
Während es ziemlich schwierig wäre, Excel für BONG zu bekommen, ist es ziemlich einfach, Excel für BONG zu bekommen
Beep
. DerBeep
Anruf erzeugt einen Piepton und der folgende Code verwendet diesen, um Pieptöne zu erzeugen, die die Stunde in der Stunde angeben, getrennt durch Pausen von 1 Sekunde.Wie oben, lässt dieser Code Excel nicht mehr reagieren, und es
:DoEvents
wird empfohlen , einen Aufruf am Ende der ersten Zeile einzufügen, da dies die Benutzerfreundlichkeit verbessert. Dies ist jedoch für die korrekte Codeausführung nicht erforderlich.Ungolfed Version
quelle
Beep
oderDoEvents
Anrufe auf Mac-Computern nicht richtig funktionieren.C # 234 Bytes
Ich plane hier keine Preise zu gewinnen, aber eine C # -Implementierung ist obligatorisch.
Ungolfed mit Kommentaren:
quelle
for(;;)
, ändern Sieh=()=>1+(DateTime.Now.Hour-1)%12;
(notieren Sie auch kein Leerzeichen) und dann Enumerable.Repeat wird("BONG",t)
(spart entweder zwei oder drei) und entfernt dann zusätzliches Leerzeichen.if(...)
Beachten Sie auch, dass hierdurch alle verketteten Bongs gedruckt werden mit einem Leerzeichen als erstes Argument.Groovy, 72 Bytes
Wie?
Speichern Sie eine Methode, um die aktuellen Stunden abzurufen.
Speichern Sie die ersten Stunden.
Wenn die aktuelle Stunde nicht der vorherigen Stunde entspricht, wird die aktuelle Stunde mit "BONG" multipliziert, um die aktuelle Stunde der Bongs auszugeben.
+3 Bytes
%12
für nichtmilitärische Bongs.quelle
Perl, 60 Bytes
Aktualisieren
Ersetzt
" "
durch$"
, entferntCORE::
, korrigierte Anzahl.Golf
Dies muss mit ausgeführt werden
perl -E
.Bemerkungen
x while y
ist äquivalent zuwhile(y){x}
(wobeix
es sich um eine einzelne Anweisung handelt), benötigt jedoch keine eckigen Klammern.sleep
wird das erste Mal ausgeführt, bevor etwas gedruckt wird.time
verwendet UTC. Der ursprüngliche Big Ben ist von Ende März bis Ende Oktober in der Sommerzeit (British Summer Time, BST).sleep
Gibt die Anzahl der Sekunden zurück, die gewartet wurde. Das wird immer wahr sein.quelle
-E
Flag +1 Byte ist (irgendwo gibt es eine Seite über das Messen von Flags ...). 2 , ich bin nicht sicher, wie ich das ausführen soll, da es soperl -E golf.pl
aussieht, als würde es sofort beendet.QBIC , 82 Bytes
Wirklich müssen Sie das Token für Code-Literale (
$
) ändern und eine Teilzeichenfolge-Funktion implementieren (left$(x,y)
kann kürzer sein).Das Innenleben:
Update (NC): Der
$
Befehlssatz wird in QBICs nicht mehr verwendet, sodass er jetzt frei als Code für QBasic verwendet werden kann, ohne dass Code-Literale erforderlich sind. In diesem Fall werden 4 Bytes gespart, wodurch der QBIC auf 78 Bytes erhöht wird:quelle
SmileBASIC,
7467 BytesGibt große Mengen von "nachgestellten" Zeilenumbrüchen aus;)
Bearbeiten: 7 Bytes mit einem besseren 24-> 12-Stunden-Algorithmus gespeichert.
quelle
PHP, 63 Bytes
Ich könnte zwei weitere Bytes mit erweitertem ASCII speichern. Dafür bin ich aber momentan zu faul.
druckt die BONGs mit einem führenden Zeilenumbruch genau zur vollen Stunde. Laufen Sie mit
-nr
.quelle
-n
ist implizit (ignoriere php.und greife auf die Standardkonfigurationswerte zurück);-r
Weist PHP an, Code von einem Befehlszeilenparameter anstatt von einer Datei auszuführen.C 152
Lesbar:
quelle