Ich möchte, dass Sie mir eine Uhr bauen, die die Zeit in diesem Format anzeigt:
18 ----------
19 --------------------------------------------------
Dies zeigt '18: 10 'an. Die aktuelle Stunde und die nächste Stunde werden am Anfang der Zeile angezeigt, gefolgt von einem Leerzeichen und mehreren Strichen: In der ersten Zeile wird die Anzahl der Minuten angezeigt, die in dieser Stunde verstrichen sind, und in der zweiten Zeile wird angegeben, wie viele Minuten noch verstrichen sind in dieser Stunde gehen.
Zu klären
- Die Uhr sollte die Systemzeit anzeigen. Wenn es bequemer ist, die Zeit von einer anderen Quelle abzurufen, ist das auch in Ordnung. Es kann sein, dass es nicht als Eingabe geliefert wird.
- Bei
18:00
ist die oberste Zeile nur18
(Leerzeichen am Ende sind zulässig, aber nicht erforderlich). - Unter
18:59
dem Strich ist19 -
- Die Stunden <10 werden entweder mit einem
0
(01 -----
) oder rechtsbündig (1 -----
) aufgefüllt . Eine linksbündige einzelne Ziffer ist nicht zulässig, auch wenn die Bindestriche an der richtigen Stelle beginnen (1 -----
ungültig). - Die Uhr sollte die Stunden im 24-Stunden-Format anzeigen.
- Obwohl es das 24h-Format genannt wird, gibt es eigentlich kein
24
auf. In der 23. Stunde beginnt die zweite Zeile mit00
oder0
. - Die Anzeige muss mindestens einmal pro Minute aktualisiert werden, dies muss jedoch nicht genau in
00
Sekunden geschehen . Sie können häufiger / fortlaufend aktualisieren, wenn dies bequemer ist, aber das Ergebnis muss natürlich noch lesbar sein - kein einziger Fleck auf dem gesamten Bildschirm.
Eingang
Keiner.
Ausgabe
- Wie oben beschrieben. Das Auffüllen der Uhr mit Leerzeichen auf 60-ish-Positionen ist in beiden Zeilen zulässig, ein abschließender Zeilenumbruch ist ebenfalls zulässig.
- Der Bildschirm muss gelöscht werden, wenn die nächste Minute angezeigt wird: entweder mit einem Befehl zum Löschen des Bildschirms oder durch Hinzufügen von mindestens 30 Zeilenumbrüchen.
Zusätzliche Regeln
- Standardlücken sind verboten
- Code-Golf , die kürzeste Antwort in Bytes gewinnt.
Antworten:
MATL , 41 Bytes
Vielen Dank an @Kundor für die Feststellung eines Fehlers, der jetzt korrigiert wurde
Probieren Sie es bei MATL online! Beachten Sie jedoch, dass das Programm nach 30 Sekunden beendet wird, sodass es schwierig ist, Änderungen an der Ausgabe zu erfassen.
Wie es funktioniert
quelle
TI-Basic, 94 Bytes
Relativ einfach. Das ist eine Zeichenfolge mit einem Leerzeichen am Anfang. Die Stunden sind rechtsbündig. Dies funktioniert nur bei TI-84 + Rechnern, da der TI-83 keine interne Uhr besitzt.
Edit: Danke @kundor, dass du bemerkt hast, dass ich die letzte Schleife nicht geschlossen habe. Jetzt behoben (+2 Bytes).
Edit # 2: Die erste Stunde sollte Null sein, nicht vierundzwanzig. Korrigiert zu einem Preis von +14 Bytes.
quelle
Str1
,getTime
undsub(
sind jeweils zwei Bytes. Weitere Informationen findenStapel, 197 Bytes
Hinweis: Die 10. Zeile enthält ein Leerzeichen. Formatiert für mich
%time%
Stunden mit einem führenden Leerzeichen, Minuten mit einer führenden Null. Ich entschied, dass eine führende Null ein einfacheres Ausgabeformat ist, da ich dafür nur 100 Stunden addieren und die erste Ziffer entfernen muss. Minuten sind kniffliger, da sie Fehler bei der Oktalanalyse verursachen08
oder09
verursachen können. Deshalb gehe ich davon aus, dass1
effektiv 100 Minuten hinzugefügt werden, und korrigiere dies, indem ich die Schleife entsprechend versetze. Dies ist ein Byte kürzer als das Subtrahieren der 100.quelle
Python 3.6,
110114112 BytesHierbei wird die neue F-String-Formatierung verwendet, um ein Byte (
f'\n{h+1:2} '
vs'\n%2d '%(h+1)
) . Sie können ändern[sleep(9)]
zu1
8 Bytes zu speichern, aber dann Spams es einfach auf den Bildschirm.Änderung um ein Byte gespeichert
while 1:...;sleep 60
, umwhile[sleep(60)]:...
dank TuukkaX.Ich musste 5 weitere Bytes verwenden, um die nächste Stunde nach 23 als 0 statt 24 anzuzeigen, wie OP gerade kommentierte. :-(
Erholte ein Byte, indem nur 9 Sekunden statt 60 Sekunden geschlafen wurden.
Sparte zwei Bytes, indem du ein bisschen herumfummelst, um sie zu verkürzen
(h+1)%24
, entlehnt von Value Ink's Ruby-Antwort .quelle
sleep
zurückNone
, was falsch ist.sleep
ist auch imtime
Modul, deshalb ist das Importieren * besser.Ruby,
989591 BytesUpdates alle 5 Sekunden. Funktioniert nur in Unix-Terminals.
Windows-Eingabeaufforderungsversion,
95 bis92 Byte:quelle
`cls`
vssystem'cls'
h=t.hour
und dannh
anstelle der zweiten verwendent.hour
, was 3 Bytes spart.cls
. Vielen Dank für Ihren anderen Vorschlag!puts`clear`
ist der richtige Weg, wenn Sie Unix-Terminals verwenden. Es funktioniert einfach nicht mit der Windows-Eingabeaufforderungcls
.puts"\e[H\e[2J"
die Konsole löschen, was meiner Meinung nach vier Bytes rasiert. Es würde Ihre erste Zeile zum Lesen bringenloop{t=Time.now;puts"\e[H\e[2J%02d %s
Perl 6 , 113 Bytes
Probieren Sie es einmal mit einem Timeout von einer Sekunde.
Oder versuchen Sie eine geänderte Version , die das Ergebnis einer mehrstündigen ausgibt.
Erweitert:
quelle
[\+]
fügt und in so[\-]
scheint es , zu subtrahieren. Funktioniert das mit Multiplikation und so?[+] LIST
das, was reduziert wird, außer dass Sie die Zwischenwerte erhalten. Siehe die Dokumentation Seite für ProdukteQBasic,
120127121 BytesLass das nicht zu lange laufen, sonst fängt dein Laptop Feuer.Jetzt 99.several9s% CPU-effizienter.Ungolfed und Erklärung
Wir beginnen mit dem Löschen des Bildschirms und erhalten dann die aktuellen Stunden und Minuten von
TIMER
, die die Anzahl der Sekunden seit Mitternacht zurückgeben.Dies ist das erste Mal, dass ich es versucht habe. Daher war
PRINT USING
ich erfreut festzustellen, dass es nicht unter der üblichen QBasic-Eigenart leidet, dass positive Zahlen mit einem führenden Leerzeichen gedruckt werden.##
as als Formatbezeichner stellt sicher, dass einstellige Zahlen rechtsbündig ausgerichtet und nach Bedarf mit einem Leerzeichen aufgefüllt werden. Wir müssen leider eine Schleife für die Bindestriche verwenden, da QBasic keine String-Wiederholungsfunktion hat. (Wenn ich mich irre, lass es mich bitte wissen!)Alle
PRINT
Anweisungen enden mit;
, um den Zeilenumbruch zu unterdrücken. aber nach den Bindestrichen brauchen wir eine neue Zeile; also der einsame?
nach der innerenFOR
schleife.Das
SLEEP 1
ist jetzt nötig. Andernfalls wird der Bildschirm nach dem Drucken so schnell gelöscht, dass es nur zu einem flackernden Durcheinander kommt. (I verwendet ,LOCATE 1
anstattCLS
zunächst aus diesem Grunde, bis ich erkennen , dassCLS
mitSLEEP
sowieso kürzer ist.)RUN
Startet das Programm von oben neu - der kürzeste Weg, um eine Endlosschleife zu erhalten.quelle
Java 8,
313300299 BytesDadurch werden nur alle 30 Iterationen der while-Schleife aktualisiert. Die anderen 29 Iterationen drucken nur neue Zeilen.
Aktualisiert
Gespeichert
1314 Bytes aufgrund von Kevin Cruijssen Hilfe! Vielen Dank!quelle
void f(){...}
und die erforderlichen Importe müssen hinzugefügt werden (in Ihrem Fallimport java.time.*;
). Abgesehen davon kann Ihr Code an mehreren Stellen abgelegt werden, um ihn auf 311 Byte zu senken (auch mit der hinzugefügten Methode) -Deklaration und Import). (Da es für diesen Kommentar zu lang ist, habe ich es in den nächsten Kommentar gesetzt .. xD)import java.time.*;void f(){for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>99){c=0;String l="",u,d;for(i=0;i++<61;)l+="-";u=l.substring(0,m);d=l.substring(m);System.out.println((h<10?"0":"")+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}}
( 303 bytes ) Ich empfehle, Tipps zum Golfen in Java und Tipps zum Golfen in <allen Sprachen> zu lesen . Genieße deinen Aufenthalt.for(i=0;i++<60
anstelle von 61 und(h<10?
anstelle von 9 Vielen Dank für mich über Methodendeklaration zu informieren und einige Golf - Tipps!for(i=0;++i<61
statt geschriebenfor(i=0;i++<61
(in diesem zweiten Fall sollte es tatsächlich 60 sein, und obwohl es die gleiche Menge an Bytes ist, ist es wahrscheinlich offensichtlicher / lesbarer). Dash<9
in meinem Code ist jedoch korrekt. Sie hattenh+1<10
zuvor und ich änderte dies einfachh<9
durch Entfernen von 1 auf beiden Seiten. :)h<9
. Ich werde es bearbeiten, um 1 weiteres Byte zu speichern. Danke noch einmal!C,
176162161160156 BytesDies ist ein grober Missbrauch von Zeigern, der jedoch wie angegeben kompiliert und ausgeführt wird. Stellen Sie sicher, dass Sie ohne Optimierung kompilieren, da Sie sonst wahrscheinlich auf einen Segfault stoßen.
Ungolfed:
quelle
JavaScript (ES6), 162 Byte
Updates einmal pro Sekunde
quelle
console.clear()
inside theconsole.log
argument) and assigning in unused parentheses as much as possible. Version for 154B:setInterval(c=>c.log(H(h,c.clear(d=new Date))+` ${'-'.repeat(m)} ${H(h+1)} `+'-'.repeat(60-m)),1e3,console,m=d.getMinutes(h=d.getHours(H=$=>$<9?'0'+$:$)))
.m=>`0${h++} \.slice(-3)+'-'.repeat(m)
.Python 2,
131129127 bytessaved a byte thanks to @TuukkaX
quelle
while 1:
19 - \n 20 -----------------------------------------------------------
. The hours aren't updating...C
251267251 bytesUngolfed version
Gets the work done! Can definitely be shortened in some way. Assume
unistd.h
file is included.@Neil Thanks for the info.
@Seth Thanks, for saving 8 bytes.
quelle
time_t
andstruct tm
) in your byte count.printf("\n");
you can useputs("");
First time golfing...
Powershell, 116 bytes (was 122)
Edit: From @AdmBorkBork's advice, changed Get-Date to date, and Clear to cls, for a saving of 6 bytes.
quelle
cls
instead ofclear
and (so long as you're on Windows)date
instead ofget-date
. I'm also sure there's some easier way to output the formatting -- I'm playing with it and I'll let you know if I come up with anything.while($d=date){cls;"{0,2} {2}``n{1,2} {3}"-f($h=$d.Hour),(++$h%24),('-'*($m=$d.Minute)),('-'*(60-$m));Sleep 9}
. Use LF line break in your editor instead ``n`PHP,
104105 bytesshowcase for
printf
´s custom padding characters:"%'-Ns"
=left pad string with-
toN
characters.will print 99 newlines (every 6 seconds) instead of clearing the screen.
First newline must be a single character. So, on Windows, it must be replaced with
\n
.quelle
GameMaker Language, 134 bytes
In the settings, you must be ignoring non-fatal errors in order for this to work. Also, in GML,
#
is equivalent to\n
in most languages.quelle
Perl 6, 104 bytes
Needs to be run on a ANSI compatible terminal so that the control sequence for resetting the terminal works.
Pretty basic (because the more obfuscated approaches I tried turned out longer):
DateTime.now.&{" "}.say xx*
: Transform the current time into a string (see below) and say it, and repeat all of that an infinite number of times. The string is built like this:\ec
: ANSI control code<ESC>c
for resetting the terminal, which clears the screen.{.hour.fmt: '%2s'}
: hour, right-aligned to 2 columns: space
{'-'x.minute}
: dash repeated times the minute\n
: newline{(.hour+1).fmt: '%2s'}
: next hour, right-aligned to 2 columns: space
{'-'x 60-.minute}
: dash repeated times 60 minus the minutequelle
AWK, 190 bytes
Since
AWK
doesn't have a built-insleep
function, I simply have it continually check the clock to see if the minute has changed yet. The key thing is that it works... right? :)quelle
Python 3.5,
127120117bytesquelle
print('\n'*50)
instead ofos.system('cls')
so it works on both *nix and Windows? Would save a couple of bytes as you can lose theos
import and OP says that this is allowed.Python,
115113 bytessaved a couple of bytes thanks to @kundor and @Phlarx
quelle
:02
formats to just:2
.:02
format to right-pad one digit hours with zeroes.:2
left-pads with spaces, which the challenge says is OK.C# Interactive (138 Bytes)
quelle
d
instead ofdt
? and 2) usesleep(1e3)
or999
instead of1000
?PHP,
112120 bytesAs there's no way to clear the screen (that I can find) I had to go with a pile of newlines. Also the question being updated to "at least" once a minute saves a byte with
9
instead of60
.edit: @Titus noticed a bug in the padding of the second hour. Fixing it cost 8 bytes.
quelle
Notice: Use of undefined constant str_pad - assumed 'str_pad' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant H - assumed 'H' in C:\wamp64\www\my-site\a.php on line 2 - Notice: Use of undefined constant i - assumed 'i' in C:\wamp64\www\my-site\a.php on line 2
. Anything on Meta about that?-n
orerror_reporting(22519);
H
setting for date goes from 00-23, but I forgot about it for the second hour.Bash (3 and 4): 90 bytes
Due to the use of
$0
, this script must be put into a file, not pasted into an interactive bash shell.The first command sets
$d
to 60 hyphens; it relies on the fact that the first line of this script is 60 characters long. This is three characters shorter than the next best thing I could come up with:If you don't want this to run your box out of PIDs or memory eventually, you can add
eval
to the beginning of the last line, which would make this 95 bytes.quelle
let: h=09: value too great for base (error token is "09")
. Problem is that leading zeros are interpreted as octal constants, so 09 is invalid.BASH,
165141155 bytesquelle
sleep 9
to the condition of the while loop; remove the-
in front of M in the format string on line 4. You also don't need to use $ in front of variable names in arithmetic expressions, so$((60-$m))
can be$((60-m))
h=23; echo $((10#$h+1))
prints 24 for me.Gura, 138 bytes
Pretty short and straightforward :)
quelle
Gura.exe
and pasting in this code gives me a syntax errorsymbol k is not defined
.Ok, haven't done a code golf in a while, so here goes my sad attempt :)
Unix Korn Shell:
177171170 bytesquelle
Mathematica, 235 bytes
quelle
Processing,
204200198197 bytes5 bytes saved thanks to @L. Serné by using smarter ternaries
This outputs 30+ newlines for each update (which takes place when the frame gets updated)
Ungolfed
quelle
((i=hour())<10?" ":"")+i
into((i=hour())>9?i:" "+i)
would save 2B twice... Good luck with further golfing!((i=hour()+1)>24?i=0:i)>9
becomes(i=hour()+1)>9
, sincehour
outputs a number in the range 0-23, and even with 1 added to that, it'll never be greater than 24. Also, you should move the increment ofi
inside the condition in thefor
loop like you did in the very last loop. Should save 13B in total.i
inside the condition of the for-loop,i
will start as1
instead of0
and I need to add one more bytei++<=minute()
and the bytecount will still be the same. But nonetheless, thanks for helping me golf 1 more bytes :)C, 239 bytes
Inspired by Seth's and Abel's entries, this will output 0 instead of 24 for the next hour, as required, and will use 30 lines to clear the screen.
quelle
SmileBASIC, 55 bytes
Explanation:
Note: SmileBASIC only has 50 columns of text, so it won't look good...
quelle
C#
181176This code assumes that the
using System.Threading;
line is included.Full class:
quelle
Console.ReadKey
statement is redundant. The only way to exit is to either close the console window orCtrl+Break
...using System.Threading;
needs to be included in the byte count if you are using it. Same withUsing System;
.