Trồng cây và xem nó lớn lên


30

Những cây chúng ta đang trồng có một số quy tắc xác định cách chúng phát triển:

Quy tắc tăng trưởng:

  1. Cây chỉ bao gồm các nhánh.
  2. Chi nhánh được tạo thành từ sự kết hợp của các ký hiệu sau: _, \, |, /, &_
  3. Một cây bắt đầu như một nhánh / thân thẳng đứng ( |) trên mặt đất ( _):

    __________________|___________________

  4. Thức ăn cho sự phát triển của chi nhánh đến từ ánh sáng.

    • Ánh sáng bắt đầu ở cường độ 2 tại mỗi điểm trên bầu trời và đi thẳng xuống.
    • Mỗi nhánh có thể ăn một nửa ánh sáng có sẵn cho nó và phần còn lại đi qua các nhánh thấp hơn.
    • Do đó, một nhánh không có nhánh nào khác ở trên sẽ nhận được 1 đơn vị thức ăn nhẹ mỗi mùa, một nhánh có 1 nhánh ở trên sẽ nhận được 0,5 đơn vị thức ăn mỗi mùa và nói chung, một nhánh có n nhánh trên đó sẽ nhận được 1 / (2 ^ n) đơn vị thực phẩm mỗi mùa.
  5. Vào cuối mỗi mùa, thức ăn được tổng cộng bắt đầu từ thân cây và di chuyển lên và chuyển đổi thành cành và quả mới (áp dụng các quy tắc sau cho đến khi cành biến thành quả hoặc chỉ còn ít hơn 1 đơn vị thức ăn):
    • Nếu một chi nhánh có ít hơn 1 đơn vị thực phẩm vào cuối mùa, tất cả thực phẩm cho chi nhánh đó được lưu trữ trong chi nhánh đó cho đến mùa tiếp theo.
    • Nếu một nhánh có lớn hơn hoặc bằng 1 đơn vị thực phẩm và có chỗ để phát triển, nó sẽ phát triển ngẫu nhiên một nhánh mới bằng cách sử dụng các mô hình tăng trưởng có sẵn (xem bên dưới) và lưu trữ thực phẩm còn lại cho mùa tiếp theo.
    • Nếu một nhánh có> = 1 đơn vị thực phẩm, không có nơi nào để phát triển và có các nhánh nhánh, nó sẽ phân phối đều thức ăn cho các nhánh nhánh của nó
    • Nếu một nhánh có> = 1 đơn vị thực phẩm, không nơi nào phát triển và không có nhánh nhánh, nó sẽ trở thành quả (đại diện bởi O)
  6. Dưới đây là các cấu hình tăng trưởng có thể

Cấu hình tăng trưởng:

_    \     |     /   _      _   \   |    /   \    |   /   _ 
 |    |    |    |   |        \   \   \   \   /   /   /   /     __   \_   |_   _|  _/  __
--- Vertical Branches ---      --- Diagonal Branches ---      --- Horizontal Branches ---


Cây ví dụ tiềm năng:

                \  
                /   /
              \/O  |___//
            \_/  \//O\_/ 
              \__/|\|_/
                 \|/
__________________|__________________

Đầu vào:

Chương trình của bạn sẽ có thể lấy làm đầu vào một danh sách các ảnh chụp nhanh của cây bạn muốn xem. Ví dụ: [10,20,50] có nghĩa là bạn muốn nhìn thấy cây sau 10 mùa, 20 mùa và 50 mùa.

Đầu ra:

Đối với mỗi mùa đầu vào, chương trình của bạn sẽ xuất ra mùa và sau đó là hình ảnh của cây trong mùa đó. Nếu có ích, bạn có thể xác định tuổi tối đa cho cây, chẳng hạn như 60, để chiều cao tối đa của cây sẽ là 61 và chiều rộng tối đa sẽ là 121, và sau đó luôn hiển thị cây theo tỷ lệ đó. Nếu không, hãy thoải mái chia tỷ lệ hình ảnh của bạn thành bất kỳ cây có kích thước nào. Ví dụ: nếu đầu vào là [0,1,2,3], đầu ra của bạn có thể là:

Season 0:
_|_

Season 1:
 \
__|__

Season 2:
 _
  \| 
___|___

Season 3:

 |_/ _
   \| 
____|___


Người chiến thắng

Mỗi giải pháp phải đăng kết quả đầu ra của chương trình yêu thích của lập trình viên với đầu vào [10,40], cùng với mã nguồn của họ. Ngoài ra, TẤT CẢ các tiêu chí trên phải được đáp ứng để đủ điều kiện.

Người chiến thắng sẽ là vòng loại có số phiếu bầu cao nhất.

Chúc may mắn và trồng cây vui vẻ !!!


"Phòng để phát triển" dường như không được xác định.
Peter Taylor

Tôi nghĩ rằng các thẻ "thử thách mã" và "mã golf" không khớp với nhau ("tiêu chí khách quan khác với kích thước mã" so với "ít byte mã nguồn nhất").
Howard

@Peter Taylor: Để xem có chỗ nào để phát triển không, trước tiên bạn phải kiểm tra cấu hình tăng trưởng cho loại nhánh đó (ví dụ: các nhánh dọc có thể đi lên trái, lên và lên phải), sau đó xem liệu có bất kỳ khoảng trống nào trong số đó không rỗng. Nếu vậy, có chỗ cho sự tăng trưởng.
Briguy37

@Howard: Vâng, tôi đã nghĩ điều tương tự, nhưng không chắc chắn. Tôi nghĩ rằng điều này chắc chắn là thách thức hơn hầu hết các vấn đề tôi đã thấy ở đây, vì vậy tôi chắc chắn muốn "thử thách mã". Tuy nhiên, nếu có nhiều giải pháp, tôi muốn có một cách để xác định người chiến thắng rõ ràng. Tính toán tính điểm ở trên ủng hộ việc bỏ phiếu đối với việc ghi điểm nguyên tử-mã-golf, do đó, điểm số nguyên tử-mã-golf thực sự chủ yếu là một điểm phá vỡ. Tôi sẽ để lại cho mọi người: Các yêu cầu về golf sẽ được vẫy nếu bình luận của Howard nhận được nhiều phiếu bầu hơn so với yêu cầu này.
Briguy37

Với cơ chế tính điểm hiện tại, đây không phải là môn đánh gôn . Nó cũng không thực sự là một golf-code nguyên tử .
Peter Taylor

Câu trả lời:


16

Con trăn

Tôi đã có một chút tự do với điều này:

  1. Tôi cho phép nhiều cây
  2. Trái cây đi trước hoa - một khi hoa có 1 thức ăn, nó biến thành quả.
  3. Quả chín khi có 3 thức ăn. Sau đó nó rơi khỏi cây và biến thành một bông hoa.
  4. Nếu quả rơi ít nhất 4 vị trí từ bất kỳ thân cây nào, nó đâm chồi vào một cây mới. Vì nó không nhận được nhiều ánh sáng, tôi gieo hạt với nhiều thức ăn như trong quả.

Mẫu đầu ra, 2 cây

                            / 
     \/\_ |  /             |  
 _  _/\|\|_\/             /|/ 
  |/ \/|/|O/              \|/ 
   \_/O|@|/               /|_ 
     \_|_|                \|  
_______|___________________|__

                       _      \                                   
                _/ _ \/\___/\|/                  \                
             /|\|\O@|/\/|__\/ \__/_\|/\\|  _ |/| _||/\\ /         
             \|_|@|\|@/O|@@/O_/@O|@/ \//\   \|\||@||@///          
           \_ \_|\|/@\\O|@||/OO//O\\O/ \@|@\||/@|\/\/|/   | / _   
        ___/    |/|/O//O|O||\\/|/O// \_O\|__| \O|/\/O|   _/\\|    
         / \_O@@_\/\O\\@|/O|/O\@\O\\@/OO/|O_@O/O|\/\/     \//|/__ 
     _|/|_|  \\|O\\/O/O||_@|\O|\/O//|O|@\|/O_O\@|/O/\_@O__//_||   
    | \\|____// |O|\O\O|/\@|/ |/O/ \|O|OO|\/@_/O|_O\/O//O_//O/    
    |_O\\@O\/\\OO\|/|/\O\O\|__@\|O@/|/O|O|/\OO\/|_O/  \\|OO\/     
   /  \\||_|\|||_O|\|@/OO\//OOO/|/@\|OO|\|\@|O \|\|O@O//  \/\     
 _/\_/@\|\@|/  \_||/ \\@|/\\\||/ \//O|O|/|/@|\@/|/O/OO\\__/  \||/ 
  \||/  |_|O\__@ |O\O/O||\///@|O_//|/OO|@|OO|/O\|O/OO|// /|\|/\|  
   ||___O@|_/  |__\/||_||/|\\/OO/|@|O|/ \|_O||_/O/O/O|/_|\/\|_/   
    \_OO\\_O\@_|/|_\|_O|/\|//\/|/@|O\|@_O|O_O\/||\/O/|/_|/|O|     
      \_|\@\@|_|\|OO|O|/\//O\/\O\@|_/|_@\|/\O/\||/\|/|@@|@|/      
       /|//|\|O|_|O\O\O\/|O\/|@|/_|\OO@\/ \/|O/_|O//@|@/\_|       
       \O\\|/|_OO|OO\O|/\|@@\|O|/ @//|_@\_/\|//O_/|O/  \/         
        \O\|O_/|/ \|O|O\/|/OO|O|O_/ \|    \/|/|/@ |/\__/          
         |O|_O\|\O/|_|O/\|\//|/   \_/     /\@\| \_/\/             
          \OO\O|/ \ _|@\/O||@|\___/       \/|/    \/              
           |__|O\__|OO\/\@||/\/            \|O____/               
              |____|/@/\|\|O\/            _/|/O                   
                   |/ \/|/|@/              \|/                    
                    \_/O|@|/              |/|__                   
            \|/       \_|_|  \|_      \|/  \|    \|/  _|_         
_____________|__________|_____|________|____|_____|____|__________

Nguồn

from random import choice, shuffle
format = '_\|/_@O'
directions = [(-1,0),(-1,1),(0,1),(1,1),(1,0)]
placement = [[[],[0,1,2],[]],[[],[0,1,2],[3]],[[0,1],[2],[3,4]],[[1],[2,3,4],[]],[[],[2,3,4],[]]]

def shine():
    for x in ymax:
        light = 2.
        for y in range(ymax[x],-1,-1):
            if (x,y) in tree:
                tree[x,y][1] += light/2
                light        /= 2


def grow((x,y)=(0,0),flow=0):
    type,store,children = tree[x,y]
    food = store + flow
    if type == 5:
        if food > 1:
           tree[x,y][0] = 6
           tree[x,y][1] = food-1
        return
    elif type == 6:
        if food > 3:
            tree[x,y]=[5,0,[]]
            if min(abs(x-xi) for xi in roots) > 4:
                tree[x,0] = [2,food,[]]
                roots.append(x)
        else:
            tree[x,y][1]=food
        return

    if food < 1:
        shuffle(children)
        for c in children:
            grow(c)
        return

    sites = []
    x0 = x+directions[type][0]-1
    y0 = y+directions[type][1]
    for i,t in enumerate(placement[type]):
        if t and (x0+i,y0) not in tree:
            sites.append((t,x0+i,y0))

    if sites:
        t,x1,y1 = choice(sites)
        t1 = choice(t)
        children.append((x1,y1))
        tree[x,y][1]=food-1
        tree[x1,y1]= [t1,0,[]]
        ymax[x1] = max(ymax.get(x1,0),y1)
    elif children:
        shuffle(children)
        for c in children:
            grow(c,food/len(children))
        tree[x,y][1]=0
    else:
        tree[x,y][0]=5

def output():
    X = range(min(ymax.keys())-1,max(ymax.keys())+2)
    for y in range(max(ymax.values()),-1,-1):
        s = ''
        for x in X:
            s += format[tree[x,y][0]] if (x,y) in tree else '_ '[y>0]
        print s


roots = [0,20]
seasons = [10,40]
tree = {}
ymax = {}
for r in roots:
    tree[r,0] = [2,0,[]]
    ymax[r]=0

for season in range(max(seasons)):
    shine()
    shuffle(roots)
    for r in roots:
        grow((r,0))
    if season+1 in seasons:
        output()
        print

Tôi tò mò muốn xem một giải pháp chơi gôn.


2
Tôi thích những bông hoa biến thành ý tưởng trái cây và hạt giống! Một gợi ý: thêm quy tắc không gian để giữ cho cây tách biệt. Ví dụ, có thể các nhánh không thể mọc trên bất kỳ không gian nào liền kề với một nhánh từ cây khác.
Briguy37

7

Python, 673 ký tự

Đây là phiên bản chơi gôn:

import random
Z='|_\/O'
T={60:0}
F={60:0}
C={60:[]}
B=[((1j-1,1),(1j-1,2),(1j,0),(1j+1,3),(1j+1,1)),((-1,1),(-1,2),(-1,0),(1,0),(1,3),(1,1)),((1j-1,1),(1j-1,2),(1\
j-1,0),(1j,3)),((1j,2),(1j+1,0),(1j+1,3),(1j+1,1)),()]
S=input()
for s in range(61):
 if s in S:
  for y in range(60,0,-1):print''.join(Z[T[x+y*1j]]if x+y*1j in T else' 'for x in range(121))
  print'_'*60+'|'+'_'*60
 for p in T:F[p]+=.5**sum(q.real==p.real and q.imag>p.imag and T[q]<4for q in T)
 for p in[q for q in T if F[q]>=1]:
  D=[p+d,c for d,c in B[T[p]]if p+d not in T]
  if D:q,c=random.choice(D);F[p]-=1;T[q]=c;F[q]=0;C[q]=[];C[p]+=[q]
  elif C[p]:
   for q in C[p]:F[q]+=F[p]/len(C[p])
  else:T[p]=4

mẫu @ 10 (cắt ngắn đến phần thú vị):

           |  |_   
       |_|/\_\ \|  
 |   \\/\|\/__|/   
 |/   \\O|O\__|    
  \___/O|/\/       
      \/O\/        
       \|/         
________|__________

mẫu @ 40:

             _  _        \_ _ / _|                        
        // _|/\|_\||_\___/ \_|_|/|/|_ |  _    //          
/     _|\\|_/\/|\/_/\/O|O\OO\|\|OO\|  \\/  |/|/|_/|       
\/\|OOO|//OO\O\|//OO/O_|O||\O|/|/|/OOO/ \OOO\/\| \||_|  | 
 \_|/|_O\\|\O\/|/O/O\_O|/  \\|O|O|/OO\\_/\O\|\/OO/\|O_|\| 
   |_|OO/O|/O/\|\/\O|O||_OOO|\\|/ \/O_|O\/OO|/O_|\/|OO|/  
     |/|\O|\|\/OO\O\|_|OO\|||// \OO\_O|O/  |||/_O/O|__|   
      \|O\O\|/\O\/\O|O|O\/O||/O_/|OO/\| \OO/\|/  \_|      
       |_/ O|\/O/\/\O\|\|\O|/\/OO|/ \/OO/\O\O\\__/        
         \_/O/\||/\O|\|O|O\\\/O_| \O/|/ \/O/_//     
           \O\/  \O\|_|O/\// \/OOOO|\|OO/|/|_|   
            |/\OO/O/  |O\/|\O/\O\|\O\|_|\|_|     
             \/OO\_\O__\|\|O|\/OO|/OO|___|       
              \|OOO\|O \\\|O|/|OO|OO\|          
               |/ \O|\_O\\|O|\|OO|O|/       
                \_/O|/O_//|O|/OO\|\|    
                  \_|OO \\O\|\/O_|/    
                    |/   \\O|O\__|    
                     \___/O|/\/     
                         \/O\/     
                          \|/    
___________________________|______________________________

Thật thú vị ... cây của bạn trông rất phẳng trên đỉnh, trong khi của tôi trông tròn. Tôi tự hỏi nếu một trong số chúng tôi có một lỗi, hoặc là tôi xáo trộn trẻ em để ngẫu nhiên hóa thứ tự chúng sinh ra cháu. Ngoài ra, tôi nhận thấy rằng trái cây của bạn không bắt được ánh sáng ... Tôi không chắc liệu tôi có nên làm điều đó không hay không.
gian hàng

2

Javascript

CẬP NHẬT: Đã thêm một số quy tắc mới:

  1. Nếu nhánh có thể phát triển lúc đầu, nó trở thành lá, khi lá có> = 1 thức ăn, nó trở thành một nhánh với thức ăn = thức ăn của lá
  2. nếu nhánh không có nơi nào để phát triển và có thức ăn> = 1 thức ăn thì nó biến thành hoa
  3. Nếu hoa có nhiều hơn 1,5 thức ăn, nó sẽ trở thành một froot với thức ăn hoa / 2
  4. Nếu froot có nhiều hơn 1 thức ăn, nó rơi xuống đất và phát triển thành cây mới
  5. mỗi mùa có 10% cơ hội có mưa cung cấp thêm thức ăn cho các nhánh trên mặt đất phân phối thức ăn cho những người khác.

Đây không phải là mã đẹp nhất trên javascript. Có thể sau này sẽ là một số cải tiến. Mã trên JSFiddle

var leaf = function(food, branchDirection){
    this.food = food || 0;
    this.branchDirection = branchDirection;
    this.char = 'o';

    this.getHtml = function(){
        var color = "#00FF00";
        var bgColor = "#00BBEE";

        return "<span style=\"color: " + color + "; background-color: " + bgColor + "\">" + this.char + "</span>";
    };
};

var branch = function(food, direction){
    var directionChars = ["_", "\\", "|", "/"];

    this.food = food || 0;
    this.char = directionChars[direction];
    this.direction = direction;
    this.child_branches = [];

    this.getPossibleDirections = function(){
        if(this.direction === 0)
        {
            return [
                    [-1, 0, [0,1,2]],
                    [+1, 0, [2,3,0]]
                ];
        }
        if(this.direction == 1)
        {
            return [
                    [-1, +1, [0,1,2]],
                    [0, +1, [3]]
                ];
        }
        if(this.direction == 2){
            return [
                    [-1, +1, [0,1]],
                    [0, +1, [2]],
                    [+1, +1, [3,0]]
                ];
        }
        if(this.direction == 3){
            return [
                    [+1 ,+1 , [0,2,3]],
                    [0 ,+1 , [1]]
                ];
        }
    };


    this.getHtml = function(){
        var color = "brown";
        var bgColor = "#00BBEE";

        return "<span style=\"color: " + color + "; background-color: " + bgColor + "\">" + this.char + "</span>";
    };
};

var froot = function(food){
    this.char = "O";
    this.food = food || 0;

    this.getHtml = function(){
        var color = "#FF0000";
        var bgColor = "#00BBEE";

        return "<span style=\"color: " + color + "; background-color: " + bgColor + "\">" + this.char + "</span>";
    }; 
};

var flower = function(food){
    this.char = "@";
    this.food = food || 0;

    this.getHtml = function(){
        var color = "#FFFF00";
        var bgColor = "#00BBEE";

        return "<span style=\"color: " + color + "; background-color: " + bgColor + "\">" + this.char + "</span>";
    };
};

var ground = function(){
    this.char = "_";

    this.getHtml = function(){
        var color = "black";
        var bgColor = "#00BBEE";

        return "<span style=\"color: " + color + "; background-color: " + bgColor + "\">" + this.char + "</span>";
    };
};

var air = function(){
    this.char = " ";

    this.getHtml = function(){
        var color = "blue";
        var bgColor = "#00BBEE";

        return "<span style=\"color: " + color + "; background-color: " + bgColor + "\">" + this.char + "</span>";
    };
};

var tree = function(){
    var me = this;
    var treeSpace = 5;


    this.treeMatrix = [];

    this.calculateFood = function(isRainy){
        //console.log(this.treeMatrix);
        var width = this.treeMatrix[0].length;
        isRainy = isRainy || false;

        for(var i in this.treeMatrix[0]){
            var food = 2;

            for(var j in this.treeMatrix){
                if(this.treeMatrix[this.treeMatrix.length - 1 - j][i] instanceof branch
                  || this.treeMatrix[this.treeMatrix.length - 1 - j][i] instanceof leaf){
                    this.treeMatrix[this.treeMatrix.length -1 - j][i].food += food;
                    food /= 2;
                }
            }

            if(isRainy){
                var rainFood = 5;

                for(var j in this.treeMatrix){
                    if(j == 0 && !(this.treeMatrix[j][i] instanceof branch))
                        continue;

                    if((this.treeMatrix[j][i] instanceof branch
                      || this.treeMatrix[j][i] instanceof leaf)
                      &&
                      (j == 0 || this.treeMatrix[j-1][i] instanceof branch)){
                        this.treeMatrix[j][i].food += food;
                        rainFood /= 2;
                    }

                }
            }
        }
    };

    this.expandMatrix = function(){
        var expandLeft = false;
        var expandRight = false;
        var expandTop = false;

        this.treeMatrix[this.treeMatrix.length - 1].forEach(function(el){
            if(el instanceof branch)
                expandTop = true;
        });

        if(expandTop)
            this.treeMatrix.push(this.treeMatrix[0].map(function(){return new air();}));


        for(var i in this.treeMatrix){
            if(this.treeMatrix[i][0] instanceof branch){
                expandLeft = true;
            }
            if(this.treeMatrix[i][this.treeMatrix.length - 1] instanceof branch){
                expandRight = true;
            }
        }

        this.treeMatrix = this.treeMatrix.map(function(row){
            if(expandLeft)
                row.unshift((row[0] instanceof ground ? new ground() : new air()));
            if(expandRight)
                row.push((row[0] instanceof ground ? new ground() : new air()));

            return row;
        });
    };

    this.calculateNewMatrix = function(){
        if(this.treeMatrix.length === 0){
            this.treeMatrix.push([new ground(), new branch(0,2), new ground()]);
        }

        var rainySeason = Math.random() > 0.9;

        this.expandMatrix();
        this.calculateFood(rainySeason);

        for(var i in this.treeMatrix){
            for(var j in this.treeMatrix[i]){
                var element = this.treeMatrix[i][j];

                // grow a branch/distribute food/set froot or just store food of not(do nothing)
                if(element instanceof branch
                    && element.food >= 1
                ){
                    //console.log("branch coordinates", i, j);
                    var directions = element.getPossibleDirections();
                    var tm = this.treeMatrix;

                    var freeDirections = directions.filter(function(directionArr){
                        if(tm[parseInt(i) + directionArr[1]][parseInt(j) + directionArr[0]] instanceof branch)
                            return false;
                        else
                            return true;
                    });

                    if(freeDirections.length){
                        var newCell = freeDirections.length > 1
                            ? freeDirections[Math.floor(Math.random() * freeDirections.length)]
                            : freeDirections[0];

                        this.treeMatrix[parseInt(i) + newCell[1]][parseInt(j) + newCell[0]] = new leaf(element.food/2, newCell[2][Math.floor(Math.random() * newCell[2].length)]);
                        element.child_branches.push(this.treeMatrix[parseInt(i) + newCell[1]][parseInt(j) + newCell[0]]);
                    }
                    else if(!freeDirections.length && !element.child_branches.length){
                        this.treeMatrix[i][j] = new flower(element.food/2);
                    }
                    else if(!freeDirections.length && element.child_branches.length){
                        element.child_branches.forEach(function(child){
                            child.food += element.food/element.child_branches.length;
                        });

                        element.food = 0;
                    }
                }
                if(element instanceof flower
                    && element.food >= 1.5
                  ){
                    this.treeMatrix[i][j] = new froot(element.food/2);
                }
                if(element instanceof froot
                    && element.food >= 1
                  ){
                    this.plantNewTree(j, element.food);
                    this.treeMatrix[i][j] = new air();
                }
                if(element instanceof leaf
                    && element.food >= 1
                  ){
                   this.treeMatrix[i][j] = new branch(element.food, element.branchDirection);
                }
            }
        }
    };

    this.plantNewTree = function(coord, food){
        var canGrow = true;

        for(var i = 0; i <= treeSpace; i++){
            if(!(this.treeMatrix[0][coord + i] instanceof ground)
               || !(this.treeMatrix[0][coord - i] instanceof ground))
                canGrow = false;
        }

        if(canGrow)
            this.treeMatrix[0][coord] = new branch(food*10, 2);
    };

    this.getTreeString = function(){
        return this.treeMatrix.reduceRight(function(prev, next){
                return (
                typeof prev == "string"
                    ? prev
                    : prev.map(function(el){ return el.char}).join('')
                ) + "\n" + next.map(function(el){ return el.char}).join('');
                 })
    };

    this.getTreeHtml = function(){
        return "<pre>" + this.treeMatrix.reduceRight(function(prev, next){
                return (
                typeof prev == "string"
                    ? prev
                    : prev.map(function(el){ return el.getHtml()}).join('')
                ) + "<br/>" + next.map(function(el){ return el.getHtml()}).join('');
                 }) + "</pre>";
    };
};


var seasonsTotal = 300;
var seasonsCounter = 0;
var showAt = [1,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,300];
var pageTree = new tree();

var season = function(){
    pageTree.calculateNewMatrix();
    seasonsCounter++;
    if(showAt.indexOf(seasonsCounter) >= 0){console.log(pageTree.getTreeString()); document.body.innerHTML = pageTree.getTreeHtml();}
};

window.onload = function(){
        var intervalId = setInterval(function(){
                season();
                if(seasonsCounter >= seasonsTotal)
                    clearInterval(intervalId);
                }, 100);
};

Một số ví dụ (10,40,100):

           \/          
        \ |/\_/_       
      |  \/\/|/0/_ _   
      |/  \/0||/|_//   
     / \0_/0/\|0|_|    
     \_/00\0\/|_|      
       \_|/00\|        
         |__|/         
    ________|__________


     /           
   _ \_          
    |/\o_| /     
o_/  \/ @|/\|    
_@\o__\_/|o/     
 \|\|\/ \|/      
  |/  \_//       
   \__/_|        
______|__________



                       \ \/\                                      
                 \    |/\/\_|/ |   |  /                           
              \ \@\/ \/\/\/ |/  \_/ \||_                          
          _  _\\/@/\/@\/\/   \_//\__/|/\_                         
           \ /\|\/|/|_o\/  __/o|\/_|_/\/__|                       
          |@|\_|/_o\|/\|\__o/\\|/\_|\|//|/\__|                    
       |_||/|_@|\/|\|_/|/|| \/ |\//\/o\\\\_@\|| |_|               
       |/|/\|_||/\o\|/_/\/\_/\o|/ \/|_//// \/ \\|                 
     __@\|\||/\|@/|/o\/\/\/_@_\|\_/\_/|/ \_/__//                  
     __\/|/_@\O|o\|@|@\/\/\_|o/|/|\|\/|_//_||_/                   
  \ \ \|\|_/\|\|//|/\|_\/\//_@\/\|/|/\||//|\|o                    
 / |/ _|_|@|/|/ \\|__|_o\/o\\|o\||\|\/O|/O|/o_|_|                 
 \_/\|___|_|  \_/_|\/ \\/@|\\|\/||/|/\_|__|@|\|___/ /             
|_||/|_@_\@\o_/o|o|/@_/\\/_//o \|/\|\/@|_o__|_|__/|/              
  |@\| /|/\_\|\|/\||_/\_|\@|\\_/|\/@/|/|__/O|_/_/_|/              
   \||@\|_@_\|/|\@|//o\||//o\||\|/\/||||o___|/ @|_|  _            
    |o\/ \|@@|/ /\O\\/\|o\\|/o|/ \/|/\/\/|\@/\_/|/\_/             
     \|\o/ \/ \ \/o_|\/|\//|\/o\_/_|O/\//o_|\/@//\/               
      \\|\_@\_/_o\_/|o\|/|_|_\|/O|/|/\|||__|/o \\/                
       \|/_|@\\/\\_\|/\|\|@\|\|\_|\|O//O/o_/ \_//                 
        |_@|_/@\/_/\|@_|//o/_/o//@\|/|\//||____|                  
 o_______\\/\\|@\/\/__@\\\/|_o/|__|\\|/|/O|                       
         \|\/ |_o\/\o|_////_/|\|_|@/@|_|\/                        
          |_\_o\\/\/\o\|/|/ O|/ O|/\/\|\/                         
            \||/@\/\O\_|\|@_/ \_/|O/@_|/                          
             |_\|_\O|/o|/ oo\_/@/  \__|                           
               \|_\|\\_|\_/_|/\|___/                              
                |/\| \||/ |_|\/|/                                 
                 \ |_/@ \/ o|/\|                                  
                  |_o\\_@\_/|@/                                   
                    \|\|\/ \|/                                    
                     |/  \_//                                     
                      \__/_|                                      
______|__________________|________________________________________



                                                     |                                                                                                            
                                                  \  /\_       \/   |      _    \                                                                                 
                                                 |/ |\/_/\  |_\/\|_/\  _\ /  \  |\/\  |                                                                           
                                              / /_\_|/|__/\/|_|\/_/\/\_|\|\ \ \\|/_/|/\ \    _                                                                    
                                            _|_//|/ |/__|\/\@\\/|/o/|//\/_/_/@/@|\|\@\/\/_ \/ __                                                                  
                                   \      \|\|o\\|\o/\/O /\|\/|\O\|_|/_///|@\|\\|/|/@|\/\_|@\|/\\|                                                                
                                _ \/\_o_\_/|/ \\\|/|\/ \O\/_@\/\|/|/|_/\\\|_/ \\|\|o_|_\|\|\/|\/\|_|\  /                                                          
                              \o_\|\|\_|||\/\_/o\|o|/\_/__\/\/\/\\|o_@\///  \o/o|/|__|\o|/||||/\/|O|/|@\/                                                         
                              \|@/|/@\|\/\/o/@\|\|_o\/_/||/\/\o\/O|/|@_\\\__/ \/|\__/|//|\/\|/\/o||@\/\/__|                                                       
                               |O\O\|\|/o//o\//|//\|/|o/|O\|\|\|\_|@|/ \\|||\_/\|///O|// @\/O\/|/\\\/\\\/\__|                                                     
                                \||/@/|\/\\/|\\o\\ |/|/\|@\|O|/|/ |_|__//_||O\|o|//o_|\\_//\_|\|\/_||//|\/@\|\                                                    
                         |   \__@|/\/\|/_/|\|_\|/\\/\/\/| \|_@\/\_|o|/\|_o||o/\\|/@/_o//\@\/\|/|/\o\|\\|/ \/|/                                                    
                      o_\|/   \|||\/\||_/\|/|@\|\/\\/\/\|_/|o_|\/o/\o\/|_|/\o\/ \\/|_|/\/_@\/| |__|/|//O\_///\o_                                                  
                        \|\|o_/@|\\\||/\|\|o|_@|/o/O\/\_|_/_o_|O\|_/\@\||/  |/\ /|\_/|O/o/|/\|o|/|/\| \|/@/|_/|_|\ _                                              
                  / /\__/|/o__\_|_|\|/\/\/|/|/|_\|\/ \/\|/\@|__o||\|/o_|/\__/\/ \|/@/||o/| \/|_@\|_/___|O|_|@/|_@/|//                                             
                  \/\o_/\| o__|\|@|/\\o\/\|\|_@/\|/_o/o/o\/\\/\\||/|\__|\/|/_/__/ \/\|@\\|\/ @/\/ \|o_/\_|\/o\|  \|/\\                                            
                o_/\/|@\/  _/o|\|\/\/O\/\//\| \\/o\\|\/o_|\/@\o\||\|/O\|\\o\_|@|\_/\_|_/||/@_/_/\_/_/__/@@/|\/\__/|o//                                            
                  \o\|_@\___|/\\|_\/\o|\//\/o_/@\|/@|/  \|/o\|\/\@\|\o\|//@/@|/\/o\/o/OO|/\_/\o\//|o/|/|_/\|/O__o\|/ \__\                                         
             \     |\|__/  \/\/\|_||/\|/|\/   \|/|o_|\__/O\\_|/_/o/|/\/ \\|\\/\/o\/\/\\_|\/ \/_|\\| \|_| \/|//  \/|_o/\__\__                                      
          |   |/ o_o\| o\\_/|@\/ o|/\_|\|@\_o_/|\|/@\/\\_@|\\|/o_/||_/\o//|_|\/__|\/\/ /|/O_/\/\//__/|___/_|@\_o/O|o/@/ \/|_                                      
         \|/o_@\_/|\||_//@_\|_/@__|\/o|/_/\||/| \|_/_\//@\|//o\_o\||/\//\\|_ //_|o/\/\o\|_o\\|\/// @_|\_||@_|/@|\/_/\/\_/_| /                                     
          |\_/|/_|\\|@ \\|o\|o\_o_|@\\|/O_//\\|_o|/\_||_|/| \\/o\/|O\/\\//_/|o\O\/\/|/|/@||//|//@\__/\|__|/\/ \|/|_|/__/||\|                                      
        /_/\|\/\||/ |__@\|/o|_/_|_|\@\|\/  \/ |/_|\/_||o|/|_//\_|\|_|\/O\\/\|o/o/@|\|_|_/o_\\o\\|/_@__|_||\|\_/ \|@|\@|//\\||                                     
        \|\@|/\/\_\_o\|o|\\\|_|o|/\O\_|/\o_/| |_/|/ o\|_|\|o/\/_o/o|\/o_\|\/ |_/\_|/|_||\_O\||/\|\_|@_|__o\|/_@_/__|/\|/\// |//                                   
      o_\|@\|_@\//|\_/_|\\|\|\_@\\/_//\\|\|\|_@_\|\o/o|\|o|/\/O\|/@|O\_/\|/\_@\|/_|\|O||/@_/@/\/o//o__||O\/@\|\/\_||\/o\/ \_|/  _                                 
       _\|_/|\|/\\ \|\O|/o\\|\||/o\/|oo\|/|@|_|_/o/ \\|/|_|\/|/O|\||\@\|/ \/||/|/o\/o_| \o_\|_/O|/@/_@/|_/_|_|/\/o\|/|_/\\/@|\_|                                  
     o__|\o\|_|\@||/|@|/\|/@|/o|\_|\_\|/|/ \@\|/\/\o|\|\|/|/\|\/|_| \\|\\_/\||_|_|/\@\\_//@_\|\||_/|_|O/\|O|\/|/  \|   \_||_|/\                                   
        |/_||o|_||\\|_|\/|\|o\/_/ |/ \|_|__/_//\o\/_|\|/|@ \/_/\||__/ |/_|\/|/\|o|_||//@/\_o\|/@|/@|/@/\/_/_o\|__o/o___/|_|_|o_|                                  
    _ \oo\/\/\|o||\||/|@\|/_/ \o\_@\_/|/|/\|/|\@\|\_|\|/|_o/\_|_|| \__|\||o\|\/_/|_/|/_/_/_@_|@/|\/|_/\//@/o\/ \\/\/ o__|_| @/__o                                 
    /\/@|\\/oo|/@|_|\\|\\|\\\_/\|\|/\\o\\\/o\|/\/|///\|\/\|o/\/  |_@_\\/|O\/|/|///|\|@_|\\@|/\/_|/\|o_//o/\|\\_//\/\_/O|/o__/\_|                                  
    \/\_|/o\/\\\/|O\/||_||//@_\_|/o\/@|/@\\//\\/|o\\\/@_\/_/\|\_/|_|_//\|\/\|\|\\\|/||\_//o|\//|O\/O|\||O\/_//O|o/\/O|_|o_|@\/                                    
     \O_|\_|\/\|\|_o\|_/|@\\|__|\\|/\/_\|/|\\o|\|\/@|\__|\/\/ \|\|o|//\/o \O\\|//_|\||/o_\/|/\\|//\_|_||_/\_|\||O\/\_|@/|_|_/                                     
      |_|/_|@\_|_||_O||\|\\||@||/@|\/_|\|\|_|\|/|o\/|/o/|/|/O/o|/ \||\/\\_/_//|/@|\/O|o__|\o\//| \/|/__|o_/\_//@|/ /@@|\__|                                       
     o  |\_|_|_|O|/o/|o\|/ \\\|\\/|/_/\||o|o\\\\o\/\|_/\O\\\/ o|\_//O/\/|\|@|_o\_|/\_|/\\_/\/\\|_/O||/\_||@/_@\/|o|/\_||\/                                        
      |_@\||o|_/\|\/\|\/ \_||\|\|\\\O\o||/o\/ \|\|\//@_/O_\|\_/|/o|_o\ \|/|_|o//_o\/_@\_|||/O//|/|\||_/ \|// |/O|//|/|/|/                                         
       o\_|/\\@\/| \/|@\__|\o\|_|/ ||/o|o\/\\_o|/\@\\_/\_o\|/ \|/_| \|\//\|/|/o\_|/|@|o|\|o\|/\|/|/o|/\_/|\\_|/O|@\|\/\|                                          
       o|o|o@\|o\|oo\|\/ \\/|_|_|\_@\\/__|\/_|\|_/_/|\_//\\|\_/\\/|_/  \\/|\|/\/o/\|_|o|/|_//\//O|//o\/|/@o|\|_/o \|/ /                                           
 \_____/\|/\|O|/o\\\||/\_o|\|||/|@\|\|\/\_/o\|//@\|\|/\|o/o|/__//\|@o__//o|\|O/\//_|o|_@\|/|_//\_| \\ \||O/|_|  \_/|\/                                            
 o\|\_||_|__|_o\/o\||o\\||O\|/\\|\O|/\/ / \|/ \\_\|O|_/@|\|\\_\/\/_\_o|\\/\/@_\/\\/|o|/// \|@/\/o\| \|/o|_\| @__/@_|/oo                                           
 /||@\\ _|\@|/  \_||_\/|||o/@\/_|/\ \ \|_o/|\o_|\||_|o__| |/@_\\/__||_/\\\|\__|\//\|_|/\\_/@|_/\/||/\||_|_/__/  \__|o/                                            
 \/\\/ |@|_| \ _/@_| \\|/\/\_|\\\\/\_|O|_/\|/_@|/o__|//__/|/|_//|_|_| \o\||/o/|/@\\|/|_///@/|/\/_||_//_||@|_@___/@__|                                             
  \_|\_/\oo|_/_@\_@\_@\|@/ /o\/@\|\_ \\||_/|o|\@\_/|/ \|\_|_@_\\/\|@__/\/_o\|/|O//_|\|@/||/|@\/\/|/\||@/@/|__|_@//|/                                              
    |__\|\|_o\/\/_|\|\O|/\o\_|\|_|_/| \|o|\|o|/\_o\|\__|/o/_|_o\\/_/|\| \ |//o|/ \|\/|//\|@\\|\/_|\/_|/\/\|/o@/|/_|                                               
       \|_||/ \/\_|_|/o|\/|/ \\|o|_||_/o/  |/ \/ |_|//o|\/_@\/\//  \|_|_/o||/\|\_/@_\|\\_|_/_|/|o\//O///\_|/  \|/                                                 
        |_\|\_o\/O|o|_\|@\o\_o\|/|_|_@\|\@_/\_/___o|\\_| \/\o\/ \_@_|@|/ \||_/|/@__O\|//O|_||O\|_||\/ \\/o \__/|                                                  
          \|/|\|\|/\\\||\/||\|_|\_O|__/|/ |\__\@|\_o\|\\_/_/_/o_/\/\|_@\_@|/\_|__|\|@|/|_|| |_/|_@|/\_//o\_/ O/                                                   
           \\|/  |_// |/\\||O|_|o_|\\o\|\o|/__\||o\|\|/o\\||/\_/\/\_|_|\\|||/@|_o/\|/|_||/_o/\_|@\/\/_||\_@\_/                                                    
            \|o___o|_o_\//o|_/\\_||\||@|/|\\_@\|/\/@/|\/|||o\/o//\//|o_///O|\/|/o\o|/|_||__|\/|__|\/|/o|/ \/                                                      
             |\|@_\O \|\\\/_@\/_\\|_|/\o\|_|\_/@\o\/  \\| \\/\|\\/ \|/\|\\_|/_|_/_||/|O/|/o|/\|_||/\| \/\_/                                                       
              \|/  \__|_||\/\/O|\\|_|o/\/|/@\_\|/|/\_o/ |o_|\/|/ \_/o\_|/|\|__|@_/\|/O/_o\/ \o|__|\/  o\/                                                         
               |_____o|_|@\\/_o\\|\@\|\/\|\// \|\|\/_|\_/\|\/\ \_/@_|/o|/ \|____/\//\/|o_/   \|/|_/o__//                                                          
                 oooo|_/|@|\\||\||/|/|\\//|\\_o|/|/\/\/\|o|/o/o/@_|||o\|\o/ \|O/o/\\|\|_o\___/|O|oo/ \|                                                           
               o__|/\|o\|/|_||/\|/\|_@\|\\|/@\\|\|\|\/o/|_|\/\/\|\_|\\\|/ \_/  \|\/O|/|_|/|_//|/_//__/oo                                                          
                  |_//  |_|\//@/ \ |__@|O||\//@|_|/|/\/\|o|/\/\_|/||/ \|o_/Oo__/_/\/|\|/|\|/ \|@_|/ooo|                                                           
                    |_____|//@|\_/\|O|_/\||/ \/ \\\/\O\/o\/\/\/ |/ o\_/ \||_/ \| \@\|\|\|/|__/___|/|_/                                                            
                       ooo|/ \|@\\_|o_@\/_|@_/__/_\\/o/\/o\/\/o  \_//\__/|/\__/__/_o|/|_|_|__|oooo\|                                                              
                     o__|/o\__|_//@|/\\o\o\_o\|\\O\|\/|/|_|\/|___/@|\/_|_/\/__|o_@_||\|_|@/ oo\\/\/                                                               
                        |_|\\||@|\|@\/|\\|o|\\|o|\_|/_o\|/\|\__@/\\|/\_|\|//O/|__|/_|/|__|oo \/ \/                                                                
                          |/ ||_|/|_@\|/\|\|_||/|_@|\/|\|_/|/|| \/o|\//\/o\\\\_o\||o|_|oo_|__@\_/                                                                 
                           \_o\\|@|_|_|O/  |/|@\|_||/\o\|/_/\/\_/\o|/ \/|_//// \/ O\| oo\/|/@|/oo                                                                 
                             \_||@|__@| \__@\|\O|/_|@/|/o\/\/\/_@_\|\_/\_/|/o\_/__// oo|/\|\_|@|_oo                                                               
                               |/\\_\_|_@_|\/|/_@\\|o\|@|@\/\/\_|o/|/|\|\/|_//_||_/ooo\|\_|/o_/|_|                                                                
                                \@|@|\\|\|\|\|_/\|\|//|/\|_\/\//_@\/\|/|/\||//|\|@|_|//|/O|o_/\|                                                                  
                                 \|\|/ |/|@|_|@|_|/ \\|__|_o\/o\\|o\||\|\/O|/O|/@_|_| \/\/_o_\/                                                                   
                                  |_|\_/\|O__|_|  \_/_|\/ \\/@|\\|\/||/|/\_|__|@|\|___/\/|\|_/                                                                    
                                    |_||/|_@_\@\o_/o|o|/@_/\\/_//o \|/\|\/@|_o__|_|__/|/||/|/                                                                     
                                      |o\| /|/\_\|\|/\||_/\_|\@|\\_/|\/@/|/|__/O|_/_/_|// \|                                                                      
                                       \||@\|_@_\|/|\@|//o\||//o\||\|/\/||||o___|/o_|@| \_/                                                                       
                                        |o\/ \|@@|/ /\O\\/\|o\\|/o|/ \/|/\/\/|_o/\_/|/\_/                                                                         
                                         \|\o/ \/ \ \/o_|\/|\//|\/o\_/_|O/\//o_|\/@//\/                                                                           
                                          \\|\_@\_/_o\_/|o\|/|_|_\|/O|/|/\|||__|/o \\/                                                                            
                                           \|/_|@\\/\\_\|/\|\|@\|\|\_|\|O//O/o_/ \_//                                                                             
                                            |_@|_/@\/_/\|@_|//o/_/o//@\|/|\//||____|                                                                              
                                    o________\\/\\|@\/\/__@\\\/|_o/|__|\\|/|/O|                                                                                   
                                             \|\/ |_o\/\o|_////_/|\|_|@/@|_|\/                                                                                    
                                              |_\_o\\/\/\o\|/|/ O|/ O|/\/\|\/                                                                                     
                                                \||/@\/\O\_|\|@_/ \_/|O/@_|/                                                                                      
                                                 |_\|_\O|/o|/ oo\_/@/  \__|                                                                                       
                                                   \|_\|\\_|\_/_|/\|___/                                                                                          
                                                    |/\| \||/ |_|\/|/                                                                                             
                                                     \ |_/@ \/ o|/\|                                                                                              
               oooooooo  ooo           oo             |_o\\_@\_/|@/                                                                                               
              oo|_o\|/oo__|_oo        o_\_o_oo          \|\|\/ \|/                                                                                                
               |/\|/|  \/\|/|_o         |\|_/            |/  \_//                                                                                                 
                \_|/    \_|_|            \|/              \__/_|                                                                                                  
__________________|_______|_______________|__________________|____________________________________________________________________________________________________
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.