Los árboles que estamos cultivando tienen algunas reglas que definen cómo crecen:
Reglas de crecimiento:
- Los árboles consisten solo en ramas.
- Ramas se componen de una combinación de los siguientes símbolos:
_
,\
,|
,/
, y_
Un árbol comienza como una sola rama / tronco vertical (
|
) en el suelo (_
):__________________|___________________
El alimento para el crecimiento de las ramas proviene de la luz.
- La luz comienza a una intensidad de 2 en cada punto del cielo y viaja hacia abajo.
- Cada rama puede comer la mitad de la luz disponible y el resto pasa a las ramas inferiores.
- Por lo tanto, una rama sin otras ramas por encima obtendrá 1 unidad de alimento ligero cada temporada, una rama con 1 rama por encima obtendrá 0,5 unidades de alimento por temporada y, en general, una rama con n ramas por encima obtendrá 1 / (2 ^ n) unidades de comida cada temporada.
- Al final de cada temporada, la comida se totaliza comenzando con el tronco y subiendo y convertida en nuevas ramas y fruta (aplique las siguientes reglas hasta que la rama se convierta en fruta o le quede menos de 1 unidad de comida):
- Si una rama tiene menos de 1 unidad de alimento al final de una temporada, todos los alimentos para esa rama se almacenan en esa rama hasta la próxima temporada.
- Si una rama tiene una unidad de alimento mayor o igual a 1 y tiene espacio para crecer, al azar crece una nueva rama utilizando los patrones de crecimiento disponibles (ver más abajo) y almacena el resto de los alimentos para la próxima temporada.
- Si una rama tiene> = 1 unidad de alimento, ningún lugar para crecer y tiene ramas ramificadas, distribuye uniformemente la comida a sus ramas ramificadas
- Si una rama tiene> = 1 unidad de alimento, ningún lugar para crecer y ninguna rama ramificada, se convierte en fruta (representada por
O
)
- Aquí están las posibles configuraciones de crecimiento
Configuraciones de crecimiento:
_ \ | / _ _ \ | / \ | / _
| | | | | \ \ \ \ / / / / __ \_ |_ _| _/ __
--- Vertical Branches --- --- Diagonal Branches --- --- Horizontal Branches ---
Árbol potencial de ejemplo:
\
/ /
\/O |___//
\_/ \//O\_/
\__/|\|_/
\|/
__________________|__________________
Entrada:
Su programa debería poder tomar como entrada una lista de las instantáneas del árbol que le gustaría ver. Por ejemplo, [10,20,50] significa que le gustaría ver el árbol después de 10 temporadas, 20 temporadas y 50 temporadas.
Salida:
Para cada temporada de entrada, su programa debe generar la temporada y luego una imagen del árbol en esa temporada. Si ayuda, puede definir una edad máxima para el árbol, como 60, de modo que la altura máxima para un árbol sea 61, y el ancho máximo sea 121, y luego muestre siempre el árbol en esa escala. De lo contrario, siéntase libre de escalar su imagen a un árbol de cualquier tamaño. Por ejemplo, si la entrada fue [0,1,2,3], su salida podría ser:
Season 0:
_|_
Season 1:
\
__|__
Season 2:
_
\|
___|___
Season 3:
|_/ _
\|
____|___
Ganador
Cada solución debe publicar la salida de la ejecución favorita del programador del codificador con la entrada de [10,40]
, junto con su código fuente. Además, TODOS los criterios anteriores deben cumplirse para calificar.
El ganador será el calificador con el mayor número de votos.
Buena suerte y feliz plantación !!!
fuente
Respuestas:
Pitón
Me tomé un poco de libertad con esto:
Salida de muestra, 2 árboles
Fuente
Tengo curiosidad por ver una solución de golf.
fuente
Python, 673 caracteres
Aquí hay una versión de golf:
muestra @ 10 (truncada a la parte interesante):
muestra @ 40:
fuente
Javascript
UPD: se agregaron algunas reglas nuevas:
Aquí no está el código más hermoso en javascript. Puede ser más tarde habría algunas mejoras. Código en JSFiddle
Algunos ejemplos (10,40,100):
fuente