Les arbres que nous cultivons ont des règles qui définissent comment ils poussent:
Règles de croissance:
- Les arbres se composent uniquement de branches.
- Les branches sont constituées d'une combinaison des symboles suivants:
_
,\
,|
,/
, &_
Un arbre commence comme une seule branche / tronc vertical (
|
) au sol (_
):__________________|___________________
La nourriture pour la croissance des branches provient de la lumière.
- La lumière commence à une intensité de 2 à chaque point du ciel et se déplace directement vers le bas.
- Chaque branche peut manger la moitié de la lumière dont elle dispose et le reste passe par les branches inférieures.
- Ainsi, une branche sans autre branche au-dessus recevra 1 unité de nourriture légère chaque saison, une branche avec 1 branche au-dessus obtiendra 0,5 unité de nourriture chaque saison, et en général une branche avec n branches au-dessus obtiendra 1 / (2 ^ n) unités de nourriture chaque saison.
- À la fin de chaque saison, la nourriture est totalisée en commençant par le tronc et en remontant et convertie en nouvelles branches et fruits (appliquer les règles suivantes jusqu'à ce que la branche se transforme en fruit ou qu'il reste moins d'une unité de nourriture):
- Si une branche a moins de 1 unité de nourriture à la fin d'une saison, tous les aliments de cette branche sont stockés dans cette branche jusqu'à la saison suivante.
- Si une branche a une unité de nourriture supérieure ou égale à 1 unité et a de la place pour grandir, elle développe aléatoirement une nouvelle branche en utilisant les modèles de croissance disponibles (voir ci-dessous) et stocke la nourriture restante pour la prochaine saison.
- Si une branche a> = 1 unité de nourriture, nulle part où grandir et a des branches ramifiées, elle distribue uniformément la nourriture à ses branches ramifiées
- Si une branche a> = 1 unité de nourriture, nulle part où croître et aucune branche secondaire, elle devient un fruit (représenté par
O
)
- Voici les configurations de croissance possibles
Configurations de croissance:
_ \ | / _ _ \ | / \ | / _
| | | | | \ \ \ \ / / / / __ \_ |_ _| _/ __
--- Vertical Branches --- --- Diagonal Branches --- --- Horizontal Branches ---
Exemple d'arbre potentiel:
\
/ /
\/O |___//
\_/ \//O\_/
\__/|\|_/
\|/
__________________|__________________
Contribution:
Votre programme devrait pouvoir prendre en entrée une liste des instantanés de l'arborescence que vous aimeriez voir. Par exemple, [10,20,50] signifie que vous souhaitez voir l'arbre après 10 saisons, 20 saisons et 50 saisons.
Sortie:
Pour chaque saison d'entrée, votre programme doit produire la saison, puis une photo de l'arbre pendant cette saison. Si cela peut vous aider, vous pouvez définir un âge maximal pour l'arbre, tel que 60 ans, de sorte que la hauteur maximale pour un arbre soit 61 et la largeur maximale soit 121, puis affichez toujours l'arbre sur cette échelle. Sinon, n'hésitez pas à mettre votre image à l'échelle de n'importe quel arbre. Par exemple, si l'entrée était [0,1,2,3], votre sortie pourrait être:
Season 0:
_|_
Season 1:
\
__|__
Season 2:
_
\|
___|___
Season 3:
|_/ _
\|
____|___
Gagnant
Chaque solution doit publier la sortie de l'exécution préférée du codeur de leur programme avec l'entrée de [10,40]
, ainsi que leur code source. De plus, TOUS les critères ci-dessus doivent être remplis pour être admissibles.
Le gagnant sera le qualificatif avec le plus grand nombre de votes.
Bonne chance et joyeuse plantation !!!
la source
Réponses:
Python
J'ai pris un peu de liberté avec ceci:
Exemple de sortie, 2 arbres
La source
Je suis curieux de voir une solution golfée.
la source
Python, 673 caractères
Voici une version golfée:
échantillon @ 10 (tronqué à la partie intéressante):
échantillon @ 40:
la source
Javascript
UPD: Ajout de nouvelles règles:
Ce n'est pas le plus beau code sur javascript. Peut-être plus tard serait quelques améliorations. Code sur JSFiddle
Quelques exemples (10,40,100):
la source