Seret Countdown Balap

10

Tantangan:

Dalam skenario hipotetis, penghitung waktu mundur untuk suatu perlombaan memiliki interval acak antara penghitungan, untuk mencegah permulaan yang prematur, misalnya

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

Memasukkan:

tidak ada


Keluaran:

Tulis program (atau fungsi) yang mencetak 3 angka dengan interval waktu acak dari 0,50 detik hingga 1 detik di antara setiap hitungan.


catatan:

  • Program keharusan keluaran setiap nomor (3, 2, 1) dengan acak ( setiap angka antara 0,50 dan 1 ke seratus, tidak ada hard-coding) interval waktu antara masing-masing. Ketepatan interval acak harus mencapai ratusan (misalnya: 0,52). Anda tidak diharuskan untuk mengeluarkan interval, hanya hitungan.
  • Seperti yang diklarifikasi oleh @JoKing, maksud saya seragam acak (Anda dapat menggunakan generator pseudo-acak bahasa Anda.
  • Seperti yang banyak orang jelaskan, maksud saya adalah angka 2-desimal antara 0,5 dan 1. (0,50, 0,51, dll, hingga 0,98, 0,99, 1)

Ini adalah , sehingga program dengan jumlah byte terendah menang.

LordColus
sumber
4
Hai LordColus, dan selamat datang di PPCG! Ini sepertinya tantangan pertama yang bagus. Untuk tantangan di masa depan, kami sarankan melalui kotak pasir terlebih dahulu untuk menyelesaikan semua detail.
1
@LordColus: Saya meningkatkan pernyataan asli dan beberapa suntingan lainnya, lihat dan setujui jika Anda mau.
Muhammad Salman
1
Seperti yang saya katakan di komentar sebelumnya yang telah dihapus, menetapkan "acak seragam" baik-baik saja jika Anda tidak terlalu ketat dengan presisi. Seperti sekarang, waktu jeda harus seragam dengan ketepatan dua desimal (atau setidaknya dua desimal?). Apakah itu berarti distribusi harus seragam pada set 0,5, 0,51, 0,52, ..., 1, atau dapatkah itu merupakan titik apung (mungkin dengan lebih dari dua desimal) antara 0,5 dan 1?
Luis Mendo
2
Apakah hasil edit saya yang terbaru menghapusnya?
LordColus
6
@ mbomb007 Sama ... mengapa ini ditutup lagi? Ini pada dasarnya dihitung dari 3 ke 1 dengan dua .50-1.00 detik menunggu di antaranya. Benar-benar tidak rumit.
Magic Gurita Guci

Jawaban:

5

05AB1E , 12 byte

3LRε=₄D;ŸΩ.W

Cobalah online!


3LR          # Push [3,2,1]
   ε         # For each...
    =        # Print it.
     ₄       # Push 1000.
      D      # Duplicate top (1000).
       ;     # Divided by 2 (500).
        Ÿ    # Range from b to a ([1000 .. 500]).
         Ω   # Random pick.
          .W # Wait X ms.

Cobalah dengan debug diaktifkan: Cobalah online!

Guci Gurita Ajaib
sumber
2

SmileBASIC, 64 62 byte

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

Sayangnya saya tidak dapat menggunakan WAIT karena hanya mendukung interval 1/60 detik (hal yang biasanya tidak berguna karena input / output hanya diperbarui sekali per frame)

Ini memerlukan penyesuaian tergantung pada kecepatan sistem yang sedang dihidupkan, sehingga mungkin tidak valid (46 byte):

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

Versi WAIT tidak valid (36 byte):

?3WAIT 30+RND(30)?2WAIT 30+RND(30)?1
12Me21
sumber
2

R , 46 44 byte

untuk hitungan mundur aktual:

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

Cobalah online!

interval pencetakan karena saya awalnya salah memahami tantangan (46 byte) Terima kasih Giuseppe untuk menghemat 2 karakter.

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

Cobalah online!

JayCe
sumber
Saya percaya runif()secara default memiliki endpoint kiri dan kanan sebagai 0dan 1masing - masing, jadi runif(1,.5)harus bekerja sama untuk -2 byte di keduanya.
Giuseppe
Tangkapan yang bagus, terima kasih @Giuseppe.
JayCe
2

Python 2 , 58 byte

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

Cobalah online!

Saya membuat generator angka acak yang sangat sederhana yang membutuhkan waktu semaian (seperti yang dilakukan banyak orang).


Perbaikan

Neil
sumber
1-time()%.5harus melakukan trik. (Anda memerlukannya [3,2,1])
Jonathan Allan
Juga for a in'321' menyimpan dua lagi
Jonathan Allan
@ JonathanAllan Poin yang sangat bagus, diperbarui.
Neil
Ini tidur sekali sebelum hitungan mundur juga. Saya pikir Anda perlu pernyataan cetak sebelum tidur.
Magic Gurita Guci
@MagicOctopusUrn Setuju, diperbarui.
Neil
1

APL + WIN, 37 byte

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

Java 8, 86 byte

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

Mencetak tanpa pembatas. Jika itu tidak diizinkan +2 byte dengan mengubah printke println(pembatas baris baru).

Cobalah online.
Buktikan interval berada dalam kisaran [500, 1000)ms yang benar.

Penjelasan:

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
Kevin Cruijssen
sumber
1

Python 3, 122 byte

import random as r,time
def w():time.sleep(abs(r.random()-.5)+.5)
print(3,end="");w();print(", 2",end="");w();print(", 1")

Cobalah online!

hakr14
sumber
6
Anda perlu impor
Jonathan Allan
Aduh! Sudah diperbaiki.
hakr14
1

JavaScript (Node.js) , 75 65 60 byte

  • terima kasih kepada @Shaggy untuk mengurangi 10 byte
  • terima kasih kepada @Kevin Cruijssen untuk mengurangi 5 byte
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Cobalah online!

DanielIndie
sumber
55 byte
Shaggy
1
@ Shaggy apakah ini benar-benar acak jika Anda menggunakan Date? (untuk kedua kalinya acak terjadi)
DanielIndie
1
Mengapa *1000%500+500? Anda bisa menggunakannya *500+500.
Kevin Cruijssen
Dengan pembaruan spesifikasi, mungkin tidak akan cukup acak tetapi mungkin ada baiknya meminta klarifikasi.
Shaggy
1

Perl 5 , 39 byte

Secara bertahap mengubah menjadi 39 byte, terima kasih kepada @ jonathan-allan + @xcali.

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

Cobalah online!

steve
sumber
1
akan 1-rand(.5)bekerja?
Jonathan Allan
Ide bagus. Kemudian bisa digunakan 1-rand.5juga.
steve
1
Potong empat byte lagi dengan menghapus parens dan mengubah penghitung menjadi negatif. Cobalah online!
Xcali
1

Chip -wingjj , 33 byte

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

Cobalah online!

Dalam Chip, kita tidak bisa menunggu untuk persis 1 / 100 detik, tapi kami bisa menunggu 1 / 256 detik, jadi kami menggunakan itu di sini.

p, Ketika ditanya, akan menghentikan sementara eksekusi untuk kepala stack (satu byte) * 1 / 256 detik. Pada setiap siklus, kami selalu mengatur bit tinggi stack ( 128 / 256 ) dan mengatur semua bit tumpukan lainnya secara acak (dengan ?'s). Ini memberikan distribusi yang merata antara 0,50 dan 1,00 detik.

Beberapa argumen, -wdan -gjj, tentukan bahwa input, alih-alih menggunakan stdin, harus berupa hitungan mundur dari 0xFFke 0x00(lalu membungkus). Kami menggunakan ini untuk memberikan dua bit rendah untuk penghitungan mundur. Semua bit output lainnya tetap konstan (pada nilai yang sesuai dengan ASCII 0).

Akhirnya, setelah selesai, kami mengakhiri program dengan t, mencegah jeda setelah nomor terakhir.

Phlarx
sumber
0

[GAWK], 57 byte

BEGIN{while(a++<2){print 4-a;sleep(rand()/2+0.5)}print 1}

Cobalah online!

steve
sumber