Напишите самую короткую программу, чтобы превратить любое произведение искусства ASCII в анимированную снежную сцену, которая начинает формироваться из падающего снега ( пример JavaScript без игры в гольф, последнее обновление 2011-12-19).
Спецификация ввода : Ваша программа должна принимать произвольные комбинации пробелов, звездочек и переносов. Ввод будет содержать не более 23 строк и 80 символов в строке. Пустых строк не будет, но строки могут состоять только из пробелов. Один завершающий перевод строки будет включен и должен игнорироваться.
Вывод : Вывод символов ASCII (пробелы, звездочки) и управляющих кодов (возврат каретки, перевод строки, коды выхода ANSI и т. Д.) Для текстовой консоли операционной системы или эмулятора терминала, пока пользователь не завершит программу вручную. Вы можете считать, что окно терминала имеет размер 80x24 символа, если ваша операционная система разрешает эту настройку.
Правила :
- Анимация должна быть плавной и быстрой (желательно 15 кадров в секунду).
- Плотность снега должна составлять от 5% до 15%.
- Не более одного экрана снега может прокручиваться в секунду. (Это означает, что за любой второй период времени может быть добавлено не более 24 строк нового снега.)
- На снегу не должно быть никаких явных следов, поскольку он входит в верхнюю часть экрана; это должно выглядеть случайно.
- Программа должна заполнить все строки экрана снегом как можно быстрее при запуске; начальное заполнение отдельных строк экрана не должно быть очевидным для зрителя.
- Нижний левый угол входного изображения ASCII должен находиться в нижнем левом углу экрана (рисунок 1 для дальнейшего пояснения).
- Область внутри или под искусством ASCII не должна быть постоянно заполнена звездочками. Однако звездочки могут (но не обязаны) прокручивать эту область.
- Снег не должен накапливаться в нижней части экрана или поверх существующего снега, за исключением случаев, указанных во входных данных.
- Нижние пробелы должны быть заполнены перед верхними, так как заполнение пробелов в обратном порядке делает анимацию рождественской елки сильно отличающейся от вывода моего исходного кода. (добавлено 2011-12-20)
Счастливых праздников!
Рисунок 1: маркированные области экрана 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
Пример ввода
Код Гольф Баннер
****** ******* ******** ******** ****** ******* ** ********
** ** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ****** ** **** ** ** ** ******
** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** **
****** ******* ******** ******** ****** ******* ******** **
Логотип переполнения стека
****
****
**** ****
**** ****
**** ****
*** **** ****
******* **** ****
******** *** ***
********* ***
******* ******
************* **
***********
*** **** ***
*** **************** ***
*** **************** ***
*** ***
*** **************** ***
*** ***
****************************
****************************
Новогодние елки
*
*** *
* ***** ***
*** ******* * *****
***** ********* *** *
* *********** *****
* ************* *******
* *** *************** * *
*** ***** ***************** ***
***** ******* ******************* *****
******* * ********************* *******
********* * *********
* *