디지털 시계 표시


20

디지털 시계 표시

(나는 많은 시계 도전이있는 것을 보았습니다. 나는 그들을 모두 읽으려고 노력했습니다. 이것이 독창적이라고 확신합니다)

계속 형식으로 표시되는 디지털 시계를 업데이트하는 코드 작성 h:m:sh, m그리고 s1 또는 2 개의 문자를 점유 할 수 있습니다. @BlueEyedBeast와 같은 간단한 용어로 제한 사항은 기본적으로 표시된 시간을 대체하기를 원합니다.

  • 개행은 허용되지 않습니다
  • 후행 공백이 허용됩니다
  • 다른 후행 문자는 허용되지 않습니다
  • 몇 초도 놓치지 않아야합니다 (57-> 59는 허용되지 않음).
  • "0"으로 시작하는 숫자는 2자를 초과하지 않는 한 허용됩니다.
  • 코드는 어떤 입력도받지 않아야합니다
  • 입력 한 언어가 현재 시간을 입력하지 못하면 표준 적으로 허용되는 방식으로 최대 8 바이트를 입력 할 수 있습니다.
  • 출력은 표준 출력이어야합니다
  • 이것은 codegolf이므로 최단 답변이 승리합니다!

이 프로그램은> <>에서 불가능하기 때문에 *> <> (불가사리)라는 언어로 작업하고 있습니다 (파일 i / o를 기다리십시오). 여기에 작동하는 디지털 시계 프로그램이 있습니다 (무용지물). 이 프로그램은 *> <>로 작성되었습니다 .

s":"m":"hnonon"   "ooo88888888888ooooooooooo1S

참고 : s = 초, m = 분, h = 시간, S = 절전 (100ms * x)을 제외하고 모든 것이> <>와 동일합니다.

이 결과는 다음과 같습니다.

14:44:31

종료 될 때까지 100ms마다 업데이트

허용되지 않는 예

다음은 허용되지 않습니다 :

1:

14:44:3114:44:32

2 :

14:44:31 14:44:32

삼:

14:44:31
14:44:32

보이는 후행 문자없이 출력 된 첫 번째 라인에 시간이 남아 있어야합니다. 그러나 터미널을 지우면 여전히 후행 문자가 없으므로 허용됩니다.


1
우리는 100ms를 기다려야합니까, 아니면 영원히 계속 업데이트 할 수 있습니까?
Blue

1
기다릴 필요가 없습니다. 기다림은 예제가하는 것입니다.
redstarcoder

2
도전 요구 사항이 너무 엄격 해 보입니다.
mbomb007

1
@ mbomb007 나는 현재의 답변이 어쨌든 따르지 않는 것처럼 "프로그램이 신호 / 인터럽트가 아닌 사용자 입력에서 종료 할 수 있어야합니다"를 제거했습니다.
redstarcoder

1
프로그램이 OS의 특정 로컬 설정에 의존 할 수 있습니까?
raznagul

답변:


5

파이크, 6 바이트

Ctr\ J

여기 사용해보십시오!

이것이 유효하다고 생각합니다. 유효한 출력을 위해 공백 문자를 캐리지 리턴으로 바꾸십시오 (온라인으로 작동하지 않음)


죄송합니다. 시간이 지나면 줄 바꿈 문자 나 후행 문자가 허용되지 않습니다. 보다 명확하게하기 위해 두 가지 예를 들어 보겠습니다.
redstarcoder

나는 스펙에서 그것을 보지 못했습니까?
Blue

1
첫 번째 줄은 개행은 허용되지 않으며 세 번째 줄은 후행 문자가 없다고 말합니다. 확실하지 않은 경우 죄송합니다. 문제를 해결하는 데 도움을 주셔서 감사합니다.
redstarcoder

예전의 시간을 대체하고 싶습니까?
Blue

그렇습니다! 현재 코드가 완벽 해 보입니다.
redstarcoder

10

HTML + JS (ES6), 8 + 60 = 68 바이트

Chrome에서 테스트되었습니다.

setInterval`a.innerHTML=new Date().toLocaleTimeString('fr')`
<a id=a>

-1 바이트 (@ETHProductions) : 대신 프랑스어 시간 형식을 사용하십시오. .toTimeString().slice(0,8)


HTML + JS (ES6), 8 + 62 = 70 바이트

이것은 FireFox에서 작동합니다.

setInterval('a.innerHTML=new Date().toLocaleTimeString`fr`',0)
<a id=a>

-3 바이트 (@ETHProductions) : 대신 프랑스어 시간 형식을 사용하십시오. .toTimeString().slice(0,8)


2
어떻게 작동합니까? 나는 이전에 백틱 구문을 본 적이 없다. 빠른 검색 후 아무것도 찾을 수 없습니다.
Carcigenicate

1
Inox (Chromium)에서 나를 위해 일하기
redstarcoder

1
@Carcigenicate 최신 JavaScript 사양 인 ECMAScript6의 일부입니다. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
darrylyeo 23

@darrylyeo 감사합니다. 리터럴 구문에서 찾을 수는 있지만 여기서 어떻게 적용되는지 알 수 없습니다. 사양을 다시 읽어야합니다. 나는 여전히 백틱 이전의 기능이 어떻게 사용되는지 이해하지 못한다.
Carcigenicate

2
파이어 폭스에서 3 바이트를 저장할 수 있습니다 new Date().toLocaleTimeString`fr` (와 크롬 1에서 1 바이트 ...TimeString('fr'))
ETHproductions

6

파이썬 2, 50 바이트

( ctime인수가없는 Python 2.1 이상 )

import time
while 1:print'\r'+time.ctime()[11:19],

time.ctime()hh : mm : ss를 사용하여 슬라이스 할 수있는 형식화 된 문자열을 생성합니다 [11:19](날짜와 시간에 관계없이 동일한 위치에 유지됨).

print'\r'텍스트 앞에 캐리지 리턴 을 적용하고 텍스트를 튜플의 첫 번째 항목으로 설정 ,하면 암시 적 후행 을 효과적으로 억제 '\n'하고 이전에 작성된 출력을 덮어 씁니다.

while 1 영원히 반복됩니다.


3
나는 이것이 ,파이썬 2.7.12에서 줄 바꿈을 억제하기 위해 결국에는 줄 바꿈 이 필요하다고 생각합니다 .
redstarcoder

예, 맞습니다 ... 업데이트
Jonathan Allan

5

Mathematica, 48 41 37 28 바이트

Do[s=Now[[2]],∞]~Monitor~s

출력은 TimeObject계속 새로 고침됩니다.

다음과 같습니다 : enter image description here

대체 버전

48 바이트 :

Dynamic@Refresh[TimeObject[],UpdateInterval->.1]

53 바이트 :

Dynamic@Refresh[DateString@"Time",UpdateInterval->.1]

1
매초마다 업데이트하면서 몇 초도 건너 뛰지 않도록 했습니까? (예 : 11:11:11-> 11:11:13)
레드 스타 코더

Dynamic@{DateString@TimeObject[], Clock[]}[[1]]
DavidC

1
@redstarcoder 그것은 내가 100ms마다 갱신으로 변경, 모든 ~ 1.002s을 업데이트
JungHwan 분을

웰프, 난 실제로 필요하지 않다는 것을 깨달았습니다 Pause.
JungHwan Min

Dynamic@{Now,Clock[]}[[1]]는 26 바이트이며 datetime 객체를 보여줍니다. Dynamic@{DateString@"Time",Clock[]}[[1]]단지 40 바이트 및 HH 출력한다 : MM : SS
켈리 Lowder

5

프로그램을 중지하기위한 비 신호 UI 입력에 대한 요구 사항이 제거되었음을 알 수 있습니다. 이제 우리는 할 수 있습니다 :

배쉬 + 코어 유틸리티, 28

yes now|date -f- +$'\e[2J'%T

yes 줄당 한 번씩 문자열 "now"를 파이프로 지속적으로 출력합니다.

date -f-읽기는 각 "지금"을 현재 시간으로 해석 한 다음 필요한 형식으로 출력합니다. 형식 문자열에는 화면을 지우는 ANSI 이스케이프 시퀀스가 ​​포함됩니다. date 않는 출력이 날짜 이후에 줄 바꿈 - 아니에요 확인하면 화면이 어쨌든 때마다 삭제되기 때문에이 자격을 상실.

자격이 상실되면 tr대신 사용할 수 있습니다 .

배쉬 + coreutils, 31

yes now|date -f- +%T|tr \\n \\r

이전 답변 :

배쉬 + X, 32

xclock -d -update 1 -strftime %T

불행히도 이것은 매 초마다 업데이트 할 수 있습니다. 자격이 상실되면 대신 다음과 같이 할 수 있습니다.

배쉬 + 코어 유틸리티, 43

until read -t0
do printf `date +%T`\\r
done

초를 건너 뛰지 않는 한 초마다 업데이트하는 것이 좋습니다 (IE : 12-> 14).
redstarcoder

나는 당신의 개행을 허용합니다! 나는이 사건이 일어날 것이라고 결코 예상하지 않았다.
redstarcoder

이것이 허용됩니까? date +$'\e[2J'%T;$0
Evan Chen

@EvanChen no, 각 반복은 새로운 프로세스를 재귀 적으로 생성하고 결국 스택 오버플로와 유사한 사용 가능한 메모리 또는 PID 공간을 사용하기 때문입니다. 그러나 당신은 date +$'\e[2J'%T;exec $024 바이트를 위해 할 수 있습니다 ...
Digital Trauma

4

QBIC , 6 바이트

{_C?_d

{      Starts a DO-loop
 _C    CLS
   ?   PRINT
    _d TIME$

화면을 계속 지우고 시스템 시간을 형식으로 인쇄합니다 22:03:41.


3

Clojure에서, 150 (136) 141 바이트

V3 : 141 바이트 :(

버그 수정을 위해 +5 바이트 시간이 0으로 채워지지 않으므로 시간이 변경되면 시계가 "축소"되고 확장 될 수 있습니다. 마지막 자리가 더 이상 지워지지 않았기 때문에 줄어든 때 "번짐"이었습니다. 모든 부분을 덮어 쓰도록 끝에 공백을 추가하여 수정했습니다.

#(while true(flush)(print(str(apply str(repeat 9"\b"))(.format(java.text.SimpleDateFormat."H:m:s")(java.util.Date.))"   "))(Thread/sleep 99))

V2 : 136 바이트

#(while true(flush)(print(str(apply str(repeat 9"\b"))(.format(java.text.SimpleDateFormat."H:m:s")(java.util.Date.))))(Thread/sleep 99))

-14 바이트를 사용 SimpleDateFormat하여 날짜 형식화 로 전환 합니다. 여전히 큽니다.

V1 : 150 바이트

#(while true(let[d(java.util.Date.)](flush)(print(str(apply str(repeat 9 "\b"))(.getHours d)":"(.getMinutes d)":"(.getSeconds d)))(Thread/sleep 100)))

나는 아마도 날짜를 얻는 데 최악의 방법을 사용하고 있음을 깨달았습니다. 확실히 개선의 여지가 있습니다.

언 골프 드 :

(defn -main []
  (while true
    (let [d (java.util.Date.)]
      (flush)
      (print
        (str
          (apply str (repeat 9 "\b"))
          (.getHours d)":"(.getMinutes d)":"(.getSeconds d)))
      (Thread/sleep 100))))


2

WinDbg, 73 바이트

.do{r$t0=0;.foreach(p {.echotime}){r$t0=@$t0+1;j8==@$t0'.printf"p \r"'}}1

사용자가 Ctrl + Break를 누를 때까지 현재 시간으로 줄을 계속 업데이트합니다.

작동 방식 :

.do                          * Start do-while loop
{
    r$t0 = 0;                * Set $t0 = 0
    .foreach(p {.echotime})  * Foreach space-delimited word in a sentence like "Debugger (not 
    {                        * debuggee) time: Mon Dec  5 14:08:10.138 2016 (UTC - 8:00)"
        r$t0 = @$t0+1;       * Increment $t0
        j 8==@$t0            * If $t0 is 8 (ie- p is the current time)
        '
            .printf"p \r"    * Print p (current time) and \r so the next print overwrites
        '
    }
} 1                          * Do-while condition: 1, loop forever

샘플 출력 (잘, 당신은 아이디어를 얻습니다) :

0:000> .do{r$t0=0;.foreach(p {.echotime}){r$t0=@$t0+1;j8==@$t0'.printf"p \r"'}}1
14:10:12.329

2

PHP, 28 바이트

for(;;)echo date("\rH:i:s");

date함수는 문자 그대로 인식하지 못하는 모든 것을 인쇄합니다.

\r 캐리지 리턴이며 커서를 첫 번째 열로 설정합니다.

로 실행하십시오 -r.


2

MATL , 11 바이트

`XxZ'13XODT

화면을 지우고 지정된 형식으로 시간을 인쇄하는 무한 루프.

MATL Online 에서 사용해 볼 수 있습니다 ! . 이 컴파일러는 실험적입니다. 작동하지 않으면 페이지를 새로 고치고 "실행"을 다시 누르십시오.


2

C #, 82 바이트

()=>{for(;;)Console.Write(new string('\b',8)+DateTime.Now.ToString("HH:mm:ss"));};

8 개의 문자를 새로운 출력으로 지속적으로 덮어 쓰는 익명의 방법. 더미 매개 변수 ( z=>...) 를 허용하도록 수정하면 1 바이트 더 짧아 질 수 있습니다 .

전체 프로그램 :

using System;

public class Program
{
    public static void Main()
    {
        Action a =
        () =>
        {
            for (;;)
                Console.Write(new string('\b', 8) + DateTime.Now.ToString("HH:mm:ss"));
        };

        a();
    }
}

1
가져올 수 System없습니까? 어떤 사람들은 그것을하고 어떤 사람들은 그렇지 않습니다 : /
Yytsi

그는 실제 솔루션에 있지 않았으며 데모 프로그램에서만 가능했습니다. 예, 괜찮습니다
Stefan

2

C #, 65 바이트

()=>{for(;;)Console.Write("\r"+DateTime.Now.ToLongTimeString());};

무한 루프 내에서 같은 줄을 덮어 쓰면 작동


2

SmileBASIC 3.3.2, 38 바이트

@L?TIME$;" ";
GOTO@L

UTF-16 짜증 :(

어쨌든, 이것은 HH : MM : SS의 현지 시간을 그 뒤에 공백이 있고 그 뒤에 줄 바꿈을 반복하여 인쇄합니다. 매 초마다 업데이트되지는 않고 반복적으로 영원히 인쇄됩니다.


죄송합니다. 유효하지 않습니다. 출력을 바꿔야합니다. 그렇지 않습니다. 첫 번째 줄을 설정하고 @L?TIME$읽은 다음 줄 (총 3 줄)을 추가 LOCATE 0, 0하면 트릭이 수행됩니다 (SmileBASIC이 캐리지 리턴을 지원합니까?).
redstarcoder

또한 줄 바꿈을 잊어 버렸고이 40 바이트를 만들었습니다 (UTF-16은 코드 골프에 치명적입니다). Python REPL을 통해 문자 길이를 매우 쉽게 얻을 수 있으며 len(""" YOUR CODE HERE """)UTF-16의 경우 * 2 만하면됩니다.
redstarcoder

SB가 실제로 CR을 수행하지 않는 경우 LOCATE 문을 삭제하여 내 점수를 완전히 파괴해야합니다 .P 또는 CLS : VSYNC도 나쁩니다.
달팽이 _

예, 슬프게도이 솔루션은 그것 없이는 유효하지 않습니다. 그래도 좋은 소식! SmileBASIC은 UTF-8로 점수가 매겨집니다 .
redstarcoder

2

C, 134 (116) 89 80 76 75 73 바이트

main(n){for(;time(&n);)printf("\r%02d:%02d:%02d",n/3600%24,n/60%60,n%60);}

---- Old versions:
main(n){for(;;)n=time(0),printf("\r%02d:%02d:%02d",n/3600%24,n/60%60,n%60);}

n;main(){for(;;)n=time(0),printf("\r%02d:%02d:%02d",n/3600%24,n/60%60,n%60);}

---- 

n;main(){for(;;)n=time(0),printf("\r%02d:%02d:%02d",n/3600%24,n/60%60,n%60);}

----

Saved 9 more bytes thanks to @nmjcman101 again:
n;main(){for(;;)n=time(0),printf("\r%02d:%02d:%02d",(n/3600)%24,(n/60)%60,n%60);}

----

Saved 27 bytes thanks to @nmjcman101
n,b[9];main(){for(;;){n=time(0);strftime(b,9,"%H:%M:%S",localtime(&n));printf("\r%s",b);}}

----

I figured out I don't need to put `#include<stdio.h>` into the file :)
#include<time.h>
main(){for(;;){time_t n=time(0);char b[9];strftime(b,9,"%H:%M:%S",localtime(&n));printf("\r%s",b);}}

----

#include<time.h>
#include<stdio.h>
main(){for(;;){time_t n=time(0);char b[9];strftime(b,9,"%H:%M:%S",localtime(&n));printf("\r%s",b);}}

당신도 제거 할 수있는 것처럼 보입니다 time.h. 이렇게하면 time_t 유형이 제거되므로 대신 n을 int로 만들어야합니다. 이것은 (같은 외부 주의를 선언하여 수행 할 수 있습니다 n;main...에 대한 필요성을 제거하는) int. char동일한 트릭 으로을 제거 할 수도 있습니다 b[9];main.... 둘 다 현재 int 유형이지만 충분히 유연합니다.
nmjcman101

와, 고마워, 나는 이것이 효과가 있다는 것을 몰랐다. 감사합니다
Stefan

당신은 골프가 자신에게하고 싶은 경우에 저를 중지하지만 나는 또한 꺼내주십시오 strftime...과를 b[9]그냥 이것으로 인쇄했다 : printf("\r%d:%d:%d",(n/3600)%60-29,(n/60)%60,n%60); 괄호가 필요하거나하지 않으면 잘 모르겠어요. 또한 {}문장 사이에 쉼표를 넣어서 집합을 가져올 수 있습니다.for(;;)a,b,c;
nmjcman101

1
이 괄호는 성가시다. (n/60)%60정말요?
anatolyg

1
당신은 선언 1 바이트를 저장할 수 n의 매개 변수로 mainmain(n)대신에n;main()
칼 Napf


2

파스칼, 61 바이트

uses sysutils;begin while 1=1do write(#13,timetostr(now))end.

무료 파스칼에는 SysUtils 장치에서 멋진 시간 루틴이 있습니다. 언 골프 드 :

uses
  sysutils;
begin
  while 1=1 do
    write(#13, timetostr(now));
end.

2

C 65 (이전 64) 바이트

Linux 시스템에서 작동하도록 보장했습니다. :)

@Marco 감사합니다!

f(){while(1){system("date +%T");usleep(100000);system("clear");}}

1

Vim, 26 바이트

qqS<C-r>=strftime("%T")<CR><esc>@qq@q

현재 행의 모든 ​​텍스트를 삭제하고 현재 시간으로 대체하는 재귀 매크로 (예 : 영구 루프)를 만듭니다.


1

Pyth-28 바이트

pyth는 strftime이 없기 때문에 오래갑니다.

#p+"\r"j\:m.[`02`dP>4.d2.d.1


1

젤리 , 8 바이트

13Ọ7ŒTȮß

13Ọ        chr(13), carriage return
   7ŒT     time string, which extends the previous character
      Ȯ    print
       ß   call the whole link again

온라인으로 사용해보십시오!

캐리지 리턴은 온라인으로 작동하지 않으며 인터프리터가 작동하지 않으므로 테스트를 거치지 않았지만 CR 대신 인쇄 가능한 문자를 사용할 때 예상대로 작동합니다.


1

ForceLang, 123 바이트

def s set
s d datetime
s z string.char 8
s z z.repeat 16
label 1
io.write z
io.write d.toTimeString d.now()
d.wait 9
goto 1

datetime.toTimeStringDateFormat.getTimeInstance()로케일에 따라 달라지는 Java의 참조 구현에서 지원 되므로 기본 시스템 로케일을 24 시간을 사용하는 로케일로 설정할 수 있습니다.


1

PowerShell, 30 28 24 20 바이트

4 바이트를 절약하기 위해 raznagul 의 의견 에 따라 내 컴퓨터의 지역을 독일로 변경했습니다 . :)

for(){date -F T;cls}

모든 로케일에서 작동하는 이전 버전.

for(){date -F h:m:s;cls}


0

배치, 36 바이트

@set/p.=␈␈␈␈␈␈␈␈%time:~0,8%<nul
@%0

여기서 ASCII BS 문자 (코드 8)를 나타냅니다.


0

라켓, 71 바이트

(require srfi/19)(let l()(display(date->string(current-date)"↵~3"))(l))

여기서 실제로 CR (hex 0d)입니다. 추가 설명을 위해 프로그램의 16 진 덤프 (16 진 위치의 통지 바이트 4d) :

00000000  28 72 65 71 75 69 72 65  20 73 72 66 69 2f 31 39  |(require srfi/19|
00000010  29 28 6c 65 74 20 6c 28  29 28 64 69 73 70 6c 61  |)(let l()(displa|
00000020  79 28 64 61 74 65 2d 3e  73 74 72 69 6e 67 28 63  |y(date->string(c|
00000030  75 72 72 65 6e 74 2d 64  61 74 65 29 22 0d 7e 33  |urrent-date)".~3|
00000040  22 29 29 28 6c 29 29                              |"))(l))|
00000047

라켓 배포판에 포함 된 SRFI / 19를 사용합니다 . (current-date)현재 현지 날짜 및 시간을 가져옵니다. date->string형식은 ~3ISO-8천6백1시간 - 분 - 초 형식입니다. (let l () ... (l))관용적 무한 루프. 모듈을 (require srfi/19)로드합니다 srfi/19.


0

C, 156 바이트

#include<stdio.h>
#include<time.h>
int main(){time_t a;struct tm *b;char c[9];for(;;){time(&a);b=localtime(&a);strftime(c,9,"%H:%M:%S",b);printf("%s\r",c);}}

0

TI 기본, 40 바이트

(TI-BASIC에서 많은 문자는 2 바이트 토큰이며 행 시작 부분의 콜론은 0 바이트입니다.)

:ClrHome
:Output(1,6,":
:setTmFmt(24
:While 1
:Output(1,1,getTmSrr(0
:getTime
:Output(1,7,Ans(3
:End

0

R, 41 바이트

repeat{cat(format(Sys.time(),"%T"),"\r")}

cat기본 구분 기호가 공백 이므로 하나의 후행 공백이 있습니다.
R GUI의 화면 주사율로 인해 GUI에서이를 실행하면 때때로 몇 초를 건너 뛰지 만 파일에 저장하고 명령 행에서 실행하면 1 초마다 올바르게 표시됩니다.
사용자가 중단 될 때까지 영원히 실행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.