Drag Race Countdown

10

Desafio:

Em um cenário hipotético, o cronômetro de contagem regressiva para uma corrida tem intervalos aleatórios entre as contagens, para impedir o início prematuro, por exemplo,

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

Entrada:

nada


Resultado:

Escreva um programa (ou função) que imprima os 3 números com um intervalo aleatório de 0,50 segundos a 1 segundo entre cada contagem.


Nota:

  • O programa deve gerar cada número (3, 2, 1) com o intervalo de tempo aleatório ( qualquer número entre 0,50 e 1 até os centésimos; sem codificação codificada) entre cada um. A precisão do intervalo aleatório deve chegar às centenas (por exemplo: 0,52). Você não precisa emitir o intervalo, apenas a contagem.
  • Como o @JoKing esclareceu, quero dizer uniformemente aleatório (você pode usar o gerador pseudo-aleatório do seu idioma.
  • Como muitas pessoas esclareceram, eu realmente quero dizer qualquer número decimal entre 0,5 e 1. (0,50, 0,51, etc, até 0,98, 0,99, 1)

Isso é , então o programa com a menor contagem de bytes vence.

LordColus
fonte
4
Olá LordColus, e bem-vindo ao PPCG! Este parece ser um bom primeiro desafio. Para desafios futuros, recomendamos que você entre na caixa de areia primeiro para resolver todos os detalhes.
1
@ LordColus: melhorei a declaração original e algumas outras edições, dê uma olhada e aprove se quiser.
Muhammad Salman
1
Como eu disse em um comentário anterior que foi excluído, especificar "uniformemente aleatório" é bom se você não for muito rigoroso com precisão. Como está agora, os tempos de pausa devem ser uniformes com precisão de duas casas decimais (ou são pelo menos duas casas decimais?). Isso significa que a distribuição deve ser uniforme no conjunto 0,5, 0,51, 0,52, ..., 1 ou pode ser qualquer ponto flutuante (possivelmente com mais de duas casas decimais) entre 0,5 e 1?
Luis Mendo
2
Minha edição mais recente a esclarece?
LordColus
6
@ mbomb007 Mesmo ... por que isso foi fechado novamente? É basicamente contar de 3 a 1 com duas .50-1,00 segundos de espera no meio. Realmente não é complicado.
Magic Octopus Urn

Respostas:

5

05AB1E , 12 bytes

3LRε=₄D;ŸΩ.W

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

Experimente com a depuração ativada: Experimente online!

Urna de polvo mágico
fonte
2

SmileBASIC, 64 62 bytes

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

Infelizmente, não posso usar WAIT, pois ele suporta apenas intervalos de 1/60 de segundo (nada menos normalmente não é útil, pois a entrada / saída é atualizada apenas uma vez por quadro)

Isso requer ajustes, dependendo da velocidade do sistema em que está sendo executado, portanto, pode não ser válido (46 bytes):

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

Versão WAIT inválida (36 bytes):

?3WAIT 30+RND(30)?2WAIT 30+RND(30)?1
12Me21
fonte
2

R , 46 44 bytes

para uma contagem regressiva real:

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

Experimente online!

intervalo de impressão, como eu inicialmente não entendi o desafio (46 bytes) Obrigado Giuseppe por salvar 2 caracteres.

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

Experimente online!

JayCe
fonte
Eu acredito que, runif()por padrão, tem os pontos de extremidade esquerdo e direito como 0e 1respectivamente, portanto, runif(1,.5)deve funcionar da mesma forma para -2 bytes em ambos.
Giuseppe
Boa captura, obrigado @ Giuseppe.
JayCe
2

Python 2 , 58 bytes

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

Experimente online!

Criei um gerador de números aleatórios muito simples que leva o tempo de propagação (como muitas pessoas).


Melhorias

Neil
fonte
1-time()%.5deve fazer o truque. (Você precisa [3,2,1]pelo caminho)
Jonathan Allan
Também for a in'321' poupa outros dois
Jonathan Allan
@ JonathanAllan Muito bom ponto, atualizado.
Neil
Isso dorme uma vez antes da contagem regressiva também. Eu acho que você precisa da declaração impressa antes de dormir.
Magic Octopus Urn
@MagicOctopusUrn Concordado, atualizado.
Neil
1

APL + WIN, 37 bytes

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

Java 8, 86 bytes

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

Imprime sem delimitador. Se isso não for permitido, são +2 bytes mudando printpara println(delimitador de nova linha).

Experimente online.
Prove que os intervalos estão na faixa correta de [500, 1000)ms.

Explicação:

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
fonte
1

JavaScript (Node.js) , 75 65 60 bytes

  • graças a @Shaggy por reduzir em 10 bytes
  • graças a @Kevin Cruijssen por reduzir em 5 bytes
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Experimente online!

DanielIndie
fonte
55 bytes
Shaggy:
1
@ Shaggy será realmente aleatório se você estiver usando o Date? (pela segunda vez ocorreu a aleatório)
DanielIndie
1
Por que *1000%500+500? Você pode apenas usar *500+500.
Kevin Cruijssen
Com as atualizações das especificações, provavelmente não será aleatório o suficiente, mas pode valer a pena pedir esclarecimentos.
Shaggy
1

Perl 5 , 39 bytes

Ajustado gradualmente para 39 bytes, graças a @ jonathan-allan + @xcali.

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

Experimente online!

Steve
fonte
1
iria 1-rand(.5)trabalhar?
Jonathan Allan
Boa ideia. Pode então usar 1-rand.5também.
Steve
1
Corte mais quatro bytes removendo os parênteses e alterando o contador para negativo. Experimente online!
Xcali
1

Chip -wingjj , 33 bytes

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

Experimente online!

Em Chip, não podemos esperar por exatamente 1 / 100 de segundo, mas podemos esperar por 1 / 256 de segundo, por isso usamos isso aqui.

p, Quando perguntado, irá parar a execução para a cabeça pilha (um byte) * 1 / 256 segundos. Em cada ciclo, sempre definir o bit alta da pilha ( 128 / 256 ) e definir todos os outros bits pilha aleatoriamente (com o ?'s). Isso fornece uma distribuição uniforme entre 0,50 e 1,00 segundos.

Alguns dos argumentos, -we -gjj, especificam que a entrada, em vez de usar stdin, deve ser uma contagem regressiva de 0xFFpara 0x00(em seguida, quebra automática). Usamos isso para fornecer os dois bits mais baixos para a contagem regressiva. Todos os outros bits de saída permanecem constantes (no valor correspondente a ASCII 0).

Finalmente, assim que terminamos, encerramos o programa com t, impedindo uma pausa após o último número.

Phlarx
fonte