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.


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!


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

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!


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


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

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


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!



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!


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.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.