数字を印刷するのにかかった時間


21

概要

次のように、入力を受け取らず、-1000から1000までのすべての整数を昇順でstdoutに出力するプログラムまたは関数を作成します。

-1000
-999
-998
-997
...

その後、これらの数値を印刷するのにかかった時間、またはプログラムの実行の開始からの時間をミリ秒単位で印刷する必要があります(必要に応じて、他の項目も含めることができます。たとえば、time taken:xxxmsはOKです)。浮動小数点数または整数にすることができます(整数を出力する場合は、最も近い値に切り捨てる必要があります)。

サンプルコード

using System;
using System.Diagnostics;
class P
{
    static void Main(string[] args)
    {
        Stopwatch st = Stopwatch.StartNew();
        for (int i = -1000; i <= 1000; i++)
        {
            Console.WriteLine(i);
        }
        Console.WriteLine(st.ElapsedMilliseconds);      
    }
}

制限事項

標準的な抜け穴は許可されていません

その他の情報

それはコードゴルフですので、最短の提出が勝ちます。


@GurupadMamadapurいや、申し訳ありません
Horvathのデビッド・

どうして?私は基本的に、プログラムの最初からすべてのステートメントが関係しているこれらの数字を印刷すると思いますか?
グルパッドママダプール

1
@GurupadMamadapurわかりました、そうです、私はそれに応じて質問を編集します。
Horvathのデビッド・

プログラムは、開始から一定時間待機して、その量を印刷できますか?
-xnor

@xnor私は、それが挑戦を変えるだろうと思う、そして元の挑戦に対するすでに多くの答えがあるので、私はノーと言うだろう。
Horvathのデビッド・

回答:


9

MATL、13バイト

1e3t_y&:!DZ`*

オンラインでお試しください!

       % Implicitly start timer
1e3    % Push 1000
       % STACK: 1000
t_     % Duplicate, negate
       % STACK: 1000, -1000
y      % Duplicate second-top number
       % STACK: 1000, -1000, 1000
&:     % Two-input range
       % STACK: 1000, [-1000, 999, ..., 1000]
!      % Transpose into column vector
       % STACK: 1000, [-1000; 999; ...; 1000]
D      % Display
       % STACK: 1000
Z`     % Push timer value, say t
       % STACK: 1000, t
*      % Multiply
       % STACK: 1000*t
       % Implicitly display

2
非常に素晴らしい!スマートな実装:Implicitly start timer。それは初日からあったのですか、それとも以前のチャレンジの結果ですか?
スティーヴィーグリフィン

@StewieGriffin初日からではない。私はそれを追加しました2016年7月13日に、おそらく課題のカップルで明示的にintiallizeした後、
ルイス・Mendo

9

オクターブ、46 43 36 30 23バイト

tic;(-1e3:1e3)',toc*1e3

これは印刷されます:

ans =

  -1000
   -999
   -998
   -997
   -996
   -995

が気に入らない場合はans =、さらに6バイトを追加する必要がありますdisp

tic;disp((-1e3:1e3)'),toc*1e3

rahnema1からのリマインダーのおかげで、多くのバイトを節約できました。

説明:

tic;                              % Starts timer
         (-1e3:1e3)'              % A vertical vector -1000 ... 1000
    disp((-1e3:1e3)'),            % Display this vector
                      toc*1e3     % Stop the timer and output the time in milliseconds

8

JavaScript、60バイト

(c=console).time();for(i=~1e3;i++<1e3;c.log(i));c.timeEnd();

すべてのイベントをログに記録するには、開発者コンソールからスクリプトを使用する必要があります(そうでない場合、ログは一定量のログが消去されます)。


i=~1e3バイトを保存するには:
ETHproductions

7

CJam、18バイト

es2001{1e3-n}/es\-

オンラインでお試しください!

使い方

es                  Push the current time (milliseconds since epoch) on the stack.
  2001{     }/      For each integer X from 0 to 2000:
       1e3-           Subtract 1000 from X.
           n          Print with a newline.
              es    Push the current time on the stack.
                \-  Swap and subtract.

7

パイソン3.5、80の 77 73バイト

import time
*map(print,range(-1000,1001)),
print(time.process_time()*1e3)

timeitとの使用に関連する以前のソリューションtime.time()は、より大きかった。

悲しいことに、time.process_time()Python 3.3で導入されました。

4バイトを節約してくれたDennisに感謝します!


5

Bash(+ coreutils)、 41494644、42バイト

編集:

  • @Dennisの精度の問題に対処するために、Bash組み込み(時間)を使用するようにリファクタリングされました。
  • |&stderrリダイレクトにBash 4+ を使用することにより、3バイト削減されました。
  • (Thanks @Dennis!)に置き換えることseq -1000 1000でさらに2バイトを節約しましたseq -1e3 1e3
  • 不要なバックスラッシュを削除し、デフォルトの精度(Thx @Dennis!)を使用して-2バイト。

ゴルフ

TIMEFORMAT=%R*1000;(time seq -1e3 1e3)|&bc

オンラインでお試しください!

サイドノート

Bashビルトインの代わりにcoreutilsの「time」ユーティリティを使用すると、 41、35バイトのソリューション:

\time -f "%e*1000" seq -1e3 1e3|&bc

「\」は、 bashに組み込みコマンドではなく実際のコマンドを起動させるためのものです。

残念ながら、coreutilsの時間精度は1/100に過ぎず、有効なソリューションであるかどうかについて懸念が生じています。


4

R、42バイト

system.time(cat(-1e3:1e3,sep="\n"))[3]*1e3

これは印刷されます

.
.
.
998
999
1000
elapsed 
     60 

を削除するにはelapsed、2つの追加バイトが必要です。

system.time(cat(-1e3:1e3,sep="\n"))[[3]]*1e3

4

Bash + GNU utils、43

  • @Dennisのおかげで2バイト節約
  • @zeppelinのおかげで5バイト節約
c=date\ +%s%3N
s=`$c`
seq -1e3 1e3
$c-$s|bc

このdateコマンドは、エポックが現在のナノ秒と連結されてからの秒数を示します。このコマンドは、前後に実行されます。 bc差を取り、印刷します。

オンラインでお試しください


私は17のためにこれをしたいと思っていました:

time seq -1e3 1e3

しかし、時間の出力は必要以上のものを提供します。

real    0m0.004s
user    0m0.000s
sys 0m0.004s

1
あなたは置き換えることによって、2つのバイトを保存することができます10001e3
デニス

「しかし、時間の出力は...を与えます。」...おそらくbashをするべきです。
Hウォルターズ

1
次のように、ms精度で日付を直接キャプチャすることで、おそらく数バイトを節約できますdate +%s%3N
ツェッペリン

4

JavaScript(ES6)、63 59バイト

for(c=console.log,i=~1e3;i<1e3;c(++i));c(performance.now())


いいね new (d=Date)-1000で始まるスペースを削除することにより、3バイトを節約できますfor(t=new(d=Date),c=console.log,i=~1e3;i<1e3;c(++i));c(new d-t)
。– ETHproductions

@ETHproductionsありがとう:)これ~1e3は素晴らしいタッチです。
ジョージリース

1
スニペットの出力でのみからである9521000それはなぜ?
グルパッドママダプール

@GurupadMamadapurスニペット出力は50行に制限されています。(より正確には:最後の50行。)
アーナルド

1
@IsmaelMiguel Amazingはインターフェイスをまったく認識していなかった、performance.now()またはPerformanceインターフェイスをまったく知らなかった
ジョージリース

3

R、66バイト

x=proc.time();for(i in -1e3:1e3)cat(i,"\n");(proc.time()-x)[3]*1e3

おそらく最短ではありませんが、動作します。


proc.time変数に保存できますか?t=proc.time;x=t(); ...
アナン

3

Mathematica、51バイト

p[1*^3#]&@@AbsoluteTiming@Array[p=Print,2001,-1*^3]

説明

Array[p=Print,2001,-1*^3]

保管Print中の関数をp。-1000から始まり、1ずつ増加する2001番号を出力します。

AbsoluteTiming@ ...

経過時間の合計を秒単位で見つけます。

p[1*^3#]&@@ ...

それに1000(秒->ミリ秒)を掛け、pPrint)します。


ああ、あなたは3分で私を打ちました!:)だけでTimingなく(わずかに曖昧な)問題の説明も満足していないのAbsoluteTimingですか?
グレッグマーティン

2
@GregMartin TimingはCPU時間を出力しますが、フロントエンドでかかった時間は含まれません。あれは。カウンターをインクリメントするのにかかる時間Arrayはカウントされますが、画面にそれらの数字を表示するのにかかる時間はカウントされません。この効果は、この単純な例で見ることができますTiming@Print@3。0秒を与えますが、与えAbsoluteTiming@Print@3ません。
ジョンファンミン

3

PHP、110 70バイト

まだ少し長い。しかし、@ AlexHowanskyのヒントで38を節約し、とでさらに2つ節約1e3しました~1e3

for($t=($m=microtime)($i=~1e3);$i++<1e3;)echo"$i
";echo($m(1)-$t)*1e3;

フロートを印刷します。で実行し-rます。


2
microtime()に真の値を渡すと、floatが直接返されます。文字列を追加する必要はありません。
アレックスハワンスキー

そのヒントで-30%。あなたのコメントに対して10回の賛成票を投じることができればと思います。:D
タイタス

PHPにミリ秒単位の時間を返すものがないのは悲しいことです。Javascriptが持っているように。改善を提案することはできません。できる限り小さい。よくやった!
イスマエルミゲル

@IsmaelMiguel JavaScriptにはマイクロ秒がないと思います。:)
タイタス

@Titus私が意図したことは、Javascriptの日付はすべてミリ秒単位で処理されるのに対して、PHPは秒またはマイクロ秒しかなかったということです。
イスマエルミゲル

3

Powershell、27バイト

$1=date;-1e3..1e3;(date)-$1

冗長なデフォルト出力がチャレンジで受け入れられることを指摘してくれたAdmBorkBorkに感謝します。

出力結果は次のようになります。

994
995
996
997
998
999
1000

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 5
Milliseconds      : 679
Ticks             : 56799255
TotalDays         : 6.57398784722222E-05
TotalHours        : 0.00157775708333333
TotalMinutes      : 0.094665425
TotalSeconds      : 5.6799255
TotalMilliseconds : 5679.9255

わずか数ミリ秒の結果が含まれる場合は、元の回答を使用します。

$1=date;-1e3..1e3;((date)-$1).TotalMilliseconds

前に$ 1として時間を節約し、stdoutに自動的に出力し、実行の開始から終了までの時間を取得します。


範囲をohOut-Host)にパイプするだけでMeasure-Command、パイプラインをキャプチャするという事実をバイパスできます。TIOの例
-AdmBorkBork

@AdmBorkBorkポイントは、何かを逃さない限り、バイトを節約するとは思わないということでした。
colsw

Measure-Command{-1e3..1e3|oh}29バイトです。もちろん、それはのおかげで余分なものを出力しますMeasure-Commandが、チャレンジは明示的にそれがOKだと述べています。
AdmBorkBork

実際に他のデータを印刷できるポイントを見逃したため、チャレンジ作成者は、Measure-Commandの非常に冗長な出力が受け入れられるかどうかを言う必要があるかもしれません。また$1=date;-1e3..1e3;(date)-$1、そこでの測定コマンドオプションよりも2バイト短くなります。
colsw17年

そうそう、ハハ。素敵なゴルフ。
AdmBorkBork

2

Perl 6、45バイト

.put for -($_=1e3)..$_;put (now -INIT now)*$_

それを試してみてください

拡張:

# print the values

.put             # print with trailing newline ( method call on 「$_」 )

for              # for each of the following
                 # ( temporarily sets 「$_」 to the value )

-(
  $_ = 1e3       # store 「Num(1000)」 in 「$_」
)
..               # inclusive Range object
$_;

# print the time elapsed

put              # print with trailing newline

(now - INIT now) # Duration object that numifies to elapsed seconds
* $_             # times 1000 to bring it to milliseconds

# The 「INIT」 phaser runs code (the second 「now」) immediately
# as the program starts.

# There is no otherwise unrelated set-up in this code so this is a
# reliable indicator of the amount of time it takes to print the values.

2

J、22バイト

1e3*timex'echo,.i:1e3'

オンラインでお試しください!

timex文字列を実行し、評価にかかった時間を秒単位で返す組み込み関数です。文字列はを使用して範囲[ i:-1000、1000 ]を形成し、を使用してそれをcoluminizes ,.し、builtinを使用してそれを印刷しechoます。


2

Pyth18 15 14バイト

j}_J^T3J;*.d1J

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

説明

これは私のPythonの答えに似ています。

    J ^ T3 Jを1000に設定
  } _ J -1000から1000までのリスト
j新しい行でリストを結合し、暗黙的に印刷する
         ; *。d1Jプログラムの実行からの経過時間(ミリ秒)

編集

  • 3バイトを節約してくれたfryamtheeggmanに感謝します!
  • バイトを保存してくれたbusukxuanに感謝します。

私はこれを試してみましたが、14バイトですが、正しく機能するかどうかはわかりません。プログラムの開始時に改行を追加する必要があります。pyth.herokuapp.com/?code=%0AM%7D_J%5ET3J%2a.d1J&debug=0
busukxuan

2

Noodel17 13 バイト

13バイト

わずかに異なるアプローチを試み、4バイトを節約しました。

ƇQjȥḶGQɱ⁻Ñ€Ƈ⁻

それを試してみてください:)

使い方

Ƈ             # Pushes on the amount of milliseconds passed since 01/01/1970.

 Qjȥ          # Pushes 2001 onto the stack.
 Qj           # Pushes on the string "Qj"
   ȥ          # Converts the string into a number as base 98.

    ḶGQɱ⁻Ñ€   # Loops 2001 times printing -1000 to 1000.
    Ḷ         # Consumes the 2001 and loops the following code 2001 times.
     GQ       # Pushes on the string "GQ"
       ɱ      # Pushes on the current counter of the loop (i)
        ⁻     # Subtracts (i - "GQ") since i is a number, the "GQ" is converted to a number which will fail.
              # So, Noodel will treat the string as a base 98 number producing (i - 1000). 
         Ñ    # Consume what is on the top of the stack pushing it to the screen followed by a new line.
          €   # The end of the loop.

           Ƈ⁻ # Calculates the duration of execution.
           Ƈ  # Pushes on the amount of milliseconds passed since 01/01/1970.
            ⁻ # Pushes on (end - start)

17バイト

ƇGQȥḋɲṡ×2Ḷñ⁺1€ÑƇ⁻

それを試してみてください:)

使い方

Ƈ                 # Pushes on the amount of milliseconds passed since 01/01/1970.

 GQȥḋɲṡ×2         # Used to create the range of numbers to be printed.
 GQ               # Pushes on the string "GQ".
   ȥ              # Converts the string into number as if it were a base 98 number. (which is 1000)
    ḋ             # Duplicates the number and pushes it onto the stack. 
     ɲ            # Since the item on top is already a number, makes the number negative (random thing I threw in at the very beginning when made the langauge and totally forgot it was there)
      ṡ           # Swaps the first two items on the stack placing 1000 on top.
       ×2         # Doubles 1000 producing... 2000

         Ḷñ⁺1€Ñ   # Prints all of the numbers from -1000 to 1000.
         Ḷ        # Consumes the 2000 to loop the following code that many times (now -1000 is on the top).
          ñ       # Prints the value on top of the stack followed by a new line.
           ⁺1     # Increment the value on top of the stack by 1.
             €    # End of the loop.
              Ñ   # Since 1000 is still not printed, this consumes 1000 and prints it followed by a new line.

               Ƈ⁻ # Calculates the number of milliseconds to execute program.
               Ƈ  # Pushes on the amount of milliseconds passed since 01/01/1970.
                ⁻ # Pushes on (end - start) in milliseconds.
                  # At the end, the top of the stack is pushed to the screen.

スニペットは、完了にそれほど時間がかからないように、値-4〜4を使用しています。

<div id="noodel" code="ƇFȥḶAɱ⁻Ñ€Ƈ⁻" input="" cols="10" rows="10"></div>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


チャレンジの前後にこの言語を作成しましたか?
Rɪᴋᴇʀ

@EasterlyIrk、前:)
tkellehe

2

TI-Basic、22バイト

startTmr
For(A,-ᴇ3,ᴇ3
Disp A
End
startTmr-Ans
  • 多くのコマンドは、1バイトまたは2バイトのトークンで表されます。

  • エミュレートされたTI-84 CSEでテスト済み。


2

Matlab、16 23バイト

tic;(-1e3:1e3)'
toc*1e3

編集:このチャレンジのルールのいくつかに違反していることに気付きました。それは夜遅くに課題を読み飛ばすことを教えてくれます。また、修正された答えはOctaveソリューションとほとんど同じですが、それは人生です。

作成された線形空間配列-1000:1000の各要素を出力します(;がないため、コンソールに出力されます)。

tic / tocは時刻を記録し、tocは時刻をコンソールに出力します。。ミリ秒単位で印刷するには1e3が必要です。


正しい解決策が編集されました。
オーウェンモーガン


2

8番目61 47バイト

8th_devに感謝します(改善された14バイト)

d:msec ( . cr ) -1000 1000 loop d:msec swap - .

これは、-1000から1000までのすべての整数を昇順で印刷し、これらの数字を印刷するのにかかった時間(ミリ秒単位)を印刷します。

-1000
-999
-998
-997
...
997
998
999
1000
4

1
コードを改善するために編集を提案することは、「破壊的」であることに注意してください。代わりに、ゴルフに関する提案をコメントとして提供する必要があります。できれば実行したユーザーにpingを実行しますが、実行できません。meta.codegolf.stackexchange.com/q/1615/34718
mbomb007

1
あなたがそれを承認したことは知っていますが、それはあなた自身の投稿なので問題ありませんが、レビューキューの他のレビュアーはそれを拒否すべきであり、そもそも編集を提案したユーザーはそうすべきではありません
mbomb007

@ mbomb007-これを教えてくれてありがとう。この特定のケースでは、コードを承認する前に確認しましたが、次回はそのようなレビューをスキップまたは拒否します。
カオスマナー

2

Japt、23バイト

2つの同等のソリューションがあります。

Oo(Ð -(A³òA³n @OpXÃ,йn
K=Ð;A³òA³n @OpXÃ;OoÐ -K

最初のものは基本的に以下を行います:

output(-(new Date() - (1000 .range(-1000).map(X => print(X)), new Date())));

つまり、時間を変数に格納する必要を回避するために、減算の途中で数値が出力されます。ただし、可変ルートよりも短くはありません。基本的には次のとおりです。

K = new Date(); 1000 .range(-1000).map(X => print(X)); output(new Date() - K);

Japtの最新バージョン(このチャレンジより新しい)では、Kが自動的に戻るように設定されていますnew Date()。これにより、最初のソリューションが21バイトに削減されます。

Oo(K-(A³òA³n @OpXÃK)n

オンラインでテストしてください!


1

QBIC、34バイト

d=timer[-z^3,z^3|?a]?z^3*(timer-d)

TIMER秒を10進表記で返すQBasic 関数を使用します。見た目をきれいにすると、いくつかのバイトが追加されます。

説明

d=timer     Set 'd' to the current # seconds since midnight
[-z^3,z^3|  FOR -1000 to 1000  --  Note that 'z' = 10 in QBIC, and z^3 saves a byte over 1000
?a          Display the iterator
]           Close the FOR loop
    timer-d Take the current time minus the time at the start of the program -- 0.156201
?z^3*()     Multiply by a thousand and display it   156.201

1

C ++-261

笑いのために、C ++の回答を投稿すると思いました。

#include <iostream>
#include <chrono>
using namespace std::chrono; using c=std::chrono::system_clock; void p(){c::time_point n=c::now();for(int i=-1001;++i<1001;)std::cout<<i<<"\n";std::cout<<(duration_cast<milliseconds>(system_clock::now()-n)).count()<<"\n";}

それが何をしていて、それをどのように呼ぶかを決定するための演習として残しておきます-それほど難しくないはずです。


1

Scala、77バイト

def t=System.nanoTime
val s=t
Range(-1000,1001)map println
println((t-s)/1e6)

1

ForceLang、124

set t timer.new()
set i -1000
label 1
io.writeln set i i+1
if i=1000
 io.write math.floor 0.001.mult t.poll()
 exit()
goto 1

注:stderrこれを実行するときは抑止する必要があります。メタに関するコンセンサスは、これによりバイトカウントのペナルティが発生しないということです。


1

SimpleTemplate、92バイト

私を本当に殺したのは、時間を記録する必要があることです。

{@callmicrotime intoX 1}{@for_ from-1000to1000}{@echol_}{@/}{@phpecho microtime(1)-$DATA[X]}

(まだ)数学がないので、これは物事をかなり難しくし、PHPを直接書くことを強制します。

ゴルフをしていない:

{@call microtime into start_time true}
{@for i from -1000 to 1000 step 1}
    {@echol i}{@// echoes a newline after}
{@/}
{@php echo microtime(true) - $DATA["start_time"];}

免責事項:

これをコミットe118ae72c535b1fdbe1b80c847f52aa161854fdaで実行しましたでしました。

最新のコミットは、ここにあるコードに関係のない何かを修正することでした。


1

C 134 133のバイト

1バイトを節約してくれた@Thomas Padron-McCarthyに感謝します。

f(){clock_t s,e;s=clock();for(int i=-1000;i<1001;i++)printf("%d\n",i);e=clock();printf("%lf",((double)((e-s))/(CLOCKS_PER_SEC))*1e3);}

非ゴルフバージョン:

void f()
{   
  clock_t s,e;

  s=clock();

  for(int i=-1000;i<1001;i++)
    printf("%d\n",i);   

  e=clock();
  printf("%f",((double)((e-s))/(CLOCKS_PER_SEC))*1e3);

 }

「%lf」を「%f」に変更すると、1文字を保存できます。
トーマスパドロン-マッカーシー

どうしてint t=time(null);... printf("%d",time(null)-t)?短いAFAIK
SIGSTACKFAULT


1

Clojure、94バイト

(let[t #(System/currentTimeMillis)s(t)](doseq[n(range -1e3 1001)](println n))(println(-(t)s)))

私はこれがどれくらい長くなったかに失望していますが、Clojureがゴルフに適した言語であると主張した人は誰もいなかったと思います。

開始時刻を記録し、ループし、現在時刻から開始時刻を差し引いて出力する単純なソリューション。Clojureにms-time getterが不足している場合を除き、これがどのように短くなるかわかりません。たぶんある種の暗黙的なループでしょうか?

(defn time-print []
  (let [t #(System/currentTimeMillis) ; Alias the time-getter to "t"
        start (t)] ; Record starting time
    (doseq [n (range -1000 1001)] ; Loop over the range...
      (println n)) ; ... printing the numbers

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