デジタル時計を表示する


20

デジタル時計を表示する

(私は多くの時計の課題があり、それらをすべて読み込もうとしましたが、これはユニークだと確信しています)

連続形式で表示されたデジタル時計を更新するいくつかのコードを書くh:m:s場合hm及びs1又は2文字ずつを占めることができるが。@BlueEyedBeastが述べたように、単純な用語での制限は、基本的に、示されている時間を置き換えることを望んでいます。

  • 改行は使用できません
  • 末尾のスペースは許可されます
  • 他の末尾の文字は使用できません
  • 秒を逃さないでください(57-> 59は許可されていません)
  • 「0」で始まる番号は、2文字を超えない限り許可されます。
  • コードは入力を受け付けてはいけません
  • 言語が入力なしで現在の時刻を取得できない場合、標準で許可されている方法で最大8バイトの入力に使用できます
  • 出力は標準出力にする必要があります
  • これはcodegolfなので、最短の答えが勝ちます!

私は*> <>(starfish)という名前の言語に取り組んでいます。これは、このようなプログラムは> <>(ファイルI / Oを待つだけ)では不可能だからです。その中に動作するデジタル時計プログラムがあります(未使用)。このプログラムは*> <>で書かれています

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

注:s =秒、m =分、h =時間、S = sleep(100ms * x)を除いて、このすべては> <>と同じです。

この出力:

14:44:31

終了するまで100msごとに更新します。

許可されない例

以下は許可されていません。

1:

14:44:3114:44:32

2:

14:44:31 14:44:32

3:

14:44:31
14:44:32

時刻は、出力された最初の行に残り、目に見える末尾の文字がない必要があります。ただし、端末をクリアすることは許可されます。これは、末尾文字がまだないためです。


1
100ミリ秒待たなければならないのですか、それともいつまでも更新し続けることができるのでしょうか?
ブルー

1
待つ必要はありません。待ち時間は例のとおりです。
redstarcoder 16

2
チャレンジの要件は私には厳しすぎるようです。
mbomb007 16

1
@ mbomb007「プログラムは、シグナル/割り込みではないユーザー入力で終了できる必要があります」を削除しました。現在の回答はとにかくそれに従っていないようです。
redstarcoder 16

1
プログラムは、OSの特定のローカル設定に依存できますか?
raznagul 16

回答:


5

パイク、6バイト

Ctr\ J

ここで試してみてください!

これは有効だと思います。有効な出力のためにスペース文字をキャリッジリターンに置き換えます(オンラインでは機能しません)


申し訳ありませんが、そうではありません。改行は許可されていません。より明確にするために2つの例を示します。
redstarcoder 16

私は仕様にそれを見ていませんか?
ブルー

1
最初の行は改行が許可されていないことを示し、3行目は末尾の文字がないことを示しています。それが不明な場合は申し訳ありませんが、修正するためのアドバイスをいただければ幸いです。
redstarcoder

それで、あなたはそれが示された古い時間を置き換えることを望むか?
ブルー

はい、正確に!現在のコードは完璧なようです。
redstarcoder 16

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
これはどのように作動しますか?私は以前にバックティック構文を見たことがありません。すばやく検索しても、何も見つかりません。
発がん性16

1
Inox(Chromium)での作業
redstarcoder

1
@Carcigenicateこれは、最新のJavaScript仕様ECMAScript6の一部です。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
darrylyeo

@darrylyeoありがとう。リテラル構文で物事を見つけることはできましたが、ここでどのように適用されるのかわかりませんでした。仕様をもう一度読む必要があります。バックティックに先行する関数がどのように使用されるのか、まだわかりません。
発癌性16

2
あなたはとFirefoxのいずれかで3つのバイトを保存することができますnew Date().toLocaleTimeString`fr` (Chromeで1バイト1と...TimeString('fr')
ETHproductions

6

Python 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
,Python 2.7.12では改行を抑制するために最後に改行が必要だと思います。
redstarcoder 16

おっと、あなたは正しいです...更新
ジョナサンアラン

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秒)
redstarcoder

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

1
@redstarcoderそれは私が100ms毎に更新に変更し、すべての〜1.002sを更新
JungHwan分を

Welp、私は実際には必要ないことに気付いたPause
ジョンファンミン

Dynamic@{Now,Clock[]}[[1]]26バイトで、日時オブジェクトを示します。Dynamic@{DateString@"Time",Clock[]}[[1]]40バイトで、hh:mm:ssのみを出力します
ケリーロウワー

5

プログラムを停止するための非シグナルUI入力の要件が削除されたことがわかります。そのため、次のことができます。

Bash + coreutils、28

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

yes 文字列「now」を1行に1回連続してパイプに出力します。

date -f-readは、各「現在」を現在の時刻として解釈し、必要な形式で出力します。フォーマット文字列には、画面をクリアするためのANSIエスケープシーケンスが含まれています。 出力日付の後の改行は-画面がとにかくたびにクリアされているので、私は、確かこの失格場合じゃありません。 date

失格した場合は、使用できます tr代わりに。

Bash + coreutils、31

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

以前の回答:

Bash + X、32

xclock -d -update 1 -strftime %T

残念ながら、これは毎秒しか更新できません。それが不適格であれば、代わりにこれを行うことができます:

Bash + coreutils、43

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

秒をスキップしない限り(IE:12-> 14)、1秒ごとに更新しても問題ありません。
redstarcoder 16

改行を許可します!私はこの事件が起こるとは思っていませんでした。
redstarcoder 16

これは許可されていますか?date +$'\e[2J'%T;$0
エヴァンチェン

@EvanChenいいえ、各反復は再帰的に新しいプロセスを生成し、最終的にはスタックオーバーフローと同様に、利用可能なメモリまたはPIDスペースを使い果たします。しかし、あなたができるdate +$'\e[2J'%T;exec $024のバイト...のために
デジタルトラウマ

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バイト。時刻にはゼロが埋め込まれていないため、時刻が変更されると、クロックが「縮小」および拡張されます。最後の桁がクリアされなくなったため、縮小すると「不鮮明」になりました。末尾にスペースを追加して、すべてが上書きされるように修正しました。

#(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文字を新しい出力で上書きする匿名メソッド。ダミーパラメーターを受け入れるように変更する場合は、1バイト短くすることができます(z=>...)。

完全なプログラム:

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

彼はただのデモプログラムでは、彼の実際の解決策ではなかったので、はい、それは大丈夫です
ステファン・

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にする必要があります。これはmainの外で宣言することで実行できます(などn;main...)。これにより、の必要がなくなりintます。char同じトリックでを取り除くこともできますb[9];main...。現在は両方ともint型ですが、十分な柔軟性があります。
nmjcman101 16

うわー、どうもありがとう、これがうまくいくとは知らなかった。ありがとう
ステファン

自分でゴルフをしたい場合は私を止めてください。しかし、私はそれを取り出して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、真剣に?
アナトリグ16

1
たとえば、代わりにnmainmain(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マシンでの動作が保証されています。:)

@マルコありがとう!

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 bytes

Changed my computer's region to Germany based on raznagul's comment to save 4 bytes. :)

for(){date -F T;cls}

Previous version that works in all locales.

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


0

Batch, 36 bytes

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

Where represents the ASCII BS character (code 8).


0

Racket, 71 bytes

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

Where the is actually a CR (hex 0d). Hex dump of the program for further clarification (notice byte at position hex 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

Uses SRFI/19 included with the Racket distribution. (current-date) gets the current local date & time. The date->string format ~3 is ISO-8601 hour-minute-second format. (let l () ... (l)) in an idiomatic infinite loop. (require srfi/19) loads the srfi/19 module.


0

C, 156 bytes

#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-Basic, 40 Bytes

(In TI-BASIC, many characters are 2 byte tokens, and colons at the beginning of a line are 0 extra bytes)

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

0

R, 41 bytes

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

Has one trailing space (because of cat default separator being a space).
Because of the refresh rate of the R GUI, running this in the GUI will occasionally skip some seconds, but if you save it to a file and run it on the command line it will display correctly every single seconds.
Will run forever until user interrupt.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.