Programming Puzzles & Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'd like you to build me a clock that displays time in this format:

18 ----------
19 --------------------------------------------------

This displays '18:10'. The current hour and the next hour are shown at the front of the line, followed by a space and a number of dashes: on the first line the number of minutes that have passed in this hour, and the second line shows how many more minutes to go in this hour.

To clarify

  • The clock should display the system's time. If fetching the time from another source is more convenient, that's fine too. It may not be supplied as input.
  • At 18:00, the top line is just 18 (Trailing spaces allowed but not required)
  • At 18:59, the bottom line is 19 -
  • The hours < 10 are either pre-padded with a 0 (01 -----) or right-aligned (1 -----). A left-aligned single digit is not allowed, not even if the dashes start at the right place (1 ----- is invalid).
  • The clock should display the hours in a 24h-format.
  • The display needs to be updated at least once a minute, but that doesn't have to happen at exactly 00 seconds. You may update more frequently / continuously if that is more convenient, but the result must of course still be legible - not one smear all over the screen.

Input

None.

Output

  • As described above. Trailing spaces to pad the clock to 60-ish positions is allowed on both lines, a trailing newline is also allowed.
  • The screen needs to be cleared when displaying the next minute: either with a clear-screen command or by adding no less than 30 newlines.

Additional rules

share|improve this question
    
may we have two spaces between the number and the dashes? – Adám 22 hours ago
    
@Adám I think not, see the last example in "To clarify" bullet #4. But this may not address your question, which is more general. – Timtech 22 hours ago
5  
"updated once a minute" -- Can it be updated more often? – smls 22 hours ago
1  
@smls Yes, you may update as often as you like. I'll change the specs to 'at least once a minute'. – steenbergh 21 hours ago
1  
@KritixiLithos That would break alignment with two-digit hours (9, 10 or 23, 00), so no, not allowed. – steenbergh 20 hours ago

26 Answers 26

TI-Basic, 80 bytes

" 
Repeat 99<length(Ans
Ans+"-
End
Ans→Str1
Repeat 0
getTime
ClrDraw
Text(0,0,Ans(1),sub(Str1,1,1+Ans(2
Text(6,0,Ans(1)+1,sub(Str1,1,61-Ans(2
End

Relatively straightforward. That's a string with one space at the beginning. The hours are right-aligned. This only works on TI-84+ calculators since the TI-83 does not have an internal clock.

Edit: Thanks @kundor for noticing that I didn't close the last loop. Fixed now (+2 bytes).

share|improve this answer
    
Every command count as one byte ? – Sygmei 22 hours ago
    
@Sygmei Most tokens are one byte, yes. However, tokens such as Str1, getTime, and sub( are two bytes each. You can learn more at tibasicdev.wikidot.com/tokens – Timtech 22 hours ago
    
You wouldn't happen to have a link to an emulator, would you? – steenbergh 22 hours ago
    
I would recommend cemetech.net/projects/jstified but do remember that it's morally wrong to use a ROM from the internet with this emulator unless you own that type of calculator yourself. – Timtech 22 hours ago
1  
Don't be scared to click the link, because the emulator is legit and asks you to upload your own ROM before it will work. TI used to have them freely available but they're not any more. If you can find a TI-84 from a friend, that would be the best option. – Timtech 22 hours ago

Batch, 197 bytes

@echo off
set/ah=100+%time:~0,2%,m=1%time:~3,2%
cls
call:l
set/ah=(h-3)%%24+100,m=260-m
call:l
timeout/t>nul 60
%0
:l
set s=%h:~1% 
for /l %%i in (101,1,%m%)do call set s=%%s%%-
echo %s%

Note: 10th line has a trailing space. For me, %time% formats hours with a leading space but minutes with a leading zero. I decided a leading zero was an easier output format, since all I have to do for that is to add 100 hours and remove the first digit. Minutes are trickier as 08 or 09 will cause octal parse errors, so I prefix a 1 effectively adding 100 minutes, adjusting for this by offsetting the loop appropriately, which is a byte shorter than subtracting the 100.

share|improve this answer

Python 3.6, 110 bytes

from time import*
while[sleep(60)]:h,m=localtime()[3:5];print('\n'*30+'%2d '%h+'-'*m+f'\n{h+1:2} '+'-'*(60-m))

This uses the new f-string formatting to save a few bytes. You can omit ;sleep(60) to save 10 more bytes, but then it just spams the screen.

Saved one byte changing while 1:...;sleep 60 to while[sleep(60)]:..., thanks to TuukkaX.

share|improve this answer

Perl 6, 113 bytes

loop {$_=DateTime.now;.put for |('' xx 30),|([\+](.hour,1)».fmt('%2s')Z('-' Xx[\-](.minute,60)».abs));sleep 60}

Try it once with a one second timeout.

Or try an altered version that outputs the result of running for several hours.

Expanded:

loop {                  # keep repeating forever

  $_ = DateTime.now;    # assign an object representing the current time

    .put                # print with trailing newline
                        # ( adds a space between numbers and dashes )

  for                   # for each of the following

    |(                  # make it a slip so that it is all part of one list

      '' xx 30          # 30 empty strings (30 empty lines)
    ),

    |(

        [\+](           # triangle produce
          .hour,        # the hour
          1             # the hour plus one

        )».fmt( '%2s' ) # both formatted to two element string ( space padded )

      Z                 # zipped with

        (
            '-'         # a dash

          Xx            # cross (X) using string repeat (x) operator

            [\-](       # triangle produce
              .minute,  # the minute
              60        # the minute minus 60

            )».abs      # absolute value of both
        )
    );

  sleep 60              # wait until the next minute
}
share|improve this answer
    
What operators does the 'triangle produce' support? In [\+] it adds and in [\-] it seems to subtract. Does this work with multiplication and such? – TuukkaX 21 hours ago
    
@TuukkaX It should work with almost all infix operators. It is basically the same as [+] LIST which is reduce, except it gives you the intermediate values. See the docs page for produce – Brad Gilbert b2gills 19 hours ago

QBasic, 120 127 121 bytes

Don't run this for very long or your laptop will catch fire. Now 99.several9s% more CPU-efficient.

CLS
m=TIMER\60
h=m\60
m=m MOD 60
FOR i=1TO 2
?USING"## ";h MOD 24;
FOR j=1TO m
?"-";
NEXT
?
h=h+1
m=60-m
NEXT
SLEEP 1
RUN

Ungolfed and explanation

DO
    CLS
    totalMinutes = TIMER \ 60
    hour = totalMinutes \ 60
    minute = totalMinutes MOD 60

    FOR row = 1 TO 2
        PRINT USING "## "; hour MOD 24;
        FOR j = 1 TO minute
            PRINT "-";
        NEXT j
        PRINT

        hour = hour + 1
        minute = 60 - minute
    NEXT row

    SLEEP 1
LOOP

We start by clearing the screen, then get the current hours and minutes from TIMER, which returns the number of seconds since midnight.

This is the first time I've tried PRINT USING, so I was delighted to discover that it doesn't suffer from the usual QBasic quirk that positive numbers are printed with a leading space. ## as the format specifier ensures that single-digit numbers are right-aligned and padded with a space, as required. We have to use a loop for the hyphens, unfortunately, since QBasic does not have a string repetition function. (If I'm mistaken, please let me know!)

All the PRINT statements end with ; to suppress the newline; but after the hyphens, we need a newline; thus, the solitary ? after the inner FOR loop.

The SLEEP 1 is now necessary. Without it, the screen gets cleared so quickly after printing that it's just a flickering mess. (I used LOCATE 1 instead of CLS at first for that reason, until I realized that CLS with SLEEP is shorter anyway.) RUN restarts the program from the top--the shortest way to get an infinite loop.

share|improve this answer
    
How does this handle the last hour of the day? Top line reads 23, but what;'s the hour on the bottom line? – steenbergh 18 hours ago
    
+1 for the laptop catching fire. – ElPedro 18 hours ago
    
I'm using the Note7 and thinking of running this program for the foreseeable future in place of my status bar clock. Is that a good idea? – owlswipe 17 hours ago
    
@steenbergh Whoops, fixed. It would be helpful for you to mention that edge case in the question. – DLosc 17 hours ago
1  
@steenbergh He prints h MOD 24, if initially h=23 then the next loop cycle its 24 and gets modded to 0. But I'm curious if it works as well. The CLS clears the first line so there are never both printed lines on the screen, right? – Jens 8 hours ago

Ruby, 98 95 91 bytes

Updates every 5 seconds. Only works in Unix-style terminals.

loop{t=Time.now;puts`clear`+"%02d %s
%02d "%[h=t.hour,?-*m=t.min,-~h%24]+?-*(60-m);sleep 5}

Windows command prompt version, 95 92 bytes:

loop{t=Time.now;puts"\e[H\e[2J%02d %s
%02d "%[h=t.hour,?-*m=t.min,-~h%24]+?-*(60-m);sleep 5}
share|improve this answer
    
Can you use backticks instead of system? `cls` vs system'cls' – IMP1 5 hours ago
    
It seems not, but you can use h=t.hour and then use h instead of the second t.hour, which saves 3 bytes. – IMP1 5 hours ago
    
@IMP1 indeed, backticks don't work for cls. Thanks for your other suggestion, though! – Value Ink 3 hours ago
    
@IMP1 as it turns out, puts`clear` is the way to go if you use Unix terminals. It just doesn't work with the Windows command prompt cls. – Value Ink 3 hours ago
    
For windows, you can puts"\e[H\e[2J" to clear the console, which I think shaves four bytes. It would make your first line read loop{t=Time.now;puts"\e[H\e[2J%02d %s – IMP1 3 hours ago

Java 8, 313 300 299 bytes

import java.time.*;()->{for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().getMinute(),i;;)if(c>30){c=0;String l="",u,d;for(i=0;i++<60;)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();}}

This only updates every 30 iterations of the while loop. The other 29 iterations just print new lines.

Updated

Saved 13 14 bytes due to Kevin Cruijssen's help! Thanks!

share|improve this answer
    
Hi, welcome to PPCG! First of all, only programs/functions are allowed, and your current code is a snippet. You'll have to surround it with a method (i.e. void f(){...} and need to add the imports it required (in your case import java.time.*;). That being said, your code can be golfed at multiple places to lower it to 311 bytes (even with the added method-declaration and import). (Since it's too long for this comment, I've placed it in the next comment.. xD) – Kevin Cruijssen 7 hours ago
    
import java.time.*;void f(){for(int c=0,h=LocalDateTime.now().getHour(),m=LocalDateTime.now().ge‌​tMinute(),i;;)if(c>9‌​9){c=0;String l="",u,d;for(i=0;i++<61;)l+="-";u=l.substring(0,m);d=l.subst‌​ring(m);System.out.p‌​rintln((h<10?"0":"")‌​+h+" "+u+"\n"+(h<9?"0":"")+(h+1)+" "+d);}else{c++;System.out.println();}} (303 bytes) I recommend reading Tips for Golfing in Java and Tips for golfing in <all languages>. Enjoy your stay. – Kevin Cruijssen 7 hours ago
    
@KevinCruijssen I updated my answer and was able to save 3 more bytes by using lambda notation. Also I changed a few pieces to the code you provided, as well, to meet the specifications (e.g. for(i=0;i++<60 instead of 61 and (h<10? instead of 9. Thanks for informing me about method declaration and some golfing tips! – CraigR8806 2 hours ago
    
Ah, the 61 instead of 60 was indeed my mistake. I thought I had written it as for(i=0;++i<61 instead of for(i=0;i++<61 (in this second case it should indeed be 60, and even though it's the same amount of bytes, it's probably more obvious/readable). The h<9 in my code is correct, though. You had h+1<10 before and I simply changed this to h<9 by removing 1 on both sides. :) – Kevin Cruijssen 1 hour ago
    
@KevinCruijssen Ha I didn't pick up on that! h<9. I will edit it to save 1 more byte. Thanks again! – CraigR8806 1 hour ago

Python 2, 131 129 127 bytes

from time import*
while[sleep(9)]:exec(strftime("a='%H';b=int('%M')"));print "\n"*30+a+" "+"-"*b+"\n"+`int(a)+1`+" "+"-"*(60-b)

saved a byte thanks to @TuukkaX

share|improve this answer
2  
You don't need the newline and space after the while 1: – Wheat Wizard 20 hours ago
    
I started your code @19:55. At 20:01, I see 19 - \n 20 -----------------------------------------------------------. The hours aren't updating... – steenbergh 20 hours ago
    
@steenbergh I tried it myself by setting the clock manually and it works for me. – ovs 20 hours ago
    
@ovs aren't clock challenges fun :-). Anyway, probably something with repl.it then... – steenbergh 20 hours ago
    
head-desk The Repl.it server is one hour behind to my local time... And it even says so at the very top of the console. I'll see myself out, thanks... – steenbergh 20 hours ago

GameMaker Language, 134 bytes

s=" "while 1{s+="-"a=current_hour b=current_minute draw_text(0,0,string(a)+string_copy(s,1,b+1)+"#"+string(a+1)+string_copy(s,0,61-b)}

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.

share|improve this answer

Perl 6, 104 bytes

DateTime.now.&{"\ec{.hour.fmt: '%2s'} {'-'x.minute}\n{(.hour+1).fmt: '%2s'} {'-'x 60-.minute}"}.say xx*

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 minute
share|improve this answer

PHP, 112 bytes

for(;;sleep(9))echo($s=str_pad)($h=date(H),99,"\n",0).$s(" ",1+$m=date(i),"-")."\n".(++$h%24).$s(" ",61-$m,"-");

As 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 of 60.

share|improve this answer
    
This displays warning text on stdout along with the correct output: 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? – steenbergh 20 hours ago
    
@steenbergh That´s a notice; it will not be displayed if you use default values (command line parameter -n or error_reporting(22519); – Titus 19 hours ago
    
hours must be padded to length 2 – Titus 19 hours ago

JavaScript (ES6), 162 bytes

Updates once per second

setInterval(c=>{c.clear(d=new Date,m=d.getMinutes(),h=d.getHours(),H=_=>`0${h++}`.slice(-2)),c.log(H()+` ${'-'.repeat(m)}
${H()} `+'-'.repeat(60-m))},1e3,console)

share|improve this answer
    
You can save quite a few bytes by restructuring the code so it is only one statement (it's possible to call console.clear() inside the console.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'+$:$))). – L. Serné 19 hours ago
    
You can save a bunch of byte by putting the hours and minutes into a single function m=>`0${h++} \.slice(-3)+'-'.repeat(m). – Neil 18 hours ago

MATL, 38 bytes

`XxFT"4&Z'@+OH&YAO'-'60@*5&Z'-|Y"hhD]T

Try it at MATL online! But note that the program is killed after 30 seconds, so it's difficult to catch any changes in the output.

How it works

`           % Do...while
  Xx        %   Clear screen
  FT        %   Push [0 1]
  "         %   For each k in [0 1]
    4&Z'    %     Push current hour
    @+      %     Add k
    OH&YA   %     Convert to base-10 string with 2 digits
    O       %     Push 0. Concatenating with chars will convert this to char,
            %     and char(0) will be displayed as a space
    '-'     %     Push '-'
    60@*    %     Push 60*k
    5&Z'    %     Push current minute
    -|      %     Absolute difference. This gives current minute for k==0,
            %     or 60 minus that for k==1
    Y"      %     Repeat '-' that many times
    hh      %     Concatenate the top three elements into a string
    D      %      Display
  ]         %   End
  T         %   Push true
            % End (implicit). Since the top of the stack contains true, this
            % gives an infinite loop
share|improve this answer
    
Could be me, but at the second iteration, only the top line is printed... – steenbergh 22 hours ago
    
@steenbergh It works for me with minutes and seconds instead of hours and minutes, so the changes are easily seen: matl.suever.net/… – Luis Mendo 21 hours ago
1  
Yep, works. - in fact, might be cool to have this as lines 3 and 4 of my own clock. – steenbergh 21 hours ago

PHP, 104 bytes

<? for(;;sleep(6))printf("%'
99s%2d %'-".($m=date(i))."s
%2d %'-".(60-$m)."s","",$h=date(H),"",++$h,"");

showcase for printf´s custom padding characters:
"%'-Ns"=left pad string with - to N 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.

share|improve this answer

AWK, 190 bytes

#!/bin/awk -f
func p(x,y,c){printf("%2s ",x)
for(j=0;j<y;j++)printf(c)
print}BEGIN{for(;;){split(strftime("%H %M"),t)
m=t[2]
if(o!=m){p(a,30,"\n")
p(t[1],m,"-")
p((t[1]+1)%24,60-m,"-")}o=m}}

Since AWK doesn't have a built-in sleep 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? :)

share|improve this answer

Python 3.5, 127 120 117 bytes

from time import*
while[sleep(9)]:h,m=localtime()[3:5];print('\n'*88,*['%2d '%x+'-'*y+'\n'for x,y in[(h,m),(h+1,60-m)]])
share|improve this answer
1  
Can you not just print('\n'*50) instead of os.system('cls') so it works on both *nix and Windows? Would save a couple of bytes as you can lose the os import and OP says that this is allowed. – ElPedro 18 hours ago
    
Oh, I didn't read it properly then. Thanks a lot man. – Gurupad Mamadapur 18 hours ago
    
Just for info, most people tend to use <s></s> around their old byte count and then put the new byte count after it because it is interesting to see the progress as an answer is improved :-) Must try 3.5 some time. I'm still working with Python 2. – ElPedro 17 hours ago
1  
@ElPedro Yea I forgot to do it. I'll edit now. – Gurupad Mamadapur 17 hours ago

C 251 267 bytes

 #include<time.h>f(){time_t t;struct tm *t1;h,m,i;while(1){time(&t);t1=localtime(&t);int h=t1->tm_hour;int m=t1->tm_min;printf("%d ",h);for(int i=1;i<=m;i++)printf("-");printf("\n");printf("%d ",h+1);for(int i=0;i<=59-m;i++)printf("-");printf("\n");sleep(1);system("clear");}}

Ungolfed version

#include<time.h>
void f()
{
 time_t t;
 struct tm *t1;
 int h,m,i;

 while(1)
 {
  time(&t);     
  t1=localtime(&t);
  h=t1->tm_hour;
  m=t1->tm_min;

  printf("%d ",h);
  for(int i=1;i<=m;i++)
   printf("-");

  printf("\n");
  printf("%d ",h+1);

  for(int i=0;i<=59-m;i++)
   printf("-");

  printf("\n");    

  sleep(1);
  system("clear");    
 }
}

Gets the work done! Can definitely be shortened in some way. Assume unistd.h file is included.

@Neil Thanks for the info.

share|improve this answer
    
IIRC you have to include everything necessary to get the code to compile (in this case, the definitions of time_t and struct tm) in your byte count. – Neil 18 hours ago

Python, 115 113 bytes

saved a couple of bytes thanks to @kundor and @Phlarx

import time
while 1:h,m=time.localtime()[3:5];print("\x1b[0;H{:02} {}\n{:02} {} ".format(h,"-"*m,h+1,"-"*(60-m)))
share|improve this answer
    
At least on my system, this doesn't erase underlying characters, so that the number of dashes on the second line doesn't go down as time passes. Also: you can save three bytes by putting your while loop on one line, and two bytes by changing the :02 formats to just :2. – kundor 18 hours ago
2  
You can fix the issue described by @kundor in 1 byte by adding a space after the corresponding {}. – Phlarx 18 hours ago
    
@kundor fixed! Thanks. I kept the :02 format to right-pad one digit hours with zeroes. – dfernan 7 hours ago
    
@kundor *left-pad one digit hours with zeroes. – dfernan 4 hours ago

BASH, 165 141 156 bytes

while :
do
clear
m=`date +%-M`
a=`printf %${m}s`
b=`printf %$((60-$m))s`
h=`date +%H`
echo $h ${a// /-}
printf "%02d %s" $((10#$h+1)) ${b// /-}
sleep 9
done
share|improve this answer
1  
I could save another 8 bytes removing the sleep, but I'm not comfortable with an indefinite while loop running on my computer without a sleep ;-) – RoVo 17 hours ago

Gura, 138 bytes

k(a,b)={if(a<10){a="0"+a;}println(a," ","-"*b)};repeat{t=datetime.now();k(t.hour,t.min);k(t.hour+1,60-t.min);os.sleep(60);print("\n"*30);}

Pretty short and straightforward :)

share|improve this answer
    
Wow ... That's fast. Any tips on running Gura? Just downloaded the binaries, but running Gura.exe and pasting in this code gives me a syntax error symbol k is not defined. – steenbergh 23 hours ago
    
Forgot a semicolon ! You can try to run it again :) – Sygmei 23 hours ago
1  
Does this update every minute? The console seems to run this code just once... – steenbergh 23 hours ago
    
Woops, did not saw that part, should be working now ! – Sygmei 22 hours ago
    
When it updates, it should either clear the screen or add 30 newlines. Man, I'm on your case... – steenbergh 22 hours ago

Processing, 204 200 198 bytes

4 bytes saved thanks to @L. Serné by using smarter ternaries

void draw(){int i;String s=((i=hour())>9?i:" "+i)+" ";for(i=0;i<minute();i++)s+="-";s+="\n"+(((i=hour()+1)>24?i=0:i)>9?i:" "+i)+" ";for(i=0;i<60-minute();i++)s+="-";print(s);for(;i++<99;)println();}

This outputs 30+ newlines for each update (which takes place when the frame gets updated)

Golfing in progress...

share|improve this answer
    
Changing ((i=hour())<10?" ":"")+i into ((i=hour())>9?i:" "+i) would save 2B twice... Good luck with further golfing! – L. Serné 19 hours ago
    
@L.Serne thanks for the tip :) – Kritixi Lithos 19 hours ago
    
Another improvement that might work: ((i=hour()+1)>24?i=0:i)>9 becomes (i=hour()+1)>9, since hour 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 of i inside the condition in the for loop like you did in the very last loop. Should save 13B in total. – L. Serné 16 hours ago

Ok, haven't done a code golf in a while, so here goes my sad attempt :)

Unix Korn Shell: 177 171 170 bytes

while :
do
clear
h=`date +%H`
m=`date +%M`
d=-----
d=$d$d$d$d
d=$d$d$d
a=`echo $d|cut -b-$m`
let m=60-$m
b=`echo $d|cut -b-$m`
let i=h+1
echo "$h $a\n$i $b"
sleep 9
done
share|improve this answer
    
spliced the 2 echos into 1, saved a few bytes ... (sleep 9 instead of sleep 10 saves 1 byte :P ) lol – Ditto 18 hours ago

Mathematica, 235 bytes

d=UpdateInterval;e=Dynamic;f=Refresh;g=AbsoluteTime;Grid[Partition[Riffle[e[f[Floor@Mod[g[]/3600+#,24],d->1]]&/@{0,1},With[{t=#},e[f[""<>Array["-"&,If[t==60,60-#,#]]&@Setting@Floor@Mod[g[]/60+#,60],d->1]]]&/@{0,60}],2],Alignment->Left]
share|improve this answer

C#, 192 185 176 172 bytes

using System;()=>{while(1>0){Console.Clear();var t=DateTime.Now;int h=t.Hour,m=t.Minute;Console.Write($"{h:00} {new string('-',m)}\n{++h%24:00} {new string('-',60-m)}");}};

Uses C# 6 features which I don't have access to so cannot test it properly yet.

Full version showing how it works and is called including a Thread.Sleep so the input can actually be seen. Note that this version shows the use of Console.Writes overload to use String.Format and doesn't use string interpolation like the golfed version above.

using System;

class P
{
    static void Main()
    {
        Action a = () =>
        {
            while (1 > 0)
            {
                Console.Clear();

                var t = DateTime.Now;
                int h = t.Hour,m=t.Minute;

                Console.Write("{0:00} {1}\n{2:00} {3}", h, new string('-', m), ++h % 24, new string('-', 60 - m));

                System.Threading.Thread.Sleep(500);
            }
        };

        a();
    }
}
share|improve this answer

Python3.5 104 bytes.

from time import*
while[sleep(9)]:h,m=localtime()[3:5];print("{:02d} {}".format(h,m*'-'),end='\n'*30)

Riffing off Gurupad Mamadapur's answer above.

edit: xnor is right. This isn't a valid answer. - This misses the second line completely.

share|improve this answer
    
I don't think this does the right thing. The next hour needs to be printed with a dash for each remaining minute to it. – xnor 13 hours ago

C# Interactive (138 Bytes)

while(true){var d=DateTime.Now;Console.WriteLine($"{d.Hour:00} {new string('-',d.Minute)}\n{d.Hour+1:00} {new string('-',60-d.Minute)}");}
share|improve this answer
1  
Can you golf this down by 1) naming the date var d instead of dt? and 2) use sleep(1e3) or 999 instead of 1000? – steenbergh 1 hour ago
    
@steenbergh see update – series0ne 1 hour ago
    
A few things... This is just a snippet not a method or program (not sure if it's valid in C# Interactive though), it is essentially a golfed version of my code, and if it is should have been commented as improvements not a separate solution (though this is speculation) and there are lots of small improvements you can make here, and do you even need the sleep? – TheLethalCoder 1 hour ago
    
@TheLethalCoder I specifically put C# Interactive because this works in the interactive console ONLY. This would not work as a standard C# program. – series0ne 1 hour ago
    
Also note that this won't work when the hour is 23 and when the minute is 0 – TheLethalCoder 1 hour ago

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.