도전 설명
터미널에서 비의 시뮬레이션을 보여 주어야합니다.
아래 예제에서 무작위로 100 개의 빗방울을 추가 (언어가 제공하는 기본 임의 함수 사용)하여 0.2 초 동안 기다렸다가 주어진 시간이 만료 될 때까지 다시 그립니다. 빗방울을 나타내는 데 모든 문자를 사용할 수 있습니다.
매개 변수
- 다시 그리기 간격 (초)입니다.
- 비가 보이는 시간. 이것은 반복 횟수를 나타내는 정수일뿐입니다. [따라서 비가 보일 순 시간은이 정수에 대기 시간을 곱한 값입니다]
- 비가 내릴 때 표시되는 메시지. (이것은 중앙에 있어야합니다)
- 화면에 표시 할 빗방울 수입니다.
규칙
- 빗방울을 나타내는 데 1 바이트를 사용해야하며, 고양이 나 개까지도 가능합니다.
- 터미널 크기에 반응 할 필요가 없으므로 다양한 터미널 크기에 대한 버그를 처리 할 필요가 없습니다. 터미널 너비와 높이를 직접 지정할 수 있습니다.
- 골프의 표준 규칙이 적용됩니다.
코드 샘플 및 출력
이것은 ncurses를 사용하여 python 2.7로 작성된 ungolfed 버전입니다.
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()
출력-