Drzewa, które hodujemy, mają kilka zasad, które określają sposób ich wzrostu:
Zasady wzrostu:
- Drzewa składają się tylko z gałęzi.
- Gałęzie są wykonane z kombinacji następujących znaków:
_
,\
,|
,/
, i_
Drzewo zaczyna się jako pojedyncza pionowa gałąź / pień (
|
) na ziemi (_
):__________________|___________________
Pokarm dla wzrostu gałęzi pochodzi ze światła.
- Światło zaczyna się z intensywnością 2 w każdym punkcie nieba i leci prosto w dół.
- Każda gałąź jest w stanie zjeść połowę dostępnego światła, a reszta przechodzi do niższych gałęzi.
- Tak więc gałąź bez innych gałęzi powyżej będzie dostawać 1 jednostkę lekkiej żywności w każdym sezonie, gałąź z 1 gałęzią powyżej otrzyma 0,5 jednostki żywności w każdym sezonie, i ogólnie gałąź z n gałęziami nad nią otrzyma 1 / (2 ^ n) jednostek żywności w każdym sezonie.
- Na koniec każdego sezonu jedzenie jest sumowane, zaczynając od pnia i przesuwając się w górę i przekształcając w nowe gałęzie i owoce (stosuj następujące zasady, aż gałąź zmieni się w owoc lub pozostanie mniej niż 1 jednostka jedzenia):
- Jeśli gałąź ma mniej niż 1 jednostkę żywności na koniec sezonu, cała żywność dla tej gałęzi jest przechowywana w tej gałęzi do następnego sezonu.
- Jeśli gałąź ma co najmniej 1 jednostkę żywności i ma miejsce na wzrost, losowo wyrasta nowa gałąź, wykorzystując dostępne wzorce wzrostu (patrz poniżej) i przechowuje pozostałą żywność na następny sezon.
- Jeśli gałąź ma> = 1 jednostkę jedzenia, nie ma gdzie rosnąć, i ma gałęzie odgałęzione, równomiernie rozprowadza jedzenie do swoich gałęzi
- Jeśli gałąź ma> = 1 jednostkę jedzenia, nigdzie nie rośnie i nie ma gałęzi odgałęzionych, staje się owocem (reprezentowane przez
O
)
- Oto możliwe konfiguracje wzrostu
Konfiguracje wzrostu:
_ \ | / _ _ \ | / \ | / _
| | | | | \ \ \ \ / / / / __ \_ |_ _| _/ __
--- Vertical Branches --- --- Diagonal Branches --- --- Horizontal Branches ---
Przykładowe potencjalne drzewo:
\
/ /
\/O |___//
\_/ \//O\_/
\__/|\|_/
\|/
__________________|__________________
Wkład:
Twój program powinien być w stanie pobrać jako dane wejściowe listę migawek drzewa, które chciałbyś zobaczyć. Na przykład [10,20,50] oznacza, że chcesz zobaczyć drzewo po 10 sezonach, 20 sezonach i 50 sezonach.
Wydajność:
Dla każdego sezonu wejściowego program powinien wyświetlać sezon, a następnie zdjęcie drzewa w tym sezonie. Jeśli to pomoże, możesz zdefiniować maksymalny wiek drzewa, na przykład 60, tak aby maksymalna wysokość drzewa wynosiła 61, a maksymalna szerokość 121, a następnie zawsze pokazuj drzewo w tej skali. W przeciwnym razie możesz przeskalować obraz do dowolnego drzewa wielkości. Na przykład, jeśli wartość wejściowa to [0,1,2,3], wynikiem może być:
Season 0:
_|_
Season 1:
\
__|__
Season 2:
_
\|
___|___
Season 3:
|_/ _
\|
____|___
Zwycięzca
Każde rozwiązanie musi zamieścić dane wyjściowe ulubionego uruchomienia kodera w swoim programie wraz z danymi wejściowymi [10,40]
wraz z kodem źródłowym. Ponadto, WSZYSTKIE powyższe kryteria muszą zostać spełnione, aby się zakwalifikować.
Zwycięzca zostanie zakwalifikowany z największą liczbą głosów.
Powodzenia i wesołego sadzenia !!!
źródło
Odpowiedzi:
Pyton
Przyjąłem trochę wolności z tym:
Wyjście próbki, 2 drzewa
Źródło
Jestem ciekawy rozwiązania w golfa.
źródło
Python, 673 znaków
Oto wersja w golfa:
próbka @ 10 (obcięta do interesującej części):
próbka @ 40:
źródło
JavaScript
UPD: Dodano kilka nowych zasad:
To nie jest najpiękniejszy kod w javascript. Może być później będzie kilka ulepszeń. Kod na JSFiddle
Kilka przykładów (1040, 100):
źródło