diff --git a/2018/day13.py b/2018/day13.py new file mode 100644 index 0000000..93eee01 --- /dev/null +++ b/2018/day13.py @@ -0,0 +1,190 @@ +""" https://adventofcode.com/2018/day/5 """ + +def readFile(test1 = False, test2 = False): + import os.path as p + dName = p.dirname(__file__) + fName = p.basename(__file__).split(".")[0] + if test1: + lines = [ + [ "/", "-", ">", "-", "\\", " ", " ", " ", " ", " ", " ", " ", " ",], + [ "|", " ", " ", " ", "|", " ", " ", "/", "-", "-", "-", "-", "\\",], + [ "|", " ", "/", "-", "+", "-", "-", "+", "-", "\\", " ", " ", "|",], + [ "|", " ", "|", " ", "|", " ", " ", "|", " ", "v", " ", " ", "|",], + ["\\", "-", "+", "-", "/", " ", " ", "\\", "-", "+", "-", "-", "/",], + [ " ", " ", "\\", "-", "-", "-", "-", "-", "-", "/", " ", " ", " ",] + ] + elif test2: + lines = [ + [ "/", ">", "-", "<", "\\", " ", " "], + [ "|", " ", " ", " ", "|", " ", " "], + [ "|", " ", "/", "<", "+", "-", "\\"], + [ "|", " ", "|", " ", "|", " ", "v"], + ["\\", ">", "+", "<", "/", " ", "|"], + [ " ", " ", "|", " ", " ", " ", "^"], + [ " ", " ", "\\", "<", "-", ">", "/"] + ] + else: + with open(p.join(dName, "input", f"{fName}.txt"), "r") as f: + lines = [list(line[:-1]) for line in f.readlines()] + + carts = [] + + for y in range(len(lines)): + for x in range(len(lines[0])): + if lines[y][x] in [">", "<", "^", "v"]: + cart = Cart(lines[y][x], x, y) + lines[y][x] = cart + carts.append(cart) + + return (lines, carts) + +def showField(grid): + return "\n".join([("".join(str(ch) for ch in line)) for line in grid]) + +class Cart: + def __str__(self): + return self.symbol + + def __init__(self, symbol, x, y): + self.symbol = symbol + self.x = x + self.y = y + self.id = (y, x) + self.intersectionCnt = 0 + self.alive = True + + if symbol == ">": + self.dirx = 1 + self.diry = 0 + self.store = "-" + elif symbol == "<": + self.dirx = -1 + self.diry = 0 + self.store = "-" + elif symbol == "^": + self.dirx = 0 + self.diry = 1 + self.store = "|" + else: # v + self.dirx = 0 + self.diry = -1 + self.store = "|" + + def move(self): + self.x += self.dirx + self.y -= self.diry + self.id = (self.y, self.x) + + def turnLeft(self): + if self.dirx: + self.dirx, self.diry = self.diry, self.dirx + else: + self.dirx, self.diry = -self.diry, self.dirx + self.update() + + def turnRight(self): + if self.diry: + self.dirx, self.diry = self.diry, self.dirx + else: + self.dirx, self.diry = self.diry, -self.dirx + self.update() + + def update(self): + if self.dirx == 1: + self.symbol = ">" + elif self.dirx == -1: + self.symbol = "<" + elif self.diry == 1: + self.symbol = "^" + else: # self.diry == -1 + self.symbol = "v" + +def part1(vals): + carts = vals[1] + + while True: + carts = sorted(carts, key=lambda x: x.id) + for cart in carts: + vals[0][cart.y][cart.x] = cart.store + cart.move() + cur = vals[0][cart.y][cart.x] + if isinstance(cur, Cart): + vals[0][cart.y][cart.x] = "X" + return f"{cart.x},{cart.y}" + + cart.store = cur + + if cart.store == "\\": + if cart.dirx: + cart.turnRight() + else: + cart.turnLeft() + elif cart.store == "/": + if cart.dirx: + cart.turnLeft() + else: + cart.turnRight() + elif cart.store == "+": + if cart.intersectionCnt == 0: + cart.turnLeft() + cart.intersectionCnt = 1 + elif cart.intersectionCnt == 1: + cart.intersectionCnt = 2 + else: + cart.turnRight() + cart.intersectionCnt = 0 + + vals[0][cart.y][cart.x] = cart + +def part2(vals): + carts = vals[1] + + while len(carts) > 1: + carts = sorted(carts, key = lambda x: x.id) + cartCopy = carts.copy() + for cart in carts: + if not cart.alive: + continue + vals[0][cart.y][cart.x] = cart.store + cart.move() + cur = vals[0][cart.y][cart.x] + if isinstance(cur, Cart): + vals[0][cart.y][cart.x] = cur.store + cur.alive = False + cart.alive = False + cartCopy.remove(cur) + cartCopy.remove(cart) + continue + + cart.store = cur + + if cart.store == "\\": + if cart.dirx: + cart.turnRight() + else: + cart.turnLeft() + elif cart.store == "/": + if cart.dirx: + cart.turnLeft() + else: + cart.turnRight() + elif cart.store == "+": + if cart.intersectionCnt == 0: + cart.turnLeft() + cart.intersectionCnt = 1 + elif cart.intersectionCnt == 1: + cart.intersectionCnt = 2 + else: + cart.turnRight() + cart.intersectionCnt = 0 + + vals[0][cart.y][cart.x] = cart + carts = cartCopy + + return f"{carts[0].x},{carts[0].y}" + +if __name__ == "__main__": + vals = readFile(test1=False) + print(f"Part 1: {part1(vals)}") + vals = readFile(test2=False) + print(f"Part 2: {part2(vals)}") \ No newline at end of file diff --git a/2018/input/day13.txt b/2018/input/day13.txt new file mode 100644 index 0000000..2756c1f --- /dev/null +++ b/2018/input/day13.txt @@ -0,0 +1,150 @@ + /------------\ /---------------------------------------\ + /------------+-----------\| | | + /--------+------------+-----------++------------------\ /--+----------------------\ | + /-------------+----\ | | || /--------\ | /+--+-------\ | | + /---------+-------------+----+---+----------\ | ||/-+--------+--\ | || | | /-----+--------\ | + /-+---------+-------------+----+---+----------+-+-----------+++-+------\ | | | /----++--+-------+--------+---\ | | | + | | | | | | | | /-----+++-+------+-+--+---+-------\| || | | | | | | | + /----+-+---------+-------------+----+---+----------+-+-----+---\ ||| | | | | | || || | | | | | | | + | | | | /-------+----+---+-----\ | | | | ||| | | |/-+---+-------++----++--+-------+--------+---+-+--------+--\ | + | | | | | | | | | | | | | ||| | | || | | || || | | | | | | | | + | /+-+---------+-----+-------+----+---+-----+----+-+-----+---+-+++-+-\ | || | | || || | | | | | | | | + | || | | /+-------+----+---+-----+----+-+-----+---+-+++-+-+----+\|| | | /----++----++--+-\ | | | | | | | + | || | | || | | | | | | | | ||| | | ||||/+---+--+----++----++--+-+-----+--------+---+-+--------+--+---\| + | || | | || | | | | | | | | ||| | | |||||| | | || || | | | | | | | | || + | || | /-----+----++-------+----+---+----\| |/+-----+---+-+++-+-+----++++++---+--+----++----++--+-+-----+--------+---+-+--------+\ | || + | || |/--+-----+----++-------+----+---+----++----+++-----+---+-+++-+-+----++++++---+--+----++----++--+-+---\ | | | | || | || + | || || | | || | | | || ||| | | ||| | |/---++++++---+--+----++-\ || | | | | | | | || | || + | |\-++--+-----+----++-------+----+---+----++----+++-----+---+-+++-+-++---/||||| | | || | \+--+-+---+-/ | | | || | || + /--+---+--++--+----\| || | /+---+----++----+++-----+---+-+++-+-++----+++++\ | | || | | | | | | | | || | || + | | | || | || || | || | || ||| | | ||| | || |||||| | | || | | | | /-+----------+---+-+--------++-+--\|| + | | | || | || || | || | || ||| | | ||| | || /++++++--+--+----++-+---+--+-+-+-+--------\ | | | || | ||| + | | | || | || ||/------+---++---+----++----+++-----+---+-+++-+-++---+++++++--+--+----++-+---+--+-+-+-+--------+-+-\ | | || | ||| + | | | || | || ||| | || | || ||| | | ||\-+-++---+++++/| | | || | | | | | | | | | | | || | ||| + | | | || | || ||| | || | || ||| | | || | || ||||| | | | |\-+---+--+-+-+-+--------+-+-+-/ | || | v|| + | | | || \----++----+++------+---++---+----/| ||| | | || | || ||||| | | | | | | | |/+-+--------+-+-+---+-----\ || | ||| + | | | || || ||| | || | | ||| | | || | |\---+++++-+--+--+----+--/ \--+-+++-+--------+-+-+---/ | || | ||| + | | | || || ||| | || | | ||| | | || | | ||||| | | | | \-+++-+--------+-+-+---------+--++-+--++/ + | | | || || ||| | || | | ||\-----+---+-+/ | | ||||| | | | | ||| | | | | | || | || + | | | || || ||| | || | | || | | | | | ||||| | | | | ||| | | | | | || | || + | | | || || ||| | || | | || | | | | | ||||| | | \----+-----------/|| | | | | | || | || + | | | || || |\+------+---++---+-----/ || | | | | | /+++++-+--+-------+------------++-+--------+-+\| | || | || + | | | || /++----+-+------+---++---+--\ || | | | | | /++++++-+--+-------+------------++\| | ||| | || | || + | |/--+--++------+++----+-+------+---++---+--+-------++------+---+-+---+-+--+++++++-+--+-------+\ |||| | ||| | || | || + | || | || ||| | | | || | | /-----++-----\| | | | | ||||||| | | || |||| | \++---------+--/| | || + | || | || ||| | | /-+---++---+--+-+-----++-\ || | | | | ||||||| | | || |||| | || | | | || + | || | || ||| | | | | || | | | || | /-++---+-+---+-+--+++++++-+--+-------++-----------++++--------+--++---------+\ | | || + | || | || ||| \-+----+-+---++---+--+-+-----++-+-+-++---+-+---+-+--+++/||| | | || |||| | || || | | || + | || | /++------+++------+----+-+---++---+--+-+-----++-+-+-++---+-+---+-+--+++-+++-+--+-------++-----------++++----\ | || || | | || + | || | ||| ||| | | | || | | | || | | || | | \-+--+++-/|| | | || |||| | | || || | | || + | || /+-+++------+++----\ | /--+-+---++---+\/+-+-----++-+-+-++---+-+-----+--+++--++-+--+-------++-----------++++----+---+--++---------++--+\| || + | || || ||| ||| | | | | | /++---++++-+-----++-+-+-++---+-+-----+--+++--++-+--+-------++---------\ |||| | | || || ||| || + | || || ||| ||| | | | | | ||| |||v | || | | || | | | ||| || | | || | |||| | | || || ||| || + | || || ||| ||| /+-+-+--+-+--+++---++++-+-----++-+-+-++---+-+-----+--+++--++-+--+-------++-----\ | |\++----+---+--++---------++--+++--/| + | || || ||| ||| || | | | | /+++---++++-+-----++-+-+-++---+-+-\ | ||| || | | || | | | || | | || /-------++--+++-\ | + | || || ||| ||\---++-+-+--+-+-+++/ |||| | || | |/++---+-+-+---+--+++--++-+--+\ || | | | || | | || | || ||| | | + | || || ||| || /--++-+-+--+-+-+++-\ |||| | || | |||| | | | | ||| || | /++------++-----+\ | |/++----+---+--++-+-------++\ ||| | | + | || || |||/-----++-+\ || | | | | ||| | |||| | || | |||| |/+-+---+--+++--++-+-+++------++-----++--+-++++----+---+--++-+----\ ||| ||| | | + | || || |||| || || || | | | | ||| | |||| | || | |||| ||| | | ||\--++-+-+++------++-----++--+-++++----+---/ || | | ||| ||| | | + | || || |||| /---++-++-++-+-+--+-+-+++-+--++++-+-----++-+-++++-\ ||| | | || |\-+-+++------++-----++--+-++++----+------++-+----+--+++-+++-+-/ + | || || |||| | || || || | | | | ||| | |||| | || | |||| | ||| | | || /-+--+-+++------++-----++-\| |||| | || | | ||| ||| | + | || || ||||/+---++-++-++-+-+-\| | |||/+--++++-+-----++-+-++++-+-+++-+---+--++-+-+\ | ||| || || || |||| | || | | ||| ||| | + | || || |||||| || || || | | || | ||||| |||| | /++-+-++++-+-+++-+---+--++-+-++-+-+++------++-----++-++-++++-\ | || | | ||| ||| | + | || || |||||| || || || | | || | ||||| /++++-+----+++-+-++++-+-+++-+---+--++-+-++-+-+++------++-----++-++-++++-+--+-----\|| | | ||| ||| | + | || || |||||| || || || | | || | ||||| ||||| | ||| | |||\-+-+++-+---+--++-+-++-+-+++------/| || || |||| | | ||| | | ||| ||| | + | || || |||||| || || || | | || | |||||/+++++-+--\ ||| | ||| | ||| | | || | || | ||| /--+-----++-++-++++-+--+-----+++-+--\ | ||| ||| | + | || || |||||| || || || \-+-++-+-+++++++++++-+--+-+++-+-+++--+-+++-+---+--++-+-++-+-+++----+--+-----++-++-++++-+--+-----++/ | | | ||| ||| | + | || || |||||| || || || | || | ||||||||||| | | ||| | |||/-+-+++-+---+--++-+-++-+-+++----+--+-----++-++-++++-+--+-----++--+\ | | ||| ||| | + | || || |||||| || ||/++---+-++-+-+++++++++++-+--+-+++-+-++++-+-+++-+---+--++-+-++\| ||| | | || || \+++-+--+-----++--++-+-+--/|| ||| | + | || || |||||| \+-+++++---+-++-+-++++++++++/ | | ||| | |||| | ||| | | || | ||||/+++----+--+-----++-++--+++-+--+-----++\ || | | /-++-+++-+-\ + | || || |||||| | |||||/--+-++-+-++++++++++--+--+-+++-+-++++-+-+++-+--\| || | |||||||| /--+--+-----++-++--+++-+\ |/----+++-++\| | | || ||| | | + | || || |||\++----+-+/|||| | || | |||||||||| |/-+-+++-+-++++-+-+++-+--++--++-+-++++++++-+--+--+-----++-++--+++-++-++----+++-++++-+-+\|| ||| | | + /-+--++-++-+++-++----+-+-++++--+-++-+-++++++++++--++-+-+++-+-++++-+-+++-+--++--++-+-++++++++-+--+\ | || || ||| || || ||| |||| | |||| ||| | | + | | || || ||| || | | |||| | || | |||||||||\--++-+-+++-+-++++-+-+++-+--++--++-+-++++++++-+--++-+-----++-++--+++-++-++----+++-++++-+-++++-+/| | | + | | || || ||| || /-+-+-++++--+-++-+-+++++++++---++-+-+++-+-++++-+-+++-+--++--++-+-++++++++-+--++-+-----++-++--+++-++-++\ ||| |||| | |||| | | | | + | | || || ||| || | |/+-++++--+-++-+-+++++++++---++-+-+++-+-++++-+-+++-+--++--++-+-++++++++-+--++-+-\ || || ||| || ||| ||| |||| | |||| | | | | + | | || || ||| || | ||| |||| | || | ||||||||| || | ||| | |||| | |\+-+--++--++-+-++++++++-+--++-+-+---++-++--+++-++-+++---+++-++++-/ |||| | | | | +/+-+--++-++-+++-++\ | ||| |||| | || | ||||||||| || | ||| | |||| | | | | || \+-+-++++++++-+--++-+-+---++-++--+/| || ||| ||| |||| |||| | | | | +|| | || || ||| ||| | ||| |||| | || | ||||||||| || | ||| | |||| | | | | || | | |||||||| | || | | ||/++--+-+-++-+++---+++-++++---++++\| | | | +|| | || || ||| ||| | ||| |||| | || | ||||||||| || | ||| | |||| | | | | || | | |||||||| | || |/+---+++++--+-+\|| ||| ||| |||| |||||| | | | +|| | \+-++-+++-+++-+-+++-++++--+-++-+-+++++++++---++-+-+++-+-++++-+-/ | | || | | |||||||| | || ||| ||||v | |||| ||| ||| |||| |||||| | | | +|| | | || ||| ||| | ||| |||| | || | ||\++++++---++-+-+++-+-++++-+---+-+--++---+-+-+++/|||| | || ||| ||||| | |||| ||| ||| |||| |||||| | | | +|| | | || ||| ||| | ||| |||| | ||/+-++-++++++---++-+-+++-+-++++-+---+-+--++--\| | ||| |||| | || ||| ||||| | |||| ||| ||| |||| |||||| | | | +|| | | ||/+++-+++-+-+++-++++--+-++++-++-++++++---++-+-+++-+-++++-+---+\| || || | ||| |||| | || ||| ||||| | |||| ||| ||| |||| |||||| | | | +|| | | |||||| ||| | ||| |\++--+-++++-++-++++++---++-+-+++-+-++++-+---+++--++--++-+-+++-++++<+--++-+++---/|||| | |||| ||| ||| |||| |||||| | | | +|| | | |||||| ||| | ||| | || | |||| || ||||||/--++-+-+++-+-++++-+---+++--++--++-+-+++-++++-+--++-+++----++++--+-++++-+++\ ||| |||| |||||| | | | +|| | | |\++++-+++-+-+++-+-++--+-++++-++-+++++++--++-+-+++-+-++++-+---+++--+/ || | ||| |||| | || ||| |||| | |||| |||| |||/++++---++++++-+-+-+\ +|| | | | ||\+-+++-+-+++-+-++--+-++++-++-+++++++--++-+-+/| | |||| | ||| | || | ||| |||| | || ||| |||| | ||^| |||| |||||||| |||||| | | || +|| | | | || | ||| | ||| \-++--+-++++-++-+++++++--++-+-+-+-+-++++-+---+++--+---++-+-++/ |||| | || ||| |||| | |||| |||| |||||||| |||||| | | || +|| | | | || | ||| | ||| || | |||| || ||||\++--++-+-+-+-+-++++-+---/|| | || | || |||| | || ||| |||| | |||| |||| |||||||| |||||| | | || +|| | | | || | ||| | ||| || | |||| || |||| || || | | | | |||| | || | || | || |||| \--++-+++----++++--+-+++/ |||| |||||||| |||||| | | || +|| | | | || | ||| | ||| || | |||| ||/++++-++--++-+-+-+>+-++++-+----++--+---++-+-++\ |||| || ||| |||| | ||| |||| |||||||| |||||| | | || +|| | | | || | ||| | ||| || | |||| ||||||| || || | | \-+-++++-+----++--+---++-+-+++-++++----++-+++----++++--+-+++--++++--++++++++---+++++/ | | || +|| | | | || \-+++-+-+++---++--+>++++-+++++++-++--++-+-+---+-++++-+----++--+---++-+-+++-++++----++-+++----++++--+-/|| |||| |||||||| ||||| | | || +|| | | | || /+++-+-+++---++--+-++++-+++++++-++--++-+-+---+\\+++-+----++--+---++-+-+++-++++----++-+++----++++--+<-++--++++--++++++++---++/|| | | || +|| | | | || |||| | ||| || | |||| ||||||| || || | | || ||| | || | || | ||| |||| || ||| |||| | || |||| |||||||| || || | | || +|| | | | || |||| | ||| || | |||| ||||||| || \+-+-+---++-+/| | || | || | ||| |||| || ||| |\++--+--++--++++--++++++++---++-+/ | | || +|| | | | || |||| | ||| || | |||| ||||||| || | | | || | | | /++--+---++-+-+++-++++----++-+++----+-++--+\ || |||| |||||||| || | | | || +|| | | | || |||| | ||| || | |||| ||||||| || | | | || | | | ||| | || \-+++-++++----++-+++----+-/| || || |||| |||||||| || | | | || +|| | | | || |||| | ||| || | |||| ||||||| || | | | || \-+-+---+++--+---++---+++-+++/ || ||| | | || || |||| |||||||| || | | | || +|| |/--+-+-++--++++-+-+++---++-\| |||| ||||||| || | | | || | | ||| | || ||| ||| || ||| | | || || |||| |||||||| || | | | || +|| \+--+-+-++--++++-+-/|| || || ||\+-+++++++-++---+-+-+---++---+-+---+++--+---/| ||| ||| || ||| | | || || |||| |||||||| || | | | || +|| | | | || |||| | || |\-++-++-+-+++++++-++---+-+-+---++---+-+---+++--/ | ||| ||| || ||| | | || || |||| |||||||| || | | | || +|| | | | || |||| | || | || || | ||||||\-++---+-+-+---++---+-+---+++-------+---+++-+++-----++-+++----+--+--++-++--++++--/||||||| || | | | || +|| | | | || |||| | || | || || | |||||| |\---+-+-+---++---+-+---+++-------+---+++-+++-----++-+++----+--+--++-++--+++/ ||||||| || | | | || +|| | | | || |||| | \+---+--++-++-+-++++++--+----+-+-+---++---+-+---+++--->---+---+++-+++-----++-++/ | | || || ||| ||||||| || | | | || +||/-+--+-+-++--++++-+---+---+--++-++-+-++++++--+----+-+-+---++---+-+---+++-------+---+++-+++-----++-++-----+-\| || || ||| ||||||| || | | | || +||| | | | || |||| | | | || || |/++++++--+----+-+-+---++---+-+---+++-------+---+++-+++-----++-++-----+-++--++-++--+++-\ ||||||| || | | | || +||| | \-+-++--++++-+---+---+--++-++-++++++++--+----+-+-+---++---+-+---+++-------+---+++-+++-----++-/| | || || || ||| | ||||||| || | | | || +||| | | || |||| | | | || || \+++++++--+----+-+-+---++---+-+---+++-------+---+++-++/ || | | || || || |\+-+--+++++/| || | | | || +||| | | |v ||\+-+---+---+--++-++--+++++++--+----+-+-+---++---+-/ ||| | \++-++------++--+-----+-++--++-++--+-+-+--+++++-+---++-+---/ | || +||| | | || || | | | | || || ||||||| | | | | || | /--+++-------+----++-++------++--+----\| || || || | | | ||||| | || | | || +||| \----+-++--++-+-+---+---+--/| || ||||||| | | | | || | | ||| \----++-++------++--+----++-++--++-++--+-+-+--/|||| | || | | || +||| | || || | | \---+---+-++--+++++/| | \-+-+---++---+--+--+++------------++-++------++--+----++-++--++-++--+-+-+---++++-+---+/ | | || +||| | || || | \-------+---+-++--+++++-+--+------+-+---++---+--+--+++------------++-++------++--+----++-++--++-++--+-/ | |||| | | | | || +||| | || || | | | || |||||/+--+----\ | | || | | \++------------++-++------++--+----++-++--+/ || | | |||| | | | | || +||| /-+-++--++-+---------+---+-++--+++++++--+----+-+-+---++---+--+---++------------++\|| || | || || | || | | |||| | | | | || +||| | | || ||/+---------+---+-++--+++++++--+----+-+-+---++---+--+---++------------+++++------++--+----++-++--+--++--+---+\ |||| | \--+-----+-/| +||| | | || |||| /-------+---+-++--+++++++--+---<+-+-+---++---+--+---++------------+++++------++--+---\|| || | || | || |||| | | | | +||| | | || \+++-+-------+---+-++--+++++++--+----+-+-+---+/ | | || /------+++++-----\|| | ||| || | || | || |||| | | | | +|\+----+-+-++---+++-+-------+---+-++--+++++++--+----+-+-+---+----+--+---++-----+------+++++-----++/ | ||| || | || | || |||| | | | | +| | | | || ||| | | | || ||\++++--+----+-+-+---+----+--+---++-----+------+++++-----++---+---+++-+/ | || | || |||| | | | | +| | | | || ||| | /--+---+-++--++-++++--+----+-+-+---+----+--+---++-----+------+++++--\ || | ||| | \--++--+---++--++++-+------/ | | +| | | | || ||| | | | | || \+-++++--+----+-+-+---+----+--+---++-----+------+++++--+--++---+---+++-+------++--+---/| |||| | | | +| | | | || ||| | | | \-++---+-++++--/ | | | | | | || | ||||| |/-++---+---+++-+---->-++--+----+--++++-+-\ | | +| | | | || ||| | | | || | \+++-------+-+-+---+----+--+---++-----+------+/||| || || | ||| | || | | |\++-+-+----------+--/ +| | | | |^ ||| | | | || | ||| | | | | | | || | | ||| || || \---+++-+------/| | | | || | | | +| | | | || ||| | |/-+-----++---+--+++-------+-+-+---+----+--+---++\ | | ||| || || ||| | | | | | || | | | +| | | | || ||| | || | || v ||\-------+-/ | | | |/--+++----+------+-+++--++-++-------+++-+-------+--+----+-\| || | | | +| | | | || \++-+----++-+-----/| | || | | | | \+--+++----+------+-+++--++-++-------+/| | | | | || || | | | +| | | | || || | || | | | || | | | | | ||| | | ||| || || | | | | | | || || | | | +| | | | || || | || | | | || | | | \---+--+++----+------+-+++--++-++-----<-+-+-+-------+--+----+-++-+/ | | | +| | | |/++----++-+----++-+------+---+--++--------+\ | /-+--------+--+++----+------+-+++--++-++-------+-+-+-------+--+----+-++\| | | | +| | | |||| || | || | | | || || | | | | ||| \------+-+++--++-/| | | | | | | |||| | | | +| | | |||| /-++-+----++-+------+---+--++--------++--+-+-+---\ | ||| /-+-+++--++--+--\ | | | | | | |||| | | | +| | | |||| | || | || | | |/-++--------++--+-+-+---+----+--+++---------+-+-+++--++--+--+----+-+-+-------+--+----+-++++--+-+----------+-\ +| | | |||| | || | || | | || || || | | | | | ||| | | ||| || | | | | | | | | |||| | | | | +| | | |||| | || | || |/-----+---++-++--------++--+-+-+---+----+--+++---------+-+\||| || \--+----+-+-+---->--+--+----+-++++--/ | | | +| | | |||| | || \----++-++-----+---++-++--------++--+-+-+---+----+--+++---------+-+++++--++-----+----/ | | | | | |||| | | | +| | | |||| | || \+-++-----+---++-++--------++--+-+-+---+----+--+++---------+-+++++--/| | /--+-+-------+--+----+-++++---\| | | +| | | |||| | || | || | \+-++--------++--+-+-+---+----+--+/| | ||||| | | | | | | | | |||| || | | +| | | |||| | || | || | | || || | | | | | | | | ||||| | | | | | | | | |||| || | | +\-+----+-++++--+-+/ | || | | || || | \-+---+----+--+-+---------+-+++++---+-----+---+--+-+-------+--+----+-++/| || | | + | | |||| \-+--------+-++-----+----+-++--------++--+---+---/ | | | | ||||| | | | | | | | | || | || | | + | | \+++----+--------+-/| | | || || \---+--------+--+-+---------+-+++++---+-----+---+--+-+-------/ | | || | || | | + | | ||| | | | | | || || | | | | | ||||| | | | | | | | || | || | | + | | ||| | | | | | || || | \--+-+---------+-+++++---+-----+---+--+-+----------+----+-/| | || | | + | \--+++----+--------+--+-----+----+-++--------++------+-----------+-+---------+-++/\+---+-----+---+--+-+----------+----+--/ | || | | + | ||| \--------+--+-----+----+-++--------++------+-----------+-+---------+-++--+---+-----+---+--+-+----------+----/ | || | | + | ||\-------------+--+-----+----+-++--------++------+-----------+-+---------+-++--+---+-----+---+--+-+----------/ | || | | + | || \--+-----+----+-++--------++------+-----------+-/ | || | | | | | | | || | | + | || | \----+-++--------++------/ | \-++--+---+-----/ | | | | || | | + | || | | || || | || | | | | | | || | | + | || \----------+-++--------++------------------+-------------+/ | \---------+--+-+--------------------+---+/ | | + | || \-++--------++------------------+-------------+---+-------------+--+-+--------------------+---+-----------+-/ + \-------++------------------------------++--------++------------------+-------------+---+-------------+--+-/ | | | + || |\--------/| | | | | | | | | + \+---------------------<--------+----------/ | | | | | \---+-----------/ + | | | | | | | | + \------------------------------+-----------------------------/ | | \--+--------------------------/ + \-------------------------------------------/ \----------------/