Drag Race Countdown


10

Herausforderung:

In einem hypothetischen Szenario hat der Countdown-Timer für ein Rennen zufällige Intervalle zwischen den Zählungen, um ein vorzeitiges Starten zu verhindern, z

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

Eingang:

nichts


Ausgabe:

Schreiben Sie ein Programm (oder eine Funktion), das die 3 Zahlen mit einem zufälligen Zeitintervall von 0,50 Sekunden bis 1 Sekunde zwischen jeder Zählung druckt.


Hinweis:

  • Das Programm muss jede Zahl (3, 2, 1) mit dem zufälligen Zeitintervall ( jede Zahl zwischen 0,50 und 1 bis Hundertstel; keine Hardcodierung) zwischen jeder Zahl ausgeben . Die Genauigkeit des Zufallsintervalls muss Hunderte betragen (z. B. 0,52). Sie müssen nicht das Intervall ausgeben, sondern nur die Anzahl.
  • Wie @JoKing klarstellte, meine ich einheitlich zufällig (Sie können den Pseudozufallsgenerator Ihrer Sprache verwenden.
  • Wie viele Leute klargestellt haben, meine ich wirklich jede 2-Dezimalzahl zwischen 0,5 und 1. (0,50, 0,51 usw. bis 0,98, 0,99, 1)

Dies ist , also gewinnt das Programm mit der niedrigsten Byteanzahl.


4
Hallo LordColus, und willkommen bei PPCG! Dies scheint eine gute erste Herausforderung zu sein. Für zukünftige Herausforderungen empfehlen wir, zuerst den Sandkasten zu durchsuchen, um alle Details auszubügeln.

1
@ LordColus: Ich habe die ursprüngliche Anweisung und einige andere Änderungen verbessert, sieh sie dir an und genehmige sie, wenn du willst.
Muhammad Salman

1
Wie ich bereits in einem zuvor gelöschten Kommentar sagte, ist es in Ordnung, "einheitlich zufällig" anzugeben, wenn Sie nicht zu streng sind. Aus heutiger Sicht müssen die Pausenzeiten mit einer Genauigkeit von zwei Dezimalstellen einheitlich sein (oder sind es mindestens zwei Dezimalstellen?). Bedeutet das, dass die Verteilung auf der Menge 0,5, 0,51, 0,52, ..., 1 gleichmäßig sein sollte, oder kann es sich um einen Gleitkommawert (möglicherweise mit mehr als zwei Dezimalstellen) zwischen 0,5 und 1 handeln?
Luis Mendo

2
Klärt meine letzte Bearbeitung es auf?
LordColus

6
@ mbomb007 Same ... warum wurde das wieder geschlossen? Es zählt im Grunde genommen von 3 bis 1 mit zwei Wartezeiten von 0,50 bis 1,00 Sekunden dazwischen. Es ist wirklich nicht kompliziert.
Magic Octopus Urn

Antworten:



2

SmileBASIC, 64 62 Bytes

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

Leider kann ich WAIT nicht verwenden, da dies nur Intervalle von 1/60 Sekunde unterstützt (alles andere ist normalerweise nicht nützlich, da die Eingabe / Ausgabe nur einmal pro Frame aktualisiert wird).

Dies erfordert eine Anpassung in Abhängigkeit von der Geschwindigkeit des Systems, auf dem es ausgeführt wird, sodass es möglicherweise nicht gültig ist (46 Byte):

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

Ungültige WAIT-Version (36 Byte):

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

2

R , 46 44 Bytes

für einen tatsächlichen Countdown:

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

Probieren Sie es online aus!

Druckintervall, da ich die Herausforderung anfangs falsch verstanden habe (46 Byte) Vielen Dank an Giuseppe für das Speichern von 2 Zeichen.

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

Probieren Sie es online aus!


Ich glaube , runif()hat in der Standardeinstellung die linken und rechten Endpunkte wie 0und 1jeweils so runif(1,.5)sollte für -2 Bytes in beide arbeiten.
Giuseppe

Guter Fang danke @Giuseppe.
JayCe

2

Python 2 , 58 Bytes

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

Probieren Sie es online aus!

Ich habe einen sehr einfachen Zufallszahlengenerator erstellt, der die Startzeit in Anspruch nimmt (wie viele Leute auch).


Verbesserungen


1-time()%.5sollte den Trick machen. (Sie brauchen [3,2,1]übrigens)
Jonathan Allan

Auch for a in'321' spart zwei weitere
Jonathan Allan

@ JonathanAllan Sehr guter Punkt, aktualisiert.
Neil

Dies schläft auch einmal vor dem Countdown. Ich denke, Sie brauchen die Druckanweisung vor dem Schlafengehen.
Magic Octopus Urn

@MagicOctopusUrn Einverstanden, aktualisiert.
Neil

1

APL + WIN, 37 Bytes

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

1

Java 8, 86 Bytes

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

Druckt ohne Trennzeichen. Wenn dies nicht zulässig ist, werden +2 Bytes durch Ändern printin println(Trennzeichen für neue Zeilen) verwendet.

Probieren Sie es online aus.
Beweisen Sie, dass die Intervalle im richtigen Bereich von [500, 1000)ms liegen.

Erläuterung:

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

  • danke an @Shaggy für die Reduzierung um 10 Bytes
  • danke an @Kevin Cruijssen für die Reduzierung um 5 Bytes
f=(i=3)=>i&&setTimeout(f,Math.random()*500+500,i-1,alert(i))

Probieren Sie es online aus!



1
@Shaggy wird es wirklich zufällig sein, wenn Sie Date verwenden? (Zum zweiten Mal trat der Zufall auf)
DanielIndie

1
Warum *1000%500+500? Sie können einfach verwenden *500+500.
Kevin Cruijssen

Mit den Aktualisierungen der Spezifikation wird es wahrscheinlich nicht zufällig genug sein, aber es könnte sich lohnen, um Klarstellung zu bitten.
Shaggy


1

Chip -wingjj , 33 Bytes

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

Probieren Sie es online aus!

In Chip, können wir nicht genau warten 1 / 100 eine Sekunde, aber wir können warten , 1 / 256 eine Sekunde, so dass wir das hier verwenden.

pWenn bat, wird die Ausführung für den Stapelkopf pausieren (ein Byte) * 1 / 256 Sekunden. Bei jedem Zyklus, wir immer das hohe Bit des Stapels (Set 128 / 256 ) und stellen Sie alle anderen Stapel Bits zufällig (mit dem ?‚s). Dies ergibt eine gleichmäßige Verteilung zwischen 0,50 und 1,00 Sekunden.

Einige der Argumente -wund -gjjgeben an, dass die Eingabe anstelle von stdin ein Countdown von 0xFFbis 0x00(dann ein Umbruch) sein soll. Wir verwenden dies, um die niedrigen zwei Bits für den Countdown bereitzustellen. Alle anderen Ausgangsbits bleiben konstant (auf dem Wert, der ASCII entspricht 0).

Sobald wir fertig sind, beenden wir das Programm mit tund verhindern eine Pause nach der letzten Nummer.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.