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 -