Drag Race Countdown
05AB1E, 12 bytes
3LRε=₄D;ŸΩ.W
Try it 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.
Try it with debug enabled: Try it online!
SmileBASIC, 64 62 bytes
?3M?2M?1DEF M
M=MILLISEC
WHILE MILLISEC<M+500+RND(501)WEND
END
Unfortunately I can't use WAIT since that only supports intervals of 1/60 of a second (anything less isn't normally useful since input/output only update once per frame)
This requires adjustment depending on the speed of the system it's running on, so it might not be valid (46 bytes):
?3M?2M?1DEF M
FOR I=-66E4-RND(66E4)TO.NEXT
END
Invalid WAIT version (36 bytes):
?3WAIT 30+RND(30)?2WAIT 30+RND(30)?1
R, 46 44 bytes
for an actual countdown:
for(i in 3:1){cat(i)
Sys.sleep(runif(1,.5))}
Try it online!
printing interval as I initially misunderstood the challenge (46 bytes) Thanks Giuseppe for saving 2 chars.
for(i in 3:1)cat(i,format(runif(1,.5),,2)," ")
Try it online!