Kéo xuống đếm ngược


10

Thử thách:

Trong một kịch bản giả thuyết, đồng hồ đếm ngược cho một cuộc đua có các khoảng ngẫu nhiên giữa các lần đếm, để ngăn chặn việc bắt đầu sớm, ví dụ:

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

Đầu vào:

không có gì


Đầu ra:

Viết chương trình (hoặc hàm) in 3 số với khoảng thời gian ngẫu nhiên từ 0,50 giây đến 1 giây giữa mỗi lần đếm.


Ghi chú:

  • Chương trình phải xuất ra mỗi số (3, 2, 1) với khoảng thời gian ngẫu nhiên ( bất kỳ số nào trong khoảng từ 0,5 đến 1 đến hàng trăm; không có mã hóa cứng) giữa mỗi khoảng thời gian. Độ chính xác của khoảng ngẫu nhiên phải đi ra hàng trăm (ví dụ: 0,52). Bạn không bắt buộc phải xuất khoảng, chỉ đếm.
  • Như @JoKing đã làm rõ, ý tôi là ngẫu nhiên thống nhất (bạn có thể sử dụng trình tạo giả ngẫu nhiên của ngôn ngữ của mình.
  • Như nhiều người đã làm rõ, tôi thực sự có nghĩa là bất kỳ số 2 thập phân nào trong khoảng từ 0,5 đến 1. (0,50, 0,51, v.v., tất cả các cách đến 0,98, 0,99, 1)

Đây là , vì vậy chương trình có số byte thấp nhất sẽ thắng.


4
Xin chào LordColus, và chào mừng bạn đến với PPCG! Đây có vẻ như là một thử thách đầu tiên tốt. Đối với những thách thức trong tương lai, chúng tôi khuyên bạn nên đi qua hộp cát trước để giải quyết tất cả các chi tiết.

1
@LordColus: Tôi đã cải thiện tuyên bố ban đầu và một vài chỉnh sửa khác, hãy xem và phê duyệt nếu bạn muốn.
Muhammad Salman

1
Như tôi đã nói trong một bình luận trước đó đã bị xóa, chỉ định "thống nhất ngẫu nhiên" là ổn nếu bạn không quá nghiêm ngặt với độ chính xác. Hiện tại, thời gian tạm dừng phải đồng nhất với độ chính xác của hai số thập phân (hoặc ít nhất là hai số thập phân?). Điều đó có nghĩa là phân phối phải đồng nhất trên tập 0,5, 0,51, 0,52, ..., 1 hoặc có thể là bất kỳ dấu phẩy động nào (có thể có nhiều hơn hai số thập phân) trong 0,5 và 1 không?
Luis Mendo

2
Có chỉnh sửa gần đây nhất của tôi xóa nó lên?
LordColus

6
@ mbomb007 Tương tự ... tại sao điều này lại bị đóng cửa? Về cơ bản, nó được tính từ 3 đến 1 với hai .50-1.00 giây chờ ở giữa. Nó thực sự không phức tạp.
Bạch tuộc ma thuật Urn

Câu trả lời:



2

SmileBASIC, 64 62 byte

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

Thật không may, tôi không thể sử dụng WAIT vì điều đó chỉ hỗ trợ các khoảng thời gian 1/60 giây (mọi thứ ít thường không hữu ích vì đầu vào / đầu ra chỉ cập nhật một lần trên mỗi khung hình)

Điều này yêu cầu điều chỉnh tùy thuộc vào tốc độ của hệ thống mà nó đang chạy, do đó, nó có thể không hợp lệ (46 byte):

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

Phiên bản WAIT không hợp lệ (36 byte):

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

2

R , 46 44 byte

để đếm ngược thực tế:

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

Hãy thử trực tuyến!

khoảng thời gian in khi ban đầu tôi hiểu nhầm thử thách (46 byte) Cảm ơn Giuseppe vì đã lưu 2 ký tự.

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

Hãy thử trực tuyến!


Tôi tin rằng runif()theo mặc định có các điểm cuối trái và phải như 01tương ứng, vì vậy runif(1,.5)nên làm việc tương tự cho -2 byte trong cả hai.
Giuseppe

Bắt tốt cảm ơn @Giuseppe.
JayCe

2

Python 2 , 58 byte

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

Hãy thử trực tuyến!

Tôi đã tạo ra một trình tạo số ngẫu nhiên rất đơn giản, mất thời gian của hạt giống (như nhiều người vẫn làm).


Cải tiến


1-time()%.5nên làm thủ thuật. (Bạn cần [3,2,1]bằng cách này)
Jonathan Allan


@Jonathan ALLan Điểm rất tốt, được cập nhật.
Neil

Điều này ngủ một lần trước khi đếm ngược quá. Tôi nghĩ rằng bạn cần tuyên bố in trước khi ngủ.
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Đồng ý, cập nhật.
Neil

1

APL + THẮNG, 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);}

In mà không có dấu phân cách. Nếu điều đó không được phép thì đó là +2 byte bằng cách thay đổi printthành println(dấu phân cách dòng mới).

Hãy thử trực tuyến.
Chứng minh các khoảng nằm trong phạm vi chính xác của [500, 1000)ms.

Giải trình:

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

  • cảm ơn @Shaggy vì đã giảm 10 byte
  • cảm ơn @Kevin Cruijssen vì đã giảm 5 byte
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Hãy thử trực tuyến!



1
@Shaggy sẽ thực sự ngẫu nhiên nếu bạn đang sử dụng Date? (lần thứ hai xảy ra ngẫu nhiên)
DanielIndie

1
Tại sao *1000%500+500? Bạn chỉ có thể sử dụng *500+500.
Kevin Cruijssen

Với các bản cập nhật cho thông số kỹ thuật, có lẽ nó sẽ không đủ ngẫu nhiên nhưng có thể đáng để yêu cầu làm rõ.
Xù xì


1

Chip -wingjj , 33 byte

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

Hãy thử trực tuyến!

Trong Chip, chúng tôi không thể chờ đợi cho chính xác 1 / 100 của một giây, nhưng chúng ta có thể chờ đợi 1 / 256 của một giây, vì vậy chúng tôi sử dụng ở đây.

p, Khi được hỏi, sẽ tạm dừng thực hiện cho chồng đầu (một byte) * 1 / 256 giây. Trên mỗi chu kỳ, chúng tôi luôn thiết lập các bit cao của ngăn xếp ( 128 / 256 ) và thiết lập tất cả các bit chồng khác một cách ngẫu nhiên (với ?'s). Điều này cho phân phối đồng đều giữa 0,50 và 1,00 giây.

Một số đối số, -w-gjj, xác định rằng đầu vào, thay vì sử dụng stdin, nên là một đếm ngược từ 0xFFđến 0x00(sau đó gói). Chúng tôi sử dụng điều này để cung cấp hai bit thấp để đếm ngược. Tất cả các bit đầu ra khác không đổi (tại giá trị tương ứng với ASCII 0).

Cuối cùng, khi chúng tôi hoàn thành, chúng tôi chấm dứt chương trình với t, ngăn chặn tạm dừng sau số cuối cùng.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.