Drag Race Countdown


10

Wyzwanie:

W hipotetycznym scenariuszu licznik czasu dla wyścigu ma losowe odstępy między liczeniami, aby zapobiec przedwczesnemu uruchomieniu, np.

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

Wejście:

nic


Wynik:

Napisz program (lub funkcję), który drukuje 3 liczby w losowym przedziale czasowym od 0,50 sekundy do 1 sekundy między każdą liczbą.


Uwaga:

  • Program musi wypisać każdą liczbę (3, 2, 1) z losowym ( dowolna liczba między 0,50 a 1 do setnych; brak kodowania) przedział czasu między nimi. Precyzja losowego interwału musi wynosić setki (np. 0,52). Nie musisz podawać interwału, tylko liczbę.
  • Jak wyjaśnił @JoKing, mam na myśli jednakowo losowy (możesz użyć pseudolosowego generatora swojego języka.
  • Jak wyjaśniło wiele osób, naprawdę mam na myśli dowolną liczbę 2-dziesiętną między 0,5 a 1. (0,50, 0,51 itd., Aż do 0,98, 0,99, 1)

To jest , więc wygrywa program o najniższej liczbie bajtów.


4
Cześć LordColus i witaj w PPCG! To wydaje się być dobrym pierwszym wyzwaniem. W przypadku przyszłych wyzwań zalecamy najpierw przejrzenie piaskownicy, aby wyjaśnić wszystkie szczegóły.

1
@ LordColus: Poprawiłem oryginalne oświadczenie i kilka innych zmian, spójrz i zatwierdź, jeśli chcesz.
Muhammad Salman

1
Jak powiedziałem w poprzednim komentarzu, który został usunięty, określenie „jednolicie losowy” jest w porządku, jeśli nie jesteś zbyt rygorystyczny z precyzją. Na obecnym etapie czasy pauzy muszą być jednolite z dokładnością do dwóch miejsc po przecinku (czy jest to co najmniej dwa miejsca po przecinku?). Czy to oznacza, że ​​rozkład powinien być jednolity na zbiorze 0,5, 0,51, 0,52, ..., 1, czy może być dowolnym zmiennoprzecinkowym (być może z więcej niż dwoma miejscami po przecinku) między 0,5 a 1?
Luis Mendo

2
Czy moja ostatnia edycja to wyjaśnia?
LordColus

6
@ mbomb007 To samo ... dlaczego to zostało ponownie zamknięte? Zasadniczo liczy się od 3 do 1, a pomiędzy nimi czekają dwie 0,5-1,00 sekundy. To naprawdę nie jest skomplikowane.
Magic Octopus Urn

Odpowiedzi:



2

SmileBASIC, 64 62 bajtów

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

Niestety nie mogę użyć opcji OCZEKIWANIA, ponieważ obsługuje ona tylko interwały 1/60 sekundy (nic mniej zwykle nie jest przydatne, ponieważ dane wejściowe / wyjściowe są aktualizowane tylko raz na klatkę)

Wymaga to dostosowania w zależności od prędkości systemu, na którym działa, więc może być niepoprawne (46 bajtów):

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

Nieprawidłowa wersja WAIT (36 bajtów):

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

2

R , 46 44 bajtów

do faktycznego odliczania:

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

Wypróbuj online!

interwał drukowania, gdy początkowo źle zrozumiałem wyzwanie (46 bajtów) Dziękujemy Giuseppe za zapisanie 2 znaków.

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

Wypróbuj online!


Wierzę, runif()domyślnie ma lewy i prawy punktów końcowych jak 0i 1odpowiednio, więc runif(1,.5)powinien działać tak samo na -2 bajtów w obu.
Giuseppe,

Dobry połów dzięki @Giuseppe.
JayCe

2

Python 2 , 58 bajtów

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

Wypróbuj online!

Stworzyłem bardzo prosty generator liczb losowych, który zajmuje czas początkowy (tak jak wiele osób).


Ulepszenia


1-time()%.5powinien załatwić sprawę. (Przy okazji, potrzebujesz [3,2,1])
Jonathan Allan

for a in'321' Ratuje
Jonathan Allan

@JonathanAllan Bardzo dobry punkt, zaktualizowano.
Neil

To też śpi raz przed odliczaniem. Myślę, że potrzebujesz wydruku przed snem.
Magic Octopus Urn

@MagicOctopusUrn Zgoda, zaktualizowano.
Neil

1

APL + WIN, 37 bajtów

3⋄r←⎕dl ↑n←.49+.01×2?51⋄2⋄r←⎕dl 1↓n⋄1

1

Java 8, 86 bajtów

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

Drukuje bez ogranicznika. Jeśli nie jest to dozwolone, zmienia printsię na +2 bajty, zmieniając na println(separator nowej linii).

Wypróbuj online.
Udowodnij, że odstępy są w prawidłowym zakresie[500, 1000) ms.

Wyjaśnienie:

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 bajtów

  • dzięki @Shaggy za zmniejszenie o 10 bajtów
  • dzięki @Kevin Cruijssen za zmniejszenie o 5 bajtów
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Wypróbuj online!



1
@Shaggy czy to naprawdę będzie losowe, jeśli używasz Data? (po raz drugi
los miał miejsce

1
Dlaczego *1000%500+500? Możesz po prostu użyć *500+500.
Kevin Cruijssen

Dzięki aktualizacjom specyfikacji prawdopodobnie nie będzie wystarczająco losowa, ale może warto poprosić o wyjaśnienia.
Kudłaty


1

Chip -wingjj , 33 bajty

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

Wypróbuj online!

W chip, nie możemy czekać na dokładnie 1 / 100 sekundy, ale możemy czekać do 1 / 256 sekundy, tak że używamy tutaj.

pPytany, zatrzyma realizacji dla głowicy stosu (jeden bajt) * 1 / 256 sek. W każdym cyklu, zawsze ustawione na wysoki bitu stosu ( 128 / 256 ) i ustawienie wszystkich innych bitów stosu losowo (przy? „e). Daje to równomierny rozkład między 0,50 a 1,00 sekundy.

Niektóre argumenty -wi -gjj, określ, że wejście, zamiast używania standardowego wejścia, powinno być odliczaniem od 0xFFdo 0x00(następnie zawijaniem). Używamy tego, aby zapewnić niskie dwa bity do odliczania. Wszystkie inne bity wyjściowe pozostają stałe (przy wartości odpowiadającej ASCII0 ).

Wreszcie, gdy skończymy, kończymy program za pomocą t, zapobiegając pauzie po ostatnim numerze.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.