Herausforderungsbeschreibung
Sie müssen eine Regensimulation im Terminal anzeigen.
In dem folgenden Beispiel werden 100 Regentropfen nach dem Zufallsprinzip hinzugefügt (verwenden Sie die Standard-Zufallsfunktion, die Ihre Sprache anbietet). Warten Sie 0,2 Sekunden und zeichnen Sie dann erneut, bis die angegebene Zeit abgelaufen ist. Für die Darstellung des Regentropfens kann ein beliebiges Zeichen verwendet werden.
Parameter
- Wartezeit zwischen Neuzeichnen in Sekunden.
- Zeit, für die der Regen sichtbar sein wird. Dies ist nur eine Ganzzahl, die die Anzahl der Iterationen darstellt. [Die Nettodauer, für die der Regen sichtbar sein wird, ist diese ganze Zahl multipliziert mit der Wartezeit.]
- Meldung, die angezeigt wird, wenn der Regen aufhört. (Dies muss zentriert sein)
- Anzahl der Regentropfen, die auf dem Bildschirm angezeigt werden sollen.
Regeln
- Ein einzelnes Byte sollte verwendet werden, um einen Regentropfen darzustellen, und es kann alles sein, sogar Katzen und Hunde.
- Es muss nicht auf die Terminalgröße reagieren, was bedeutet, dass Sie den Fehler bei unterschiedlichen Terminalgrößen nicht behandeln müssen. Sie können die Terminalbreite und -höhe selbst festlegen.
- Es gelten die Standardregeln für das Golfen.
Codebeispiel und Ausgabe
Dies ist eine ungolfed Version, die mit ncurses in Python 2.7 geschrieben wurde.
import curses
import random
import time
myscreen = curses.initscr()
curses.curs_set(0) # no cursor please
HEIGHT, WIDTH = myscreen.getmaxyx()
RAIN = '/' # this is what my rain drop looks like
TIME = 10
def make_it_rain(window, tot_time, msg, wait_time, num_drops):
"""
window :: curses window
time :: Total time for which it rains
msg :: Message displayed when it stops raining
wait_time :: Time between redrawing scene
num_drops :: Number of rain drops in the scene
"""
for _ in range(tot_time):
for i in range(num_drops):
x,y=random.randint(1, HEIGHT-2),random.randint(1,WIDTH-2)
window.addstr(x,y,RAIN)
window.refresh()
time.sleep(wait_time)
window.erase()
window.refresh()
window.addstr(HEIGHT/2, int(WIDTH/2.7), msg)
if __name__ == '__main__':
make_it_rain(myscreen, TIME, 'IT HAS STOPPED RAINING!', 0.2, 100)
myscreen.getch()
curses.endwin()
Ausgabe -
Antworten:
MATL , 52 Bytes
Eingaben sind in dieser Reihenfolge: Pause zwischen Aktualisierungen, Anzahl der Abbrüche, Meldung, Anzahl der Wiederholungen. Der Monitor hat eine Größe von 80 × 25 Zeichen (fest codiert).
GIF oder es ist nicht passiert! (Beispiel mit Eingängen
0.2
,100
,'THE END'
,30
)Oder probieren Sie es bei MATL Online .
Erläuterung
quelle
why
:)JavaScript (ES6),
268261 ByteZumindest in meinem Browser ist die Ausgabe so konzipiert, dass sie in den Bereich des Stapel-Snippets passt, ohne dass "Ganze Seite" angezeigt werden muss. Wenn Sie also mehr als 702 Regentropfen anfordern, stürzt die Ausgabe ab.
Bearbeiten: 7 Bytes mit einem Textknoten als Ausgabebereich gespeichert.
quelle
setInterval
. Auch warum benutzt dutextContent
stattinnerHTML
?R,
196 192185 BytesNur eine Scheinversion, die ich aufgrund der Beschreibung geschrieben habe. Hoffentlich ist es etwas, wonach OP gesucht hat.
Einige Bytes dank @plannapus gespart.
Die Argumente:
w
: Wartezeit zwischen Bildernt
: Gesamtzahl der Bilderm
: Benutzerdefinierte Nachrichtn
: Anzahl der RegentropfenBeispiel
Warum scheint es nach oben zu regnen?
Bearbeiten: Ich sollte erwähnen, dass dies meine angepasste 23x100 Zeichen R-Studio-Konsole ist. Die Abmessungen sind in die Funktion fest einprogrammiert, aber man könnte sie im Prinzip verwenden
getOption("width")
, um die Größe der Konsole flexibel zu gestalten.Ungolfed und erklärte
quelle
rep()
meldet dastimes
Argument automatisch ab, so dass dies auch nicht erforderlich ist. Weitere 7 Bytes gespeichert!runif
sondern verwendensample
. Wie so:f=function(w,t,m,n,x,y){for(i in 1:t){r=matrix(" ",x,y);r[runif(n)*x*y]="/";cat("\f",rbind(r,"\n"),sep="");Sys.sleep(w)};cat("\f",g<-rep("\n",y/2),rep(" ",(x-nchar(m))/2),m,g,sep="")}
C 160 Bytes
Ungolfed-Version:
quelle
R 163 Zeichen
Mit Einrückungen und Zeilenumbrüchen:
Es ist an eine Terminalgröße von 24 Zeilen mal 80 Spalten angepasst.
w
ist die Wartezeit,t
die Anzahl der Frames,n
die Anzahl der Regentropfen undm
die endgültige Nachricht.Es unterscheidet sich von der Antwort von @ billywob durch die unterschiedliche Verwendung von
sample
: Wenn die Ausgabegröße weggelassen wird,sample
wird eine Permutation des Eingabevektors angezeigt (hier ein Vektor, der die erforderliche Anzahl von Regentropfen und die entsprechende Anzahl von Leerzeichen enthält, dank dieses Argumentstimes
von Funktionrep
ist vektorisiert). Da die Größe des Vektors genau der Größe des Bildschirms entspricht, müssen keine Zeilenumbrüche hinzugefügt oder erzwungen zu einer Matrix geformt werden.quelle
NodeJS:
691158148 BytesBearbeiten
Auf Wunsch werden zusätzliche Funktionen entfernt und Golf gespielt.
Die Regeln legen fest, dass die Größe nicht berücksichtigt wird. Diese Version enthält jedoch einen Fehler für die ersten paar Frames. Es ist 129 Bytes.
Vorherige Antwort
Vielleicht nicht das beste Golfspiel, aber ich wurde ein bisschen mitgerissen. Es hat optional Windrichtung und Regenfaktor.
node rain.js 0 0.3
Siehe webm hier
quelle
Nudel , nicht konkurrierende 44 Bytes
Ich hatte zentrierten Text auf meiner Liste der Sachen, die zu tun sind, seit ich die Sprache gemacht habe ... Aber ich war faul und fügte erst nach dieser Herausforderung hinzu. Also, hier konkurriere ich nicht, hatte aber Spaß mit der Herausforderung :)
Die Konsolengröße ist fest auf 25x50 codiert, was im Online-Editor nicht gut aussieht, aber für das Snippet.
Versuch es:)
Wie es funktioniert
quelle
Ruby + GNU Core Utils, 169 Byte
Parameter für die Funktion sind Wartezeit, Anzahl der Iterationen, Nachricht und Anzahl der Regentropfen in dieser Reihenfolge. Zeilenumbrüche zur besseren Lesbarkeit.
Core Utils wurden für
tput
und benötigtclear
.quelle
Python 2.7,
254251 BytesDies ist mein eigener Versuch, ohne ncurses zu verwenden.
Vielen Dank an @ErikTheOutgolfer für das Korrigieren und Speichern von Bytes.
quelle
for
Schleife in eine Zeile einfügen (wie in40)];for i in u(
). Sie brauchen auch ein ESC-Zeichen in,'[2J'
denke ich. Es gab auch einen zusätzlichen Raum inu(n): r[y
. Ich weiß allerdings nicht, wie Sie 249 gezählt haben. Alle Probleme, die ich gefunden habe, wurden hier behoben .<esc>
ein wörtliches 0x1B-ESC-Byte handelt.SmileBASIC, 114 Bytes
Die Konsolengröße beträgt immer 50 * 30.
quelle
Perl 5, 156 Bytes
154 Byte Code + 2 für
-pl
.Verwendet eine feste Größe von 160x50.
Sehen Sie es online!
Perl 5, 203 Bytes
201 Byte Code + 2 für
-pl
.Verwendet
tput
die Größe des Terminals zu bestimmen.quelle