시계 도전의 시간입니다!


25

이 형식으로 시간을 표시하는 시계를 작성하고 싶습니다.

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

'18 : 10 '이 표시됩니다. 현재 시간과 다음 시간이 줄 앞에 표시되고 그 뒤에 공백과 대시가 표시됩니다. 첫 번째 줄에는이 시간이 지 났던 시간 (분)이 있고 두 번째 줄은 몇 분이 더 있는지 나타냅니다. 이 시간에 갈 수 있습니다.

명확히하기 위해

  • 시계는 시스템 시간을 표시해야합니다. 다른 소스에서 시간을 가져 오는 것이 더 편리하다면 괜찮습니다. 이 되지 않을 입력으로 공급된다.
  • 에서 18:00, 상단 라인은 그냥 18(후행 공간이 필요 허용하지만)
  • 에서 18:59의 결론은19 -
  • <10 시간은 0( 01 -----) 또는 오른쪽 정렬 ( 1 -----)로 미리 채워집니다 . 대시가 올바른 위치에서 시작하더라도 1 -----유효하지 않은 왼쪽 맞춤 한 자리는 허용되지 않습니다 .
  • 시계는 시간을 24 시간 형식으로 표시해야합니다.
  • 24 시간 형식이라고하더라도 실제로는 그렇지 않습니다 24. 23 시간 동안 두 번째 줄은 00또는로 시작합니다 0.
  • 최소 1 분에 한 번씩 디스플레이를 업데이트해야하지만 정확히 00몇 초 안에 표시 될 필요는 없습니다 . 보다 편리한 경우 더 자주 / 지속적으로 업데이트 할 수 있지만 결과는 여전히 읽을 수 있어야합니다. 화면 전체가 번지는 것은 아닙니다.

입력

없음

산출

  • 위에서 설명한대로. 두 줄 모두에 시계를 60-ish 위치로 채우는 후행 공백이 허용되며 후행 줄 바꾸기도 허용됩니다.
  • 다음 분 표시시 화면을 지워야합니다 (화면 지우기 명령을 사용하거나 개행을 30 개 이상 추가).

추가 규칙

  • 표준 허점 은 금지되어 있습니다
  • , 바이트 단위의 최단 답변이 승리합니다.

숫자와 대시 사이에 공백이 두 개 있을까요?
Adám

6
"1 분에 한 번 업데이트"-더 자주 업데이트 할 수 있습니까?
smls

1
@smls 예, 원하는만큼 자주 업데이트 할 수 있습니다. 사양을 '최소 1 분에 한 번'으로 변경하겠습니다.
steenbergh

1
@KritixiLithos 두 자리 시간 (9, 10 또는 23, 00)과 정렬이 끊어 지므로 허용되지 않습니다.
steenbergh 2012 년

1
23 이후에는 다음 시간이 24 또는 0입니까?
Kritixi Lithos

답변:


2

MATL , 41 바이트

실수를 감지 한 @Kundor에게 감사합니다. 이제 수정되었습니다.

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

MATL 온라인 에서 사용해보십시오 ! 그러나 프로그램은 30 초 후에 종료되므로 출력의 변경 사항을 포착하기가 어렵습니다.

작동 원리

`           % Do...while
  Xx        %   Clear screen
  FT        %   Push [0 1]
  "         %   For each k in [0 1]
    4&Z'    %     Push current hour
    @+      %     Add k
    24\     %     Modulo 24. This transforms 24 into 0
    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


@steenbergh 시간과 분 대신 몇 분과 몇 초 만에 작동하므로 변경 사항을 쉽게 볼 수 있습니다. matl.suever.net/…
Luis Mendo

1
그렇습니다. -사실, 이것을 내 시계의 3 줄과 4 줄로 사용하는 것이 좋습니다.
steenbergh

@steenbergh :이 답변을 수락했지만 유효하지 않습니다. 23 시간 이후 24 시간을 24로 표시합니다. 가장 짧은 정답은 Value Ink의 Ruby입니다.
Nick Matteo

@kundor 감사합니다. 3 바이트의 비용으로 수정
Luis Mendo

11

TI 기본, 94 바이트

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

비교적 간단합니다. 처음에 공백이 하나있는 문자열입니다. 시간은 오른쪽에 맞춰져 있습니다. TI-83에는 내부 시계가 없으므로 TI-84 + 계산기에서만 작동합니다.

편집 : 마지막 루프를 닫지 않았다는 점에 주목하여 @kundor에게 감사드립니다. 이제 수정되었습니다 (+2 바이트).

편집 # 2 : 첫 시간은 24 시간이 아닌 0이어야합니다. +14 바이트의 비용으로 수정되었습니다.


모든 명령은 1 바이트로 계산됩니까?
Sygmei

@Sygmei 대부분의 토큰은 1 바이트입니다. 그러나 같은 토큰 Str1, getTime그리고 sub(두 개의 각 바이트입니다. tibasicdev.wikidot.com/tokens
Timtech

에뮬레이터에 연결되지 않을 것입니까?
steenbergh 2012 년

나는 cemetech.net/projects/jstified를 추천 하지만 그 유형의 계산기를 직접 소유하지 않는 한이 에뮬레이터로 인터넷의 ROM을 사용하는 것은 도덕적으로 잘못이라는 것을 기억하십시오.
Timtech

1
에뮬레이터가 합법적이며 작동하기 전에 자신의 ROM을 업로드하도록 요청하기 때문에 링크를 클릭해도 무서워하지 마십시오. TI는 그 (것)들을 자유롭게 이용할 수있게했지만 더 이상은 아닙니다. 친구로부터 TI-84를 찾을 수 있다면 이것이 최선의 선택입니다.
Timtech

9

배치, 197 바이트

@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%

참고 : 10 행에는 후행 공백이 있습니다. 나를 위해 %time%시간을 선행 공백으로 지정하지만 분을 선행 0으로 서식을 지정하십시오. 100을 더하고 첫 번째 숫자를 제거하기 때문에 앞에 오는 0이 더 쉬운 출력 형식이라고 결정했습니다. 분은 까다이다 08또는 09I 접두사 있도록 진수 해석 에러가 발생할 1100 감산 바이트보다 짧은 적절 루프를 상쇄하여 보정 한 효과적으로 추가 100 분.


7

파이썬 3.6 110 114 112 바이트

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

이것은 (한 바이트를 저장 포맷 새로운 F-문자열을 사용하여 f'\n{h+1:2} '대를 '\n%2d '%(h+1)당신은 변경할 수 있습니다.) [sleep(9)]18 바이트를 저장하지만, 그것은 단지 화면을 스팸 메일.

TuukkaX 덕분에 1 바이트를 변경 while 1:...;sleep 60하여 저장 while[sleep(60)]:...했습니다.

OP가 주석을 달았 듯이 23 다음에 24 시간 대신 0이되도록 다음 시간을 표시하려면 5 바이트를 더 사용해야했습니다. :-(

60 초가 아닌 9 초만 대기하여 1 바이트를 복구했습니다.

Value Ink의 Ruby 답변(h+1)%24 에서 빌린 비트-피들 링을 사용하여 2 바이트를 절약했습니다 .


if 조건을 대괄호로 묶은 이유를 설명해 주시겠습니까? while과 sleep 사이의 공간이 양쪽의 2와 반대로 1 바이트가 아닌가? 편집 : 걱정하지 마십시오. 충분합니다.
Shadow

1
@shadow : false를 sleep반환합니다 None.
Nick Matteo

@ ToivoSäwén : sleeptime모듈에 있으므로 *를 가져 오는 것이 좋습니다.
Nick Matteo

5

루비, 98 95 91 바이트

5 초마다 업데이트합니다. 유닉스 스타일 터미널에서만 작동합니다.

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

Windows 명령 프롬프트 버전, 95 92 바이트 :

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

시스템 대신 백틱을 사용할 수 있습니까? `cls`vssystem'cls'
IMP1

그렇지 않은 것처럼 보이지만 두 번째 대신 사용 h=t.hour하고 3 바이트를 절약 할 수 있습니다 . ht.hour
IMP1

@ IMP1 실제로 백틱은 작동하지 않습니다 cls. 그래도 다른 제안에 감사드립니다!
Value Ink

@ IMP1은 puts`clear`유닉스 터미널을 사용하는 방법입니다. Windows 명령 프롬프트에서는 작동하지 않습니다 cls.
Value Ink

Windows의 puts"\e[H\e[2J"경우 콘솔을 지우면 4 바이트를 면도한다고 생각합니다. 첫 줄을 읽을 것입니다loop{t=Time.now;puts"\e[H\e[2J%02d %s
IMP1

4

펄 6 , 113 바이트

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

1 초 시간 초과로 한 번 시도하십시오 .

또는 몇 시간 동안 실행 한 결과를 출력 하는 변경된 버전사용해보십시오 .

넓히는:

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
}

'삼각형 생산'은 어떤 연산자를 지원합니까? 에서 [\+]가 추가 한에서 [\-]빼는 것으로 보인다. 이것은 곱셈과 그런 식으로 작동합니까?
Yytsi

@TuukkaX 거의 모든 삽입 연산자와 함께 작동해야합니다. [+] LIST중간 값을 제공한다는 점을 제외하면 기본적으로 감소와 동일합니다. 농산물에
Brad Gilbert b2gills

4

QBASIC, 120 (127) 121 바이트

이것을 오랫동안 실행하지 마십시오. 랩탑에 불이 붙을 수 있습니다. CPU 효율이 99.several9s % 향상되었습니다.

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

언 골프와 설명

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

화면을 지우고 시작하여 현재 시간과 분을 가져옵니다 TIMER. 자정 이후의 시간 (초)을 반환합니다.

이것은 내가 처음 시도한 PRINT USING것이므로 양수가 선행 공백으로 인쇄된다는 일반적인 QBasic 문제로 고통받지 않는다는 것을 알게되어 기뻤습니다. ##형식 지정자가 필요에 따라 한 자리 숫자를 오른쪽으로 정렬하고 공백으로 채 웁니다. 불행히도 QBasic에는 문자열 반복 함수가 없으므로 하이픈에 루프를 사용해야합니다. (실수하면 알려주세요!)

모든 PRINT문장 ;은 줄 바꿈을 억제하는 것으로 끝납니다 . 그러나 하이픈 다음에는 줄 바꿈이 필요합니다. 따라서 ?내부 FOR루프 후 독방 .

SLEEP 1이제 필요합니다. 그것이 없으면 인쇄 후 화면이 너무 빨리 지워져 깜박 거리는 엉망입니다. ( 어쨌든 with 가 더 짧다는 것을 깨달을 때까지 처음에는 그 LOCATE 1대신에 사용 했습니다.) 무한 루프를 얻는 가장 짧은 방법-맨 위에서 프로그램을 다시 시작합니다.CLSCLSSLEEPRUN


하루 중 마지막 시간을 어떻게 처리합니까? 맨 위 줄은 23을 읽지 만, 요점은 몇시입니까?
steenbergh

나는 Note7을 사용하고 있으며 내 상태 표시 줄 시계 대신 가까운 미래 에이 프로그램을 실행할 생각입니다. 좋은 생각입니까?
owlswipe

@ steenbergh Whoops, 고정. 질문에서 그 중요한 사례를 언급하는 것이 도움이 될 것입니다.
DLosc

@DLosc Nah, 나는 단지 농담입니다 :)). 그래, 똑똑해 !!
owlswipe

1
@steenbergh 그는 처음에 h = 23이면 h MOD 24를 인쇄하고 다음 루프는 24를 순환하고 0으로 수정됩니다. 그러나 그것이 잘 작동하는지 궁금합니다. CLS는 첫 번째 줄을 지우므로 화면에 두 줄이 인쇄되지 않습니다.
Jens

4

자바 8, 313 300 299 바이트

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();}}

이것은 while 루프를 30 회 반복 할 때마다 업데이트됩니다. 다른 29 개의 반복은 새 줄을 인쇄합니다.

업데이트

저장된 13 인해 케빈 Cruijssen의 도움으로 14 바이트를! 감사!


안녕하세요, PPCG에 오신 것을 환영합니다! 우선, 프로그램 / 기능 만 허용되며 현재 코드는 스 니펫입니다. 메소드로 둘러싸 야합니다 (즉 void f(){...}, 필요한 가져 오기를 추가해야합니다 (귀하의 경우 import java.time.*;). 말하면, 코드는 여러 위치에서 골프를 쳐서 311 바이트 로 줄일 수 있습니다 (추가 된 메소드로도) -declaration and import). (이 의견이 너무 길어서 다음 의견에
썼습니다

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 ) Java의 골프 <모든 언어>의 골프 팁을 읽는 것이 좋습니다 . 체류를 즐길 수.
Kevin Cruijssen

@KevinCruijssen 내 답변을 업데이트하고 람다 표기법을 사용하여 3 바이트를 더 절약 할 수있었습니다. 또한 사양을 충족하기 위해 제공 한 코드로 몇 가지 사항을 변경했습니다 (예 : for(i=0;i++<6061 (h<10?대신 9 대신 9). 메소드 선언과 골프 팁에 대해 알려 주셔서 감사합니다!
CraigR8806

아, 60 대신 61은 실제로 내 실수였다. 나는 그것을 for(i=0;++i<61대신 대신 작성했다고 생각했다 for(i=0;i++<61. h<9내 코드는하지만, 올바른 것입니다. 당신은 h+1<10전에 있었고 나는 단순히 h<9양쪽에서 1을 제거하여 이것을 변경했습니다 . :)
Kevin Cruijssen

1
@KevinCruijssen Ha 나는 그것을 얻지 못했습니다! h<9. 1 바이트를 더 절약하기 위해 편집 할 것입니다. 다시 감사합니다!
CraigR8806

4

C, 176 162 161 160 156 바이트

이것은이다 지정된 포인터하지만, 컴파일 및 실행의 남용. 최적화없이 컴파일해야합니다. 그렇지 않으면 segfault에 부딪 칠 수 있습니다.

main(){int*localtime(),b[9],*t;memset(b,45,60);for(;;)time(&t),t=localtime(&t),usleep(printf("\e[2J%.2d %.*s\n%.2d %.*s\n",t[2],t[1],b,t[2]+1,60-t[1],b));}

언 골프 드 :

#import<time.h>
main()
{
 int *t,b[60];
 memset(b,45,60);
 for(;;) {
  time(&t);
  t=localtime(&t);
  usleep(printf("\e[2J%.2d %.*s\n%.2d %.*s\n",t[2],t[1],b,t[2]+1,60-t[1],b));
 }
}

3

자바 스크립트 (ES6), 162 바이트

초당 한 번 업데이트

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)


코드를 재구성하여 하나의 명령문 ( 인수 console.clear()내부에서 호출 할 수 있음 console.log)과 사용하지 않는 괄호를 최대한 많이 할당하여 상당히 많은 바이트를 절약 할 수 있습니다 . 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'+$:$))).
Luke

단일 함수에 시간과 분을 넣어서 많은 바이트를 절약 할 수 있습니다 m=>`0${h++} \.slice(-3)+'-'.repeat(m).
Neil

3

파이썬 2, 131 (129) 127 바이트

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

@TuukkaX 덕분에 바이트를 저장했습니다.


2
while 1:
밀 마법사

@ 19 : 55에서 코드를 시작했습니다. 20시 1 분에을 참조하십시오 19 - \n 20 -----------------------------------------------------------. 시간이 업데이트되지 않습니다 ...
steenbergh

@ steenbergh 나는 시계를 수동으로 설정하여 직접 시도해 보았습니다.
ovs

@ovs는 재미에 도전하는 시계가 아닙니다 :-). 어쨌든, 아마도 repl.it을 가진 무언가 ...
steenbergh

head-desk Repl.it 서버는 현지 시간보다 한 시간 뒤떨어져 있습니다. 심지어 콘솔 맨 위에도 있습니다. 감사합니다.
steenbergh

3

C 251 267 251 바이트

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

언 골프 버전

#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(i=1;i<=m;i++)
   printf("-");

  puts("");
  printf("%d ",h+1);

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

  puts("");    

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

작업을 완료하십시오! 어떤 식 으로든 단축 될 수 있습니다. unistd.h파일이 포함되어 있다고 가정 하십시오.

@Neil 정보를 주셔서 감사합니다.

@Seth 8 바이트를 절약 해 주셔서 감사합니다.


IIRC 에는 바이트 수로 코드를 컴파일하는 데 필요한 모든 것을 포함 시켜야합니다 (이 경우 time_t및 정의 struct tm).
Neil

대신 printf("\n");사용할 수 있습니다puts("");
Seth

3

처음으로 골프 ...

Powershell, 116 바이트 (기존 122)

while($d=date){$f="{0:D2}";$h=$d.Hour;$m=$d.Minute;cls;"$($f-f$h)$("-"*$m)`n$($f-f(++$h%24))$("-"*(60-$m))";Sleep 9}

편집 : @AdmBorkBork의 조언에서 6 바이트를 절약하기 위해 Get-Date를 날짜로, Clear를 cls로 변경했습니다.


PPCG에 오신 것을 환영합니다. 좋은 답변
george

PPCG에 오신 것을 환영합니다! 몇 가지 쉬운 골프- cls대신 ( clear및 Windows에있는 한) date대신 사용할 수 있습니다 get-date. 또한 서식을 출력하는 더 쉬운 방법이 있다고 확신합니다. 형식을 가지고 놀고 있으며, 무엇이든 생각해 내면 알려 드리겠습니다.
AdmBorkBork

좋은. 이것을 시도하십시오 : 108 bytes while($d=date){cls;"{0,2} {2}``n{1,2} {3}"-f($h=$d.Hour),(++$h%24),('-'*($m=$d.Minute)),('-'*(60-$m));Sleep 9}. 대신 편집기에서 LF 줄 바꿈을 사용하십시오 .``n ''
mazzy

3

PHP, 104 105 바이트

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

대한 소개 printf의 사용자 정의 패딩 문자 :
"%'-Ns"=와 왼쪽 패드 문자열 -N 문자.

화면을 지우지 않고 99 개의 줄 바꿈 (6 초마다)을 인쇄합니다.

첫 번째 줄 바꿈은 단일 문자 여야합니다. 따라서 Windows에서는로 대체되어야합니다 \n.


2

GameMaker 언어, 134 바이트

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)}

설정에서 작동하려면 치명적이지 않은 오류를 무시해야합니다. 또한 GML 에서 대부분의 언어 #와 동일합니다 \n.


2

펄 6 , 104 바이트

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

ANSI 호환 터미널 에서 실행해야합니다. 재설정을위한 제어 순서가 작동하도록 해야합니다.

꽤 기본적입니다 (내가 시도한 난독 화 된 접근법이 더 길어지기 때문에)

  • DateTime.now.&{" "}.say xx*: 현재 시간을 문자열로 변환하고 (아래 참조), 무한 반복합니다. 문자열은 다음과 같이 작성됩니다.
    • \ec: <ESC>c터미널을 재설정하기위한 ANSI 제어 코드 로 화면을 지 웁니다.
    • {.hour.fmt: '%2s'}: 시간, 2 열에 오른쪽 정렬
    • : 공간
    • {'-'x.minute}: 분 반복 횟수 대시
    • \n: 줄 바꿈
    • {(.hour+1).fmt: '%2s'}: 다음 시간, 2 열에 오른쪽 정렬
    • : 공간
    • {'-'x 60-.minute}: 대시 반복 횟수 60-분

2

AWK, 190 바이트

#!/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}}

AWK내장 sleep기능 이 없기 때문에 시계가 지속적으로 분을 변경했는지 확인합니다. 중요한 것은 작동한다는 것입니다. :)


2

파이썬 3.5 127 120 117 바이트

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)]])

1
print('\n'*50)대신 os.system('cls')* nix와 Windows 모두에서 작동 할 수 있습니까 ? os가져 오기를 잃을 수 있으므로 몇 바이트를 절약 하고 OP는 이것이 허용된다고 말합니다.
ElPedro

아, 그때 제대로 읽지 않았습니다. 고마워요
Gurupad Mamadapur

정보를 위해 대부분의 사람들은 이전 바이트 수 주위에 <s> </ s>를 사용하고 그 뒤에 새 바이트 수를 넣는 경향이 있습니다. 왜냐하면 답변이 개선됨에 따라 진행 상황을 보는 것이 재미 있기 때문입니다. 시각. 저는 여전히 파이썬 2와 함께 일하고 있습니다.
ElPedro

1
@ElPedro Yea 나는 그것을 잊었다. 지금 편집하겠습니다.
Gurupad Mamadapur

2

파이썬, (115) 113 바이트

@kundor와 @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)))

적어도 내 시스템에서는 기본 문자가 지워지지 않으므로 두 번째 줄의 대시 수가 시간이 지날 때 줄어 들지 않습니다. 또한 : while 루프를 한 줄에 넣고 3 바이트를 :02형식을 just 로 변경하여 3 바이트를 절약 할 수 있습니다 :2.
Nick Matteo

2
해당 {} 뒤에 공백을 추가하여 @kundor가 1 바이트로 설명한 문제를 해결할 수 있습니다.
Phlarx

@kundor 고정! 감사. 나는 :021 자리 시간을 오른쪽 패드로 0으로 유지하는 형식을 유지 했습니다.
반란

@kundor * 왼쪽 패드 1 자리 시간 (0).
dfernan

@ dfernan : 글쎄, :2 공백이있는 왼쪽 패드, 도전은 괜찮습니다.
Nick Matteo

2

C # 대화 형 (138 바이트)

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)}");}

1
1) d대신 날짜 var의 이름을 지정하여 골프를 줄 수 있습니까 dt? 2) 사용 sleep(1e3)또는 999대신 1000?
steenbergh

@steenbergh 업데이트 참조
series0ne

몇 가지 ... 이것은 단지 메소드 나 프로그램이 아닌 스 니펫 일뿐입니다 (C # Interactive에서 유효한지 확실하지 않음). 기본적으로 내 코드의 골프 버전이며 개선되지 않은 개선 사항으로 주석 처리 된 경우 별도의 솔루션 (이것은 추측이지만) 여기에서 할 수있는 작은 개선 사항이 많이 있으며 수면이 필요합니까?
TheLethalCoder

@TheLethalCoder 대화 형 콘솔에서만 작동하기 때문에 C # Interactive를 구체적으로 넣었습니다 . 표준 C # 프로그램으로는 작동하지 않습니다.
series0ne

또한 시간이 23 일 때와 분이 0 일 때는 작동하지 않습니다.
TheLethalCoder

2

PHP, 112 바이트

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

화면을 지울 수있는 방법이 없기 때문에 (찾을 수있는) 줄 바꿈이 필요했습니다. 또한 1 분에 한 번 "최소한"으로 업데이트되는 질문은9 대신에60 .

편집 : @Titus는 두 번째 시간의 패딩에서 버그를 발견했습니다. 고정 비용은 8 바이트입니다.


올바른 출력과 함께 stdout에 경고 텍스트가 표시됩니다 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. 메타에 관한 것이 있습니까?
steenbergh

@steenbergh 그것은 통지입니다; 기본값 (명령 줄 매개 변수 -n또는error_reporting(22519);
Titus

시간은 길이 2에 채워 져야합니다
Titus

좋은 H날짜 , 날짜 설정은 00-23이지만 두 번째 시간 동안 잊어 버렸습니다.
user59178

물리적 줄 바꿈으로 2 바이트를 저장하십시오.
Titus

2

배쉬 (3과 4) : 90 바이트

d=(`sed s/./-/g<$0`);let `date +h=%H,m=%M`;echo $h ${d:0:m}'
'$[++h%24] ${d:m}
sleep 5
$0

의 사용으로 인해이 $0스크립트는 대화식 bash 쉘에 붙여 넣지 말고 파일에 넣어야합니다.

첫 번째 명령은 $d60 개의 하이픈으로 설정 됩니다. 이 스크립트의 첫 번째 줄의 길이는 60 자라는 사실에 의존합니다. 이것은 내가 생각해 낼 수있는 다음 가장 좋은 것보다 3 자 짧습니다.

d=`printf %060d|tr 0 -`

PID 또는 메모리에서 상자를 실행하지 않으려면 eval마지막 줄의 시작 부분에 추가 하여이 95 바이트를 만들 수 있습니다.


나에게 오류를 제공합니다 let: h=09: value too great for base (error token is "09"). 문제는 선행 0은 8 진 상수로 해석되므로 09는 유효하지 않습니다.
Nick Matteo

흠, 그것은 내 스크립트가 여러 가지 방식으로 손상되었음을 의미합니다. 감사.
Evan Krall

2

BASH, 165 (141) 155 바이트

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

1
수면을 제거하는 또 다른 8 바이트를 절약 할 수 있지만 수면없이 내 컴퓨터에서 무한 루프 루프가 실행되는 것에 익숙하지 않습니다. ;-)
pLumo

일부 최적화 : sleep 9while 루프의 조건으로 이동 ; -4 행의 형식 문자열에서 M 앞에있는을 제거하십시오 . 또한 산술 표현식에서 변수 이름 앞에 $를 사용할 필요가 없습니다 $((60-$m)).$((60-m))
Evan Krall

9 행의 수학 계산이 정확한지 잘 모르겠습니다 h=23; echo $((10#$h+1)). 24를 인쇄합니다.
Evan Krall

24의 문제점은 무엇입니까?
pLumo

$ ((60-08)) 오류가 발생하기 때문에 -M이 필요합니다.
pLumo

1

구라 , 138 바이트

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);}

아주 짧고 간단합니다 :)


와우 ... 빠르다. 구라 실행에 대한 팁? 바이너리를 방금 다운로드했지만 Gura.exe이 코드에서 실행 하고 붙여 넣으면 구문 오류가 발생 symbol k is not defined합니다.
steenbergh

세미콜론을 잊어 버렸습니다! 다시 실행할 수 있습니다 :)
Sygmei

1
1 분마다 업데이트됩니까? 콘솔은이 코드를 한 번만 실행하는 것 같습니다.
steenbergh

Woops, 그 부분을 보지 못했지만 지금 작동해야합니다!
Sygmei

업데이트되면 화면을 지우거나 줄 바꿈을 30 개 추가해야합니다. 남자, 난 당신의 경우에 ...
steenbergh

1

좋아, 한동안 코드 골프를하지 않았으므로 여기 슬픈 시도가 간다 :)

유닉스 Korn 쉘 : 177 171 170 바이트

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

2 개의 에코를 1로 연결하고 몇 바이트를 절약했습니다 ... (잠자는 10 대신 9는 1 바이트를 절약합니다 : P) lol
Ditto

1

Mathematica, 235 바이트

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]

1

처리 204 200 198 197 바이트

@L 덕분에 5 바이트가 절약되었습니다. 똑똑한 삼항을 사용하여 Serné

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

이것은 각 업데이트에 대해 30 개 이상의 줄 바꿈을 출력합니다 (프레임이 업데이트 될 때 발생 함)

언 골프

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

로 바꾸면 2B가 두 배나 절약 ((i=hour())<10?" ":"")+i((i=hour())>9?i:" "+i)것입니다 ... 추가 골프와 함께 행운을 빌어 요!
Luke

팁 : @ L.Serne 감사합니다 :)
Kritixi Lithos

힘 작업이 또 다른 개선 : ((i=hour()+1)>24?i=0:i)>9되고 (i=hour()+1)>9있기 때문에, hour당신의 증가를 이동해야하는 추가 범위 0-23, 심지어 1의 숫자, 그것은 또한 24보다 클 수 없을거야 출력 i의 조건 내에서 for루프 마지막 루프에서했던 것처럼 총 13B를 절약해야합니다.
누가

@ L.Serné 첫 번째 포인트의 경우 24 시간 시계의 23 + 1이 0 (또는 적어도 생각합니다)이기 때문에 여전히 3 항을 포함해야합니다. 다음으로 ifor 루프의 조건 내 에서 증가분을 이동하면 대신에 i시작되어 바이트를 추가해야하며 바이트 수는 여전히 동일합니다. 그럼에도 불구하고, 1 바이트 더 골프를 도와 주셔서 감사합니다 :)10i++<=minute()
Kritixi Lithos

1

C, 239 바이트

#include<time.h>
#include<unistd.h>
#define F printf(
void d(n,p){for(;n--;F"%c",p));}int main(){time_t*t;for(;;){d(30,10);time(t);int*m=localtime(t);F"%2d ",m[2]);d(m[1],45);F"\n%2d ",(m[2]+1)%24);d(60-m[1],45);F"\n");sleep(1);}return 0;}

Seth와 Abel의 항목에서 영감을 얻은 다음 필요에 따라 다음 시간 동안 24 시간 대신 24 대신 0을 출력하고 30 줄을 사용하여 화면을 지 웁니다.


1

SmileBASIC, 55 바이트

TMREAD OUT H,M,
CLS?H,"-"*M?(H+1)MOD 24,"-"*(60-M)EXEC.

설명:

TMREAD OUT HOUR,MINUTE,
CLS
PRINT HOUR,"-"*MINUTE
PRINT (HOUR+1) MOD 24,"-"*(60-MINUTE)
EXEC 0 'runs the code stored in slot 0 (the default)

참고 : SmileBASIC에는 텍스트 열이 50 개뿐이므로 좋지 않습니다 ...


1

C 번호 181 176

for(;;){Console.Clear();var t=DateTime.Now;var h=t.Hour;var m=t.Minute;Console.Write("{0,2} {1}\n{2,2} {3}",h,"".PadLeft(m,'-'),++h%24,"".PadLeft(60-m,'-'));Thread.Sleep(100);}

이 코드는 using System.Threading; 라인이 포함되어 .

풀 클래스 :

class Program
{
    static void Main(string[] args)
    {
        Console.Title = string.Format("Started the app at: {0}", DateTime.Now.TimeOfDay);
        //new Timer((o) => { Console.Clear(); var t = DateTime.Now; var h = t.Hour; var m = t.Minute; Console.Write("{0,2} {1}\n{2,2} {3}", h, "".PadLeft(m, '-'), ++h % 24, "".PadLeft(60 - m, '-')); }, null, 0, 60000);

        for (; ; ) { Console.Clear(); var t = DateTime.Now; var h = t.Hour; var m = t.Minute; Console.Write("{0,2} {1}\n{2,2} {3}", h, "".PadLeft(m, '-'), ++h % 24, "".PadLeft(60 - m, '-')); Thread.Sleep(100); }

        Console.ReadKey(true);
    }
}

이 솔루션은 루프를 종료 할 수있는 방법이 없으므로 (원래 주석 처리 된 별도의 스레드에서 코드를 실행) Console.ReadKey문이 중복됩니다. 종료하는 유일한 방법은 콘솔 창을 Ctrl+Break
닫거나

이것은 메소드 나 프로그램이 아닌 코드 스 니펫 일뿐 using System.Threading;이며 사용하는 경우 바이트 수에 포함해야합니다. 와 동일합니다 Using System;.
TheLethalCoder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.