Trascina il conto alla rovescia della gara


10

Sfida:

In uno scenario ipotetico, il timer per il conto alla rovescia per una gara ha intervalli casuali tra i conteggi, per evitare partenze premature, ad es.

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

Ingresso:

Niente


Produzione:

Scrivi un programma (o una funzione) che stampa i 3 numeri con un intervallo di tempo casuale compreso tra 0,50 secondi e 1 secondo tra ogni conteggio.


Nota:

  • Il programma deve generare ogni numero (3, 2, 1) con l' intervallo di tempo casuale ( qualsiasi numero compreso tra 0,50 e 1 al centesimo; nessuna codifica effettiva) tra ciascuno. La precisione dell'intervallo casuale deve arrivare alle centinaia (es. 0,52). Non è necessario fornire l'intervallo, ma solo il conteggio.
  • Come chiarito da @JoKing, intendo uniformemente casuale (puoi usare il generatore pseudo-casuale della tua lingua.
  • Come molte persone hanno chiarito, intendo davvero qualsiasi numero 2 decimale tra 0,5 e 1. (0,50, 0,50, ecc., Fino a 0,98, 0,99, 1)

Questo è , quindi vince il programma con il numero di byte più basso.


4
Ciao LordColus, e benvenuto in PPCG! Sembra una buona prima sfida. Per sfide future, ti consigliamo di passare prima attraverso la sandbox per appianare tutti i dettagli.

1
@LordColus: ho migliorato la dichiarazione originale e un paio di altre modifiche, dai un'occhiata e approva se vuoi.
Muhammad Salman

1
Come ho detto in un precedente commento che è stato eliminato, specificare "uniformemente casuale" va bene se non si è troppo rigorosi con precisione. Allo stato attuale, i tempi di pausa devono essere uniformi con precisione di due decimali (o sono almeno due decimali?). Ciò significa che la distribuzione dovrebbe essere uniforme sull'insieme 0,5, 0,51, 0,52, ..., 1 o può essere qualsiasi punto mobile (possibilmente con più di due decimali) tra 0,5 e 1?
Luis Mendo,

2
La mia modifica più recente lo chiarisce?
LordColus,

6
@ mbomb007 Lo stesso ... perché è stato chiuso di nuovo? Fondamentalmente conta da 3 a 1 con due secondi da 50-1,00 secondi in mezzo. Non è davvero complicato.
Magic Octopus Urn

Risposte:


5

05AB1E , 12 byte

3LRε=₄D;ŸΩ.W

Provalo 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.

Provalo con il debug abilitato: provalo online!


2

SmileBASIC, 64 62 byte

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

Sfortunatamente non posso usare WAIT poiché supporta solo intervalli di 1/60 di secondo (nulla di meno non è normalmente utile poiché l'input / output si aggiorna solo una volta per frame)

Ciò richiede una regolazione in base alla velocità del sistema su cui è in esecuzione, quindi potrebbe non essere valido (46 byte):

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

Versione WAIT non valida (36 byte):

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

2

R , 46 44 byte

per un conto alla rovescia effettivo:

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

Provalo online!

intervallo di stampa poiché inizialmente ho frainteso la sfida (46 byte) Grazie Giuseppe per aver salvato 2 caratteri.

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

Provalo online!


Credo che runif()di default abbia gli endpoint sinistro e destro come 0e 1rispettivamente, quindi runif(1,.5)dovrebbe funzionare allo stesso modo per -2 byte in entrambi.
Giuseppe,

Buona cattura grazie @Giuseppe.
JayCe

2

Python 2 , 58 byte

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

Provalo online!

Ho creato un generatore di numeri casuali molto semplice che richiede il tempo di seed (come fanno molte persone).


miglioramenti


1-time()%.5dovrebbe fare il trucco. (A [3,2,1]proposito, è necessario)
Jonathan Allan,

Ne for a in'321' salva
Jonathan Allan,

@JonathanAllan Ottimo punto, aggiornato.
Neil,

Questo dorme anche una volta prima del conto alla rovescia. Penso che tu abbia bisogno dell'istruzione stampata prima di dormire.
Magic Octopus Urn

@MagicOctopusUrn Concordato, aggiornato.
Neil

1

APL + WIN, 37 byte

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

1

Java 8, 86 byte

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

Stampa senza delimitatore. Se ciò non è consentito, sono +2 byte cambiando printin println(delimitatore di nuova riga).

Provalo online.
Dimostra che gli intervalli sono nell'intervallo corretto di [500, 1000)ms.

Spiegazione:

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 byte

  • grazie a @Shaggy per la riduzione di 10 byte
  • grazie a @Kevin Cruijssen per la riduzione di 5 byte
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Provalo online!



1
@Shaggy sarà davvero casuale se stai usando Date? (per la seconda volta si è verificato il caso)
DanielIndie,

1
Perché *1000%500+500? Puoi solo usare *500+500.
Kevin Cruijssen,

Con gli aggiornamenti alle specifiche, probabilmente non sarà abbastanza casuale ma potrebbe valere la pena chiedere chiarimenti.
Shaggy,


1

Chip -wingjj , 33 byte

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

Provalo online!

In Chip, non possiamo aspettare che esattamente 1 / 100 di secondo, ma possiamo aspettare per 1 / 256 di secondo, in modo da utilizzare che qui.

p, Interrogato, si sospendere l'esecuzione per la testa pila (un byte) * 1 / 256 secondi. Ad ogni ciclo, abbiamo sempre impostato il bit alto della pila ( 128 / 256 ) e impostare tutti gli altri bit di stack a caso (con la ?s'). Ciò fornisce una distribuzione uniforme tra 0,50 e 1,00 secondi.

Alcuni argomenti, -we -gjj, specificano che l'input, invece di usare stdin, dovrebbe essere un conto 0xFFalla rovescia da a0x00 (quindi a capo). Usiamo questo per fornire i due bit bassi per il conto alla rovescia. Tutti gli altri bit di uscita rimangono costanti (al valore corrispondente a ASCII 0).

Alla fine, una volta terminato, terminiamo il programma con t, impedendo una pausa dopo l'ultimo numero.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.