-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAdventOfCode2018Day13.java
345 lines (331 loc) · 26.9 KB
/
AdventOfCode2018Day13.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
import java.util.*;
class Cart implements Comparable<Cart> {
Character c;
int row;
int col;
int prevRow;
int prevCol;
Character nextOnPlus; // where to go next if a plus appears again
Cart() {
c = null;
row = col = -1;
prevRow = prevCol = -1;
nextOnPlus = '<';
}
Cart(Character c, int row, int col) {
this.c = c;
this.row = row;
this.col = col;
prevRow = row;
prevCol = col;
nextOnPlus = '<'; // <^> : left, straight, right
}
public int compareTo(Cart another) {
if (row == another.row) return col - another.col;
return row - another.row;
}
public Character updateNextOnPlus() {
switch (c) {
case '<':
if (nextOnPlus == '<') {
nextOnPlus = '^';
return 'v';
}
else if (nextOnPlus == '^') {
nextOnPlus = '>';
return '<';
}
else if (nextOnPlus == '>') {
nextOnPlus = '<';
return '^';
}
break;
case '^':
if (nextOnPlus == '<') {
nextOnPlus = '^';
return '<';
}
else if (nextOnPlus == '^') {
nextOnPlus = '>';
return '^';
}
else if (nextOnPlus == '>') {
nextOnPlus = '<';
return '>';
}
break;
case '>':
if (nextOnPlus == '<') {
nextOnPlus = '^';
return '^';
}
else if (nextOnPlus == '^') {
nextOnPlus = '>';
return '>';
}
else if (nextOnPlus == '>') {
nextOnPlus = '<';
return 'v';
}
break;
case 'v':
if (nextOnPlus == '<') {
nextOnPlus = '^';
return '>';
}
else if (nextOnPlus == '^') {
nextOnPlus = '>';
return 'v';
}
else if (nextOnPlus == '>') {
nextOnPlus = '<';
return '<';
}
break;
}
return ' ';
}
}
public class AdventOfCode2018Day13 {
private static void testCollision(ArrayList<Cart> carts, Cart c, ArrayList<Cart> deleteMe) {
for (Cart test : carts) {
if (c != test && c.row == test.row && c.col == test.col) {
deleteMe.add(c);
deleteMe.add(test);
return;
}
}
}
private static void moveItMoveIt(Character[][] grid, ArrayList<Cart> carts) {
boolean done = false;
boolean foundFirst = false;
while (!done) {
Collections.sort(carts);
ArrayList<Cart> deleteMe = new ArrayList<>();
for (Cart c : carts) {
switch (c.c) {
case '<':
c.prevCol = c.col--;
c.prevRow = c.row;
if (grid[c.row][c.col] == '\\') c.c = '^';
else if (grid[c.row][c.col] == '/') c.c = 'v';
else if (grid[c.row][c.col] == '+') c.c = c.updateNextOnPlus();
break;
case '^':
c.prevRow = c.row--;
c.prevCol = c.col;
if (grid[c.row][c.col] == '\\') c.c = '<';
else if (grid[c.row][c.col] == '/') c.c = '>';
else if (grid[c.row][c.col] == '+') c.c = c.updateNextOnPlus();
break;
case '>':
c.prevCol = c.col++;
c.prevRow = c.row;
if (grid[c.row][c.col] == '\\') c.c = 'v';
else if (grid[c.row][c.col] == '/') c.c = '^';
else if (grid[c.row][c.col] == '+') c.c = c.updateNextOnPlus();
break;
case 'v':
c.prevRow = c.row++;
c.prevCol = c.col;
if (grid[c.row][c.col] == '\\') c.c = '>';
else if (grid[c.row][c.col] == '/') c.c = '<';
else if (grid[c.row][c.col] == '+') c.c = c.updateNextOnPlus();
break;
}
testCollision(carts, c, deleteMe);
}
// delete all collided carts
for (Cart c : deleteMe) {
if (!foundFirst) {
System.out.println("Answer to the first part: " + c.col + "," + c.row);
foundFirst = true;
}
carts.remove(c);
}
if (carts.size() == 1) {
System.out.println("Answer to the second part: " + carts.get(0).col + "," + carts.get(0).row);
done = true;
}
}
}
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
ArrayList<String> input = new ArrayList<>();
ArrayList<Cart> carts = new ArrayList<>();
while (true) {
String line = s.nextLine();
if (line.equals("")) break;
input.add(line);
}
s.close();
String cartsChars = "<^>v";
Character[][] grid = new Character[input.size()][input.get(0).length()];
for (int row = 0; row < input.size(); row++) {
for (int col = 0; col < input.get(0).length(); col++) {
grid[row][col] = input.get(row).charAt(col);
if (cartsChars.contains(Character.toString(grid[row][col]))) {
carts.add(new Cart(grid[row][col], row, col));
}
}
}
// delete carts from the grid
for (Cart c : carts) {
if (c.c == '<' || c.c == '>') grid[c.row][c.col] = '-';
else grid[c.row][c.col] = '|';
}
moveItMoveIt(grid, carts);
}
}
/*
/-----------------------------------------------------------------\
| /------------------------------\ |
/----------------------------------------+----+------------------------------+----------------------------\|
| /---------------------->-----------+----+--\ /---------------------+----------------------------++------------------------------\
| | /----+----+--+-----+---------------------+----------------------------++-------\ |
| /---+-----------------------------+----+----+--+-----+---------------------+--------------\ || | |
| | /-+-----------------------------+----+----+--+-----+----------------\ /-+--------------+-------------++-------+-----\ |
| | | | /-----------------------+----+----+--+--\ | | | | /+-------------++-------+-----+\ |
| | | | | | | | | | | | | | /-------++-------<-----++-------+-----++--\ |
/---+-+-+-+-----+---------------\ | /-+----+--+--+--+----------------+--+-+-----+-------++-------------++-------+-----++--+------------+\
| | | | | | | /+--+-+----+--+--+--+----------------+--+-+-----+-------++-------------++-------+-----++--+------------++--\
| | | | | | | || | | /+--+--+--+---------\ /----+--+-+-----+-------++-------------++--\ | || | || |
| | | | | | | || | | ||/-+--+--+---------+-+----+--+-+-----+-------++-------------++--+----+---\ || | || |
| | | | | | | || | | |\+-+--+--+---------+-+----+--+-/ | || || | | | || | || |
| /-+-+-+-+-----+---------------+------++--+-+---+-+\| | | | |/---+--+-------+-------++-----------\ || | | | || | || |
| | | | | | | /----------\ | || | | | ||| | | | v| | | | || | || | | | || | || |
| | | | | | | /+----------+\| || | | | ||| | | /+-++---+--+-------+-------++-----------+-++-\| | | || | || |
| | | | | \-----+-++----------+++------++--+-+---+-++/ | |/-------++-++---+--+-------+-------++---\ | || || | | || | || |
| | | | | /-+-++----------+++------++--+-+---+-++---+--++-------++-++---+--+---\ | || | | || || | | || | || |
| | | | | | | || ||| || | | | || /-+--++-----\ || || | | | | || | | || || | | || | || |
| | | | | | | || /+++------++--+-+---+-++-+-+--++-----+-++-++---+--+---+---+-\ || | | || || | | || | || |
| | | | | | | || /---++++-\ /--++--+-+---+-++-+-+--++-----+-++-++---+--+---+---+-+-----++---+-------+-++-++----+---+-++--+------------++\ |
| | | | | | | || | |||| | | || | | | || | | || | || || | | | | | || | | || || |/--+-++--+----------\ ||| |
| | | | | | | || /---+---++++-+-+--++-\| | | || | | || | ||/++---+->+---+---+-+-\ || | | || || || | || | | ||| |
| | | | | | | || | | |||| | | || || | | || | | ||/----+-+++++---+--+---+---+-+-+---++---+-------+-++-++----++--+-++--+-----\ | ||| |
| | | | | | | || | | |||| | | || || | | || | | ||| | \++++---+--+---+---+-+-+---++---+-------+-++-/| || | || | | | ||| |
\-+-+-+-+-----+-+-++-+---+---+++/ | | \+-++-+---+-++-+-+--+++----+--++++---+--+---+---+-+-+---++---+-------+-++--+----++--+-++--+-----+----+-+++-/
/-+-+-+-+-----+-+-++-+---+---+++--+-+---+-++-+---+-++-+-+--+++----+--++++---+--+---+---+-+-+---++---+-\ | || | || | || | | | |||
| | | | | | | || | | ||| | | | || | | || | |/-+++----+--++++---+--+---+---+-+-+---++---+-+-----+-++--+---\|| | || | | | |||
| | | | | | | || | | ||| /+-+---+-++-+---+-++-+-++-+++----+--++++---+--+---+---+-+-+---++---+-+-----+-++--+---+++--+-++--+---\ | | |||
| | | | | | | || | | ||| || | /+-++-+---+-++-+-++-+++----+--++++---+--+---+---+-+-+---++---+-+-----+-++--+---+++--+-++--+\ | | | |||
| | | | | \-+-++-+---+---+++-++-+--++-++-+---+-++-+-++-+++----+--++++---+--+---/ | | | || | | /---+-++--+---+++--+-++--++--+-+---\| |||
| | | | | |/++-+---+---+++-++-+--++-++-+---+-++-+-++-+++----+--++++---+--+-----\ | | | \+---+-+-+---+-++--+---+++--+-+/ || | | || |||
| |/+-+-+-------++++-+--\| ||| || | |\-++-+---+-++-+-++-+++----+--++++---+--+-----+-+-+-+----+---+-+-+---+-++--+---+/| | | || | | || |||
| ||| | | /--++++-+--++---+++-++-+--+--++-+---+-++-+-++-+++----+--++++---+--+-----+-+-+-+----+-\ | | | | || | | | | | || | | || |||
| ||| | | | |||| | || ||| || | |/-++-+---+-++-+-++-+++----+--++++---+--+-----+-+-+-+----+-+-+-+-+---+-++--+---+-+--+-+---++--+-+---++-+++\
| ||| | | | |||| | || ||| || | || || | /+-++-+-++-+++----+--++++---+--+-----+-+-+-+-\ | | | | | | || | | | | | || | | || ||||
| ||| | | | |||| | || ||| || | || || | || || | || |||/---+--++++---+--+-----+-+-+-+-+--+-+-+-+-+---+-++-\| | | | | || | | || ||||
/+-+++-+-+----+--++++\| || ||| || | || || | || || | || |||| | ||||/--+--+-----+-+-+-+-+--+-+-+-+-+---+-++-++---+-+--+-+-\ || | | || ||||
/++-+++-+-+----+--++++++--++---+++-++-+--++-++-+--++-++-+-++-++++---+--+++++--+--+-----+-+-+-+-+--+-+-+\| | | || || | | | | | || | | || ||||
||| ||| | | | |||||| || ||| || |/-++-++-+--++-++-+-++-++++---+--+++++--+--+-----+-+-+-+-+--+-+-+++-+--\| || || | | | | | || | | || ||||
/+++-+++-+-+---\| |||||| || ||| || || || || | || || |/++-++++---+--+++++--+--+-----+-+-+-+-+--+-+-+++-+--++-++-++---+-+--+-+-+-++--+-+---++\||||
|||| ||| | | || |||||| ||/--+++-++-++-++-++-+--++-++-++++-++++---+--+++++--+--+-----+-+-+-+-+-\| | ||| | || || || | | | | | || | | |||||||
|||| ||| | | || |||||| /+++--+++-++-++-++-++-+--++-++-++++-++++---+--+++++--+--+-----+-+-+-+-+-++-+-+++-+--++-++\|| | | | | | || | | |||||||
|||| ||| | | || |||||| |||| ||| || ||/++-++-+--++-++-++++-++++---+--+++++--+--+-----+-+-+-+-+-++-+-+++-+--++-+++++---+-+--+-+-+-++--+-+\ |||||||
|||| ||| | | || |||||| |||| ||| || ||||| || | || || |||| |||| | ||||| | | | | | | | || | ||| | || ||||| | | | | | || | || |||||||
|||| ||| | | || |||||| |||| ||| || ||||| || | || || |||| ||||/--+--+++++--+--+-----+-+-+-+-+-++-+-+++-+--++-+++++---+-+--+-+-+-++\ | || |||||||
|||| ||| | | || |||||^ |||| ||| || ||||| || | || || |||| ||||| | ||\++--+--+-----+-+-+-+-+-++-+-+++-+--++-++++/ | | | | | ||| | || |||||||
|||| ||| | | || |||||| |||| ||| || ||||| || | || || |||| ||||| | || || | | | | | | | || | ||| | || |||| | | | | | ||| | || |||||||
|||| ||| | | || |||||| |||| ||| || ||||| || | || || |||| ||||| | || || | | | |/+-+<+-++-+-+++-+--++-++++----+-+--+-+-+\||| | || |||||||
|||| ||| | | || |||||| |||| ||| ||/+++++-++-+--++-++-++++-+++++--+--++-++--+--+\ | ||| |/+-++-+-+++-+\ || |||| | | | | ||||| | || |||||||
|||| ||| | | /-++--++++++-++++\ ||| ||||||||/++-+--++-++-++++-+++++--+--++-++--+--++-\ | ||| ||| || | ||| || || |||| | | | | ||||| | || |||||||
|||| ||| | | | || ||\+++-+++++-++/ ||||||||||| | /++-++-++++-+++++--+--++-++--+--++-+--+-+++-+++\|| | ||| || || |||| | | | | ||||| | || |||||||
|||| ||| | | | || || ||| ||||| || ||||||||||| | ||| || |||| ||||| | || || | || | | ||| |||||| | ||| || || |||| | | | | ||||| | || |||||||
|||| ||| | | | || || ||| ||||| || ||||||||||| | ||| || |||| ||||| | || \+--+--++-+--+-+++-++++++-+-+++-++-+/ |||| | | | | ||||| | || |||||||
|||| ||| | | | || || ||| ||||| || ||||||||||| | ||| || |||| ||||| | || | | || | | ||| |||||| | ||| || | |||| | | | | ||||| | || |||||||
|||| ||| | | | || || |||/+++++-++--+++++++++++-+-+++-++-++++-+++++--+--++--+--+--++-+--+-+++-++++++-+-+++-++-+-\|||| | | | | ||||| | || |||||||
|||| ||| | | | || || \++++++++-+/ ||||||||||| | ||| || |||\-+++++--+--++--+--+--++-+--+-+++-++++++-+-+++-++-+-+++++----/ | | | ||||| | || |||||||
||\+-+++-+-+-+-++--++--/||||||| | ||||||||||| | ||| || ||| \++++--+--++--+--+--++-+--+-+++-++++++-+-+++-++-+-+++++------+--+-+-+++++-+-++--+++/|||
|| |/+++-+-+-+\|| |\---+++++++-+---+++++++++++-+-+++-++-+++---++++--+--++--+--+--++-+--/ ||| |||||| | ||| || | ||||| | | | ||||| | || ||| |||
|| ||||| | | |||| | ||||||| | ||||||||||| | ||| || ||| |||| |/-++--+--+--++-+\ ||| |||||| | ||| || | ||||| | | | ||||| | || ||| |||
|| |||\+-+-+-++++--+----+++/||| \---+++++++++++-+-+++-++-+++---++++--++-++--+--+--++-++---++/ |||||| | ||| || | ||||| | | | ||||| | || ||| |||
|| ||\-+-+-+-++++--+----+++-+++-----+++++++++++-+-+++-+/ ||| |||| /++-++--+--+--++-++---++\ |||||| | ||| || | ||||| | | | ||||| | || ||| |||
|| || | | | |||| | ||| ||| ||||||||||| | ||| | |\+---++++-+++-++--+--+--++-++---+++-++++++-+-+++-++-+-+++++------+--+-+-+++++-+-++--++/ |||
|| || | | | |||| | ||| ||| ||||||||||| | ||| | | | ||\+-+++-++--+--+--++-++---+++-++++++-+-+++-++-+-++++/ \--+-+-+++++-+-++--+/ |||
|| || | | | |||| | ||| ||| |v||||||||| | ||| | | | || | ||| || | | || || ||| |||||| | ||| || | |||| | | ||||| | || | |||
|| || | | | |||| | ||| ||| ||||||||||| | ||| | \-+---++-+-+/| || | | || || ||| |||||| | ||| || | |||| | | ||||| | || | |||
|| || |/+-+-++++--+\ ||| ||| ||||||||||| | ||| | | \+-+-+-+-++--+--+--++-++---+++-++++++-+-/|| || | |||| | |/+++++-+-++--+-\ |||
|| || ||| |/++++--++---+++-+++-----+++++++++++-+-+++-+----+----+-+-+-+-++--+--+--++-++---+++-++++++-+-\|| || | |||| | ||||||| | || | | |||
|| || ||| |||||| || ||| ||| ||||||||||| |/+++-+----+----+-+-+-+-++--+--+--++-++-\/+++-++++++-+-+++-++-+-++++----------+-+++++++-+-++--+-+\|||
\+-++--+++-++++/| || ||| ||| ||||||||||| ||||| | | | | | | || | | ||/++-+++++-++++++-+-+++-++-+-++++----------+-+++++++-+-++\ | |||||
| || ||| |||| | || ||| ||| ||||||||||| ||||| | | | | | | || | | ||||| ||||| |||||| | ||| || | |||| /-------+-+++++++-+\||| | |||||
|/++--+++-++++-+--++---+++-+++---\ ||||||||||| ||||| | /+----+-+-+-+-++--+--+--+++++-+++++-++++++-+\||| || | |||| | | ||||||| ||||| | |||||
||v| ||| |||| | || /-+++-+++---+-+++++++++++\||||| | || | | | | || | | ||||| |||||/++++++-+++++-++-+-++++--+-------+-+++++++-+++++-+\|||||
|||v ||| |||| | || | ||\-+++---+-+++++++++++++++++-+---++----+-+-+-+-++--+--+--+++++-++++++++++++-+++++-++-+-+++/ | | ||||||| ||||| |||||||
|||| ||| |||| | || | || ||| |/+++++++++++++++++-+---++----+-+-+-+-++--+--+--+++++-++++++++++++-+++++-++-+-+++---+-------+-+++++++\||||| |||||||
|||\--+++-+++/ | || |/++--+++---+++++++++++++++++++\| || | | | | || | | ||||| |||||||\++++-+++++-+/ | ||| | | ||||||||||||| |||||||
||| ||| ||| | || |||| ||| |||||\+++++++++++++++---++----+-+-+-+-++--+--+--+++++-+++++++-++++-+++++-+--+-+++---+-------+-+++++++++++++-+++++/|
||| ||| ||| | || |||| |||/--+++++-+++++++++++++++---++----+-+-+-+-++--+--+--+++++-+++++++-++++-+++++\| | ||| | | ||||||||||||| ||||| |
||| ||| ||| | || |||| /++++--+++++-+++++++++++++++---++----+-+-+-+-++--+--+-\||||| ||||||| |||| ||||||| | ||| | | ||||||||||||| ||||| |
||| ||| ||| | || |||| ||||| ||||| |||||||||||\+++---++----+-+-+-+-++--+--+-++++++-+++++++-/||| ||||||| | ||| | | ||||||||||||| ||||| |
||| ||| ||| | || |||| ||||| ||||| |||||||||||/+++---++----+-+-+-+-++--+--+-++++++-+++++++--+++-+++++++--+-+++---+----\ | ||||||||||||| ||||| |
||| ||| ||| | || |||| ||||| ||||| ||||||||||||||| || | | | | || | | |||||| ||||||| ||| ||||||| | ||| | | | ||||||||||||| ||||| |
||| ||| ||| | || |||| ||||| ||||| ||||||||||||||| || | | | | || | | |||||| ||||||| ||| ||||||| | ||| | | | ||||||||||||| ||||| |
||| ||| ||| | || |||| ||||| ||||| ||||||||||||||\---++----+-+-+-+-++--+--+-++++++-+++++++--+++-+++++++--+-+++---+----+--/ ||||||||||||| ||||| |
||| ||| ||| | || |||| |\+++--+++/| |||||||||||||| || | | | | || | | |\++++-+++++++--+++-+++++++--+-+++---+----+----/|||||||||||| ||||| |
||| ||| |||/-+--++-++++-+-+++--+++-+-++++++++++++++----++----+-+-+-+-++--+--+-+-++++-+++++++--+++-+++++++--+-+++---+-\ | |||||||||||| ||||| |
||| ||| |||| | || |||| |/+++--+++-+-++++++++++++++----++----+-+-+-+-++--+--+-+-++++-+++++++--+++-+++++++--+-+++---+-+--+---\ |||||||||||| ||||| |
||| ||| |||| | || |||| ||||| ||| | ||||||||||||||/---++----+\| | | || | | | |||| ||||||| ||| ||||||| | ||| | | | | |||||||||||| ||||| |
||| ||| ||\+-+--++-++++-+++/| ||| |/+++++++++++++++\ || ||| | | || | | | |||| ||||||| ||| ||||||| | ||| | | | | |||||||||||| ||||| |
||| ||| || | | ||/++++-+++-+--+++-++++++++++++++++++--++----+++-+-+-++--+--+-+-++++-+++++++--+++-+++++++--+-+++-\ | | | | |||||||||||| ||||| |
||| ||| || | | ||||||| ||| | ||| |||||||||||||||||| || ||| | | |\--+--+-+-++++-++++++/ ||| ||||||| | ||| v | | | | |||||||||||| ||||| |
||| ||\-++-+-+--+++++++-+++-+--+++-++++++++++++++++++--++----+++-+-+-+---+--+-+-++++-++++++---++/ ||||||| | |||/+-+-+--+---+-++++++++++++-+++++\|
||| || /++-+-+--+++++++-+++\| |\+-++++++++++++++++++--++----+++-+-+-+---+--+-+-++++-++++++---++--+++++++--+-+++++-+-+--+---+-++++++/||||| |||||||
||| || ||| | | ||||||| ||||| | | |||||||||||\++++++--++----+++-+-+-+---+--+-+-++++-/||v|| || ||||||| | ||||| | | | | |||||| ||||| |||||||
||| || ||| | | ||||||| ||||| | | ||||||||||| ||\+++--++----+++-+-+-/ | | | |||| |\+++---++--+++++++--+-+++++-+-+--+---+-+++/|| ||||| |||||||
\++---++-+++-+-+--+++++++-+++++--+-+-+++++++++++-++-+++--++----+++-+-+-----+--+-+-++++--+-+++---++--+++/||| | ||||| | | | | ||| || ||||| |||||||
|| || ||| | | ||||||| ||||| | | ||||\++++++-++-+++--++----+++-+-+-----+--+-+-++++--+-+++---++--+++-+++--+-+++++-+-+--+---+-+++-/| ||||| |||||||
|| || |\+-+-+--+++++++-+++++--+-+-++++-++++++-++-+++--++----+++-+-+-----+--/ | |||| | ||| || ||| |^| | ||||| | | | | ||| | ||||| |||||||
|| /++-+-+-+-+\/+++++++-+++++--+-+-++++-++++++-++-+++--++----+++-+-+-----+----+-++++--+-+++---++--+++-+++--+-+++++-+-+\ | | ||| | ||||| |||||||
|| ||| | | | |||||||||| ||||| | | |||| |||||| || |\+--++----+/| | \-----+----+-+++/ | \++---++--+++-+++--+-+++++-+-++-+---+-++/ | ||||| |||||||
|| |^| | |/+-++++++++++-+++++--+\| |||| |||||| || | | || | | | | | ||| | || || ||| ||| | ||||| | || | | || | ||||| |||||||
|| ||| | ||| |||||||||| ||||\--+++-++++-++++++-++-+-+--++----+-+-+-------+----+-+++---+--++---++--+++-+/| | ||||| \-++-+---+-++---+-+/||| |||||||
|| ||| | ||| |||||||||| |||| ||| |||| |||||| || | | ||/---+-+-+-------+----+-+++---+--++---++-\||| | | | ||||| || | | || | | ||| |||||||
|| ||| | ||| |||||||||| |||| ||| |||| |||||| || | | ||| \-+-+-------+----+-+++---+--++---++-++++-+-+--+-+++++---++-+---+-++---+-+-/|| |||||||
|| ||| | ||| |||||||||| |\++---+++-++++-++++++-++-+-+--+++-----+-+-------+----+-+++---+--++---++-++++-+-+--+-+++++---++-+---/ || | | || |||||||
|| ||| | ||| |||\++++++-+-++---+++-++++-++++++-++-+-+--+/| | | | | ||| | || || |||| | | | ||||| || | || | | || |||||||
|| |\+-+-+++-+++-++++++-+-++---+++-++++-++++++-++-+-+--+-+-----+-+-------+----+-+++---+--++---++-++++-+-+--+-+/||| || | || | | || |||||||
|| | | | ||| ||| |||||| | || ||| |||| |||||\-++-+-+--+-+--<--+-+-------+----+-+++---+--++---++-++++-+-+--+-+-/|| || | || | | || |||||||
|| | | | ||| ||| |||||| | || ||| \+++-+++++--++-+-+--+-+-----+-+-------+----+-/|| | || || |||| | | | | || || | || | | || |||||||
|| | | | |||/+++-++++++\| || ||| |\+-+++++--++-+-+--+-+-----+-+-------+----+--++---+--++---++-++++-+-+--/ | || || | || | | || |||||||
|| \-+-+-+++++/| ||||\+++-++---+++--+-+-++/|| || | | | | | | | | || | || || |||| | | | || || | || | | || |||||||
|| | | ||||| | |||| ||| || ||| | | |\-++--++-+-+--+-+-----+-+-------+----+--+/ | || || |||| | | | || || | || | | || |||||||
\+----+-+-+++++-+>++++-+++-++---/|| | | \--++--++-+-+--+-+-----+-+-------+----+--+----+--++---++-++++-+-+----+--++---++-+-----++---+-+--++-++++++/
| | \-+++++-+-++++-+++-+/ || | | \+--++-+-+--+-+-----+-+-------+----+--+----+--++---++-++++-+-+----+--++---++-+-----++---+-+--++-++++/|
| | |||||/+-++++-+++-+-----++--+-+-----+--++-+-+--+-+--\ | | \>---+--+----+--++---++-++++-+-+----+--++---++-+-----+/ | | || |||| |
| | /-+++++++-++++\||| | || | | | || | | | | | | | | | | || || |||| | \----+--++---++-+-----+----+-+--++-/||| |
| | | ||||||| |||||||| | ||/-+-+-----+--++-+-+--+-+--+--+-+------------+--+----+--++---++-++++-+------+--++---++-+\ | | | || ||| |
| | | ||||||| |||||||| | ||| | | | || | | | | | | | | \----+--++---++-++++-+------+--++---++-++----+----+-+--+/ ||| |
| | | ||||||| |||||||| | /--+++-+-+-----+--++-+-+--+-+--+--+-+------------+----\ | || || |||| | | || || || | | | | ||| |
| | | ||||||| |||||||| | | |\+-+-+-----+--++-+-+--+-+--+--+-+------------+----+--+--++---++-++++-+------+--++---++-++----+----+-/ | ||| |
\----+-+-+++++++-++++++++-+--+--+-+-+-+-----+--++-+-+--+-+--+--+-+------------+----+--+--++---++-++++-/ /---+--++--\|| || | | | ||| |
| | ||||||| |||||||| | | | | | | | || | | | | | | | | | | || || |||| | |/-++--+++-++----+----+--\ | ||| |
| | ||||||| |||||||| | | | | | | /-+--++-+-+--+-+--+--+-+------------+----+--+--++---++-++++---\| || || ||| || | | | | ||| |
| | ||\++++-++++++++-+--+--+-+-+-+---+-+--++-+-+--+-+--+--+-+------------+----+--+--++---++-++++---++---++-++--+/| || | | | | ||| |
| | || |||| |||\++++-+--+--+-+-+-+---+-+--++-/ | | | | | | | | | || || |||| || || || | | || | | | | ||| |
| | || |\++-+++-++++-+--+--+-+-+-+---+-+--++---+--+-+--+--+-+------------+----+--+--++---++-+/|| || || || | | || | | | | ||| |
| | || | || ||| |||| | | | | | | | | || | | | | | | | | | || || | || || || || | | || | | | | ||| |
| | || | || ||| |||| | | | | | \---+-+--++---+--+-+--+--+-+------------+----+--+--++---++-+-++---++---++-++--+-+-++----+----+--+-/ ||| |
| | || | \+-+++-++++-+--+--+-+-+-----+-+--++---+--+-+--/ | | | | | || || | || || || || | | || | | | ||| |
| | || | | ||| |||| | \--+-+-+-----+-+--++---+--+-+-----+-+------------+----/ | || || | || /-++---++-++--+-+-++----+--\ | | ||| |
\-+-++-+--+-/|| |||| | | | | | | || | | | | | /----+-------+--++---++-+-++-+-++-\ || \+--+-+-++----+--+-+--+-----+++-/
| || | | || |||| | | | \-----+-+--++---/ | | | | | | | || || | || | || | || | | | || | | | | |||
| || | | \+-++++-+-----+-+-------+-+--++------+-+-----+-+-------+----+-------+--++---++-+-++-+-++-+-++--/ | | || | | | | |||
| || | | | |||| | | \-------+-+--++------+-+-----+-+-------+----+-------+--++---++-+-++-+-++-+-++-----+-+-+/ | | | | |||
| || | | | |||| | | \-+--++------+-+-----+-+-------+----+-------+--++---++-+-++-+-/| | || | | | | | | | |||
| || | | | |\++-+-----+-----------+--++------+-+-----+-+-------+----+-------+--++---++-+-++-+--+-+-/| | | | \--+-+--+-----+/|
| \+-+--+---+-+-++-+-----+-----------+--++------+-+-----+-+-------+----+-------+--++---++-+-+/ | \-+--+-----/ | | | | | | |
| | | \---+-+-++-+-----+-----------+--++------+-+-----+-+-------+----+-------+--++---++-+-+--+----+--+-------/ | | | | | |
\--+-+------+-/ || \-----+-----------+--++------+-+-----+-+-------+----+-------+--++---+/ | | \----+--+---------+--------/ | | | |
| | | || | | || \-+-----+-+-------+----+-------+--++---+--+-/ | \---------+----------+--/ | |
| | | || | | || | | \-------+----+-------+--/| | | | | | | |
| | | || | | || \-----+---------+----+-------+---+---+--/ | | | | |
\-+------+---++-------/ | || | | | | | | | | | | |
| | || | |\--------------+---------+----+-------+---+---+------------+------------/ | | |
\------+---/| | | | | | | \---+------------+-----------------------+--------/ |
| | | | \---------+----+-------+-------+------------+---------<-------------/ |
\----+-------------------/ \-------------------------+----+-------+-------/ | |
\------------------------------------------------+----/ \--------------------+----------------------------------/
\---------------------------------/
*/