Зворотний відлік перетягувань


10

Виклик:

У гіпотетичному сценарії таймер зворотного відліку для гонки має випадкові інтервали між підрахунками, щоб запобігти передчасному старту, наприклад

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

Вхід:

нічого


Вихід:

Напишіть програму (або функцію), яка друкує 3 числа з випадковим інтервалом часу від 0,50 секунди до 1 секунди між кожним підрахунком.


Примітка:

  • Програма повинна виводити кожне число (3, 2, 1) із випадковим ( будь-яке число між 0,50 і 1 до сотих; відсутність жорсткого кодування) інтервал часу між кожним. Точність випадкового інтервалу повинна виходити до сотень (наприклад: 0,52). Вам не потрібно виводити інтервал, тільки рахувати.
  • Як уточнив @JoKing, я маю на увазі рівномірно випадковий характер (ви можете використовувати псевдовипадковий генератор вашої мови.
  • Як багато хто уточнив, я дійсно маю на увазі будь-яке двозначне число від 0,5 до 1. (0,50, 0,51 тощо), аж до 0,98, 0,99, 1)

Це , тому програма з найнижчою кількістю байтів виграє.


4
Привіт LordColus, і ласкаво просимо до PPCG! Це здається гарним першим викликом. Для майбутніх проблем ми рекомендуємо спочатку пройти через пісочницю, щоб випрасувати всі деталі.

1
@LordColus: Я покращив оригінальну заяву та пару інших редагувань, погляньте та затвердіть, якщо хочете.
Мухаммед Салман

1
Як я вже говорив у попередньому коментарі, який був видалений, вказати "рівномірно випадковий", це добре, якщо ви не надто суворі з точністю. Як зараз, час пауз повинен бути однаковим з точністю двох десяткових знаків (чи це принаймні два десяткових числа?). Чи означає це, що розподіл повинен бути рівномірним на множині 0,5, 0,51, 0,52, ..., 1, чи може бути будь-яка плаваюча точка (можливо, більше двох десятків) між 0,5 і 1?
Луїс Мендо

2
Чи моє останнє редагування очищає це?
LordColus

6
@ mbomb007 Те саме ... чому це знову закрили? Це, в основному, кількість від 3 до 1, два між ними .50-1.00 секунди. Це справді не складно.
Чарівна урва восьминога

Відповіді:



2

SmileBASIC, 64 62 байти

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

На жаль, я не можу використовувати WAIT, оскільки це підтримує лише інтервали 1/60 секунди (нічого менш, як правило, не корисно, оскільки введення / виведення оновлюється лише один раз на кадр)

Для цього потрібне регулювання залежно від швидкості роботи системи, тому воно може бути недійсним (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

R , 46 44 байти

для фактичного відліку:

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

Спробуйте в Інтернеті!

інтервал друку, оскільки я спочатку неправильно зрозумів виклик (46 байт) Спасибі Джузеппе за збереження 2 символів.

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

Спробуйте в Інтернеті!


Я вважаю, що runif()за замовчуванням є ліва і права кінцеві точки як 0і 1відповідно, тому 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 Дуже хороший момент, оновлено.
Ніл

Це також спить один раз перед відліком. Я думаю, що вам потрібна заява про друк перед сном.
Чарівна урва восьминога

@MagicOctopusUrn Погоджено, оновлено.
Ніл


1

Java 8, 86 байт

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

Друкує без роздільника. Якщо це не дозволено, це +2 байти, змінивши printна println(роздільник нового рядка).

Спробуйте в Інтернеті.
Доведіть, що інтервали знаходяться у правильному діапазоні [500, 1000)мс.

Пояснення:

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 байт

  • завдяки @Shaggy за зменшення на 10 байт
  • завдяки @Kevin Cruijssen за зменшення на 5 байт
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Спробуйте в Інтернеті!



1
@Shaggy це справді буде випадковим, якщо ви використовуєте Date? (вдруге трапилося випадкове)
DanielIndie

1
Чому *1000%500+500? Можна просто використовувати *500+500.
Кевін Круїссен

З оновленнями специфікації це, ймовірно, не буде досить випадковим, але, можливо, варто попросити роз'яснення.
Кудлатий

1

Perl 5 , 39 байт

Поступово змінився до 39 байт, завдяки @ jonathan-allan + @xcali.

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

Спробуйте в Інтернеті!


1
буде 1-rand(.5)працювати?
Джонатан Аллан

Гарна ідея. Потім можна також використовувати 1-rand.5.
Стів

1
Виріжте ще чотири байти, видаливши паролі та змінивши лічильник на негативний. Спробуйте в Інтернеті!
Xcali

1

Чіп -wingjj , 33 байти

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

Спробуйте в Інтернеті!

У чіп, ми не можемо чекати рівно 1 / 100 секунди, але ми можемо чекати 1 / 256 секунди, тому ми використовуємо це тут.

pНа запитання, чи буде призупинити виконання для голови стека (один байт) * 1 / 256 секунд. На кожному циклі, ми завжди встановити старший біт стека ( 128 / 256 ) і встановити всі інші біти стека випадковим чином (з ?«и). Це дає рівномірний розподіл між 0,50 і 1,00 секунди.

Деякі з аргументів, -wі -gjj, вкажіть, що введення, замість використання stdin, має бути зворотним відліком від 0xFFдо 0x00(потім завершення). Ми використовуємо це для забезпечення низьких двох біт для відліку. Усі інші вихідні біти залишаються постійними (при значенні, що відповідає ASCII 0).

Нарешті, як тільки ми закінчимо, ми припиняємо програму t, запобігаючи паузі після останнього номера.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.