Escriba el programa más corto para convertir cualquier pieza de arte ASCII en una escena animada de nieve que comienza a formarse a partir de la nieve que cae ( ejemplo de JavaScript no golfizado actualizado por última vez el 2011-12-19).
Especificación de entrada : su programa debe aceptar combinaciones arbitrarias de espacios, asteriscos y líneas nuevas. La entrada contendrá como máximo 23 líneas y 80 caracteres por línea. No habrá líneas vacías, pero las líneas pueden consistir solo en espacios en blanco. Se incluirá una nueva línea final y se debe ignorar.
Salida : salida de caracteres ASCII (espacios, asteriscos) y códigos de control (retornos de carro, avances de línea, códigos de escape ANSI, etc.) para la consola de texto de su sistema operativo o emulador de terminal hasta que el usuario finalice manualmente el programa. Puede suponer que la ventana del terminal tiene 80x24 caracteres si su sistema operativo permite esa configuración.
reglas :
- La animación debe ser suave y rápida (se prefieren 15 fps).
- La densidad de nieve debe estar entre 5% y 15%.
- No se puede desplazar más de una pantalla de nieve por segundo. (Eso significa que no se pueden agregar más de 24 líneas de nieve nueva en un segundo período de tiempo).
- La nieve no debe mostrar ningún patrón obvio al entrar en la parte superior de la pantalla; Debe parecer aleatorio.
- El programa debe llenar todas las filas de la pantalla con nieve lo más rápido posible cuando se inicia; El llenado inicial de las filas individuales de la pantalla no debe ser obvio para el espectador.
- La esquina inferior izquierda del arte ASCII de entrada debe estar en la esquina inferior izquierda de la pantalla (Figura 1 para mayor aclaración).
- El área dentro o debajo del arte ASCII no debe llenarse permanentemente con asteriscos. Sin embargo, los asteriscos pueden (pero no están obligados a hacerlo) desplazarse por esta área.
- La nieve no debe acumularse en la parte inferior de la pantalla o encima de la nieve existente, excepto como se muestra en la entrada.
- Los espacios inferiores deben llenarse antes que los superiores, ya que llenar espacios en el orden opuesto hace que la animación del árbol de Navidad se vea muy diferente de la salida de mi código original. (añadido 2011-12-20)
¡Felices vacaciones!
Figura 1: áreas etiquetadas de una pantalla de 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
Entradas de ejemplo
Código Golf Banner
****** ******* ******** ******** ****** ******* ** ********
** ** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ****** ** **** ** ** ** ******
** ** ** ** ** ** ** ** ** ** ** **
** ** ** ** ** ** ** ** ** ** ** ** **
****** ******* ******** ******** ****** ******* ******** **
Stack Overflow Logo
****
****
**** ****
**** ****
**** ****
*** **** ****
******* **** ****
******** *** ***
********* ***
******* ******
************* **
***********
*** **** ***
*** **************** ***
*** **************** ***
*** ***
*** **************** ***
*** ***
****************************
****************************
Arboles de navidad
*
*** *
* ***** ***
*** ******* * *****
***** ********* *** *
* *********** *****
* ************* *******
* *** *************** * *
*** ***** ***************** ***
***** ******* ******************* *****
******* * ********************* *******
********* * *********
* *