Napisz najkrótszy program, aby przekształcić dowolną sztukę ASCII w animowaną scenę śnieżną, która zaczyna się formować z opadającego śniegu ( przykład niezakończonego golfa JavaScript ostatnio zaktualizowany 2011-12-19).
Specyfikacja wejściowa : Twój program musi akceptować dowolne kombinacje spacji, gwiazdek i znaków nowej linii. Dane wejściowe będą zawierać maksymalnie 23 wiersze i 80 znaków w wierszu. Nie będzie pustych linii, ale linie mogą składać się tylko z białych znaków. Pojedyncza nowa linia zostanie dołączona i należy ją zignorować.
Dane wyjściowe : wyprowadzaj znaki ASCII (spacje, gwiazdki) i kody sterujące (znaki powrotu karetki, znaki linii, kody specjalne ANSI itp.) Dla konsoli tekstowej systemu operacyjnego lub emulatora terminala, dopóki użytkownik ręcznie nie zakończy programu. Możesz założyć, że okno terminala ma 80x24 znaków, jeśli twój system operacyjny pozwala na to ustawienie.
Zasady :
- Animacja musi być płynna i szybka (preferowane 15 fps).
- Gęstość śniegu musi wynosić od 5% do 15%.
- Nie więcej niż jeden ekran śniegu może przewijać się na sekundę. (Oznacza to, że w ciągu jednej sekundy można dodać nie więcej niż 24 linie nowego śniegu).
- Śnieg nie może wykazywać żadnego widocznego wzoru, gdy wchodzi do górnej części ekranu; musi wyglądać losowo.
- Program musi jak najszybciej wypełnić wszystkie rzędy ekranu śniegiem; wstępne wypełnienie poszczególnych wierszy ekranu nie może być oczywiste dla widza.
- Lewy dolny róg wejściowej grafiki ASCII musi znajdować się w lewym dolnym rogu ekranu (rysunek 1 dla dalszego wyjaśnienia).
- Obszar wewnątrz lub pod grafiką ASCII nie może być na stałe wypełniony gwiazdkami. Jednak gwiazdki mogą (ale nie są wymagane) przewijać ten obszar.
- Śnieg nie może gromadzić się na dole ekranu lub na istniejącym śniegu, z wyjątkiem przypadków pokazanych na wejściu.
- Dolne spacje muszą być wypełnione przed górnymi, ponieważ wypełnianie spacji w odwrotnej kolejności powoduje, że animacja choinki wygląda zupełnie inaczej niż wynik mojego oryginalnego kodu. (dodano 2011-12-20)
Wesołych świąt!
Rysunek 1: oznaczone obszary ekranu 80x24
---------------------------New snow added on this line--------------------------
|
|
----------------------------------------------------------+ |
**** | |
Snow MUST fall Snow MAY fall ----------------> **** | |
through this through these **** **** | Snow MUST fall |
area. areas of a **** **** | through this |
completed \---------> **** ****| area. |
ASCII art scene. \ *** **** ****| |
area \ \ ******* **** ****| |
\ \ ******** *** ***| (ALL CAPS terms |
(located in \ \--> ********* *** | have standard |
lower left \ ******* ****** MAY | RFC 2119 |
corner of \ ************* ** fall | meanings.) |
screen) \ *********** here | |
*** +---> **** *** | |
*** | **************** *** | |
| Snow MUST fall *** | **************** *** | |
| through this *** +---> *** | |
| area. *** | **************** *** | |
--+---------------------+*** +---> ***+----+------------------+--
| Snow MUST NOT |****************************| Snow MUST NOT |
V accumulate here. |****************************| accumulate here. V
Przykładowe dane wejściowe
Kod Banner Golf
****** ******* ******** ******** ****** ******* ** ********
** ** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ****** ** **** ** ** ** ******
** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** **
****** ******* ******** ******** ****** ******* ******** **
Logo przepełnienia stosu
****
****
**** ****
**** ****
**** ****
*** **** ****
******* **** ****
******** *** ***
********* ***
******* ******
************* **
***********
*** **** ***
*** **************** ***
*** **************** ***
*** ***
*** **************** ***
*** ***
****************************
****************************
Choinki
*
*** *
* ***** ***
*** ******* * *****
***** ********* *** *
* *********** *****
* ************* *******
* *** *************** * *
*** ***** ***************** ***
***** ******* ******************* *****
******* * ********************* *******
********* * *********
* *