Ihr Vogel juckt seit einiger Zeit und hat es satt, ständig in statischen Positionen zu stecken. Schreiben Sie ein Programm, das einen zufällig tanzenden Ascii-Vogel zeigt und je nach Tanzbewegung alle 100ms * n oder 200ms * n aktualisiert. Der Vogel beginnt immer mit der Tanzbewegung <(")>
.
Das Programm sollte eine Eingabe akzeptieren, die eine Zahl ist, um das Ruheintervall mit ( n >= 0 && n <= 50
) zu multiplizieren .
100ms bewegt
^(")v
v(")^
^(")^
v(")v
200ms bewegt
(>")>
<(")>
<("<)
Zusätzliche Details
- Zufälligkeit muss nicht einheitlich sein, aber jede Tanzbewegung sollte eine vernünftige Chance haben (mindestens 1 von 60 scheint fair zu sein, es ist in Ordnung, wenn dieselbe Bewegung zweimal hintereinander ausgeführt wird).
- Es sollte immer nur ein Vogel angezeigt werden, nicht mehrere
- Leerzeichen dürfen nachgestellt werden (andere nachgestellte Zeichen jedoch nicht)
- Ein Vogel sollte vor dem Schlaf angezeigt werden
Beispiel in Python 3
import random, time, sys
birds = """(>")>
<(")>
<("<)
^(")v
v(")^
^(")^
v(")v"""
birds = birds.split()
interval = int(input("Sleep for 100ms*"))
selection = -1
while True:
if selection == -1:
selection = 1
else:
selection = random.randint(0, len(birds)-1)
sys.stdout.write('\r'+birds[selection])
if selection > 2:
time.sleep(0.1*interval)
else:
time.sleep(0.2*interval)
Gewinnen
- Das ist Code-Golf, also gewinnt mindestens Byte!
\r
scheint sich die Lua- Flucht wie eine\n
. Weder kann ichos.execute("cls")
dort verwenden. @redstarcoderAntworten:
MATL , 53 Bytes
Bewegungen sind gleichmäßig zufällig.
Unten ist ein Probelauf mit
n = 2
. Oder probieren Sie es bei MATL Online! (Der Interpreter ist experimentell. Wenn er anfänglich nicht ausgeführt wird, drücken Sie erneut auf "Ausführen" oder aktualisieren Sie die Seite.)Erläuterung
quelle
Matlab,
125117 BytesLeider kann dies nicht in TIO angezeigt werden, da der Ausgang nicht "gestreamt" wird. Hier ist ein GIF für eine Eingabe von
1
:Danke @LuisMendo für -8 Bytes!
quelle
*> <> ,
103101 BytesProbieren Sie es hier aus! (Schreiben Sie in
n
den Anfangsstapel, sonst wird eine Fehlermeldung angezeigt.)Ich beschloss, meine Herausforderung anzupacken, da es keine Antworten unter 100 Byte gab. Platz
n
auf dem Stack und gehen Sie weg! Dadurch werden die(")
Zeichen wiederverwendet , um einige Bytes zu speichern.Erläuterung
Initialisierung
<vD[3'(")'
Hier speichern wir
(")
zur späteren Verwendung.Tanzwähler
Dies wird häufig ausgeführt, um auszuwählen, welche Art von Tanz erzeugt werden soll.
Es gibt auch ein
v
darüberx
und ein<
rechts davon. Diese veranlassen diex
erneute Ausführung, wenn versucht wird, die IP in die falsche Richtung zu verschieben.Generiere 100ms Tanz
Hier erzeugen wir eine der 100ms Tanzbewegungen und geben sie aus.
43C - "^" oder "v" erzeugen
Dies ist eine einfache Funktion, die "^" oder "v" generiert und dann zurückgibt. Es funktioniert ähnlich wie der Tanzwähler, in dem Anweisungen vorhanden sind, um
x
sicherzustellen, dass sich die IP nur nach links oder rechts bewegt.200ms Tanz erzeugen
Dies ist eine andere, die mit beginnt
x
. Es wird in zwei Abschnitte unterteilt:<(")>
und einen weiteren(>")> and <("<)
, da es sich um zwei unterschiedliche Abschnitte handelt undx
der einzige ist, den sie teilen.<(")>
Dies ist im Grunde genommen der Anfang der
generate 100ms dance
Routine, füllt aber die Vogelhände wie><
bei einer zufälligen^v
Kombination. Auchn
diesmal multipliziert es sich mit zwei. Dies macht es zum Setup, diegenerate 100ms dance
Routine zu verwenden, um den gesamten Vogel auszugeben und stattdessen 200 ms zu warten.(>")>
und<("<)
Diese kleine Erklärung bezieht sich auf die
(>")>
und<("<)
-Erzeugung, obwohlx
die IP außerhalb davon gesendet werden kann (unten erklärt).quelle
JavaScript (ES6) + HTML5:
118116 + 8 = 124 ByteJavascript: 119 Bytes
Ich benutze die Millisekunden seit der Epoche, um eine zufällige Zahl zu generieren. Theoretisch würde dies immer die gleichen Zahlen erzeugen, aber ein Test auf meinem PC ergab ein ziemlich zufälliges Ergebnis (die meisten Zahlen erschienen mehr oder weniger gleich). Außerdem wird die Tatsache, dass HTML-Elemente mit einer ID zum globalen Fensterobjekt in JavaScript hinzugefügt werden,
document.getElementById()
nicht benötigt.HTML: 8 Bytes
Ich lasse die Anführungszeichen hier weg und schließe das
b
Tag nicht. Es ist kein gültiges HTML, aber alle Browser schließen das Tag trotzdem automatisch. Ich habe es mutig gemacht, weilb
es sich um ein Ein-Zeichen-HTML-Element handelt und weil der Tanz meines Vogels es verdient, bemerkt zu werden.quelle
PowerShell ,
124 -117 Byte(Danke TimmyD )
Probieren Sie es online! (Nicht, dass es in TIO funktionieren wird ...)
quelle
$b
ein Pseudoternäres eliminieren und verwenden, um auf 117 zu kommen -for(){(-split'^(")v v(")^ ^(")^ v(")v (>")> <(")> <("<)')[($i=0..6|random)];sleep -m((100,200)[$i-gt3]*$args[0]);cls}
... Ich denke, kürzer ist möglich; Ich stöbere immer noch daran.Noodel , nicht konkurrierende 67 Bytes
Diese Herausforderung war für Noodel sehr schwierig, da es keine intelligenten arithmetischen oder vergleichenden Operatoren gibt. Aber nach dieser Herausforderung denke ich, dass Noodel für die erste Veröffentlichung bereit ist.
Versuch es:)
Wie es funktioniert
64 Bytes
Hier ist eine Version, die als Code-Snippet funktioniert.
quelle
Python, 157 Bytes
Ich habe auch versucht, es ohne die Hühnchen-Ascii-Kunst zu machen, aber das war viel länger.
quelle
Ruby, 97 + 1 = 98 Bytes
+1 Byte von der
-n
Flagge.quelle
Clojure,
185178 Bytes+18 Bytes, weil es nicht mit anfing
<(")>
.-7 Bytes durch Inlinen
birds
und Entfernen deslet
.Teilen Sie die Vögel einfach auf Leerzeichen auf, wählen Sie einen zufälligen Index von 0-6 aus, und zeigen Sie den ausgewählten Vogel an. Wenn der ausgewählte Index größer als 2 ist, wartet er 100 ms, ansonsten 200 ms.
Clojure braucht wirklich eine String-
split
Methode im Kern.Ungolfed:
quelle