우리가 자라는 나무에는 자라는 방식을 정의하는 몇 가지 규칙이 있습니다.
성장 규칙 :
- 나무는 가지로만 구성됩니다.
- 지점은 다음과 같은 기호의 조합으로 구성되어있다 :
_
,\
,|
,/
,_
-
나무
|
는지면 에서 단일 수직 분기 / 트렁크 ( )로 시작합니다 (_
).__________________|___________________
-
가지 성장을위한 음식은 빛에서 비롯됩니다.
- 하늘의 각 지점에서 빛의 강도가 2로 시작하여 아래로 직진합니다.
- 각 가지는 사용할 수있는 빛의 절반을 먹을 수 있고 나머지는 아래쪽 가지로 통과합니다.
- 따라서, 그 위에 다른 가지가없는 지점은 계절마다 1 단위의 가벼운 음식을 얻을 것이고, 그 위에 1 개의 가지가있는 가지는 계절마다 .5 단위의 음식을 얻을 것이며, 일반적으로 n 개의 가지가있는 가지는 계절마다 1 / (2 ^ n) 단위의 음식.
- 매 시즌이 끝날 때, 음식은 줄기부터 시작하여 위로 올라가 새 가지와 과일로 전환됩니다 (가지가 과일로 변하거나 1 단위 미만의 음식이 남을 때까지 다음 규칙을 적용하십시오).
- 한 시즌이 끝나는 지점에 식품이 1 단위 미만인 경우 해당 지점의 모든 음식은 다음 시즌까지 해당 지점에 저장됩니다.
- 지사가 1 단위 이상의 음식을 가지고 자랄 여지가있는 경우, 가용 한 성장 패턴 (아래 참조)을 사용하여 새 가지를 무작위로 재배하고 다음 시즌에 남은 음식을 저장합니다.
- 지점에 1 개 이상의 식품 단위가 있고, 아무데도 자라지 않으며, 가지를 뿌린 가지가 있으면, 그 가지를 가지런 히 가지지 않은 곳으로 균등하게 분배합니다.
- 지점에 식품의 단위가 1보다 크거나 같고 아무데도 자라지 않으며 파생물이 없으면 과일이됩니다 (로
O
표시됨)
- 가능한 성장 구성은 다음과 같습니다.
성장 구성 :
_ \ | / _ _ \ | / \ | / _
| | | | | \ \ \ \ / / / / __ \_ |_ _| _/ __
--- 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]
소스 코드와 함께의 입력으로 코더가 선호하는 프로그램 실행 결과를 게시해야합니다 . 또한 자격을 갖추려면 위의 모든 기준을 충족해야합니다.
우승자는 가장 많은 표를 얻은 예선입니다.
행운과 메리 심기!
답변
파이썬
나는 이것으로 약간의 자유를 얻었습니다.
- 여러 개의 나무를 허용합니다
- 과일 앞에 꽃이옵니다. 일단 꽃에 음식이 1 개 있으면 과일이됩니다.
- 3 개의 음식이 있으면 과일이 익어집니다. 그런 다음 나무에서 떨어지고 다시 꽃으로 변합니다.
- 과일이 주어진 줄기에서 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
골프 솔루션이 궁금합니다.
답변
파이썬, 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\/
\|/
___________________________|______________________________
답변
자바 스크립트
UPD : 몇 가지 새로운 규칙이 추가되었습니다.
- 가지가 자랄 수 있다면 처음에는 잎이되고, 잎이 1보다 큰 음식을 가지면 음식이있는 가지가된다.
- 가지가 자라지 않고 음식이 1보다 큰 음식을 먹지 않으면 꽃으로 변합니다.
- 꽃이 1.5 개 이상의 음식을 가지고 있다면 그것은 꽃 음식과 함께 뿌리가됩니다 / 2
- 뿌리에 음식이 2 개 이상 있으면 땅에 떨어지고 새로운 나무로 자랍니다.
- 계절마다 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 |\|_/ |/ \_//
\_|/ \_|_| \|/ \__/_|
__________________|_______|_______________|__________________|____________________________________________________________________________________________________