Drag Race Countdown


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, я имею в виду равномерно случайный (вы можете использовать генератор псевдослучайного в вашем языке.
  • Как пояснили многие, я действительно имею в виду любое 2-десятичное число от 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
@ Шагги, будет ли это действительно случайно, если вы используете 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.