나무를 심고 자라는 모습


30

우리가 자라는 나무에는 자라는 방식을 정의하는 몇 가지 규칙이 있습니다.

성장 규칙 :

  1. 나무는 가지로만 구성됩니다.
  2. 지점은 다음과 같은 기호의 조합으로 구성되어있다 : _, \, |, /,_
  3. 나무 |는지면 에서 단일 수직 분기 / 트렁크 ( )로 시작합니다 ( _).

    __________________|___________________

  4. 가지 성장을위한 음식은 빛에서 비롯됩니다.

    • 하늘의 각 지점에서 빛의 강도가 2로 시작하여 아래로 직진합니다.
    • 각 가지는 사용할 수있는 빛의 절반을 먹을 수 있고 나머지는 아래쪽 가지로 통과합니다.
    • 따라서, 그 위에 다른 가지가없는 지점은 계절마다 1 단위의 가벼운 음식을 얻을 것이고, 그 위에 1 개의 가지가있는 가지는 계절마다 .5 단위의 음식을 얻을 것이며, 일반적으로 n 개의 가지가있는 가지는 계절마다 1 / (2 ^ n) 단위의 음식.
  5. 매 시즌이 끝날 때, 음식은 줄기부터 시작하여 위로 올라가 새 가지와 과일로 전환됩니다 (가지가 과일로 변하거나 1 단위 미만의 음식이 남을 때까지 다음 규칙을 적용하십시오).
    • 한 시즌이 끝나는 지점에 식품이 1 단위 미만인 경우 해당 지점의 모든 음식은 다음 시즌까지 해당 지점에 저장됩니다.
    • 지사가 1 단위 이상의 음식을 가지고 자랄 여지가있는 경우, 가용 한 성장 패턴 (아래 참조)을 사용하여 새 가지를 무작위로 재배하고 다음 시즌에 남은 음식을 저장합니다.
    • 지점에 1 개 이상의 식품 단위가 있고, 아무데도 자라지 않으며, 가지를 뿌린 가지가 있으면, 그 가지를 가지런 히 가지지 않은 곳으로 균등하게 분배합니다.
    • 지점에 식품의 단위가 1보다 크거나 같고 아무데도 자라지 않으며 파생물이 없으면 과일이됩니다 (로 O표시됨)
  6. 가능한 성장 구성은 다음과 같습니다.

성장 구성 :

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


잠재적 트리 예 :

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

입력:

프로그램은보고자하는 트리의 스냅 샷 목록을 입력으로 사용할 수 있어야합니다. 예를 들어 [10,20,50]은 10 시즌, 20 시즌 및 50 시즌 후에 나무를보고 싶다는 의미입니다.

산출:

각 입력 시즌마다 프로그램에서 시즌을 출력 한 다음 해당 시즌의 트리 그림을 출력해야합니다. 도움이되는 경우 나무의 최대 수명 (예 : 60)을 정의하여 나무의 최대 높이가 61이되고 최대 너비가 121이되도록 한 다음 항상 해당 스케일에 나무를 표시하십시오. 그렇지 않으면 이미지를 원하는 크기의 나무에 맞게 조정하십시오. 예를 들어 입력이 [0,1,2,3] 인 경우 출력은 다음과 같습니다.

Season 0:
_|_

Season 1:
 \
__|__

Season 2:
 _
  \| 
___|___

Season 3:

 |_/ _
   \| 
____|___


우승자

각 솔루션은 [10,40]소스 코드와 함께의 입력으로 코더가 선호하는 프로그램 실행 결과를 게시해야합니다 . 또한 자격을 갖추려면 위의 모든 기준을 충족해야합니다.

우승자는 가장 많은 표를 얻은 예선입니다.

행운과 메리 심기!


"성장할 방"이 정의되지 않은 것 같습니다.
피터 테일러

"code-challenge"와 "code-golf"태그는 서로 맞지 않는다고 생각합니다 ( "코드 크기 이외의 객관적인 기준"대 "소스 코드의 최소 바이트").
Howard

@Peter Taylor : 성장할 여지가 있는지 확인하려면 먼저 해당 분기 유형의 성장 구성 (예 : 수직 분기가 왼쪽 위, 위 및 오른쪽으로 갈 수 있음)을 확인한 다음 해당 공간이 있는지 확인해야합니다 비어 있습니다. 그렇다면 성장의 여지가 있습니다.
Briguy37

@Howard : 예, 같은 생각을하고 있었지만 확실하지 않았습니다. 나는 이것이 내가 본 대부분의 문제보다 확실히 도전적이라고 생각한다. 그래서 나는 분명히 "코드 도전"을 원했다. 그러나 솔루션이 여러 개인 경우 확실한 승자를 결정하는 방법이 필요했습니다. 위의 점수 계산은 원자 코드 골프 점수에 대한 투표를 선호하므로 원자 코드 골프 점수는 실제로 타이 브레이커입니다. 나는 사람들에게 맡길 것이다 : Howard의 의견이 이것보다 더 많은 투표권을 얻는다면 골프 요건이 흔들릴 것이다.
Briguy37

현재 점수 매기기 메커니즘을 사용하면 code-golf 가 아닙니다 . 실제로 원자 코드 골프도 아닙니다 .
피터 테일러

답변:


16

파이썬

나는 이것으로 약간의 자유를 얻었습니다.

  1. 여러 개의 나무를 허용합니다
  2. 과일 앞에 꽃이옵니다. 일단 꽃에 음식이 1 개 있으면 과일이됩니다.
  3. 3 개의 음식이 있으면 과일이 익어집니다. 그런 다음 나무에서 떨어지고 다시 꽃으로 변합니다.
  4. 과일이 주어진 줄기에서 4 곳 이상 떨어지면 새 나무에 싹이납니다. 빛이 많이 들지 않기 때문에 과일과 같이 많은 양의 음식으로 씨앗을 뿌립니다.

샘플 출력, 2 그루

                            / 
     \/\_ |  /             |  
 _  _/\|\|_\/             /|/ 
  |/ \/|/|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|@|/              |/|__                   
            \|/       \_|_|  \|_      \|/  \|    \|/  _|_         
_____________|__________|_____|________|____|_____|____|__________

출처

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

골프 솔루션이 궁금합니다.


2
나는 꽃이 과일과 씨앗 아이디어로 바뀌는 것을 좋아합니다! 한 가지 제안 : 공간 규칙을 추가하여 나무를 분리하십시오. 예를 들어, 다른 나무의 가지에 인접한 공간에서는 가지가 돋아 날 수 없습니다.
Briguy37

7

파이썬, 673 자

골프 버전은 다음과 같습니다.

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

샘플 @ 10 (흥미로운 부분으로 잘림) :

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

샘플 @ 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\/     
                          \|/    
___________________________|______________________________

흥미 롭습니다 ... 나무가 둥글게 보이는 반면 나무는 매우 평평 해 보입니다. 우리 중 한 명이 버그가 있는지 궁금하거나 손자 손을 낳는 순서를 무작위로 섞기 위해 아이들을 섞습니다. 또한 과일이 빛을 포착하지 못한다는 것을 알았습니다. 또는 아닙니다.
부스

2

자바 스크립트

UPD : 몇 가지 새로운 규칙이 추가되었습니다.

  1. 가지가 자랄 수 있다면 처음에는 잎이되고, 잎이 1보다 큰 음식을 가지면 음식이있는 가지가된다.
  2. 가지가 자라지 않고 음식이 1보다 큰 음식을 먹지 않으면 꽃으로 변합니다.
  3. 꽃이 1.5 개 이상의 음식을 가지고 있다면 그것은 꽃 음식과 함께 뿌리가됩니다 / 2
  4. 뿌리에 음식이 2 개 이상 있으면 땅에 떨어지고 새로운 나무로 자랍니다.
  5. 계절마다 10 % 확률로 비가 내림으로써 땅에있는 가지에 추가 음식을 제공하여 다른 사람들에게 음식을 분배합니다.

다음은 자바 스크립트에서 가장 아름다운 코드가 아닙니다. 나중에 약간의 개선이있을 수 있습니다. 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);
};

몇 가지 예 (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         |\|_/            |/  \_//                                                                                                 
                \_|/    \_|_|            \|/              \__/_|                                                                                                  
__________________|_______|_______________|__________________|____________________________________________________________________________________________________
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.