ドラッグレースカウントダウン


10

チャレンジ:

仮定のシナリオでは、レースのカウントダウンタイマーは、カウントの間にランダムな間隔を設けて、早すぎる開始を防ぎます。

3 (0.82 seconds pass), 2 (0.67 seconds pass), 1

入力:

何もない


出力:

各カウントの間に0.50秒から1秒のランダムな時間間隔で3つの数値を印刷するプログラム(または関数)を作成します。


注意:

  • プログラムは、各数値(3、2、1 )をランダムな間隔(0.50〜1から100分の1までの任意の数値、ハードコーディングなし)で出力する必要があります。ランダムな間隔の精度は、数百に達する必要があります(例:0.52)。間隔のみを出力する必要はなく、カウントのみを出力する必要があります。
  • @JoKingが明らかにしたように、私は一様にランダムであることを意味します(あなたの言語の擬似ランダムジェネレーターを使用できます。
  • 多くの人々が明らかにしたように、私は本当に0.5から1の間の2桁の数字を意味します(0.50、0.51など、0.98、0.99、1までずっと)

これはであるため、バイト数が最も少ないプログラムが優先されます。


4
こんにちはLordColus、PPCGへようこそ!これは良い最初の挑戦のようです。将来の課題に備えて、まずサンドボックスを調べてすべての詳細を解決することをお勧めします。

1
@LordColus:元のステートメントと他のいくつかの編集を改善し、必要に応じて確認して承認します。
ムハンマドサルマン

1
削除された前のコメントで述べたように、「厳密にランダム」を指定することは、厳密に厳しくない場合は問題ありません。現在のところ、一時停止時間は小数点以下2桁の精度で一定でなければなりません(または少なくとも小数点以下2桁ですか?)。それは、分布がセット0.5、0.51、0.52 、...、1で均一であることを意味しますか、それとも0.5と1の間の浮動小数点(おそらく2つ以上の小数を持つ)になりますか?
ルイスメンドー

2
最近の編集でクリアされますか?
LordColus

6
@ mbomb007同じ...なぜこれが再び閉じられたのですか?基本的に3から1までカウントされ、その間に2つの.50-1.00秒の待機があります。本当に複雑ではありません。
魔法のタコ

回答:



2

SmileBASIC、64 62バイト

?3M?2M?1DEF M
M=MILLISEC
WHILE MILLISEC<M+500+RND(501)WEND
END

残念ながら、1/60秒の間隔しかサポートしていないため、WAITは使用できません(入力/出力はフレームごとに1回しか更新されないため、それ以下は通常は役に立ちません)。

これを実行しているシステムの速度に応じて調整する必要があるため、有効ではない可能性があります(46バイト):

?3M?2M?1DEF M
FOR I=-66E4-RND(66E4)TO.NEXT
END

無効なWAITバージョン(36バイト):

?3WAIT 30+RND(30)?2WAIT 30+RND(30)?1

2

R46 44バイト

実際のカウントダウンの場合:

for(i in 3:1){cat(i)
Sys.sleep(runif(1,.5))}

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

最初はチャレンジを誤解していたため、印刷間隔(46バイト)2文字を保存してくれたGiuseppeに感謝します。

for(i in 3:1)cat(i,format(runif(1,.5),,2)," ")

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


私はrunif()デフォルト01それぞれ左右のエンドポイントを持っていると信じているのでrunif(1,.5)、両方で-2バイトでも同じように動作するはずです。
ジュゼッペ

@Giuseppeに感謝します。
JayCe

2

Python 2、58バイト

from time import*
for a in'321':print a;sleep(1-time()%.5)

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

(多くの人がそうするように)シード時間を要する非常に単純な乱数ジェネレーターを作成しました。


改善点


1-time()%.5トリックを行う必要があります。([3,2,1]ちなみに必要)
ジョナサンアラン


@JonathanAllan非常に良い点、更新。
ニール

これもカウントダウンの前に一度スリープします。寝る前にprint文が必要だと思います。
魔法のタコ

@MagicOctopusUrn合意、更新。
ニール

1

APL + WIN、37バイト

3⋄r←⎕dl ↑n←.49+.01×2?51⋄2⋄r←⎕dl 1↓n⋄1

1

Java 8、86バイト

v->{for(int i=0;++i<4;Thread.sleep((int)(Math.random()*500+500)))System.out.print(i);}

区切り文字なしで印刷します。それが許可されていない場合はprintprintln(改行区切り文字)に変更して+2バイトにします。

オンラインでお試しください。
間隔が[500, 1000)ms の正しい範囲であることを証明します。

説明:

v->{                        // Method with empty unused parameter and no return-type
  for(int i=0;++i<4;        //  Loop in range [1,4)
      Thread.sleep((int)(Math.random()*500+500)))
                            //    After every iteration: sleep for [500, 1000) ms randomly
     System.out.print(i);}  //   Print the current number


1

JavaScript(Node.js)75 65 60バイト

  • 10バイト削減した@Shaggyに感謝
  • 5バイト削減した@Kevin Cruijssenに感謝
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

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



1
@Shaggyは、Dateを使用している場合、本当にランダムになりますか?(2回目のランダム発生)
ダニエルインディー

1
なんで*1000%500+500?あなただけを使用することができます*500+500
ケビンクルイッセン

仕様の更新では、おそらく十分にランダムではありませんが、説明を求める価値があるかもしれません。
シャギー

1

Perl 5、39バイト

@ jonathan-allan + @xcaliのおかげで、徐々に39バイトに調整されました。

say-$_+select$a,$a,$a,1-rand.5for-3..-1

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


1
1-rand(.5)動作しますか?
ジョナサンアラン

良いアイデア。その後も使用1-rand.5できます。
スティーブ

1
括弧を削除し、カウンタを負に変更して、さらに4バイトをカットします。 オンラインでお試しください!
Xcali

1

チップ -wingjj、33バイト

0123456e7f s
???????p*9S!ZZZtaABb

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

チップで、我々は正確に待つことができない1 / 100秒のが、我々は待つことができます1 / 256個の私たちがここでそれを使用して、第二の。

p、尋ねられたとき、スタックの先頭(1バイト)*の実行を一時停止します1 / 256個の秒。各サイクルで、我々は常にスタック(高ビットセット128 / 256)と(とランダムに他のすべてのスタック・ビットを設定する?の)。これにより、0.50〜1.00秒の均等な分布が得られます。

引数の一部、-w及び-gjj、入力は、代わりに標準入力を使用する、からカウントダウンでなければならないことを指定0xFFする0x00(その後、ラッピング)。これを使用して、カウントダウン用の下位2ビットを提供します。他のすべての出力ビットは(ASCIIに対応する値で)一定のまま0です。

最後に、完了したら、プログラムを終了しt、最後の数字の後に一時停止しないようにします。


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