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.

LordColus
źródło
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:

5

05AB1E , 12 bajtów

3LRε=₄D;ŸΩ.W

Wypróbuj 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.

Wypróbuj z włączonym debugowaniem: Wypróbuj online!

Urna Magicznej Ośmiornicy
źródło
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
12Me21
źródło
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!

JayCe
źródło
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

Neil
źródło
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
Graham
źródło
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
Kevin Cruijssen
źródło
1

Python 3, 122 bajty

import random as r,time
def w():time.sleep(abs(r.random()-.5)+.5)
print(3,end="");w();print(", 2",end="");w();print(", 1")

Wypróbuj online!

hakr14
źródło
6
Potrzebujesz importu
Jonathan Allan
W przypadku
oceniania
Ups! Zostało to naprawione.
hakr14
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!

DanielIndie
źródło
55 bajtów
Kudłaty
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

Perl 5 , 39 bajtów

Stopniowo zmniejszono do 39 bajtów, dzięki @ jonathan-allan + @xcali.

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

Wypróbuj online!

Steve
źródło
1
będzie 1-rand(.5)działać?
Jonathan Allan
Dobry pomysł. Można wtedy 1-rand.5też użyć .
steve
1
Wytnij jeszcze cztery bajty, usuwając pareny i zmieniając licznik na ujemny. Wypróbuj online!
Xcali
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.

Phlarx
źródło