diff options
Diffstat (limited to 'src')
56 files changed, 0 insertions, 15663 deletions
diff --git a/src/1/input.txt b/src/1/input.txt deleted file mode 100644 index 419087f..0000000 --- a/src/1/input.txt +++ /dev/null @@ -1,963 +0,0 @@ -+11
-+16
-+2
--16
--6
-+13
--6
--8
--17
-+15
--11
--14
-+17
--9
-+4
-+1
--15
--17
--8
-+16
-+6
--11
--15
--2
-+3
--6
--2
--4
--2
--18
--6
--2
-+18
--4
-+7
-+15
--11
-+8
--4
--17
--19
--15
--17
--7
-+12
--2
--5
--13
--4
--13
--18
-+16
-+12
-+10
-+14
--19
-+13
-+10
-+8
--10
-+3
--16
--7
--9
--19
--15
--19
-+2
-+7
--1
-+7
-+1
--20
--5
--10
-+14
-+10
-+5
-+13
-+10
-+15
-+3
--16
--17
-+19
-+15
-+2
-+14
--11
-+3
--11
--17
--8
-+16
--13
--1
-+16
-+1
-+12
--5
-+20
-+16
-+10
--9
--8
-+15
--4
-+3
-+5
-+7
-+1
--2
-+19
-+14
--5
--10
--4
-+3
-+18
--15
-+17
--7
-+10
--8
--10
-+4
-+10
-+12
-+11
--4
--4
--8
-+11
-+16
--4
-+14
-+2
-+3
--16
-+19
--9
-+5
-+17
-+19
--17
--4
-+13
-+15
--6
-+20
-+12
-+15
--17
-+13
--7
--14
-+11
-+12
--10
-+16
--10
-+8
-+11
--8
-+16
-+5
-+3
--4
-+15
--16
-+4
-+2
-+5
-+8
-+12
-+7
-+8
-+4
-+19
--14
-+2
-+8
-+12
--14
-+19
-+15
--14
--17
--5
-+7
--20
--5
--4
-+14
--21
-+4
--8
--7
-+14
--18
--7
--18
--13
--19
--8
-+16
-+3
--8
-+14
-+10
-+9
-+18
--15
-+14
--1
-+18
-+15
-+17
-+11
-+16
--11
-+7
--13
--14
--6
--11
-+13
--12
--2
-+9
--12
-+10
--18
--6
--8
-+9
-+3
-+6
-+11
-+15
-+15
-+5
-+19
-+15
-+8
--12
--17
--8
-+19
-+2
-+9
-+2
-+6
--10
--22
--9
-+19
--5
--4
-+3
-+14
--1
--20
-+15
-+17
--1
-+19
--8
-+11
--13
-+17
-+9
-+9
-+18
-+7
--8
-+11
-+16
-+9
--1
-+15
-+19
--25
-+1
--6
-+8
--4
-+13
--23
-+15
-+3
--14
-+1
-+25
-+51
--11
-+5
-+5
--13
-+17
-+13
-+16
-+17
-+17
-+18
-+16
-+16
--5
--20
--19
-+15
--14
--15
--6
-+9
--1
--5
--13
--24
-+13
--18
--29
-+3
-+10
--14
-+29
--21
-+11
-+13
-+24
-+23
--17
-+19
--1
--7
--5
-+20
-+5
--11
-+3
--20
--13
-+5
--12
--8
-+4
--23
--31
-+18
--50
--27
--16
-+15
--21
--26
--11
--46
--11
--12
--5
--1
--6
-+3
-+19
-+7
-+33
-+9
-+11
-+14
-+32
-+36
-+15
--92
-+22
--19
--18
--8
--24
-+28
--72
-+15
--19
--34
--4
--11
--4
-+17
-+14
--26
--23
--18
--10
--1
-+39
--5
-+19
-+16
-+26
--25
--40
--11
-+19
--11
-+1
-+7
--55
--21
-+73
-+503
-+843
-+54936
-+14
--12
-+13
--7
--11
-+8
-+11
-+11
-+7
-+13
-+12
-+9
-+12
-+1
-+7
--19
--3
--5
--1
--20
-+12
-+11
--10
--8
--6
-+17
-+19
-+1
-+10
--19
-+4
-+19
-+6
-+4
-+3
-+6
-+4
-+12
-+3
-+2
--9
-+3
-+9
--15
--10
--9
--10
-+4
-+19
-+11
-+19
-+2
-+5
-+9
--15
-+12
-+5
-+9
-+18
--12
--4
-+7
-+13
--6
-+16
-+16
-+12
--7
-+18
-+3
-+15
--12
-+8
--19
-+3
-+3
-+11
--3
-+17
--10
-+3
--20
-+6
--17
-+9
-+16
-+18
-+8
--10
--12
-+13
-+7
--2
--11
-+10
--2
-+1
--5
-+10
-+13
--7
-+14
-+17
--1
--1
-+8
--4
-+16
--3
-+16
-+17
-+4
-+13
--3
-+8
--15
--12
-+14
-+16
--5
--7
-+14
--12
--17
--21
--1
--16
-+4
-+7
--14
--12
-+16
--12
--12
--8
--3
--2
--4
-+16
--14
-+8
-+18
--8
--2
--13
-+2
-+17
-+15
-+13
-+12
--4
-+19
--8
--6
-+5
--16
-+14
--15
--18
-+13
-+19
--9
-+23
--5
--7
-+5
-+12
-+18
--1
-+20
--7
--6
--9
--11
-+6
--5
-+1
-+7
-+14
--2
-+7
-+2
-+14
--3
--9
-+15
--2
-+12
-+4
--5
-+8
-+9
--4
-+2
-+13
--4
--4
--10
-+4
--2
-+13
--2
--12
-+26
-+2
-+17
-+20
-+20
-+5
--21
-+12
--5
--14
-+4
-+12
-+9
--14
--1
-+10
--5
--14
--5
--17
--12
--8
-+12
-+11
--9
-+18
-+2
--12
-+7
-+6
--8
-+6
--18
--21
--8
-+1
-+12
--25
--11
-+4
--16
--10
-+19
-+12
--10
--1
--24
--7
-+4
-+9
--4
--19
-+28
-+1
-+5
--8
--18
-+8
--29
--26
--17
-+4
--19
--8
--6
-+8
-+15
-+36
--6
--5
--18
-+6
--4
--19
--4
--11
-+3
--16
--1
-+2
-+13
-+21
--10
-+32
-+28
-+5
-+21
--36
--11
--90
--11
-+17
--11
-+10
-+3
-+2
-+11
--25
--17
--9
--9
-+20
--17
--19
--17
--1
-+6
--2
-+10
--12
-+5
--9
-+12
-+16
-+3
--18
-+1
-+15
--3
--8
-+15
-+18
-+11
-+5
--20
--12
-+6
--3
--13
-+19
--17
-+19
--23
-+1
--14
-+20
-+13
-+7
-+3
--21
--17
--23
--8
--18
-+16
-+5
-+7
--6
--9
--19
--18
-+17
-+17
--22
-+17
-+15
--12
--9
--9
-+14
--9
--9
-+3
--8
--7
--23
-+7
-+22
-+37
-+14
-+22
--20
--9
--23
-+18
--8
--5
-+9
--13
-+25
-+8
--28
-+23
--39
--8
--51
--30
-+3
--31
-+1
-+4
-+172
-+17
-+18
--30
-+18
-+47
-+19
--24
--14
-+117
--5
-+168
-+14
--16
--61
-+1728
-+54439
--8
-+15
-+5
--2
--1
--12
--3
-+10
-+15
-+10
--14
-+15
--8
-+11
-+10
--12
-+11
-+12
-+17
--10
--6
--19
--19
-+18
--12
--3
--7
--11
--13
--10
-+9
--13
-+9
--15
-+16
-+2
-+16
-+13
--17
-+19
-+16
-+16
--10
--12
--7
-+5
--15
-+14
-+19
--12
-+17
-+8
--18
-+17
--4
-+1
-+6
--13
--5
-+23
--19
--8
--13
--31
--12
--3
-+5
--3
-+11
--1
--20
--8
-+5
--2
--2
--18
-+1
--19
--5
--3
-+13
-+15
-+10
--8
--14
-+16
--14
-+18
--11
-+6
--10
--4
-+5
--15
-+8
--17
--7
--12
--12
-+10
-+6
--12
--17
-+1
-+8
-+17
-+17
--11
-+19
--18
-+1
--14
--2
--15
--6
--1
--16
-+1
--3
-+6
--18
-+1
--17
-+8
-+19
-+18
--5
-+12
-+6
--15
-+19
--8
--16
-+18
-+15
--6
-+1
--17
--10
--4
--112437
diff --git a/src/1/solve.py b/src/1/solve.py deleted file mode 100644 index f02651d..0000000 --- a/src/1/solve.py +++ /dev/null @@ -1,61 +0,0 @@ -from sys import argv as args
-
-file = open("input.txt")
-data = [int(x) for x in file.readlines()]
-file.close()
-
-def solve1(): # answer: 411
- print(sum(data))
-
-def solve2(): # answer: 56360
- totshift = 0
- fvals = list()
- for c in data:
- fvals.append(totshift)
- totshift += c
- print("total shift: " + str(totshift))
-
- doubles = list()
-
- if totshift == 0:
- doubles.append([len(data), 0])
-
- i = 0
- while i < len(fvals):
- for j in range(len(fvals)):
- if i == j:
- continue
- dif = fvals[j] - fvals[i]
- if dif % totshift == 0:
- inds = list([i, j])
- if j > i:
- inds = inds[::-1]
- if totshift > 0: #ends on c
- if fvals[inds[0]] > fvals[inds[1]]:
- inds = inds[::-1]
- else:
- if fvals[inds[0]] < fvals[inds[1]]:
- inds = inds[::-1]
-
- pos = (abs(dif) // totshift) * len(data) + inds[0]
- doubles.append([pos, fvals[inds[1]]])
- i += 1
-
- if len(doubles) == 0: #fail
- return
-
- min = doubles[0]
- for d in doubles:
- if d[0] < min[0]:
- min = d
-
- print(min[1])
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/10/input.txt b/src/10/input.txt deleted file mode 100644 index 2b803f1..0000000 --- a/src/10/input.txt +++ /dev/null @@ -1,337 +0,0 @@ -position=< 21518, -21209> velocity=<-2, 2>
-position=< 10842, 21423> velocity=<-1, -2>
-position=< 32189, -21209> velocity=<-3, 2>
-position=<-21158, -21218> velocity=< 2, 2>
-position=<-31794, -53194> velocity=< 3, 5>
-position=<-42469, 42743> velocity=< 4, -4>
-position=<-53120, -31873> velocity=< 5, 3>
-position=< 32177, -42536> velocity=<-3, 4>
-position=< 53505, 32084> velocity=<-5, -3>
-position=<-53091, 10764> velocity=< 5, -1>
-position=<-53141, -21211> velocity=< 5, 2>
-position=<-42429, 10764> velocity=< 4, -1>
-position=<-10492, -31873> velocity=< 1, 3>
-position=< 42819, -10550> velocity=<-4, 1>
-position=<-53096, -10551> velocity=< 5, 1>
-position=<-10492, -42536> velocity=< 1, 4>
-position=<-10508, 42739> velocity=< 1, -4>
-position=<-10471, -42533> velocity=< 1, 4>
-position=< 53446, 32086> velocity=<-5, -3>
-position=< 10820, -53195> velocity=<-1, 5>
-position=< 10858, 21423> velocity=<-1, -2>
-position=<-31810, -10553> velocity=< 3, 1>
-position=<-10492, 32077> velocity=< 1, -3>
-position=<-31799, -42527> velocity=< 3, 4>
-position=<-10484, 42738> velocity=< 1, -4>
-position=< 10862, 10767> velocity=<-1, -1>
-position=<-10503, 10759> velocity=< 1, -1>
-position=<-21130, 32081> velocity=< 2, -3>
-position=<-42477, -31877> velocity=< 4, 3>
-position=<-10452, -42530> velocity=< 1, 4>
-position=<-10452, 53399> velocity=< 1, -5>
-position=<-31826, 42744> velocity=< 3, -4>
-position=<-42444, -10556> velocity=< 4, 1>
-position=< 42824, -31873> velocity=<-4, 3>
-position=<-10492, 32082> velocity=< 1, -3>
-position=<-53092, 10759> velocity=< 5, -1>
-position=< 21522, 42745> velocity=<-2, -4>
-position=< 53474, -42532> velocity=<-5, 4>
-position=<-31822, 42737> velocity=< 3, -4>
-position=< 32131, -42529> velocity=<-3, 4>
-position=<-10476, -53193> velocity=< 1, 5>
-position=< 21473, -10551> velocity=<-2, 1>
-position=<-10497, 21422> velocity=< 1, -2>
-position=< 21469, 42741> velocity=<-2, -4>
-position=< 21470, 10763> velocity=<-2, -1>
-position=<-31807, 32086> velocity=< 3, -3>
-position=< 32144, 32078> velocity=<-3, -3>
-position=<-53120, -42531> velocity=< 5, 4>
-position=<-31773, -31871> velocity=< 3, 3>
-position=<-31800, -21218> velocity=< 3, 2>
-position=< 53478, -21213> velocity=<-5, 2>
-position=< 21498, 21424> velocity=<-2, -2>
-position=< 42798, 32081> velocity=<-4, -3>
-position=< 42790, 10761> velocity=<-4, -1>
-position=<-31778, -10558> velocity=< 3, 1>
-position=<-21106, 21418> velocity=< 2, -2>
-position=<-31785, 53401> velocity=< 3, -5>
-position=< 53497, -42536> velocity=<-5, 4>
-position=< 53491, -42535> velocity=<-5, 4>
-position=<-21115, -21218> velocity=< 2, 2>
-position=< 53478, 53401> velocity=<-5, -5>
-position=< 10835, 32077> velocity=<-1, -3>
-position=<-10500, 21421> velocity=< 1, -2>
-position=<-53142, -21212> velocity=< 5, 2>
-position=<-10490, -31868> velocity=< 1, 3>
-position=< 53506, 21419> velocity=<-5, -2>
-position=< 21517, 10764> velocity=<-2, -1>
-position=< 32136, 32082> velocity=<-3, -3>
-position=<-42485, -42536> velocity=< 4, 4>
-position=< 10821, -53195> velocity=<-1, 5>
-position=<-42445, -10551> velocity=< 4, 1>
-position=<-10473, -21214> velocity=< 1, 2>
-position=< 42806, -53186> velocity=<-4, 5>
-position=< 42791, 10767> velocity=<-4, -1>
-position=<-53144, 32083> velocity=< 5, -3>
-position=<-53096, 53402> velocity=< 5, -5>
-position=<-21119, 42738> velocity=< 2, -4>
-position=< 42824, 53404> velocity=<-4, -5>
-position=< 21495, 32081> velocity=<-2, -3>
-position=<-31782, 21421> velocity=< 3, -2>
-position=<-21157, -31873> velocity=< 2, 3>
-position=< 53478, 32083> velocity=<-5, -3>
-position=< 53470, 53398> velocity=<-5, -5>
-position=< 42797, 21422> velocity=<-4, -2>
-position=<-21143, -31877> velocity=< 2, 3>
-position=< 32144, -21216> velocity=<-3, 2>
-position=<-10482, 32086> velocity=< 1, -3>
-position=< 42831, -21216> velocity=<-4, 2>
-position=<-42448, 53397> velocity=< 4, -5>
-position=<-21135, -21213> velocity=< 2, 2>
-position=< 42806, 32086> velocity=<-4, -3>
-position=< 42805, 53404> velocity=<-4, -5>
-position=<-53096, 32080> velocity=< 5, -3>
-position=< 32155, 32077> velocity=<-3, -3>
-position=< 53463, -10550> velocity=<-5, 1>
-position=< 53475, 42737> velocity=<-5, -4>
-position=< 21470, -31873> velocity=<-2, 3>
-position=<-10452, -10550> velocity=< 1, 1>
-position=< 10850, 21427> velocity=<-1, -2>
-position=< 10854, 53398> velocity=<-1, -5>
-position=<-10500, 53395> velocity=< 1, -5>
-position=< 21497, 10759> velocity=<-2, -1>
-position=< 32155, -42527> velocity=<-3, 4>
-position=< 53505, -42534> velocity=<-5, 4>
-position=<-21142, 53404> velocity=< 2, -5>
-position=< 32176, -53193> velocity=<-3, 5>
-position=<-42437, -53193> velocity=< 4, 5>
-position=<-21163, 53396> velocity=< 2, -5>
-position=< 32128, -42531> velocity=<-3, 4>
-position=< 42798, -53195> velocity=<-4, 5>
-position=< 42829, 32081> velocity=<-4, -3>
-position=< 21510, -53192> velocity=<-2, 5>
-position=<-53108, -21214> velocity=< 5, 2>
-position=<-21124, 53399> velocity=< 2, -5>
-position=<-21108, -31875> velocity=< 2, 3>
-position=<-31794, 10768> velocity=< 3, -1>
-position=< 10842, 21426> velocity=<-1, -2>
-position=<-53142, 21424> velocity=< 5, -2>
-position=<-42476, 53399> velocity=< 4, -5>
-position=< 42816, -10554> velocity=<-4, 1>
-position=< 32179, 42741> velocity=<-3, -4>
-position=< 32171, 32081> velocity=<-3, -3>
-position=<-10503, 32077> velocity=< 1, -3>
-position=< 42813, 42745> velocity=<-4, -4>
-position=< 21485, 42736> velocity=<-2, -4>
-position=<-42444, 10762> velocity=< 4, -1>
-position=<-31789, -53187> velocity=< 3, 5>
-position=<-10480, 32077> velocity=< 1, -3>
-position=< 32128, -10556> velocity=<-3, 1>
-position=< 10858, -31869> velocity=<-1, 3>
-position=<-53144, -42532> velocity=< 5, 4>
-position=<-42461, -21215> velocity=< 4, 2>
-position=<-42457, -10550> velocity=< 4, 1>
-position=< 32186, 32083> velocity=<-3, -3>
-position=<-42440, 53403> velocity=< 4, -5>
-position=<-21130, 21419> velocity=< 2, -2>
-position=< 42819, -21216> velocity=<-4, 2>
-position=<-31810, -31874> velocity=< 3, 3>
-position=<-53120, 32080> velocity=< 5, -3>
-position=< 32178, -42536> velocity=<-3, 4>
-position=< 21509, -31876> velocity=<-2, 3>
-position=<-42436, -31868> velocity=< 4, 3>
-position=<-42432, -21211> velocity=< 4, 2>
-position=<-21155, 21422> velocity=< 2, -2>
-position=<-53111, -42532> velocity=< 5, 4>
-position=< 42819, -53188> velocity=<-4, 5>
-position=<-21147, -21209> velocity=< 2, 2>
-position=< 42840, 42741> velocity=<-4, -4>
-position=<-31782, 32079> velocity=< 3, -3>
-position=<-42448, -31871> velocity=< 4, 3>
-position=< 21501, 53398> velocity=<-2, -5>
-position=<-31797, 21426> velocity=< 3, -2>
-position=<-42448, 53402> velocity=< 4, -5>
-position=<-53110, -21214> velocity=< 5, 2>
-position=< 32179, 32086> velocity=<-3, -3>
-position=<-21138, 32080> velocity=< 2, -3>
-position=< 10871, 32086> velocity=<-1, -3>
-position=< 53470, 32082> velocity=<-5, -3>
-position=<-53141, -53193> velocity=< 5, 5>
-position=< 53462, -31868> velocity=<-5, 3>
-position=<-21116, -42531> velocity=< 2, 4>
-position=<-31782, -21212> velocity=< 3, 2>
-position=<-42477, -31874> velocity=< 4, 3>
-position=< 42836, -21218> velocity=<-4, 2>
-position=<-31826, -53193> velocity=< 3, 5>
-position=< 10818, 42740> velocity=<-1, -4>
-position=< 53503, 10763> velocity=<-5, -1>
-position=<-21109, -21215> velocity=< 2, 2>
-position=<-21143, 53403> velocity=< 2, -5>
-position=<-53120, 32078> velocity=< 5, -3>
-position=<-31794, -10550> velocity=< 3, 1>
-position=<-42473, 42740> velocity=< 4, -4>
-position=<-31782, 53398> velocity=< 3, -5>
-position=<-53120, -21218> velocity=< 5, 2>
-position=<-53119, 53399> velocity=< 5, -5>
-position=<-10500, 53404> velocity=< 1, -5>
-position=< 53503, 53399> velocity=<-5, -5>
-position=< 21498, 53396> velocity=<-2, -5>
-position=<-31766, 42737> velocity=< 3, -4>
-position=< 32138, -42532> velocity=<-3, 4>
-position=< 32133, -10559> velocity=<-3, 1>
-position=< 53505, 42738> velocity=<-5, -4>
-position=< 21518, 21418> velocity=<-2, -2>
-position=<-53144, 53399> velocity=< 5, -5>
-position=<-31810, -42535> velocity=< 3, 4>
-position=<-53099, -53187> velocity=< 5, 5>
-position=<-31805, -42527> velocity=< 3, 4>
-position=< 21478, 42740> velocity=<-2, -4>
-position=< 53506, 53403> velocity=<-5, -5>
-position=<-21165, -42533> velocity=< 2, 4>
-position=< 10850, -21217> velocity=<-1, 2>
-position=<-21143, -42528> velocity=< 2, 4>
-position=<-31769, 42740> velocity=< 3, -4>
-position=<-53088, -21211> velocity=< 5, 2>
-position=<-53119, -31868> velocity=< 5, 3>
-position=<-42448, 32084> velocity=< 4, -3>
-position=<-53096, -31872> velocity=< 5, 3>
-position=<-53091, -53186> velocity=< 5, 5>
-position=< 42787, 10760> velocity=<-4, -1>
-position=< 10861, 21427> velocity=<-1, -2>
-position=< 53446, 53402> velocity=<-5, -5>
-position=< 42832, 10759> velocity=<-4, -1>
-position=< 21485, -42535> velocity=<-2, 4>
-position=<-10482, -42532> velocity=< 1, 4>
-position=< 53483, -53194> velocity=<-5, 5>
-position=< 10835, -31868> velocity=<-1, 3>
-position=< 53507, -10550> velocity=<-5, 1>
-position=< 42815, 32077> velocity=<-4, -3>
-position=< 10847, -42533> velocity=<-1, 4>
-position=<-42448, 32084> velocity=< 4, -3>
-position=<-21117, 32086> velocity=< 2, -3>
-position=<-21167, 42742> velocity=< 2, -4>
-position=<-31826, 21427> velocity=< 3, -2>
-position=< 32181, 42745> velocity=<-3, -4>
-position=< 32136, 10766> velocity=<-3, -1>
-position=<-21138, 32085> velocity=< 2, -3>
-position=< 21501, -21218> velocity=<-2, 2>
-position=< 21510, -10557> velocity=<-2, 1>
-position=<-31777, 21427> velocity=< 3, -2>
-position=<-53084, 21426> velocity=< 5, -2>
-position=<-31810, 21426> velocity=< 3, -2>
-position=<-31797, -10556> velocity=< 3, 1>
-position=<-31794, 42744> velocity=< 3, -4>
-position=<-31773, -42529> velocity=< 3, 4>
-position=< 10818, 32084> velocity=<-1, -3>
-position=<-21149, -21209> velocity=< 2, 2>
-position=< 10855, 32078> velocity=<-1, -3>
-position=< 32186, -21215> velocity=<-3, 2>
-position=< 53454, 42743> velocity=<-5, -4>
-position=< 21530, 10759> velocity=<-2, -1>
-position=< 42795, 53404> velocity=<-4, -5>
-position=< 21522, 32078> velocity=<-2, -3>
-position=<-21111, -42535> velocity=< 2, 4>
-position=<-31826, 32079> velocity=< 3, -3>
-position=<-21133, 10763> velocity=< 2, -1>
-position=<-10499, 32077> velocity=< 1, -3>
-position=< 32170, -21213> velocity=<-3, 2>
-position=<-53096, 10765> velocity=< 5, -1>
-position=< 42839, -10554> velocity=<-4, 1>
-position=<-53101, 53400> velocity=< 5, -5>
-position=<-31782, -21212> velocity=< 3, 2>
-position=<-10508, -10556> velocity=< 1, 1>
-position=<-53142, -31874> velocity=< 5, 3>
-position=< 53479, 53399> velocity=<-5, -5>
-position=<-31818, -31871> velocity=< 3, 3>
-position=<-31789, -21217> velocity=< 3, 2>
-position=< 32186, 10765> velocity=<-3, -1>
-position=<-42427, -21215> velocity=< 4, 2>
-position=<-21157, 10759> velocity=< 2, -1>
-position=<-10448, 42737> velocity=< 1, -4>
-position=< 21493, -10550> velocity=<-2, 1>
-position=< 42819, -10557> velocity=<-4, 1>
-position=< 42830, 10764> velocity=<-4, -1>
-position=<-31794, -21211> velocity=< 3, 2>
-position=<-21139, -10555> velocity=< 2, 1>
-position=<-42441, 10766> velocity=< 4, -1>
-position=< 32176, 42740> velocity=<-3, -4>
-position=< 32136, 53401> velocity=<-3, -5>
-position=<-10484, 42737> velocity=< 1, -4>
-position=<-21138, 32079> velocity=< 2, -3>
-position=<-10508, 10759> velocity=< 1, -1>
-position=< 21522, 53396> velocity=<-2, -5>
-position=<-31818, 21419> velocity=< 3, -2>
-position=< 10867, -21213> velocity=<-1, 2>
-position=< 21469, 21424> velocity=<-2, -2>
-position=< 32139, -53191> velocity=<-3, 5>
-position=< 42819, -21214> velocity=<-4, 2>
-position=< 42803, -42534> velocity=<-4, 4>
-position=< 10847, 53398> velocity=<-1, -5>
-position=<-42437, -42528> velocity=< 4, 4>
-position=< 21521, -42531> velocity=<-2, 4>
-position=< 42835, 32080> velocity=<-4, -3>
-position=<-10503, 21427> velocity=< 1, -2>
-position=<-21167, -42527> velocity=< 2, 4>
-position=< 21521, 32077> velocity=<-2, -3>
-position=<-10484, -10553> velocity=< 1, 1>
-position=<-10452, -42529> velocity=< 1, 4>
-position=< 10847, -21213> velocity=<-1, 2>
-position=< 53470, 21419> velocity=<-5, -2>
-position=< 10862, -10551> velocity=<-1, 1>
-position=<-42469, -31868> velocity=< 4, 3>
-position=< 10838, -10550> velocity=<-1, 1>
-position=< 32152, -42527> velocity=<-3, 4>
-position=< 32176, 53401> velocity=<-3, -5>
-position=<-31825, -10554> velocity=< 3, 1>
-position=<-21167, -42528> velocity=< 2, 4>
-position=<-21115, -31872> velocity=< 2, 3>
-position=< 10866, -21217> velocity=<-1, 2>
-position=< 21506, -10555> velocity=<-2, 1>
-position=<-21143, 53399> velocity=< 2, -5>
-position=<-10471, -31877> velocity=< 1, 3>
-position=<-10508, 32085> velocity=< 1, -3>
-position=< 10866, -10550> velocity=<-1, 1>
-position=<-53088, -31877> velocity=< 5, 3>
-position=<-10495, 10759> velocity=< 1, -1>
-position=< 10847, 21418> velocity=<-1, -2>
-position=<-10484, 42743> velocity=< 1, -4>
-position=< 10818, 10764> velocity=<-1, -1>
-position=< 32155, 42740> velocity=<-3, -4>
-position=< 42787, 21423> velocity=<-4, -2>
-position=< 53490, 21425> velocity=<-5, -2>
-position=<-42448, 10764> velocity=< 4, -1>
-position=<-21119, 53396> velocity=< 2, -5>
-position=< 21528, -21211> velocity=<-2, 2>
-position=< 53502, 10762> velocity=<-5, -1>
-position=< 42820, -31873> velocity=<-4, 3>
-position=< 21481, 53395> velocity=<-2, -5>
-position=<-10468, -42527> velocity=< 1, 4>
-position=< 32130, -21212> velocity=<-3, 2>
-position=< 32181, -10554> velocity=<-3, 1>
-position=< 32184, 53395> velocity=<-3, -5>
-position=< 10851, -53188> velocity=<-1, 5>
-position=< 21477, 42736> velocity=<-2, -4>
-position=<-21159, 21426> velocity=< 2, -2>
-position=<-31773, 10767> velocity=< 3, -1>
-position=< 42827, 32077> velocity=<-4, -3>
-position=<-31818, -21210> velocity=< 3, 2>
-position=< 53458, -21218> velocity=<-5, 2>
-position=<-10452, 42740> velocity=< 1, -4>
-position=<-53142, -21215> velocity=< 5, 2>
-position=< 10826, 53398> velocity=<-1, -5>
-position=<-21166, 42741> velocity=< 2, -4>
-position=<-42469, -53187> velocity=< 4, 5>
-position=< 32173, 10768> velocity=<-3, -1>
-position=< 53497, 10759> velocity=<-5, -1>
-position=< 53449, -10557> velocity=<-5, 1>
-position=< 32170, -53190> velocity=<-3, 5>
-position=< 42843, -53187> velocity=<-4, 5>
-position=< 10852, 32081> velocity=<-1, -3>
-position=<-10499, 53395> velocity=< 1, -5>
-position=< 21496, -53195> velocity=<-2, 5>
-position=< 32157, 32084> velocity=<-3, -3>
-position=< 42831, 10765> velocity=<-4, -1>
-position=< 21498, -10556> velocity=<-2, 1>
-position=< 42843, -53193> velocity=<-4, 5>
-position=< 42811, -53189> velocity=<-4, 5>
-position=<-42477, 53397> velocity=< 4, -5>
diff --git a/src/10/solve.py b/src/10/solve.py deleted file mode 100644 index 2ad1bfe..0000000 --- a/src/10/solve.py +++ /dev/null @@ -1,81 +0,0 @@ -def parseLine(l):
- s = l.split(">")
- vals = list()
- for ss in s:
- if len(ss) == 0:
- continue
- ss = ss.split("<",1)[1]
- vals.append([int(x) for x in ss.split(",")])
- return vals
-
-data = [parseLine(l) for l in open("input.txt").read().split("\n") if len(l) != 0]
-posdata = [x[0] for x in data]
-veldata = [x[1] for x in data]
-
-def checkAdjacent(pi):
- for p in posdata:
- if abs(p[0] - pi[0]) + abs(p[1] - pi[1]) == 1:
- return True
- return False
-
-def checkData():
- for p in posdata:
- if not checkAdjacent(p):
- return False
- return True
-
-def calcMax():
- minx = None
- maxx = None
- miny = None
- maxy = None
- for p in posdata:
- if minx is None or p[0] < minx:
- minx = p[0]
- if maxx is None or p[0] > maxx:
- maxx = p[0]
- if miny is None or p[1] < miny:
- miny = p[1]
- if maxy is None or p[1] > maxy:
- maxy = p[1]
- return minx, maxx, miny, maxy
-
-def solveBoth():
- count = 0
- distx = None
- disty = None
- while True:
- for i in range(len(data)):
- posdata[i][0] += veldata[i][0]
- posdata[i][1] += veldata[i][1]
- count += 1
-
- minx, maxx, miny, maxy = calcMax()
- if distx == None:
- distx = maxx - minx
- disty = maxy - miny
- else:
- cdistx = maxx - minx
- cdisty = maxy - miny
- if cdistx > distx or cdisty > disty:
- for i in range(len(data)):
- posdata[i][0] -= veldata[i][0]
- posdata[i][1] -= veldata[i][1]
- count -= 1
- break
- else:
- distx = cdistx
- disty = cdisty
-
- if count % 100 == 0:
- print("\r" + " " * 50, end="")
- print(f"\rcluster size: {distx}, {disty}", end="")
-
- print("\r" + " " * 50 + "\r", end="")
- print("part 1: " + str(count))
- minx, maxx, miny, maxy = calcMax()
- print("part 2: ");
- for y in range(maxy - miny + 1):
- print("".join([("#" if list([x + minx, y + miny]) in posdata else " ") for x in range(maxx - minx + 1)]))
-
-solveBoth()
diff --git a/src/10/test-input.txt b/src/10/test-input.txt deleted file mode 100644 index e499c03..0000000 --- a/src/10/test-input.txt +++ /dev/null @@ -1,31 +0,0 @@ -position=< 9, 1> velocity=< 0, 2> -position=< 7, 0> velocity=<-1, 0> -position=< 3, -2> velocity=<-1, 1> -position=< 6, 10> velocity=<-2, -1> -position=< 2, -4> velocity=< 2, 2> -position=<-6, 10> velocity=< 2, -2> -position=< 1, 8> velocity=< 1, -1> -position=< 1, 7> velocity=< 1, 0> -position=<-3, 11> velocity=< 1, -2> -position=< 7, 6> velocity=<-1, -1> -position=<-2, 3> velocity=< 1, 0> -position=<-4, 3> velocity=< 2, 0> -position=<10, -3> velocity=<-1, 1> -position=< 5, 11> velocity=< 1, -2> -position=< 4, 7> velocity=< 0, -1> -position=< 8, -2> velocity=< 0, 1> -position=<15, 0> velocity=<-2, 0> -position=< 1, 6> velocity=< 1, 0> -position=< 8, 9> velocity=< 0, -1> -position=< 3, 3> velocity=<-1, 1> -position=< 0, 5> velocity=< 0, -1> -position=<-2, 2> velocity=< 2, 0> -position=< 5, -2> velocity=< 1, 2> -position=< 1, 4> velocity=< 2, 1> -position=<-2, 7> velocity=< 2, -2> -position=< 3, 6> velocity=<-1, -1> -position=< 5, 0> velocity=< 1, 0> -position=<-6, 0> velocity=< 2, 0> -position=< 5, 9> velocity=< 1, -2> -position=<14, 7> velocity=<-2, 0> -position=<-3, 6> velocity=< 2, -1> diff --git a/src/11/input.txt b/src/11/input.txt deleted file mode 100644 index 141d29f..0000000 --- a/src/11/input.txt +++ /dev/null @@ -1 +0,0 @@ -1955 diff --git a/src/11/solve.py b/src/11/solve.py deleted file mode 100644 index c2f20a8..0000000 --- a/src/11/solve.py +++ /dev/null @@ -1,80 +0,0 @@ -import sys
-args = sys.argv
-
-gridserial = int(open("input.txt").read())
-
-# rack ID = x + 10
-# intial power = rackID * y
-# power += gridserial
-# power *= rackID
-# power = str(power)[2]
-# power -= 5
-
-def getPower(x,y):
- id = x + 10
- power = id * y
- power += gridserial
- power *= id
- spower = str(power)
- if len(spower) > 2:
- power = int(spower[-3])
- else:
- power = 0
- power -= 5
- return power
-
-def solve1():
- maxpower = None
- coords = None
- for x in range(300-2):
- for y in range(300-2):
- power = 0;
- for i in range(3):
- for j in range(3):
- power += getPower(x+i,y+j)
- if maxpower == None or power > maxpower:
- maxpower = power
- coords = (x, y)
- print(f"{coords[0]},{coords[1]}")
-
-def genMap():
- vmap = [[0 for y in range(300)] for x in range(300)]
- for x in range(300):
- for y in range(300):
- vmap[x][y] = getPower(x,y)
- return vmap
-
-def solve2():
- maxpower = None
- res = None
- pmap = genMap()
- vmap = [[list() for y in range(300)] for x in range(300)]
- for s in range(1, 301):
- print(f"\rTrying: {s}", end="")
- cmaxpower = None
- cres = None
- for x in range(300-(s-1)):
- for y in range(300-(s-1)):
- vmap[x][y] += [pmap[x+(s-1)][y+i] for i in range(s)]
- vmap[x][y] += [pmap[x+i][y+(s-1)] for i in range(s-1)]
- power = sum(vmap[x][y]);
- if cmaxpower == None or power > cmaxpower:
- cmaxpower = power
- cres = (x, y, s)
- if maxpower == None or cmaxpower > maxpower:
- maxpower = cmaxpower
- res = cres
- elif cmaxpower < maxpower:
- break
-
- print("\r" + " " * 50 + "\r", end="")
- print(f"{res[0]},{res[1]},{res[2]}")
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/12/input.txt b/src/12/input.txt deleted file mode 100644 index 6dcf208..0000000 --- a/src/12/input.txt +++ /dev/null @@ -1,34 +0,0 @@ -initial state: ##..#.#.#..##..#..##..##..#.#....#.....##.#########...#.#..#..#....#.###.###....#..........###.#.#.. - -..##. => . -..... => . -##..# => . -...#. => . -#.... => . -...## => # -.#.#. => . -#..#. => # -##.#. => . -#..## => . -..#.. => . -#.#.# => . -###.# => . -###.. => . -.#... => # -.##.# => . -##... => # -..### => . -####. => . -#...# => # -.#..# => # -##### => # -..#.# => # -.#.## => # -#.### => . -....# => . -.###. => . -.#### => # -.##.. => . -##.## => # -#.##. => # -#.#.. => # diff --git a/src/12/solve.py b/src/12/solve.py deleted file mode 100644 index 8c4784c..0000000 --- a/src/12/solve.py +++ /dev/null @@ -1,61 +0,0 @@ -from sys import argv as args
-
-lines = open("input.txt").read().split("\n")
-istate = lines[0].split(": ")[1]
-rules = [l.split(" => ") for l in lines[2:] if l != ""]
-rules = [r[0] for r in rules if r[1] == "#"]
-
-def nextGen(pots):
- pmin = min(pots)
- pmax = max(pots)
- npots = list()
- for i in range(pmin-4, pmax+1):
- for r in rules:
- match = True
- for j in range(5):
- if (r[j] == "#") != ((i+j) in pots):
- match = False
- break
- if match:
- npots.append(i+2)
- break
- return npots
-
-def getPots():
- pots = list()
- for i in range(len(istate)):
- if istate[i] == "#":
- pots.append(i)
- return pots
-
-def solve1():
- pots = getPots()
- for i in range(20):
- pots = nextGen(pots)
- print(sum(pots))
- return
-
-def solve2():
- pots = getPots()
- psum = sum(pots)
- pdif = None
- i = 0
- while (True):
- pots = nextGen(pots)
- i += 1
- csum = sum(pots)
- if pdif == csum - psum:
- print(csum + pdif * (50000000000 - 164))
- break
- pdif = csum - psum
- psum = csum
- return
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/13/input.txt b/src/13/input.txt deleted file mode 100644 index f970d12..0000000 --- a/src/13/input.txt +++ /dev/null @@ -1,150 +0,0 @@ - /----------------------------------------------------------------------------------------------\
- /------------+-----\ /--------------------+-----------------\
- | | | /-------------------->-------+<-------------------+------\ /+-------------\
- | | | /---+------\ | | | || |
- | | | /--+---+------+---------------------+--------------------+------+---------++---\ /------+----\
- | | | | | | | /-----------+--------------------+------+---------++\ | | | |
- | | | /----------------\ | | | | | | /----+------+---------+++--+--+------+----+\
- | | | | /-------------+---------+--+---+------+---------+-----------+-----\ | | | ||| | | | ||
- | | | | | | | | | /----+---------+-----------+-----+---------+----+----->+----\ ||| | | | ||
- | | | | | | | | | | | /----+-----------+-----+---------+----+------+----+----+++--+\ | | ||
- | | | | | | /---+--+---+-+----+\ | | | | | | | | ||| || | | ||
- | | | | | | | | | | |/---++---+----+-----------+-----+---------+--\ | | | ||| || | | ||
- | | | | | | | | | | || || | | | | | | | | | ||| || | | ||
- | | /-+----+--+-------------+---\ | | | | || ||/--+----+-----------+-----+---------+--+-+----\ | | ||| || | | ||
- | /----------+---+-+----+--+-------------+---+-+---+--+---+-++---+++--+----+-----------+-----+------\ | | | | | | ||| || | | ||
- | | | | | | | | | | | | | || ||| | | | | | | | | | | | ||| || \------+----/|
- | | | | | | | |/--+-+---+--+---+-++---+++--+----+-----------+-----+------+--+--+-+----+-+<---+----+++\ || | |
- | | /+---+-+----+--+-------------++-\| | | | | || ||| | | /-------+-----+------+--+<-+-+-\ | | | |||| || | |
- | | || | | | | || || | | | | || ||| | | | | | | | | | | | |/---+----++++-++----\ | |
- |/+--------\|| | | | /+-----------\ || || | | | | || ||| | | | | /-+------+--+--+-+-+--+-++---+----++++-++----+---+--\ |
- ||| ||| | | | || | || || | | | | || ||| | | | /---+---+-+------+--+--+-+-+--+-++---+----++++-++----+-\ | | |
- ||| ||| | | | || /--+-++-++-+---+\ | /+-++---+++--+----+---+---+---+---+>+------+--+--+-+-+--+-++---+-\ |||| || | | | | |
- ||| /-+++---+-+\ | || | | || || \---++-+--++-++---+/| | | | | | | | | | | | | | || | | |||| || | | | | |
- ||| | ||| | || |/++--------+--+-++-++-----++-+--++-++---+-+--+----+---+---+---+---+-+\ | | | | | | || | | |||| || | | | | |
- ||| | ||| | || |||| | | || || || | |\-++---+-+--+----+---+---+---+---+-++-----+--+--+-+-+--+-/| | | |||| || | | | | |
- ||| | ||| \-++---++++--------+--+-++-+/ || | | || | | | | | | | | || | | | | | | | /-+-+--++++-++----+-+-+--+\ |
- ||| | ||| || |||| | | || | /-++-+--+--++---+-+--+----+---+---+---+---+-++-\ | | | | | | | | | | |||| || | | | || |
- ||| /+-+++-----++---++++--------+--+-++-+----+-++-+--+--++---+-+--+----+---+---+---+---+-++-+---+--+\ | | | | | | | | \+++-++----+-+-/ || |
- ||| || ||\-----++---++++--------+--+-++-+----+-++-+--+--++---+-+--+----+---+---+---+---+-++-+---+--++-+-/ | | | | | | ||| || | | || |
- ||| || || /-++---++++--------+--+-++-+----+-++-+--+--++---+-+--+----+---+---+---+---+-++-+---+--++-+---+--+--+-+-+-+--\||| || | | || |
- ||| || || | || |||| | | || | | || | | || | | | | /+---+---+---+-++-+---+--++-+---+--+--+-+-+-+--++++-++----+-+----++\|
- ||| || || | || |||| | | || | | ||/+--+--++---+-+--+----+\ || | | | || | | || | | | | | | | |||| || | | ||||
- ||| || || | || /-++++--------+--+-++-+----+-++++--+--++---+-+--+----++-++---+---+---+-++\| | || | | | | | | | |||| || | | ||||
- ||| |\-++----+-+/ | |||| /---+--+-++-+----+-++++--+--++---+-+--+----++-++---+---+---+-++++---+\ || | | | | | | | |||| || | | ||||
- ||| | || | | | |||| | | | || | | |||| | || | | | || || | | | |||| || || | | /+--+-+-+\| |||| || | | ||||
- ||| | || | | | |||| | | | || | | |||| | || | | | || || | | | |||| || || | | || | | ||| |||| || | | ||||
- ||| | || /--+-+--+-++++----+---+--+-++-+----+-++++--+--++---+-+--+----++-++---+---+---+-++++---++-++-+---+-++\ | | ||| |||| || | | ||||
-/--+++-----+--++-+--+-+--+-++++----+---+--+-++-+----+-++++--+--++---+-+--+--\ || || | | /-+-++++---++-++-+---+-+++-+-+-+++--++++-++---\| | ||||
-| ||| | || | \-+--+-++++----+---+--+-++-+----+-++++--+--++---+-+--+--+-++-++---+---+-+-+-++++---++-++-+---+-+++-+-+-+++--/||| || || | ||||
-| ||| | || | /-+--+-++++----+---+--+-++-+----+-++++--+--++-\ | | | | || || | |/+-+-++++---++-++-+---+\||| | | ||| ||| || || | ||||
-| ||| | || | | | | |||| | |/-+-++-+----+-++++--+--++-+-+-+--+--+-++-++---+---+++-+-++++---++-++-+\ ||||| | | ||| ||| || || | ||||
-| /+++-----+--++-+--+-+--+-++++----+---++-+-++-+----+-++++--+--++-+-+-+--+--+-++-++---+---+++-+-++++---++\|| || ||||| | | ||| ||| || || | ||||
-| |||| | || | | | | |||| | || | || | | \+++--+--++-+-+-+--+--+-++-++---+---+++-+-++++---+++++-++--+++++-+-+-+++---+++-/| || | ||||
-| |||| \--++-+--+-+--+-++++----+---++-+-++-+----+--+++--+--++-+-+-+--+--+-++-++---+---+++-+-++++---++++/ || ||||| | | ||| ||| | || | ||||
-| |||| || | | | | |||| | || | ||/+----+--+++-\| || | | | | | || || |/--+++-+-++++\ |||| || ||||| | | ||| ||| | || | ||||
-| |||| || | | | | |||| | || | ||||/---+--+++-++--++-+>+-+--+--+-++-++---++-\||| | ||||| |||| || ||||| | | ||| ||| | || | ||||
-| |||| || | | | | |||| | || | ||||| | ||| |\--++-+-+-+--+--+-++-++---++-++++-+-+++++--++++--++--+++++-+-+-++/ ||| | || | ||||
-| |||| || | | | | |||| | || | ||||| | ||| | || |/+-+--+--+-++-++---++-++++-+-+++++--++++--++--+++++-+-+-++\ ||| | || | ||||
-| |||| /++-+--+-+--+-++++----+---++-+-+++++---+-\||| | || ||| | | | || || || |||| | ||||| |||| || ||||| | | ||| ||| | || v ||||
-| |||| /----+++-+--+-+--+-++++----+---++-+-+++++---+-++++-+---++-+++\| | | \+-++---++-++++-+-+++++--++++--++--+++++-+-+-+++---+/| | || | ||||
-| |||| |/---+++-+--+-+--+-++++----+---++-+-+++++---+-++++-+---++-+++++--+--+--+\|| || |||| | ||||| |||| || ||||| | | ||| | | | || | ||||
-| |||| || ||| | | | | |||| | || | |||||/--+-++++-+---++-+++++--+--+--++++---++-++++-+-+++++--++++-\|| ||\++-+-+-+/| | | | || | ||||
-| |\++--++---+++-+--+-/ | |||| | \+-+-++++++--+-+/|| |/--++-+++++--+--+--++++---++-++++-+-+++++--++++-+++--++-++-+-+-+-+---+-+--+-\ || | ||||
-| | || || ||| | | | |||| | | | |||||| | | || || || ||||| | | |||| || ||\+-+-+++++--++++-+++--+/ || | | | | | | | | || | ||||
-| | || ||/--+++-+--+----+-++++----+----+-+-++++++--+-+-++-++--++-+++++--+--+-\|||| || || | | ||||| |||| ||| | || | | | | | | | | || | ||||
-| | || ||| ||| | | | |||| | | | |||||| | | || || || ||||\--+--+-+++++---++-++-+-+-+++++--++++-+++--+--/| | | | | | | | | || | ||||
-| | \+--+++--+/| | | | |||| | | | |||||| | | || || || |||| | | ||||| || |\-+-+-+++++--++++-+++--+---+-+-+-+-+---/ | | | || | ||||
-| | | ||| | | | | | |||| | | | ||||||/-+-+-++-++--++-++++---+--+-+++++---++-+--+-+-+++++--++++-+++--+---+-+\| | | | | | || | ||||
-| | | ||| | | | \----+-++++----+----+-+-+++++++-+-+-++-++--++-/||| | | ||||| ||/+--+-+-+++++--++++-+++\ | | ||| | | | | | || | ||||
-| | | ||| | | | | |||| | | | ||\++++-+-+-++-/|/-++--+++---+--+-+++++-\ |||| /+-+-+++++--++++-++++-+---+-+++\| | | | | || | ||||
-| | | /+++--+-+-+-------+-++++----+----+-+-++-++++-+-+-++--++\|| ||| | | ||||| | |||| || | ||||| |||| |||| | | ||||| | | |/+-++-+---\||||
-| | | |||| | | | | |||| | | | || |||| | | || ||||| ||| | | ||||| | |||| || | ||||| |||| |||| | | ||||| | | ||| || | |||||
-| | | |||| | | | | |||| | | | || |||| | | || ||||| ||| | | ||||\-+-++++-++-+-+++++--++++-++++-/ | ||||| | | ||| || | |||||
-| | | |||| | | | | |||| | | | || |||| | | || ||||| ||| | | |||| | ||||/++-+-+++++--++++-++++-----+-+++++-+--\/-+--+++-++-+--\|||||
-| | | |||| | | | | |||| | | | || |||| | | || ||||| ||| | | |||| | |\+++++-+-++++/ |||\-++++-----+-+++++-+--++-+--+++-++-+--+++++/
-| | | |||| | | | /-+-++++----+--\ | | || |||| | | || ||||| ||| |/-+-++++--+-+-+++++-+\|||| ||| |||| | ||||| | || | ||| || | |||||
-| | | |||| | | | | | |||| | | | | || |||| | | || ||||| ||| || | |||| | | ||||| |||||| ||| |||| | ||||| | || | ||| || | |||||
-| | | |||| | | | | | \+++----+--+-+-+-/| |||| | | || ||||| ||| || | |||| | | ||||| |||||| ||| |||| | ||||| | || | ||| || | |||||
-| | | |||\--+-+-+-----+-+--+++----+--+-+-+--+-++++-+-+-++--+++++--+++---++-+-/||| |/+-+++++-++++++---+++\ |||| | ||||v | || | ||| || | |||||
-| | | ||| | | | | | ||| | | |/+--+-++++-+-+\|| ||||| ||| || | ||| ||| |||||/++++++---++++-++++-----+-+++++-+--++-+-\||| || | |||||
-| | | ||| | | |/----+-+--+++\ | | ||| | ||\+-+-++++--+++++--+++---++-+--+++--+++-++++++++++++---++++-/||| /+-+++++-+--++-+-++++-++-+-\|||||
-| | | ||| | | || | | |\++---+--+-++/ | || | | |||| ||||\--+++---++-+--+++--+++-++++++++++++---++++--/|| || ||||| | || | |||| || | ||||||
-|/+--+-+++---+-+-++----+-+--+-++---+--+-++---+-++-+-+-++++--++++---+++---++-+--+++--+++-++++++++++++-\ |||| || || ||||| | || | |||| || | ||||||
-||| | ||| | | || /-+-+--+-++---+--+-++---+-++-+-+-++++--++++-\ ||| || | |||/-+++-++++++++++++-+-++++---++----++-+++++-+--++-+\|||| || | ||||||
-^|| | ||| | | || | | | | || | | || \-++-+-+-++++--++++-+-+++---++-+--++++-+++-++++++++++++-+-++++---++----++-+++++-+--++-/||||| || | ||||||
-||| | ||| | | || | | | | || |/-+-++-----++-+-+-++++--++++-+-+++---++-+--++++-+++>++++++++++++-+-++++---++----++-+++++-+\ || ||||| || | ||||||
-||| | \++---+-+-++--+-+-+--+-++---++-+-++-----++-+-+-++++--++/| | ||| || | |||| ||| \+++++++++++-+-++++---+/ || ||||| || |\--+++++-++-+-+/||||
-||| | || | | || | | | | || || | || || | | |||| || | |/+++---++-+--++++-+++--+++++++++++-+-++++\ | || ||||| || | ||||| || | | ||||
-||| | || | | || | | | | || || | || /++-+-+-++++--++-+-+++++--\|| | |||| ||| ||||||||||| | ||||| | /---++-+++++-++-+---+++++\|| | | ||||
-||| | || | | || | | | | || || | || ||| | | |||| || | ||||| ||| | |||| ||\--+++++++++++-+-+++++--+-+---++-+++++-++-+---++++++++-/ | ||||
-||| | || | | || /+-+-+--+-++---++-+-++----+++\| | |||| || | ||||| |\+-+--++++-++---+++++++++++-+-+++++--+-+---++-+++++-++-+---++/||||| | ||||
-||| | || |/+-++-++-+-+--+-++---++-+-++----+++++\| |||| || | ||||| | | | |||| || ||||||||||| | ||||| | | || ||||| || | || ||||| | ||||
-||| | || ||| || || | | | || || | || ||||||| |||| |\-+-+++++--+-+-+--++++-/| ||||||||||| | ||||| | | || ||||| || | || ||||| | ||||
-||| | || |||/++-++-+-+--+-++---++-+-++----+++++++-++++--+--+-+++++--+-+-+--++++--+---+++++++++++\| ||||| | | || ||||| || | || ||||| | ||||
-||| | || |||||| || |/+--+-++---++-+-++----+++++++-++++--+--+-+++++--+-+-+--++++--+-\ v|||||||||||| ||||| | | || ||||| || | || ||||| | ||||
-||| | || |||||| || ||| | || || | || ||||||| |||| | | ||||| | | | |||| | | |||||||||||||/+++++--+-+---++-+++++-++-+---++-+++++---+-++++\
-||| | || |||||| || |||/-+-++---++\| || ||||||| |||| | \-+++++--+-+-+--++++--+-+-+++++++++++++++++++--+-+---++-++++/ || | || ||||| | |||||
-||| | || |||||| || |||| | || |||| || ||||||\-++++--+----+++++--+-+-+--++++--+-+-++++++++++/|||||||| | | || |||| || | || ||||| | |||||
-||| | || |||||| || |||| | || |||| || |||||| |||| | ||||| | | | |||v \-+-++++++++++-++++++/| | | || |||| || | || ||||| | |||||
-||| | || /++++++-++\|||| |/++---++++-++----++++++--++++--+----+++++--+-+-+--++++----+-++++++++++-++++++-+--+-+---++-++++--++-+\ || ||||| | |||||
-||| | || |\+++++-+++++++-++++---++++-++----++++++--/||\--+----+++/| | | | |||| | |||||\++++-++++++-+--+-+---++-++++--++-++--++-+++++---+-+/|||
-||| | || | ||||| ||||||| |||| |||| || /-++++++---++---+----+++-+--+-+-+--++++----+-+++++-++++-++++++-+--+-+---++-++++--++\|| || ||||| | | |||
-||| | || | ||||| ||||||| |||| |||| || | |||||| || | ||| | | | | |||| | ||||\-++++-++++++-+--+-+---++-++++--+++++--+/ ||||| | | |||
-||| \--++--+-+++++-+++++++-++++---++++-++--+-++++++---++---+----+++-+--+-+-+--++++----+-++++--++++-+++/|| | | | || |||| ||||| | ||||| | | |||
-||| /---++--+-+++++-+++++++-++++---++++-++--+-++++++---++---+----+++-+--+-+-+--++++----+-++++-\|||| ||| || | | | || |||| ||||| | ||||| | | |||
-||| | || | ||||| ||||||| |||| |||| || | |||||| || | ||| | | | | |||| | |||| ||||| ||| || | | | || \+++--+++++--+--++++/ | | |||
-||| | || | ||||| ||||||| |||| |\++-++--+-++++++---++---+----+++-+--+-+-+--++++----+-++++-+++++-+++-++-+--+-+---++--+++--+/||| | |||| | | |||
-||| | || | ||||| ||||||| ||||/--+-++-++--+-++++++---++---+---\||| | | | | /++++----+-++++-+++++-+++-++-+\ | | || ||| | ||| | |||| | | |||
-|\+-+---++--+-+++++-+++++++-+++++--+-++-++--+-++++++---++---+---++++-+--+-+-+-+++++----+-++++-+++++-+/| || || | | || ||| | ||| | |||| | | |||
-| | | || | ||||| ||||||| |\+++--+-++-++--+-++++++---++---+---++++-+--+-+-+-+++++----+-++++-+++++-+-+-++-++-+-+--<++--+++--+-++/ | |||| | | |||
-| | | || | ||||| |||\+++-+-+++--+-+/ || | |||||| || \---++++-+--+-+-+-+++++----+-++++-+++++-+-+-++-++-+-+---++--+++--+-++---+--+/|| | | |||
-| | | \+--+-+++++-+++-+++-+-+++--+-+--++--+-++++++---++-------++++-/ | | | |||\+----+-++++-+++++-+-+-++-++-+-+---++--+++--+-++---+--+-++----+-+-+/|
-| | | | | ||||| ||| ||| \-+++--+-+--++--+-++++++---++-------++++----+-+-+-+++-+----+-++++-+++/| | | || || | | || ||| | || | | || | | | |
-| | | | | ||||| ||| ||| ||| | |/-++--+-++++++---++-------++++----+-+-+-+++-+----+-++++-+++-+-+-+-++-++-+-+---++--+++--+-++---+--+\|| | | | |
-| | | | | ||||| ||| ||| ||| | || ||/-+-++++++---++-------++++----+-+-+-+++-+\ | |||| ||| | | | || || | | || ||| | || | |||| | | | |
-| | | | |/+++++-+++-+++---+++--+\|| ||| | |||||| || /-++++----+-+-+-+++-++---+-++++-+++-+-+-+-++-++-+-+---++--+++--+-++---+--++++\ | | | |
-| | | | ||||||| ||| ||| ||| |||| ||| | |||||| || /--+-++++----+-+-+-+++-++---+-++++-+++-+-+-+-++-++-+-+>\ || ||| | || | ||||| | | | |
-| | | | ||||||| ||| ||| ||| |||| ||| | |||||| || | | |||| | \-+-+++-++---+-++++-+/| | | | || || | | | || ||| | || | ||||| | | | |
-| | | | ||||||| ||| ||| |||/-++++-+++-+-++++++---++--+--+-++++----+---+-+++-++---+-++++-+-+-+-+-+-++-++-+-+-+-++--+++--+-++---+-\||||| | | | |
-| | | | ||||||| ||| ||| \+++-++++-+++-+-++++++---++--+--+-++++----+---+-+++-++---+-++++-+-/ | | | || || | | | || ||| | || | |||||| | | | |
-| | | | ||||||| ||| ||| ||| |||| \++-+-++++++---++--+--+-++++----+---+-+++-++---+-++++-+---+-+-+-++-++-/ | | || ||| | || | |||||| | | | |
-| | | /-+--+++++++-+++-+++----+++-++++--++-+-++++++---++--+--+-++++----+---+-+++-++---+-++++-+---+-+-+-++-++---+-+\|| ||| | || | |||||| | | | |
-| | | | | ||||||| ||| ||| ||| |||| || | ||\+++---++--+--+-++++----+---+-+++-++---+-/||| | | | | || || | |||| ||| | || | |||||| | | | |
-| | | | | ||||||| ||| ||| ||| |||| || | || ||| || | | |||| | | ||| || | ||| | | | | || || | |||| ||| | || | |||||| | | | |
-| | | | | |||\+++-+++-+++----+++-++++--++-+-+/ ||| || | | ||\+----+---+-+++-++---+--+++-+---+-+-+-++-/| | |||| ||| | || | |||||| | | | |
-| | | | | ||| ||| ||| ||| ||| |||| || | | ||| || | | || | | | ||| || | ||| | | | | || | \-++++--+++--+-++---+-+++/|| | | | |
-| | | | | ||| ||| |\+-+++----+++-++++--++-+-+--+++---++--+--+-+/ | | | ||| || | ||| | | | | || | |||| ||| | || | ||| || | | | |
-| | | | | ||| ||| | | ||| ||| |||| || | | ||| || | | | | | | ||| || | ||| | | | | || | |||| ||| | || | ||| || | | | |
-| \-+--+-+--+++-+++-+-+-+++----+++-++++--++-+-+--+++---++--+--+-+--+----+---+-+++-++---+--+++-+---+-+-+-+/ | |||| ||| | || | ||| || | | | |
-| | | | ||| ||| | | ||| ||| |||| || | | ||| || | | | | | | ||| || | ||| | | | | | | |||| ||| | || | ||| || | | | |
-| | | | ||| ||| | | ||| ||| |||| || | \--+++---++--+--+-+--+----/ | ||| || | ||| | | | | | | ||\+--+++--+-++---+-+++-++---/ | | |
-\---+--+-+--+++-+++-+-+-+++----+++-++++--++-+----+++---++--+--+-+--+--------/ ||| || | ||| | | | | | | || | ||| | || | ||| || | | |
- | | | ||| ||| | | ||| ||| |||| || | ||| || | \-+--+----------+++-++---+--+++-+---+-+-+-+---+-----++-+--+++--+-++---+-+++-+/ | | |
- | | | ||| ||| | | \++----+++-++++--++-+----+++---++--+----+--+----------+++-++---/ ||| | | | | | | || | ||| | || | |\+-+------/ | |
- | | | ||| ||| | | || ||| |||| || | ||| || | |/-+----------+++-++--\ ||| | | | | | | || | ||| | || | | | | | |
- | | | ||| ||| | | || ||| |||| || | ||| || | || | ||| || | ||| | /+-+-+-+---+-----++-+--+++--+-++---+-+-+\| | |
- | | | ||| ||| | | || ||| |||| || | ||| || | || \----------+++-++--+---+++-+--++-+-+-+---+-----++-+--+++--/ || | | ||| | |
- | | | ||| ||| | | \+----+++-++++--++-+----+++---++--+----++------------+++-++--+---+++-+--+/ | | | | || | ||| || | | ||| | |
- | | | |\+-+++-+-+---+----+++-+/|| || | ||| || | || ||| || | \++-+--+--+-+-+---+-----++-+--+++----+/ | | ||| | |
- | | | | | ||| \-+---+----+++-+-++--++-+----/|| || | || ||| || | || | | | | | | || | ||| | | | ||| | |
- | | | | \-+++---+---+----+++-+-++--++-+-----+/ || | || \++-++--+----++-+--+--+-+-+---/ || | |\+----+----+-+-+++--------/ |
- | | | | ||| | v ||| \-++--++-+-----+----++--+----++-------------++-++--+----++-+--+--+-+-/ || | | | | | | ||| |
- | | | | ||| | | |\+---++--++-+-----+----++--+----/| || || /+----++-+--+--+-+-----------++-+--+-+----+---\| | ||| |
- | \-+--+---+++---+---+----+-+---++--++-+-----+----++--+-----+-------------++-++-++----++-+--+--+-+-----------+/ | | | | || | ||| |
- | | | ||| | | | | || || | | |\--+-----+-------------/| || || || | | | | | | | | | || | ||| |
- | | | ||| | | | | || || \-----+----+---+-----+--------------+-++-++----++-+--+--+-+-----------+--+--+-+----/ || | ||| |
- | | | ||| | | | | || || | | | \--------------+-++-+/ \+-+--+--+-+-----------+--+--+-/ || | ||| |
- | | | ||| | | | | || \+-------+----/ | | || | | | | | \-----------+--+--+----------++-+-+++----------/
- | | | |\+---+---+----+-+---++---+-------+--------+--------------------+-++-+------+-+--+--+-------------+--/ | || | |||
- | \--+---+-+---+---+----+-+---++---+-------+--------+--------------------/ || | | | | | | | || | |||
- | | | | | | | | || | | \----------------------++-+------+-+--+--+-------------/ | || | |||
- | | | | | | | | || | | || \------+-+--+--+-------------------+----------/| | |||
- | | | | | | | \---++---+-------+-------------------------------++--------+-+--+--+-------------------+-----------+-/ |||
- | | | | | | | || | | || \-+--+--+-------------------+-----------+---++/
- | \---+-+---/ | | || | | \+----------+--+--+-------------------+-----------/ ||
- \-----------+<+-------+----+-----++---+-------+--------------------------------+----------/ | | | ||
- \-+-------+----+-----++---+-------+--------------------------------+-------------+--/ | ||
- | \----+-----/\---+-------+--------------------------------+-------------+----------------------+---------------/|
- \------------/ | \--------------------------------+-------------+----------------------/ |
- \----------------------------------------/ \---------------------------------------/
diff --git a/src/13/solve.py b/src/13/solve.py deleted file mode 100644 index f8a4ac3..0000000 --- a/src/13/solve.py +++ /dev/null @@ -1,167 +0,0 @@ -from sys import argv as args
-
-f = open("input.txt")
-contents = f.read()
-test_contents = """
-/>-<\\
-| |
-| /<+-\\
-| | | v
-\\>+</ |
- | ^
- \\<->/
-"""
-
-tmap = [list(l) for l in contents.split("\n") if len(l) != 0]
-xlen = len(tmap[0])
-ylen = len(tmap)
-f.close()
-
-arrows = dict()
-arrows["<"] = (-1, 0)
-arrows[">"] = (1, 0)
-arrows["^"] = (0, -1)
-arrows["v"] = (0, 1)
-
-directions = [(-1,0), (0,-1), (1, 0), (0, 1)] # l - u - r - d
-
-def checkPos(x,y):
- if x < xlen and x >= 0 and y < ylen and y >= 0:
- return tmap[y][x]
- return " "
-
-def correct(x, y):
- cr = checkPos(x+1, y)
- cl = checkPos(x-1, y)
- cu = checkPos(x, y-1)
- cd = checkPos(x, y+1)
-
- if cr == "|": cr = " "
- if cl == "|": cl = " "
- if cu == "-": cu = " "
- if cd == "-": cd = " "
-
- r = cr != " "
- l = cl != " "
- u = cu != " "
- d = cd != " "
-
- sum = r + l + u + d
-
- if sum > 2:
- return "+"
-
- # 2 around
- if r:
- if l:
- return "-"
- elif u:
- return "/"
- else:
- return "\\"
- else:
- if not l:
- return "|"
- elif u:
- return "/"
- else:
- return "\\"
-
-carts = list()
-for y in range(ylen):
- for x in range(xlen):
- if tmap[y][x] in arrows:
- carts.append([x, y, arrows[tmap[y][x]], 0, 0])
- tmap[y][x] = correct(x,y)
-
-def cartAt(x, y):
- global carts
- for i in range(len(carts)):
- c = carts[i]
- if c[0] == x and c[1] == y and not c[4]:
- return i
- return None
-
-def drawMap():
- for y in range(ylen):
- print("".join(["#" if cartAt(x,y) != None else tmap[y][x] for x in range(len(tmap[y]))]))
-
-def advance(cart):
- ncart = [0 for x in range(5)]
- ncart[0] = cart[0]+cart[2][0]
- ncart[1] = cart[1]+cart[2][1]
- col = cartAt(ncart[0], ncart[1])
- if col != None:
- return ncart[0], ncart[1], col
-
- c = tmap[ncart[1]][ncart[0]]
- d = directions.index(cart[2])
-
- if c == "+":
- d = (d + len(directions)-1 + cart[3]) % len(directions)
- ncart[2] = directions[d]
- ncart[3] = (cart[3] + 1) % 3
- else: #dont need to change direction for '-' and '|'
- if c == "/":
- ncart[2] = directions[3-d]
- elif c == "\\":
- if d == 0: #l
- ncart[2] = directions[1]
- elif d == 1: #u
- ncart[2] = directions[0]
- elif d == 2: #r
- ncart[2] = directions[3]
- elif d == 3: #d
- ncart[2] = directions[2]
- else:
- ncart[2] = cart[2]
- ncart[3] = cart[3]
- return ncart
-
-
-def solve1():
- global carts
-
- crash = None
- while not crash:
- carts = sorted(carts, key=lambda x:(x[0], x[1]))
- for c in range(len(carts)):
- nc = advance(carts[c])
- if len(nc) == 3:
- crash = nc
- break
- else:
- carts[c] = nc
-
- print(f"{crash[0]},{crash[1]}")
-
-def solve2():
- global carts
-
- while len(carts) > 1:
- carts = sorted(carts, key=lambda x:(x[0], x[1]))
- rcarts = list()
- for c in range(len(carts)):
- if carts[c][4]: continue;
- nc = advance(carts[c])
- if len(nc) == 3:
- carts[c][4] = 1
- carts[nc[2]][4] = 1
- rcarts.append(carts[c])
- rcarts.append(carts[nc[2]])
- else:
- carts[c] = nc
- for c in rcarts:
- if c in carts: # prevent doubles
- carts.remove(c)
-
- print(f"{carts[0][0]},{carts[0][1]}")
-
-def main():
- if len(args) == 2:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/13/solve.py~ b/src/13/solve.py~ deleted file mode 100644 index 7121398..0000000 --- a/src/13/solve.py~ +++ /dev/null @@ -1,158 +0,0 @@ -f = open("input.txt")
-contents = f.read()
-contents_sample = """
-
-/->-\
-| | /----\\
-| /-+--+-\ |
-| | | | v |
-\-+-/ \-+--/
- \------/
-
-"""
-
-tmap = [list(l) for l in contents.split("\n") if len(l) != 0]
-xlen = len(tmap[0])
-ylen = len(tmap)
-f.close()
-
-arrows = dict()
-arrows["<"] = (-1, 0)
-arrows[">"] = (1, 0)
-arrows["^"] = (0, -1)
-arrows["v"] = (0, 1)
-
-directions = [(-1,0), (0,-1), (1, 0), (0, 1)] # l - u - r - d
-
-def checkPos(x,y):
- """
- if x >= xlen:
- x = x % xlen
- elif x < 0:
- x = xlen + x
- if y >= ylen:
- y = y % ylen
- elif y < 0:
- y = ylen + y
- """
- v = 0
- if x < xlen and x >= 0 and y < ylen and y >= 0:
- if tmap[y][x] != " ": v = 1
-
- return v
-
-def correct(x, y):
- r = checkPos(x+1, y)
- l = checkPos(x-1, y)
- u = checkPos(x, y-1)
- d = checkPos(x, y+1)
-
- if r + l + d + u >= 3:
- return "+"
-
- # 2 around
- if r:
- if l:
- return "-"
- elif u:
- return "/"
- else:
- return "\\"
- else:
- if not l:
- return "|"
- elif u:
- return "/"
- else:
- return "\\"
-
-carts = list()
-for y in range(ylen):
- for x in range(xlen):
- if tmap[y][x] in arrows:
- carts.append([x, y, arrows[tmap[y][x]], 0])
- tmap[y][x] = correct(x,y)
-
-def cartAt(x, y):
- global carts
- for i in range(len(carts)):
- c = carts[i]
- if c[0] == x and c[1] == y:
- return i
- return None
-
-def advance(cart):
- ncart = [0 for x in range(4)]
- ncart[0] = cart[0]+cart[2][0]
- ncart[1] = cart[1]+cart[2][1]
- col = cartAt(ncart[0], ncart[1])
- if col:
- return ncart[0], ncart[1], col
-
- c = tmap[ncart[1]][ncart[0]]
- d = directions.index(cart[2])
-
- if c == "+":
- d = (d + len(directions)-1 + cart[3]) % len(directions)
- ncart[2] = directions[d]
- ncart[3] = (cart[3] + 1) % 3
- else: #dont need to change direction for '-' and '|'
- if c == "/":
- ncart[2] = directions[3-d]
- elif c == "\\":
- if d == 0: #l
- ncart[2] = directions[1]
- elif d == 1: #u
- ncart[2] = directions[0]
- elif d == 2: #r
- ncart[2] = directions[3]
- elif d == 3: #d
- ncart[2] = directions[2]
- else:
- ncart[2] = cart[2]
- ncart[3] = cart[3]
- return ncart
-
-def drawMap():
- for y in range(ylen):
- print("".join(["#" if cartAt(x,y) else tmap[y][x] for x in range(len(tmap[y]))]))
-
-def solve1():
- global carts
-
- crash = None
- while not crash:
- carts = sorted(carts, key=lambda x:(x[0], x[1]))
- for c in range(len(carts)):
- nc = advance(carts[c])
- if len(nc) == 3:
- crash = nc
- break
- else:
- carts[c] = nc
-
- print("Crash at:", str(crash[0]), str(crash[1]))
- return
-
-def solve2():
- global carts
-
- while len(carts) > 1:
- carts = sorted(carts, key=lambda x:(x[0], x[1]))
- rcarts = list()
- for c in range(len(carts)):
- nc = advance(carts[c])
- if len(nc) == 3:
- print(nc[2], c)
- rcarts.remove(carts[c])
- carts.remove(carts[nc[2]])
- else:
- carts[c] = nc
- for c in rcarts:
- carts.remove(c)
- print(carts[0][0], carts[0][1])
- return
-
-
-#solve1()
-solve2()
diff --git a/src/14/input.txt b/src/14/input.txt deleted file mode 100644 index 1c93252..0000000 --- a/src/14/input.txt +++ /dev/null @@ -1 +0,0 @@ -110201 diff --git a/src/14/solve.py b/src/14/solve.py deleted file mode 100644 index fd6488c..0000000 --- a/src/14/solve.py +++ /dev/null @@ -1,42 +0,0 @@ -from sys import argv as args
-
-inputstr = open("input.txt").read().replace("\n","")
-recipes = [3,7]
-
-def solve1():
- global recipes, inputstr
-
- end = int(inputstr)
- workers = [i for i in range(2)]
- while len(recipes) < end + 10:
- recipes += [int(c) for c in str(sum(recipes[workers[i]] for i in range(len(workers))))]
- for i in range(len(workers)):
- workers[i] = (workers[i] + recipes[workers[i]]+1) % len(recipes)
- print("".join([str(x) for x in recipes[end:]]))
-
-def solve2():
- global recipes, inputstr
-
- ilen = len(inputstr)
- inputstr = [int(c) for c in inputstr]
- workers = [i for i in range(2)]
- stop = False
- counter = 0
- while not stop:
- for v in [int(c) for c in str(sum(recipes[workers[i]] for i in range(len(workers))))]:
- if recipes[-ilen:] == inputstr:
- stop = True
- break
- recipes.append(v)
- for i in range(len(workers)):
- workers[i] = (workers[i] + recipes[workers[i]]+1) % len(recipes)
- print(len(recipes)-ilen)
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/15/input.txt b/src/15/input.txt deleted file mode 100644 index c6ec342..0000000 --- a/src/15/input.txt +++ /dev/null @@ -1,32 +0,0 @@ -################################
-###############.##...###########
-##############..#...G.#..#######
-##############.............#####
-###############....G....G......#
-##########..........#..........#
-##########................##..##
-######...##..G...G.......####..#
-####..G..#G...............####.#
-#######......G....G.....G#####E#
-#######.................E.######
-########..G...............######
-######....G...#####E...G....####
-######..G..G.#######........####
-###.........#########.......E.##
-###..#..#...#########...E.....##
-######......#########.......####
-#####...G...#########.....######
-#####G......#########.....######
-#...#G..G....#######......######
-###...##......#####.......######
-####..##..G........E...E..######
-#####.####.....######...########
-###########..#...####...E.######
-###############...####..#...####
-###############...###...#.E.####
-#####################.#E....####
-#####################.#...######
-###################...##.#######
-##################..############
-##################...###########
-################################
diff --git a/src/15/solve.py b/src/15/solve.py deleted file mode 100644 index fa08fdb..0000000 --- a/src/15/solve.py +++ /dev/null @@ -1,291 +0,0 @@ -from sys import argv as args
-
-debug = False
-
-file = open("input.txt")
-input = file.readlines()
-file.close()
-
-#sample 1 - (works!)
-ainput = """#######
-#G..#E#
-#E#E.E#
-#G.##.#
-#...#E#
-#...E.#
-#######""".split("\n")
-
-#sample 2 - (works!)
-binput = """#######
-#E..EG#
-#.#G.E#
-#E.##E#
-#G..#.#
-#..E#.#
-#######""".split("\n")
-
-#sample 3 - (works!)
-cinput = """#######
-#E.G#.#
-#.#G..#
-#G.#.G#
-#G..#.#
-#...E.#
-#######""".split("\n")
-
-#sample 4 - (works!)
-dinput = """#######
-#.E...#
-#.#..G#
-#.###.#
-#E#G#G#
-#...#G#
-#######""".split("\n")
-
-#sample 5 - (works!)
-einput = """#########
-#G......#
-#.E.#...#
-#..##..G#
-#...##..#
-#...#...#
-#.G...G.#
-#.....G.#
-#########""".split("\n")
-
-#sample 6 - (works!)
-finput = """#######
-#.G...#
-#...EG#
-#.#.#G#
-#..G#E#
-#.....#
-#######""".split("\n")
-
-sinput = dinput
-
-actors = list()
-input = [l.replace("\n","") for l in input]
-
-def parseEntity(x, y):
- global actors
- c = input[y][x]
- if c == "#":
- return 1
- else:
- if c == "G":
- actors.append([x, y, 200, 1, len(actors), 3])
- elif c == "E":
- actors.append([x, y, 200, 0, len(actors), 3])
- return 0
-
-ylen = len(input)
-xlen = len(input[0])
-
-adjacent = [[0, -1], [-1, 0], [1, 0], [0, 1]] # first in reading order
-vmap = list()
-
-def setGame():
- global vmap, actors
- actors = list()
- vmap = [[parseEntity(x, y) for x in range(xlen)] for y in range(ylen)]
-
-
-def inmap(cmap, cx, cy):
- for i in range(len(cmap)):
- ent = cmap[i]
- if ent[0] == cx and ent[1] == cy:
- return i
- return None
-
-def iswall(x,y):
- return vmap[y][x] != 0
-
-def isblocked(x, y):
- return (vmap[y][x] != 0 or inmap(actors, x, y) != None)
-
-def freeAdjacent(x, y):
- poslist = list()
- for dir in adjacent:
- nx = x + dir[0]
- ny = y + dir[1]
- if not isblocked(nx, ny):
- poslist.append((nx,ny))
- return poslist
-
-def flatten(l):
- flat = list()
- for ll in l:
- flat += ll
- return flat
-
-def drawMap():
- global actors
- for y in range(ylen):
- for x in range(xlen):
- ind = inmap(actors, x, y)
- print(("G" if actors[ind][3] == 1 else "E") if ind != None else ("." if vmap[y][x] == 0 else "#"), end="")
- print()
-
-def getSteps(cmap, a1):
- # adjacent squares
- npos = [[a1[0] + dir[0], a1[1] + dir[1]] for dir in adjacent]
-
- # pos of enemy and distance
- steps = [[np[0], np[1], cmap[np[0], np[1]]] for np in npos if (np[0], np[1]) in cmap]
-
- return steps
-
-def closestStep(a1, a2):
- countmap = dict()
- next = dict()
- next[(a2[0], a2[1])] = 0
- counter = 0
- steps = list()
- while len(next) > 0 and len(steps) == 0: # first steps available will be shortest
- countmap = {**countmap, **next} # merge dictionaries
- counter += 1
- temp = dict()
- for n in next:
- for dir in adjacent:
- nx = n[0]+dir[0]
- ny = n[1]+dir[1]
- if not isblocked(nx, ny) and (nx, ny) not in countmap and (nx, ny) not in temp:
- temp[(nx,ny)] = counter
- next = temp
- steps = getSteps(countmap, a1)
-
- # if reachable
- if len(steps) != 0:
- return sorted(steps, key = lambda x : (x[1], x[0]))[0]
- else:
- return [None]
-
-def move(a):
- global actors
- # best steps from enemies
- steps = [[na[0], na[1]] + closestStep(a, na) for na in actors if na[3] != a[3]]
-
- # only where step is possible
- steps = [s for s in steps if s[2] != None]
-
- # skip when none possible
- if len(steps) == 0:
- return
-
- # best move
- bestmove = sorted(steps, key = lambda x : (x[4], x[1], x[0]))[0]
- a[0] = bestmove[2]
- a[1] = bestmove[3]
-
-def getInrange(a):
- global actors
- inrange = list()
- for dir in adjacent:
- nx = a[0] + dir[0]
- ny = a[1] + dir[1]
- ind = inmap(actors, nx, ny)
- if ind != None and actors[ind][3] != a[3]:
- inrange.append(ind)
- return inrange
-
-def nextTick(tick):
- global actors
- actors = sorted(actors, key=lambda x: (x[1], x[0]), reverse=True)
- i = len(actors)-1
-
- while i >= 0:
- a = actors[i]
- inrange = getInrange(a) # get enemies in range
- if len(inrange) == 0:
- move(a)
- inrange = getInrange(a)
-
- if len(inrange) != 0:
- inrange = [actors[ai] + [ai] for ai in inrange]
-
- # lowest health in reading order
- cai = sorted(inrange, key = lambda x : (x[2], x[1], x[0]))[0][-1]
-
- # attack player
- actors[cai][2] -= a[5] # attack
- if actors[cai][2] <= 0:
- actors.pop(cai) # dead
- print("death -",cai)
- if minalive() == 0 and i != 0: # incomplete round
- return False
- if cai < i: i -= 1
-
- if debug and False:
- print()
- print("small step -",a[4])
- drawMap()
- statusReport()
- i -= 1
-
- if debug:
- print()
- print("tick:", tick)
- drawMap()
- statusReport()
- else:
- print(tick)
- return True
-
-def minalive():
- alive = [0,0]
- for a in actors:
- alive[1 * (a[3] == 0)] += 1
- return min(alive)
-
-def sumHP():
- return sum(a[2] for a in actors)
-
-def statusReport():
- global actors
- #drawMap()
- sactors = sorted(actors, key = lambda x:x[4])
- for a in sactors:
- print("HP:", a[2])
- print()
-
-def elvesAlive():
- return len([a for a in actors if a[3] == 0])
-
-def startBattle(eap):
- global actors
- setGame() # reset
- for a in actors:
- if a[3] == 0:
- a[5] = eap
-
- elfcount = elvesAlive()
-
- ticks = 0
- while minalive() > 0:
- if nextTick(ticks):
- ticks += 1
- statusReport()
- return ((sumHP() * ticks), (elfcount - elvesAlive())) # res and casualties
-
-def solve1():
- res = startBattle(3)
- print("answer:", res[0]);
-
-def solve2():
- eap = 4
- res = startBattle(eap)
- while res[1] != 0:
- eap += 1
- res = startBattle(eap)
- #print(eap)
- print("answer:",res[0])
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/16/input.txt b/src/16/input.txt deleted file mode 100644 index 71f3ecd..0000000 --- a/src/16/input.txt +++ /dev/null @@ -1,4148 +0,0 @@ -Before: [1, 1, 0, 1]
-0 1 0 1
-After: [1, 1, 0, 1]
-
-Before: [2, 2, 2, 1]
-2 1 2 2
-After: [2, 2, 1, 1]
-
-Before: [1, 3, 2, 2]
-1 2 2 0
-After: [4, 3, 2, 2]
-
-Before: [2, 2, 1, 1]
-8 0 2 1
-After: [2, 3, 1, 1]
-
-Before: [0, 1, 2, 2]
-7 3 1 1
-After: [0, 3, 2, 2]
-
-Before: [1, 2, 2, 0]
-8 2 0 1
-After: [1, 3, 2, 0]
-
-Before: [2, 2, 2, 0]
-2 1 2 0
-After: [1, 2, 2, 0]
-
-Before: [0, 1, 1, 1]
-3 1 0 1
-After: [0, 1, 1, 1]
-
-Before: [2, 3, 2, 2]
-15 1 2 2
-After: [2, 3, 6, 2]
-
-Before: [0, 3, 1, 1]
-9 0 0 3
-After: [0, 3, 1, 0]
-
-Before: [2, 0, 1, 1]
-4 2 3 2
-After: [2, 0, 0, 1]
-
-Before: [1, 1, 3, 3]
-6 0 3 3
-After: [1, 1, 3, 0]
-
-Before: [3, 2, 3, 2]
-11 1 3 3
-After: [3, 2, 3, 1]
-
-Before: [3, 2, 1, 2]
-14 3 3 1
-After: [3, 6, 1, 2]
-
-Before: [1, 0, 1, 2]
-10 1 0 1
-After: [1, 1, 1, 2]
-
-Before: [1, 2, 0, 2]
-11 1 3 2
-After: [1, 2, 1, 2]
-
-Before: [3, 3, 0, 0]
-14 0 3 2
-After: [3, 3, 9, 0]
-
-Before: [2, 0, 2, 3]
-6 0 3 1
-After: [2, 0, 2, 3]
-
-Before: [3, 2, 2, 2]
-11 1 3 1
-After: [3, 1, 2, 2]
-
-Before: [2, 2, 0, 2]
-13 1 2 1
-After: [2, 4, 0, 2]
-
-Before: [2, 2, 2, 0]
-8 3 1 3
-After: [2, 2, 2, 2]
-
-Before: [2, 3, 1, 3]
-6 0 3 2
-After: [2, 3, 0, 3]
-
-Before: [3, 3, 1, 1]
-14 1 3 1
-After: [3, 9, 1, 1]
-
-Before: [2, 2, 1, 3]
-6 0 3 2
-After: [2, 2, 0, 3]
-
-Before: [2, 3, 2, 3]
-15 3 3 0
-After: [9, 3, 2, 3]
-
-Before: [1, 0, 0, 3]
-10 1 0 1
-After: [1, 1, 0, 3]
-
-Before: [1, 3, 1, 3]
-15 1 3 3
-After: [1, 3, 1, 9]
-
-Before: [1, 1, 2, 3]
-15 1 2 3
-After: [1, 1, 2, 2]
-
-Before: [1, 1, 3, 0]
-0 1 0 0
-After: [1, 1, 3, 0]
-
-Before: [1, 2, 3, 2]
-13 3 2 2
-After: [1, 2, 4, 2]
-
-Before: [0, 1, 1, 2]
-9 0 0 0
-After: [0, 1, 1, 2]
-
-Before: [2, 2, 0, 0]
-12 1 1 3
-After: [2, 2, 0, 1]
-
-Before: [1, 0, 2, 3]
-6 0 3 2
-After: [1, 0, 0, 3]
-
-Before: [1, 1, 0, 3]
-6 0 3 3
-After: [1, 1, 0, 0]
-
-Before: [0, 2, 0, 0]
-9 0 0 2
-After: [0, 2, 0, 0]
-
-Before: [0, 2, 2, 3]
-5 0 3 0
-After: [3, 2, 2, 3]
-
-Before: [1, 0, 2, 1]
-5 1 2 3
-After: [1, 0, 2, 2]
-
-Before: [1, 1, 3, 3]
-0 1 0 2
-After: [1, 1, 1, 3]
-
-Before: [2, 0, 3, 1]
-12 2 3 0
-After: [0, 0, 3, 1]
-
-Before: [0, 3, 2, 0]
-5 0 2 0
-After: [2, 3, 2, 0]
-
-Before: [2, 1, 2, 2]
-1 2 2 0
-After: [4, 1, 2, 2]
-
-Before: [1, 2, 1, 3]
-6 0 3 2
-After: [1, 2, 0, 3]
-
-Before: [0, 2, 3, 1]
-14 1 3 2
-After: [0, 2, 6, 1]
-
-Before: [1, 3, 3, 3]
-5 0 3 2
-After: [1, 3, 3, 3]
-
-Before: [3, 1, 0, 3]
-14 3 2 3
-After: [3, 1, 0, 6]
-
-Before: [2, 0, 3, 3]
-12 3 2 0
-After: [1, 0, 3, 3]
-
-Before: [1, 2, 1, 2]
-11 1 3 3
-After: [1, 2, 1, 1]
-
-Before: [2, 1, 2, 1]
-1 0 2 1
-After: [2, 4, 2, 1]
-
-Before: [0, 1, 1, 0]
-3 1 0 1
-After: [0, 1, 1, 0]
-
-Before: [0, 2, 3, 0]
-9 0 0 2
-After: [0, 2, 0, 0]
-
-Before: [3, 1, 2, 3]
-15 2 3 3
-After: [3, 1, 2, 6]
-
-Before: [0, 1, 0, 0]
-3 1 0 0
-After: [1, 1, 0, 0]
-
-Before: [0, 0, 1, 2]
-5 2 3 2
-After: [0, 0, 3, 2]
-
-Before: [0, 2, 2, 2]
-8 0 3 1
-After: [0, 2, 2, 2]
-
-Before: [1, 2, 0, 3]
-15 0 1 0
-After: [2, 2, 0, 3]
-
-Before: [2, 1, 0, 3]
-6 0 3 2
-After: [2, 1, 0, 3]
-
-Before: [0, 2, 3, 2]
-11 1 3 1
-After: [0, 1, 3, 2]
-
-Before: [1, 1, 2, 1]
-0 1 0 1
-After: [1, 1, 2, 1]
-
-Before: [2, 2, 2, 0]
-12 1 1 1
-After: [2, 1, 2, 0]
-
-Before: [3, 1, 2, 2]
-1 2 2 2
-After: [3, 1, 4, 2]
-
-Before: [0, 1, 3, 0]
-3 1 0 3
-After: [0, 1, 3, 1]
-
-Before: [3, 0, 2, 0]
-1 2 2 2
-After: [3, 0, 4, 0]
-
-Before: [2, 3, 3, 2]
-15 1 3 2
-After: [2, 3, 6, 2]
-
-Before: [3, 0, 2, 0]
-1 2 2 0
-After: [4, 0, 2, 0]
-
-Before: [3, 2, 3, 2]
-12 1 1 0
-After: [1, 2, 3, 2]
-
-Before: [2, 3, 3, 2]
-13 0 2 0
-After: [4, 3, 3, 2]
-
-Before: [1, 0, 2, 2]
-10 1 0 0
-After: [1, 0, 2, 2]
-
-Before: [2, 0, 0, 0]
-8 1 0 1
-After: [2, 2, 0, 0]
-
-Before: [0, 2, 2, 1]
-12 2 1 0
-After: [1, 2, 2, 1]
-
-Before: [0, 3, 2, 1]
-9 0 0 3
-After: [0, 3, 2, 0]
-
-Before: [2, 2, 2, 1]
-1 0 2 1
-After: [2, 4, 2, 1]
-
-Before: [0, 1, 2, 3]
-3 1 0 2
-After: [0, 1, 1, 3]
-
-Before: [1, 1, 0, 2]
-0 1 0 0
-After: [1, 1, 0, 2]
-
-Before: [3, 2, 1, 2]
-11 1 3 0
-After: [1, 2, 1, 2]
-
-Before: [3, 1, 3, 3]
-8 1 0 0
-After: [3, 1, 3, 3]
-
-Before: [3, 1, 2, 3]
-15 0 2 2
-After: [3, 1, 6, 3]
-
-Before: [0, 2, 2, 1]
-2 1 2 3
-After: [0, 2, 2, 1]
-
-Before: [1, 1, 0, 2]
-0 1 0 3
-After: [1, 1, 0, 1]
-
-Before: [2, 2, 3, 2]
-11 1 3 0
-After: [1, 2, 3, 2]
-
-Before: [1, 1, 3, 1]
-0 1 0 2
-After: [1, 1, 1, 1]
-
-Before: [1, 2, 3, 0]
-8 3 1 0
-After: [2, 2, 3, 0]
-
-Before: [1, 0, 2, 3]
-10 1 0 0
-After: [1, 0, 2, 3]
-
-Before: [1, 3, 3, 1]
-12 1 2 1
-After: [1, 1, 3, 1]
-
-Before: [0, 1, 2, 2]
-3 1 0 0
-After: [1, 1, 2, 2]
-
-Before: [2, 2, 2, 3]
-6 0 3 2
-After: [2, 2, 0, 3]
-
-Before: [3, 2, 3, 0]
-13 1 2 0
-After: [4, 2, 3, 0]
-
-Before: [0, 1, 0, 1]
-9 0 0 2
-After: [0, 1, 0, 1]
-
-Before: [2, 3, 3, 2]
-13 3 2 1
-After: [2, 4, 3, 2]
-
-Before: [2, 2, 1, 3]
-4 1 2 2
-After: [2, 2, 1, 3]
-
-Before: [1, 3, 0, 1]
-8 0 1 2
-After: [1, 3, 3, 1]
-
-Before: [0, 1, 2, 0]
-3 1 0 1
-After: [0, 1, 2, 0]
-
-Before: [0, 2, 0, 2]
-11 1 3 1
-After: [0, 1, 0, 2]
-
-Before: [3, 2, 3, 1]
-14 2 3 3
-After: [3, 2, 3, 9]
-
-Before: [0, 1, 1, 3]
-3 1 0 0
-After: [1, 1, 1, 3]
-
-Before: [2, 2, 2, 1]
-2 1 2 0
-After: [1, 2, 2, 1]
-
-Before: [0, 2, 1, 2]
-4 3 3 3
-After: [0, 2, 1, 0]
-
-Before: [0, 1, 1, 2]
-7 3 1 3
-After: [0, 1, 1, 3]
-
-Before: [1, 0, 1, 0]
-10 1 0 0
-After: [1, 0, 1, 0]
-
-Before: [3, 2, 2, 1]
-12 1 1 3
-After: [3, 2, 2, 1]
-
-Before: [0, 1, 0, 0]
-9 0 0 2
-After: [0, 1, 0, 0]
-
-Before: [2, 2, 2, 1]
-2 1 2 1
-After: [2, 1, 2, 1]
-
-Before: [1, 3, 0, 3]
-2 1 3 0
-After: [1, 3, 0, 3]
-
-Before: [1, 1, 2, 2]
-0 1 0 2
-After: [1, 1, 1, 2]
-
-Before: [0, 2, 0, 2]
-11 1 3 3
-After: [0, 2, 0, 1]
-
-Before: [0, 2, 3, 2]
-11 1 3 0
-After: [1, 2, 3, 2]
-
-Before: [2, 3, 2, 1]
-7 3 2 0
-After: [3, 3, 2, 1]
-
-Before: [2, 1, 1, 3]
-14 3 2 0
-After: [6, 1, 1, 3]
-
-Before: [1, 1, 3, 2]
-0 1 0 0
-After: [1, 1, 3, 2]
-
-Before: [2, 2, 2, 3]
-1 0 2 2
-After: [2, 2, 4, 3]
-
-Before: [1, 1, 0, 3]
-0 1 0 3
-After: [1, 1, 0, 1]
-
-Before: [1, 0, 3, 0]
-10 1 0 2
-After: [1, 0, 1, 0]
-
-Before: [0, 2, 0, 2]
-11 1 3 2
-After: [0, 2, 1, 2]
-
-Before: [1, 3, 2, 1]
-7 3 2 0
-After: [3, 3, 2, 1]
-
-Before: [2, 2, 1, 0]
-14 0 3 2
-After: [2, 2, 6, 0]
-
-Before: [0, 1, 0, 0]
-5 0 1 3
-After: [0, 1, 0, 1]
-
-Before: [0, 2, 2, 3]
-15 2 3 0
-After: [6, 2, 2, 3]
-
-Before: [3, 3, 0, 3]
-15 0 3 0
-After: [9, 3, 0, 3]
-
-Before: [0, 3, 3, 0]
-14 2 3 0
-After: [9, 3, 3, 0]
-
-Before: [0, 1, 1, 2]
-7 3 1 2
-After: [0, 1, 3, 2]
-
-Before: [1, 3, 1, 3]
-2 1 3 0
-After: [1, 3, 1, 3]
-
-Before: [1, 0, 3, 3]
-10 1 0 2
-After: [1, 0, 1, 3]
-
-Before: [0, 1, 3, 2]
-3 1 0 3
-After: [0, 1, 3, 1]
-
-Before: [0, 1, 3, 1]
-3 1 0 2
-After: [0, 1, 1, 1]
-
-Before: [1, 1, 2, 0]
-0 1 0 1
-After: [1, 1, 2, 0]
-
-Before: [0, 3, 0, 2]
-15 1 3 3
-After: [0, 3, 0, 6]
-
-Before: [0, 2, 1, 1]
-4 1 2 2
-After: [0, 2, 1, 1]
-
-Before: [0, 2, 2, 1]
-4 3 3 0
-After: [0, 2, 2, 1]
-
-Before: [1, 2, 1, 2]
-8 1 0 1
-After: [1, 3, 1, 2]
-
-Before: [1, 2, 2, 0]
-15 0 2 1
-After: [1, 2, 2, 0]
-
-Before: [2, 2, 3, 1]
-4 3 3 1
-After: [2, 0, 3, 1]
-
-Before: [1, 2, 1, 0]
-8 3 1 3
-After: [1, 2, 1, 2]
-
-Before: [3, 0, 2, 2]
-8 1 0 2
-After: [3, 0, 3, 2]
-
-Before: [0, 0, 2, 0]
-9 0 0 2
-After: [0, 0, 0, 0]
-
-Before: [1, 2, 2, 3]
-4 1 0 2
-After: [1, 2, 1, 3]
-
-Before: [2, 1, 2, 2]
-1 3 2 1
-After: [2, 4, 2, 2]
-
-Before: [2, 3, 0, 3]
-2 1 3 1
-After: [2, 1, 0, 3]
-
-Before: [1, 2, 0, 2]
-11 1 3 1
-After: [1, 1, 0, 2]
-
-Before: [3, 1, 0, 2]
-7 3 1 1
-After: [3, 3, 0, 2]
-
-Before: [0, 2, 2, 3]
-1 1 2 3
-After: [0, 2, 2, 4]
-
-Before: [1, 2, 3, 3]
-6 0 3 0
-After: [0, 2, 3, 3]
-
-Before: [2, 0, 2, 1]
-7 3 2 0
-After: [3, 0, 2, 1]
-
-Before: [0, 2, 2, 2]
-8 0 3 2
-After: [0, 2, 2, 2]
-
-Before: [1, 0, 3, 1]
-10 1 0 2
-After: [1, 0, 1, 1]
-
-Before: [0, 1, 2, 1]
-4 3 3 2
-After: [0, 1, 0, 1]
-
-Before: [0, 2, 2, 0]
-2 1 2 3
-After: [0, 2, 2, 1]
-
-Before: [0, 0, 2, 2]
-5 1 2 0
-After: [2, 0, 2, 2]
-
-Before: [1, 0, 0, 3]
-10 1 0 3
-After: [1, 0, 0, 1]
-
-Before: [1, 0, 3, 1]
-10 1 0 3
-After: [1, 0, 3, 1]
-
-Before: [0, 0, 3, 2]
-9 0 0 3
-After: [0, 0, 3, 0]
-
-Before: [1, 0, 1, 3]
-10 1 0 2
-After: [1, 0, 1, 3]
-
-Before: [3, 2, 3, 2]
-4 3 3 2
-After: [3, 2, 0, 2]
-
-Before: [0, 1, 1, 3]
-3 1 0 2
-After: [0, 1, 1, 3]
-
-Before: [1, 2, 3, 3]
-4 1 0 1
-After: [1, 1, 3, 3]
-
-Before: [0, 0, 0, 2]
-9 0 0 1
-After: [0, 0, 0, 2]
-
-Before: [1, 0, 2, 1]
-10 1 0 1
-After: [1, 1, 2, 1]
-
-Before: [1, 2, 3, 2]
-5 0 3 2
-After: [1, 2, 3, 2]
-
-Before: [2, 2, 3, 2]
-12 1 1 0
-After: [1, 2, 3, 2]
-
-Before: [2, 2, 2, 2]
-12 2 1 2
-After: [2, 2, 1, 2]
-
-Before: [2, 2, 2, 3]
-1 2 2 1
-After: [2, 4, 2, 3]
-
-Before: [3, 1, 3, 2]
-7 3 1 2
-After: [3, 1, 3, 2]
-
-Before: [2, 2, 0, 0]
-13 0 2 1
-After: [2, 4, 0, 0]
-
-Before: [0, 2, 1, 3]
-15 1 3 1
-After: [0, 6, 1, 3]
-
-Before: [0, 1, 1, 2]
-3 1 0 0
-After: [1, 1, 1, 2]
-
-Before: [2, 1, 0, 0]
-8 3 0 1
-After: [2, 2, 0, 0]
-
-Before: [0, 1, 3, 3]
-15 2 3 0
-After: [9, 1, 3, 3]
-
-Before: [0, 1, 1, 2]
-3 1 0 1
-After: [0, 1, 1, 2]
-
-Before: [0, 1, 1, 1]
-8 0 2 0
-After: [1, 1, 1, 1]
-
-Before: [1, 2, 2, 3]
-12 1 1 3
-After: [1, 2, 2, 1]
-
-Before: [3, 3, 1, 2]
-12 1 0 1
-After: [3, 1, 1, 2]
-
-Before: [3, 0, 0, 3]
-14 3 2 2
-After: [3, 0, 6, 3]
-
-Before: [3, 3, 3, 1]
-12 2 3 3
-After: [3, 3, 3, 0]
-
-Before: [2, 3, 2, 0]
-14 2 3 1
-After: [2, 6, 2, 0]
-
-Before: [2, 3, 0, 2]
-15 1 3 2
-After: [2, 3, 6, 2]
-
-Before: [3, 2, 3, 2]
-11 1 3 1
-After: [3, 1, 3, 2]
-
-Before: [1, 2, 2, 1]
-15 3 2 1
-After: [1, 2, 2, 1]
-
-Before: [1, 2, 2, 1]
-5 0 2 1
-After: [1, 3, 2, 1]
-
-Before: [1, 2, 3, 3]
-6 0 3 2
-After: [1, 2, 0, 3]
-
-Before: [1, 2, 2, 0]
-5 0 2 2
-After: [1, 2, 3, 0]
-
-Before: [3, 0, 0, 2]
-4 3 3 1
-After: [3, 0, 0, 2]
-
-Before: [1, 2, 1, 3]
-8 1 0 2
-After: [1, 2, 3, 3]
-
-Before: [2, 0, 2, 1]
-1 2 2 1
-After: [2, 4, 2, 1]
-
-Before: [2, 1, 2, 3]
-1 2 2 3
-After: [2, 1, 2, 4]
-
-Before: [1, 1, 0, 1]
-14 3 2 1
-After: [1, 2, 0, 1]
-
-Before: [1, 0, 2, 1]
-1 2 2 1
-After: [1, 4, 2, 1]
-
-Before: [2, 2, 0, 3]
-15 0 3 3
-After: [2, 2, 0, 6]
-
-Before: [3, 0, 2, 2]
-1 3 2 0
-After: [4, 0, 2, 2]
-
-Before: [2, 2, 3, 2]
-13 3 2 1
-After: [2, 4, 3, 2]
-
-Before: [1, 1, 2, 1]
-0 1 0 2
-After: [1, 1, 1, 1]
-
-Before: [0, 2, 3, 2]
-11 1 3 2
-After: [0, 2, 1, 2]
-
-Before: [2, 1, 1, 2]
-7 3 1 0
-After: [3, 1, 1, 2]
-
-Before: [3, 0, 2, 0]
-14 2 3 3
-After: [3, 0, 2, 6]
-
-Before: [2, 2, 0, 2]
-14 0 3 3
-After: [2, 2, 0, 6]
-
-Before: [0, 0, 3, 2]
-9 0 0 0
-After: [0, 0, 3, 2]
-
-Before: [1, 1, 3, 1]
-0 1 0 1
-After: [1, 1, 3, 1]
-
-Before: [1, 1, 1, 1]
-0 1 0 1
-After: [1, 1, 1, 1]
-
-Before: [1, 0, 2, 0]
-10 1 0 1
-After: [1, 1, 2, 0]
-
-Before: [1, 1, 0, 3]
-0 1 0 0
-After: [1, 1, 0, 3]
-
-Before: [0, 1, 0, 2]
-13 3 2 1
-After: [0, 4, 0, 2]
-
-Before: [2, 1, 0, 0]
-14 1 2 3
-After: [2, 1, 0, 2]
-
-Before: [3, 3, 2, 2]
-4 3 3 1
-After: [3, 0, 2, 2]
-
-Before: [0, 2, 0, 0]
-12 1 1 3
-After: [0, 2, 0, 1]
-
-Before: [1, 0, 2, 1]
-1 2 2 2
-After: [1, 0, 4, 1]
-
-Before: [0, 1, 2, 1]
-9 0 0 2
-After: [0, 1, 0, 1]
-
-Before: [1, 1, 3, 2]
-0 1 0 2
-After: [1, 1, 1, 2]
-
-Before: [3, 0, 3, 2]
-15 0 3 0
-After: [6, 0, 3, 2]
-
-Before: [2, 1, 2, 0]
-5 3 2 0
-After: [2, 1, 2, 0]
-
-Before: [3, 2, 2, 2]
-1 2 2 2
-After: [3, 2, 4, 2]
-
-Before: [1, 1, 0, 0]
-0 1 0 3
-After: [1, 1, 0, 1]
-
-Before: [1, 2, 0, 3]
-12 1 1 2
-After: [1, 2, 1, 3]
-
-Before: [2, 2, 2, 0]
-1 0 2 1
-After: [2, 4, 2, 0]
-
-Before: [0, 2, 1, 3]
-8 0 2 2
-After: [0, 2, 1, 3]
-
-Before: [3, 2, 0, 0]
-14 1 3 1
-After: [3, 6, 0, 0]
-
-Before: [0, 2, 2, 3]
-15 3 3 3
-After: [0, 2, 2, 9]
-
-Before: [1, 0, 3, 2]
-10 1 0 0
-After: [1, 0, 3, 2]
-
-Before: [1, 2, 2, 0]
-2 1 2 2
-After: [1, 2, 1, 0]
-
-Before: [0, 0, 3, 3]
-9 0 0 1
-After: [0, 0, 3, 3]
-
-Before: [0, 1, 2, 3]
-3 1 0 1
-After: [0, 1, 2, 3]
-
-Before: [1, 0, 1, 1]
-10 1 0 3
-After: [1, 0, 1, 1]
-
-Before: [2, 0, 2, 3]
-6 0 3 0
-After: [0, 0, 2, 3]
-
-Before: [0, 2, 3, 0]
-13 1 2 1
-After: [0, 4, 3, 0]
-
-Before: [0, 1, 3, 2]
-3 1 0 1
-After: [0, 1, 3, 2]
-
-Before: [1, 1, 0, 3]
-6 0 3 0
-After: [0, 1, 0, 3]
-
-Before: [3, 2, 0, 1]
-13 1 2 0
-After: [4, 2, 0, 1]
-
-Before: [2, 1, 3, 1]
-5 0 1 2
-After: [2, 1, 3, 1]
-
-Before: [1, 1, 3, 2]
-0 1 0 1
-After: [1, 1, 3, 2]
-
-Before: [2, 0, 0, 3]
-6 0 3 0
-After: [0, 0, 0, 3]
-
-Before: [1, 2, 1, 0]
-13 1 2 1
-After: [1, 4, 1, 0]
-
-Before: [2, 2, 1, 2]
-11 1 3 3
-After: [2, 2, 1, 1]
-
-Before: [0, 1, 2, 3]
-5 1 3 3
-After: [0, 1, 2, 3]
-
-Before: [2, 0, 3, 3]
-6 0 3 2
-After: [2, 0, 0, 3]
-
-Before: [2, 2, 1, 0]
-12 1 0 0
-After: [1, 2, 1, 0]
-
-Before: [2, 2, 2, 2]
-11 1 3 0
-After: [1, 2, 2, 2]
-
-Before: [1, 1, 0, 1]
-0 1 0 0
-After: [1, 1, 0, 1]
-
-Before: [0, 2, 2, 2]
-11 1 3 0
-After: [1, 2, 2, 2]
-
-Before: [2, 2, 0, 2]
-11 1 3 3
-After: [2, 2, 0, 1]
-
-Before: [2, 2, 2, 0]
-2 1 2 2
-After: [2, 2, 1, 0]
-
-Before: [3, 1, 1, 2]
-7 3 1 3
-After: [3, 1, 1, 3]
-
-Before: [0, 2, 1, 3]
-9 0 0 0
-After: [0, 2, 1, 3]
-
-Before: [0, 2, 2, 2]
-11 1 3 3
-After: [0, 2, 2, 1]
-
-Before: [3, 3, 3, 1]
-7 3 2 2
-After: [3, 3, 3, 1]
-
-Before: [2, 0, 3, 3]
-6 0 3 1
-After: [2, 0, 3, 3]
-
-Before: [0, 0, 2, 3]
-5 1 3 1
-After: [0, 3, 2, 3]
-
-Before: [3, 3, 2, 0]
-5 3 2 2
-After: [3, 3, 2, 0]
-
-Before: [3, 1, 2, 0]
-14 2 3 3
-After: [3, 1, 2, 6]
-
-Before: [1, 1, 2, 0]
-1 2 2 2
-After: [1, 1, 4, 0]
-
-Before: [1, 3, 1, 1]
-4 2 3 1
-After: [1, 0, 1, 1]
-
-Before: [1, 1, 2, 3]
-0 1 0 1
-After: [1, 1, 2, 3]
-
-Before: [3, 3, 3, 2]
-15 2 3 0
-After: [6, 3, 3, 2]
-
-Before: [1, 1, 0, 1]
-0 1 0 3
-After: [1, 1, 0, 1]
-
-Before: [2, 1, 1, 1]
-13 0 2 1
-After: [2, 4, 1, 1]
-
-Before: [3, 3, 2, 1]
-1 2 2 1
-After: [3, 4, 2, 1]
-
-Before: [0, 2, 2, 3]
-2 1 2 3
-After: [0, 2, 2, 1]
-
-Before: [2, 0, 1, 3]
-6 0 3 2
-After: [2, 0, 0, 3]
-
-Before: [1, 3, 3, 3]
-6 0 3 2
-After: [1, 3, 0, 3]
-
-Before: [0, 1, 0, 2]
-7 3 1 3
-After: [0, 1, 0, 3]
-
-Before: [0, 2, 2, 1]
-12 2 1 2
-After: [0, 2, 1, 1]
-
-Before: [1, 3, 2, 3]
-6 0 3 1
-After: [1, 0, 2, 3]
-
-Before: [1, 3, 1, 3]
-15 1 3 2
-After: [1, 3, 9, 3]
-
-Before: [0, 3, 2, 2]
-1 2 2 1
-After: [0, 4, 2, 2]
-
-Before: [3, 3, 2, 3]
-2 1 3 2
-After: [3, 3, 1, 3]
-
-Before: [0, 0, 2, 3]
-5 0 2 0
-After: [2, 0, 2, 3]
-
-Before: [3, 0, 2, 3]
-15 2 3 0
-After: [6, 0, 2, 3]
-
-Before: [2, 3, 0, 3]
-14 3 2 1
-After: [2, 6, 0, 3]
-
-Before: [2, 0, 2, 1]
-1 0 2 2
-After: [2, 0, 4, 1]
-
-Before: [0, 1, 3, 1]
-9 0 0 2
-After: [0, 1, 0, 1]
-
-Before: [1, 2, 2, 2]
-2 1 2 3
-After: [1, 2, 2, 1]
-
-Before: [0, 0, 3, 1]
-9 0 0 0
-After: [0, 0, 3, 1]
-
-Before: [0, 1, 3, 3]
-3 1 0 2
-After: [0, 1, 1, 3]
-
-Before: [2, 1, 2, 3]
-12 2 0 0
-After: [1, 1, 2, 3]
-
-Before: [1, 2, 3, 2]
-11 1 3 2
-After: [1, 2, 1, 2]
-
-Before: [3, 2, 0, 2]
-11 1 3 3
-After: [3, 2, 0, 1]
-
-Before: [2, 1, 2, 2]
-12 2 0 1
-After: [2, 1, 2, 2]
-
-Before: [0, 1, 0, 2]
-13 3 2 2
-After: [0, 1, 4, 2]
-
-Before: [0, 1, 1, 0]
-9 0 0 3
-After: [0, 1, 1, 0]
-
-Before: [2, 1, 1, 3]
-5 1 3 1
-After: [2, 3, 1, 3]
-
-Before: [0, 2, 2, 2]
-1 2 2 1
-After: [0, 4, 2, 2]
-
-Before: [0, 1, 1, 2]
-5 0 1 2
-After: [0, 1, 1, 2]
-
-Before: [1, 1, 1, 2]
-0 1 0 1
-After: [1, 1, 1, 2]
-
-Before: [3, 3, 1, 2]
-12 1 0 0
-After: [1, 3, 1, 2]
-
-Before: [3, 2, 1, 0]
-14 0 3 0
-After: [9, 2, 1, 0]
-
-Before: [2, 2, 1, 1]
-15 3 1 0
-After: [2, 2, 1, 1]
-
-Before: [1, 3, 2, 1]
-7 3 2 2
-After: [1, 3, 3, 1]
-
-Before: [0, 2, 0, 0]
-9 0 0 3
-After: [0, 2, 0, 0]
-
-Before: [1, 2, 1, 3]
-4 1 0 1
-After: [1, 1, 1, 3]
-
-Before: [1, 1, 3, 2]
-15 2 3 1
-After: [1, 6, 3, 2]
-
-Before: [2, 3, 3, 1]
-7 3 2 0
-After: [3, 3, 3, 1]
-
-Before: [0, 1, 2, 2]
-5 0 1 0
-After: [1, 1, 2, 2]
-
-Before: [3, 1, 0, 2]
-7 3 1 0
-After: [3, 1, 0, 2]
-
-Before: [1, 3, 3, 3]
-15 2 3 3
-After: [1, 3, 3, 9]
-
-Before: [3, 2, 2, 3]
-15 3 3 1
-After: [3, 9, 2, 3]
-
-Before: [0, 0, 0, 2]
-9 0 0 2
-After: [0, 0, 0, 2]
-
-Before: [2, 1, 3, 0]
-5 1 2 3
-After: [2, 1, 3, 3]
-
-Before: [3, 0, 2, 1]
-1 2 2 0
-After: [4, 0, 2, 1]
-
-Before: [1, 0, 2, 3]
-10 1 0 3
-After: [1, 0, 2, 1]
-
-Before: [0, 3, 1, 2]
-14 3 3 2
-After: [0, 3, 6, 2]
-
-Before: [0, 3, 3, 3]
-2 1 3 2
-After: [0, 3, 1, 3]
-
-Before: [0, 2, 2, 0]
-5 3 2 3
-After: [0, 2, 2, 2]
-
-Before: [1, 1, 2, 1]
-5 2 1 0
-After: [3, 1, 2, 1]
-
-Before: [1, 2, 0, 2]
-11 1 3 3
-After: [1, 2, 0, 1]
-
-Before: [3, 0, 2, 1]
-7 3 2 3
-After: [3, 0, 2, 3]
-
-Before: [0, 2, 1, 3]
-9 0 0 2
-After: [0, 2, 0, 3]
-
-Before: [2, 2, 2, 2]
-11 1 3 3
-After: [2, 2, 2, 1]
-
-Before: [1, 3, 2, 3]
-1 2 2 0
-After: [4, 3, 2, 3]
-
-Before: [1, 3, 1, 3]
-2 1 3 2
-After: [1, 3, 1, 3]
-
-Before: [0, 1, 2, 3]
-5 0 3 1
-After: [0, 3, 2, 3]
-
-Before: [2, 2, 1, 2]
-11 1 3 1
-After: [2, 1, 1, 2]
-
-Before: [1, 0, 3, 1]
-7 3 2 0
-After: [3, 0, 3, 1]
-
-Before: [1, 2, 1, 3]
-6 0 3 0
-After: [0, 2, 1, 3]
-
-Before: [3, 2, 2, 2]
-2 1 2 0
-After: [1, 2, 2, 2]
-
-Before: [3, 0, 0, 3]
-5 1 3 0
-After: [3, 0, 0, 3]
-
-Before: [2, 3, 3, 3]
-6 0 3 2
-After: [2, 3, 0, 3]
-
-Before: [1, 2, 3, 2]
-11 1 3 0
-After: [1, 2, 3, 2]
-
-Before: [2, 3, 3, 3]
-6 0 3 1
-After: [2, 0, 3, 3]
-
-Before: [2, 1, 0, 3]
-6 0 3 0
-After: [0, 1, 0, 3]
-
-Before: [3, 2, 3, 1]
-4 3 3 1
-After: [3, 0, 3, 1]
-
-Before: [1, 2, 2, 3]
-1 2 2 1
-After: [1, 4, 2, 3]
-
-Before: [0, 2, 0, 2]
-12 1 1 2
-After: [0, 2, 1, 2]
-
-Before: [3, 3, 1, 3]
-2 1 3 3
-After: [3, 3, 1, 1]
-
-Before: [1, 1, 2, 2]
-5 1 2 2
-After: [1, 1, 3, 2]
-
-Before: [0, 0, 2, 2]
-5 0 2 3
-After: [0, 0, 2, 2]
-
-Before: [0, 1, 3, 1]
-9 0 0 0
-After: [0, 1, 3, 1]
-
-Before: [0, 1, 0, 0]
-3 1 0 1
-After: [0, 1, 0, 0]
-
-Before: [1, 0, 0, 1]
-10 1 0 1
-After: [1, 1, 0, 1]
-
-Before: [1, 1, 1, 3]
-0 1 0 0
-After: [1, 1, 1, 3]
-
-Before: [0, 2, 2, 2]
-4 3 3 1
-After: [0, 0, 2, 2]
-
-Before: [1, 2, 1, 0]
-8 2 1 0
-After: [3, 2, 1, 0]
-
-Before: [0, 1, 2, 1]
-3 1 0 3
-After: [0, 1, 2, 1]
-
-Before: [1, 0, 2, 1]
-10 1 0 3
-After: [1, 0, 2, 1]
-
-Before: [1, 1, 3, 1]
-5 0 2 1
-After: [1, 3, 3, 1]
-
-Before: [2, 3, 2, 1]
-4 3 3 2
-After: [2, 3, 0, 1]
-
-Before: [3, 3, 0, 3]
-12 1 0 1
-After: [3, 1, 0, 3]
-
-Before: [3, 3, 1, 3]
-8 2 0 3
-After: [3, 3, 1, 3]
-
-Before: [1, 3, 3, 1]
-7 3 2 2
-After: [1, 3, 3, 1]
-
-Before: [3, 0, 3, 1]
-4 3 3 0
-After: [0, 0, 3, 1]
-
-Before: [1, 3, 2, 3]
-15 3 2 3
-After: [1, 3, 2, 6]
-
-Before: [3, 2, 2, 0]
-2 1 2 2
-After: [3, 2, 1, 0]
-
-Before: [3, 1, 2, 1]
-4 3 3 1
-After: [3, 0, 2, 1]
-
-Before: [2, 3, 1, 3]
-2 1 3 3
-After: [2, 3, 1, 1]
-
-Before: [2, 2, 0, 3]
-6 0 3 1
-After: [2, 0, 0, 3]
-
-Before: [2, 3, 2, 2]
-1 0 2 0
-After: [4, 3, 2, 2]
-
-Before: [0, 1, 3, 3]
-5 0 3 3
-After: [0, 1, 3, 3]
-
-Before: [2, 0, 3, 3]
-12 3 2 2
-After: [2, 0, 1, 3]
-
-Before: [1, 1, 3, 2]
-13 3 2 2
-After: [1, 1, 4, 2]
-
-Before: [1, 3, 3, 3]
-2 1 3 2
-After: [1, 3, 1, 3]
-
-Before: [3, 2, 2, 2]
-14 0 3 1
-After: [3, 9, 2, 2]
-
-Before: [1, 0, 3, 2]
-8 1 3 2
-After: [1, 0, 2, 2]
-
-Before: [0, 3, 3, 3]
-9 0 0 2
-After: [0, 3, 0, 3]
-
-Before: [3, 2, 0, 1]
-4 3 3 0
-After: [0, 2, 0, 1]
-
-Before: [3, 0, 3, 2]
-4 3 3 0
-After: [0, 0, 3, 2]
-
-Before: [3, 0, 3, 2]
-8 1 2 1
-After: [3, 3, 3, 2]
-
-Before: [0, 2, 1, 1]
-8 0 3 0
-After: [1, 2, 1, 1]
-
-Before: [2, 2, 2, 0]
-1 1 2 1
-After: [2, 4, 2, 0]
-
-Before: [2, 2, 1, 3]
-13 0 2 1
-After: [2, 4, 1, 3]
-
-Before: [0, 1, 3, 1]
-3 1 0 0
-After: [1, 1, 3, 1]
-
-Before: [0, 1, 2, 2]
-3 1 0 3
-After: [0, 1, 2, 1]
-
-Before: [1, 2, 2, 3]
-6 0 3 1
-After: [1, 0, 2, 3]
-
-Before: [3, 2, 0, 3]
-12 1 1 2
-After: [3, 2, 1, 3]
-
-Before: [2, 3, 1, 1]
-13 0 2 0
-After: [4, 3, 1, 1]
-
-Before: [2, 1, 1, 0]
-5 0 1 1
-After: [2, 3, 1, 0]
-
-Before: [3, 3, 2, 3]
-15 3 2 3
-After: [3, 3, 2, 6]
-
-Before: [0, 1, 0, 3]
-3 1 0 3
-After: [0, 1, 0, 1]
-
-Before: [1, 0, 3, 2]
-14 2 3 1
-After: [1, 9, 3, 2]
-
-Before: [0, 2, 3, 1]
-7 3 2 0
-After: [3, 2, 3, 1]
-
-Before: [2, 3, 0, 2]
-14 1 2 2
-After: [2, 3, 6, 2]
-
-Before: [2, 2, 3, 1]
-7 3 2 0
-After: [3, 2, 3, 1]
-
-Before: [0, 3, 3, 3]
-12 3 2 2
-After: [0, 3, 1, 3]
-
-Before: [0, 2, 2, 2]
-9 0 0 2
-After: [0, 2, 0, 2]
-
-Before: [0, 3, 1, 0]
-8 0 1 2
-After: [0, 3, 3, 0]
-
-Before: [0, 3, 3, 0]
-9 0 0 0
-After: [0, 3, 3, 0]
-
-Before: [0, 3, 0, 3]
-15 3 3 1
-After: [0, 9, 0, 3]
-
-Before: [2, 1, 1, 3]
-6 0 3 2
-After: [2, 1, 0, 3]
-
-Before: [2, 0, 0, 3]
-15 3 3 1
-After: [2, 9, 0, 3]
-
-Before: [0, 1, 0, 3]
-5 0 3 2
-After: [0, 1, 3, 3]
-
-Before: [1, 2, 2, 1]
-4 1 0 0
-After: [1, 2, 2, 1]
-
-Before: [0, 2, 3, 2]
-15 2 3 0
-After: [6, 2, 3, 2]
-
-Before: [0, 2, 2, 3]
-9 0 0 1
-After: [0, 0, 2, 3]
-
-Before: [3, 3, 3, 3]
-2 1 3 1
-After: [3, 1, 3, 3]
-
-Before: [1, 0, 2, 3]
-10 1 0 1
-After: [1, 1, 2, 3]
-
-Before: [2, 1, 1, 3]
-6 0 3 1
-After: [2, 0, 1, 3]
-
-Before: [0, 2, 2, 3]
-1 2 2 1
-After: [0, 4, 2, 3]
-
-Before: [1, 1, 1, 1]
-0 1 0 2
-After: [1, 1, 1, 1]
-
-Before: [0, 0, 2, 0]
-1 2 2 1
-After: [0, 4, 2, 0]
-
-Before: [1, 3, 0, 2]
-13 3 2 3
-After: [1, 3, 0, 4]
-
-Before: [1, 1, 0, 0]
-0 1 0 2
-After: [1, 1, 1, 0]
-
-Before: [1, 1, 1, 3]
-0 1 0 2
-After: [1, 1, 1, 3]
-
-Before: [1, 0, 3, 1]
-10 1 0 0
-After: [1, 0, 3, 1]
-
-Before: [2, 2, 1, 2]
-11 1 3 0
-After: [1, 2, 1, 2]
-
-Before: [0, 1, 0, 1]
-9 0 0 3
-After: [0, 1, 0, 0]
-
-Before: [0, 2, 1, 3]
-5 2 3 2
-After: [0, 2, 3, 3]
-
-Before: [1, 2, 2, 0]
-1 1 2 3
-After: [1, 2, 2, 4]
-
-Before: [1, 1, 0, 1]
-0 1 0 2
-After: [1, 1, 1, 1]
-
-Before: [0, 1, 2, 3]
-3 1 0 0
-After: [1, 1, 2, 3]
-
-Before: [0, 0, 2, 1]
-14 2 3 1
-After: [0, 6, 2, 1]
-
-Before: [2, 1, 2, 2]
-7 3 1 3
-After: [2, 1, 2, 3]
-
-Before: [1, 3, 3, 2]
-12 1 2 0
-After: [1, 3, 3, 2]
-
-Before: [3, 2, 2, 3]
-1 2 2 2
-After: [3, 2, 4, 3]
-
-Before: [0, 3, 2, 1]
-8 0 3 2
-After: [0, 3, 1, 1]
-
-Before: [1, 1, 0, 3]
-0 1 0 2
-After: [1, 1, 1, 3]
-
-Before: [3, 2, 1, 2]
-11 1 3 2
-After: [3, 2, 1, 2]
-
-Before: [0, 2, 1, 2]
-11 1 3 1
-After: [0, 1, 1, 2]
-
-Before: [1, 2, 1, 3]
-6 0 3 1
-After: [1, 0, 1, 3]
-
-Before: [2, 2, 2, 3]
-2 1 2 2
-After: [2, 2, 1, 3]
-
-Before: [3, 2, 2, 1]
-1 1 2 1
-After: [3, 4, 2, 1]
-
-Before: [1, 0, 0, 1]
-10 1 0 3
-After: [1, 0, 0, 1]
-
-Before: [0, 1, 0, 1]
-3 1 0 3
-After: [0, 1, 0, 1]
-
-Before: [1, 1, 1, 0]
-0 1 0 3
-After: [1, 1, 1, 1]
-
-Before: [1, 1, 1, 2]
-7 3 1 3
-After: [1, 1, 1, 3]
-
-Before: [3, 3, 1, 3]
-2 1 3 0
-After: [1, 3, 1, 3]
-
-Before: [1, 0, 0, 2]
-10 1 0 0
-After: [1, 0, 0, 2]
-
-Before: [0, 2, 1, 3]
-13 1 2 3
-After: [0, 2, 1, 4]
-
-Before: [1, 0, 2, 0]
-10 1 0 3
-After: [1, 0, 2, 1]
-
-Before: [2, 3, 3, 0]
-13 0 2 3
-After: [2, 3, 3, 4]
-
-Before: [3, 1, 2, 3]
-5 1 3 3
-After: [3, 1, 2, 3]
-
-Before: [1, 1, 1, 3]
-0 1 0 1
-After: [1, 1, 1, 3]
-
-Before: [2, 1, 2, 1]
-7 3 2 3
-After: [2, 1, 2, 3]
-
-Before: [1, 0, 0, 0]
-10 1 0 0
-After: [1, 0, 0, 0]
-
-Before: [1, 1, 0, 2]
-0 1 0 1
-After: [1, 1, 0, 2]
-
-Before: [3, 1, 2, 2]
-1 2 2 0
-After: [4, 1, 2, 2]
-
-Before: [1, 1, 1, 2]
-0 1 0 3
-After: [1, 1, 1, 1]
-
-Before: [1, 2, 3, 2]
-11 1 3 1
-After: [1, 1, 3, 2]
-
-Before: [3, 0, 2, 1]
-1 2 2 3
-After: [3, 0, 2, 4]
-
-Before: [0, 1, 0, 2]
-3 1 0 1
-After: [0, 1, 0, 2]
-
-Before: [1, 0, 3, 3]
-10 1 0 3
-After: [1, 0, 3, 1]
-
-Before: [1, 3, 1, 2]
-5 0 3 2
-After: [1, 3, 3, 2]
-
-Before: [1, 0, 0, 2]
-10 1 0 2
-After: [1, 0, 1, 2]
-
-Before: [1, 1, 1, 3]
-6 0 3 3
-After: [1, 1, 1, 0]
-
-Before: [1, 2, 0, 2]
-11 1 3 0
-After: [1, 2, 0, 2]
-
-Before: [1, 2, 1, 2]
-11 1 3 1
-After: [1, 1, 1, 2]
-
-Before: [0, 0, 2, 0]
-9 0 0 3
-After: [0, 0, 2, 0]
-
-Before: [3, 2, 2, 2]
-1 3 2 2
-After: [3, 2, 4, 2]
-
-Before: [0, 1, 3, 2]
-3 1 0 2
-After: [0, 1, 1, 2]
-
-Before: [2, 2, 1, 2]
-11 1 3 2
-After: [2, 2, 1, 2]
-
-Before: [1, 3, 0, 2]
-13 3 2 0
-After: [4, 3, 0, 2]
-
-Before: [2, 1, 2, 3]
-6 0 3 2
-After: [2, 1, 0, 3]
-
-Before: [0, 2, 1, 2]
-11 1 3 2
-After: [0, 2, 1, 2]
-
-Before: [2, 2, 2, 2]
-2 1 2 1
-After: [2, 1, 2, 2]
-
-Before: [3, 0, 2, 2]
-1 2 2 3
-After: [3, 0, 2, 4]
-
-Before: [0, 0, 3, 2]
-13 3 2 0
-After: [4, 0, 3, 2]
-
-Before: [1, 2, 1, 1]
-4 1 0 1
-After: [1, 1, 1, 1]
-
-Before: [1, 0, 2, 1]
-10 1 0 0
-After: [1, 0, 2, 1]
-
-Before: [2, 0, 2, 3]
-6 0 3 3
-After: [2, 0, 2, 0]
-
-Before: [1, 2, 3, 1]
-4 3 3 3
-After: [1, 2, 3, 0]
-
-Before: [1, 1, 1, 2]
-5 2 3 2
-After: [1, 1, 3, 2]
-
-Before: [1, 2, 3, 0]
-14 1 3 1
-After: [1, 6, 3, 0]
-
-Before: [0, 0, 1, 3]
-5 2 3 0
-After: [3, 0, 1, 3]
-
-Before: [0, 0, 0, 1]
-9 0 0 0
-After: [0, 0, 0, 1]
-
-Before: [2, 1, 3, 1]
-5 0 1 3
-After: [2, 1, 3, 3]
-
-Before: [2, 1, 2, 3]
-6 0 3 3
-After: [2, 1, 2, 0]
-
-Before: [2, 3, 1, 3]
-2 1 3 1
-After: [2, 1, 1, 3]
-
-Before: [1, 2, 1, 2]
-4 3 3 3
-After: [1, 2, 1, 0]
-
-Before: [2, 2, 3, 2]
-11 1 3 1
-After: [2, 1, 3, 2]
-
-Before: [2, 3, 3, 3]
-13 0 2 1
-After: [2, 4, 3, 3]
-
-Before: [1, 3, 2, 3]
-6 0 3 2
-After: [1, 3, 0, 3]
-
-Before: [2, 2, 1, 1]
-4 1 2 0
-After: [1, 2, 1, 1]
-
-Before: [1, 0, 3, 3]
-5 1 3 2
-After: [1, 0, 3, 3]
-
-Before: [3, 3, 2, 1]
-7 3 2 1
-After: [3, 3, 2, 1]
-
-Before: [1, 0, 2, 2]
-10 1 0 1
-After: [1, 1, 2, 2]
-
-Before: [2, 1, 1, 3]
-13 0 2 0
-After: [4, 1, 1, 3]
-
-Before: [1, 1, 0, 0]
-0 1 0 0
-After: [1, 1, 0, 0]
-
-Before: [2, 2, 2, 0]
-2 1 2 1
-After: [2, 1, 2, 0]
-
-Before: [0, 1, 1, 0]
-3 1 0 2
-After: [0, 1, 1, 0]
-
-Before: [1, 1, 2, 2]
-1 3 2 3
-After: [1, 1, 2, 4]
-
-Before: [2, 2, 1, 2]
-13 3 2 0
-After: [4, 2, 1, 2]
-
-Before: [0, 1, 0, 0]
-9 0 0 1
-After: [0, 0, 0, 0]
-
-Before: [1, 3, 1, 1]
-14 1 2 2
-After: [1, 3, 6, 1]
-
-Before: [1, 3, 0, 3]
-6 0 3 1
-After: [1, 0, 0, 3]
-
-Before: [1, 2, 2, 2]
-11 1 3 1
-After: [1, 1, 2, 2]
-
-Before: [1, 2, 0, 1]
-12 1 1 2
-After: [1, 2, 1, 1]
-
-Before: [3, 3, 2, 2]
-4 3 3 0
-After: [0, 3, 2, 2]
-
-Before: [0, 0, 0, 2]
-4 3 3 3
-After: [0, 0, 0, 0]
-
-Before: [1, 1, 2, 0]
-0 1 0 2
-After: [1, 1, 1, 0]
-
-Before: [3, 0, 2, 1]
-7 3 2 2
-After: [3, 0, 3, 1]
-
-Before: [3, 1, 2, 1]
-7 3 2 1
-After: [3, 3, 2, 1]
-
-Before: [0, 0, 2, 2]
-1 3 2 2
-After: [0, 0, 4, 2]
-
-Before: [0, 1, 3, 1]
-3 1 0 3
-After: [0, 1, 3, 1]
-
-Before: [1, 3, 2, 2]
-14 3 3 3
-After: [1, 3, 2, 6]
-
-Before: [1, 3, 3, 0]
-8 0 1 0
-After: [3, 3, 3, 0]
-
-Before: [1, 3, 2, 3]
-1 2 2 1
-After: [1, 4, 2, 3]
-
-Before: [0, 1, 3, 2]
-7 3 1 3
-After: [0, 1, 3, 3]
-
-Before: [3, 3, 2, 2]
-15 1 2 2
-After: [3, 3, 6, 2]
-
-Before: [0, 3, 3, 1]
-7 3 2 3
-After: [0, 3, 3, 3]
-
-Before: [2, 3, 3, 3]
-2 1 3 1
-After: [2, 1, 3, 3]
-
-Before: [1, 1, 3, 1]
-14 0 2 2
-After: [1, 1, 2, 1]
-
-Before: [2, 1, 0, 3]
-8 1 0 2
-After: [2, 1, 3, 3]
-
-Before: [1, 2, 2, 0]
-2 1 2 0
-After: [1, 2, 2, 0]
-
-Before: [1, 0, 0, 0]
-10 1 0 2
-After: [1, 0, 1, 0]
-
-Before: [1, 3, 3, 3]
-2 1 3 3
-After: [1, 3, 3, 1]
-
-Before: [0, 2, 2, 1]
-1 1 2 3
-After: [0, 2, 2, 4]
-
-Before: [1, 2, 2, 3]
-6 0 3 3
-After: [1, 2, 2, 0]
-
-Before: [3, 2, 0, 2]
-11 1 3 2
-After: [3, 2, 1, 2]
-
-Before: [2, 2, 2, 2]
-1 2 2 0
-After: [4, 2, 2, 2]
-
-Before: [1, 0, 0, 1]
-4 3 3 1
-After: [1, 0, 0, 1]
-
-Before: [3, 1, 1, 2]
-4 3 3 1
-After: [3, 0, 1, 2]
-
-Before: [1, 1, 2, 3]
-6 0 3 3
-After: [1, 1, 2, 0]
-
-Before: [0, 3, 1, 3]
-9 0 0 2
-After: [0, 3, 0, 3]
-
-Before: [1, 3, 0, 0]
-8 2 1 0
-After: [3, 3, 0, 0]
-
-Before: [3, 2, 0, 2]
-13 1 2 3
-After: [3, 2, 0, 4]
-
-Before: [0, 0, 1, 2]
-13 3 2 2
-After: [0, 0, 4, 2]
-
-Before: [0, 2, 0, 2]
-11 1 3 0
-After: [1, 2, 0, 2]
-
-Before: [0, 3, 1, 3]
-9 0 0 3
-After: [0, 3, 1, 0]
-
-Before: [2, 2, 0, 2]
-11 1 3 0
-After: [1, 2, 0, 2]
-
-Before: [0, 3, 1, 2]
-8 2 1 0
-After: [3, 3, 1, 2]
-
-Before: [0, 3, 2, 2]
-9 0 0 2
-After: [0, 3, 0, 2]
-
-Before: [3, 2, 0, 2]
-13 1 2 2
-After: [3, 2, 4, 2]
-
-Before: [0, 3, 1, 1]
-14 1 3 2
-After: [0, 3, 9, 1]
-
-Before: [2, 0, 2, 0]
-1 0 2 1
-After: [2, 4, 2, 0]
-
-Before: [3, 2, 3, 2]
-11 1 3 0
-After: [1, 2, 3, 2]
-
-Before: [0, 0, 3, 1]
-7 3 2 0
-After: [3, 0, 3, 1]
-
-Before: [2, 2, 0, 2]
-12 1 1 2
-After: [2, 2, 1, 2]
-
-Before: [0, 3, 2, 1]
-8 0 1 0
-After: [3, 3, 2, 1]
-
-Before: [2, 0, 3, 1]
-7 3 2 0
-After: [3, 0, 3, 1]
-
-Before: [0, 0, 1, 2]
-8 0 3 2
-After: [0, 0, 2, 2]
-
-Before: [1, 1, 3, 0]
-0 1 0 3
-After: [1, 1, 3, 1]
-
-Before: [1, 2, 0, 3]
-4 1 0 1
-After: [1, 1, 0, 3]
-
-Before: [1, 1, 2, 1]
-0 1 0 0
-After: [1, 1, 2, 1]
-
-Before: [2, 3, 2, 3]
-6 0 3 3
-After: [2, 3, 2, 0]
-
-Before: [2, 1, 3, 2]
-7 3 1 3
-After: [2, 1, 3, 3]
-
-Before: [1, 0, 0, 2]
-4 3 3 2
-After: [1, 0, 0, 2]
-
-Before: [0, 0, 1, 1]
-4 2 3 2
-After: [0, 0, 0, 1]
-
-Before: [1, 1, 0, 2]
-0 1 0 2
-After: [1, 1, 1, 2]
-
-Before: [0, 1, 0, 2]
-3 1 0 2
-After: [0, 1, 1, 2]
-
-Before: [2, 2, 0, 1]
-13 0 2 0
-After: [4, 2, 0, 1]
-
-Before: [2, 2, 0, 3]
-6 0 3 3
-After: [2, 2, 0, 0]
-
-Before: [0, 2, 0, 2]
-13 3 2 0
-After: [4, 2, 0, 2]
-
-Before: [2, 2, 2, 2]
-1 0 2 3
-After: [2, 2, 2, 4]
-
-Before: [1, 2, 2, 3]
-2 1 2 3
-After: [1, 2, 2, 1]
-
-Before: [1, 2, 0, 0]
-15 0 1 3
-After: [1, 2, 0, 2]
-
-Before: [2, 2, 0, 2]
-11 1 3 1
-After: [2, 1, 0, 2]
-
-Before: [1, 0, 2, 3]
-5 0 2 0
-After: [3, 0, 2, 3]
-
-Before: [1, 0, 0, 1]
-10 1 0 2
-After: [1, 0, 1, 1]
-
-Before: [3, 1, 1, 1]
-14 0 3 2
-After: [3, 1, 9, 1]
-
-Before: [0, 1, 3, 3]
-3 1 0 3
-After: [0, 1, 3, 1]
-
-Before: [2, 1, 2, 2]
-1 0 2 2
-After: [2, 1, 4, 2]
-
-Before: [0, 2, 2, 1]
-12 1 1 0
-After: [1, 2, 2, 1]
-
-Before: [1, 2, 1, 2]
-11 1 3 2
-After: [1, 2, 1, 2]
-
-Before: [0, 1, 2, 2]
-3 1 0 1
-After: [0, 1, 2, 2]
-
-Before: [2, 2, 3, 2]
-11 1 3 3
-After: [2, 2, 3, 1]
-
-Before: [0, 2, 1, 2]
-12 1 1 1
-After: [0, 1, 1, 2]
-
-Before: [2, 1, 1, 3]
-6 0 3 0
-After: [0, 1, 1, 3]
-
-Before: [1, 2, 1, 3]
-8 0 1 3
-After: [1, 2, 1, 3]
-
-Before: [0, 3, 0, 2]
-9 0 0 3
-After: [0, 3, 0, 0]
-
-Before: [0, 2, 2, 2]
-11 1 3 1
-After: [0, 1, 2, 2]
-
-Before: [0, 1, 0, 2]
-3 1 0 0
-After: [1, 1, 0, 2]
-
-Before: [2, 0, 1, 2]
-13 0 2 2
-After: [2, 0, 4, 2]
-
-Before: [1, 0, 0, 2]
-10 1 0 3
-After: [1, 0, 0, 1]
-
-Before: [3, 1, 3, 2]
-14 0 3 3
-After: [3, 1, 3, 9]
-
-Before: [2, 2, 2, 3]
-15 2 3 0
-After: [6, 2, 2, 3]
-
-Before: [1, 0, 1, 0]
-10 1 0 2
-After: [1, 0, 1, 0]
-
-Before: [0, 2, 1, 0]
-9 0 0 3
-After: [0, 2, 1, 0]
-
-Before: [1, 2, 2, 2]
-11 1 3 0
-After: [1, 2, 2, 2]
-
-Before: [1, 2, 3, 1]
-15 3 1 0
-After: [2, 2, 3, 1]
-
-Before: [0, 0, 3, 1]
-8 0 2 2
-After: [0, 0, 3, 1]
-
-Before: [2, 0, 2, 1]
-14 0 3 1
-After: [2, 6, 2, 1]
-
-Before: [0, 0, 2, 3]
-15 2 3 1
-After: [0, 6, 2, 3]
-
-Before: [1, 2, 2, 0]
-12 1 1 2
-After: [1, 2, 1, 0]
-
-Before: [2, 2, 3, 0]
-12 1 0 2
-After: [2, 2, 1, 0]
-
-Before: [3, 2, 0, 2]
-11 1 3 1
-After: [3, 1, 0, 2]
-
-Before: [2, 2, 2, 3]
-6 0 3 3
-After: [2, 2, 2, 0]
-
-Before: [0, 1, 0, 0]
-3 1 0 2
-After: [0, 1, 1, 0]
-
-Before: [0, 1, 1, 3]
-3 1 0 3
-After: [0, 1, 1, 1]
-
-Before: [2, 0, 0, 3]
-6 0 3 1
-After: [2, 0, 0, 3]
-
-Before: [3, 1, 0, 0]
-8 1 0 0
-After: [3, 1, 0, 0]
-
-Before: [0, 1, 2, 1]
-3 1 0 1
-After: [0, 1, 2, 1]
-
-Before: [1, 0, 1, 0]
-10 1 0 3
-After: [1, 0, 1, 1]
-
-Before: [0, 0, 3, 1]
-12 2 3 3
-After: [0, 0, 3, 0]
-
-Before: [0, 1, 0, 1]
-4 3 3 2
-After: [0, 1, 0, 1]
-
-Before: [1, 0, 2, 1]
-7 3 2 2
-After: [1, 0, 3, 1]
-
-Before: [1, 1, 2, 2]
-15 0 2 0
-After: [2, 1, 2, 2]
-
-Before: [3, 3, 0, 3]
-2 1 3 2
-After: [3, 3, 1, 3]
-
-Before: [1, 0, 3, 3]
-10 1 0 0
-After: [1, 0, 3, 3]
-
-Before: [1, 3, 2, 1]
-14 2 3 2
-After: [1, 3, 6, 1]
-
-Before: [0, 1, 1, 1]
-3 1 0 0
-After: [1, 1, 1, 1]
-
-Before: [3, 3, 0, 1]
-4 3 3 3
-After: [3, 3, 0, 0]
-
-Before: [3, 3, 2, 1]
-7 3 2 2
-After: [3, 3, 3, 1]
-
-Before: [3, 2, 2, 1]
-2 1 2 3
-After: [3, 2, 2, 1]
-
-Before: [1, 1, 1, 3]
-6 0 3 0
-After: [0, 1, 1, 3]
-
-Before: [3, 0, 2, 3]
-5 1 3 3
-After: [3, 0, 2, 3]
-
-Before: [2, 2, 3, 3]
-15 1 3 2
-After: [2, 2, 6, 3]
-
-Before: [1, 2, 1, 2]
-8 2 1 3
-After: [1, 2, 1, 3]
-
-Before: [0, 2, 3, 1]
-15 3 1 0
-After: [2, 2, 3, 1]
-
-Before: [3, 3, 0, 3]
-12 3 0 2
-After: [3, 3, 1, 3]
-
-Before: [2, 2, 2, 2]
-11 1 3 2
-After: [2, 2, 1, 2]
-
-Before: [3, 0, 3, 0]
-8 1 2 1
-After: [3, 3, 3, 0]
-
-Before: [1, 1, 1, 2]
-5 0 3 2
-After: [1, 1, 3, 2]
-
-Before: [0, 3, 3, 2]
-9 0 0 2
-After: [0, 3, 0, 2]
-
-Before: [0, 3, 2, 1]
-9 0 0 0
-After: [0, 3, 2, 1]
-
-Before: [1, 3, 1, 3]
-5 2 3 3
-After: [1, 3, 1, 3]
-
-Before: [2, 1, 3, 3]
-6 0 3 3
-After: [2, 1, 3, 0]
-
-Before: [0, 1, 1, 0]
-9 0 0 0
-After: [0, 1, 1, 0]
-
-Before: [1, 0, 2, 3]
-6 0 3 0
-After: [0, 0, 2, 3]
-
-Before: [3, 3, 3, 1]
-7 3 2 0
-After: [3, 3, 3, 1]
-
-Before: [0, 1, 3, 0]
-3 1 0 2
-After: [0, 1, 1, 0]
-
-Before: [1, 2, 2, 2]
-4 3 3 1
-After: [1, 0, 2, 2]
-
-Before: [3, 2, 2, 2]
-11 1 3 3
-After: [3, 2, 2, 1]
-
-Before: [0, 1, 0, 2]
-9 0 0 0
-After: [0, 1, 0, 2]
-
-Before: [1, 0, 1, 3]
-10 1 0 0
-After: [1, 0, 1, 3]
-
-Before: [3, 3, 2, 3]
-2 1 3 1
-After: [3, 1, 2, 3]
-
-Before: [2, 3, 1, 0]
-8 3 0 1
-After: [2, 2, 1, 0]
-
-Before: [1, 1, 2, 1]
-0 1 0 3
-After: [1, 1, 2, 1]
-
-Before: [3, 3, 2, 3]
-15 3 2 1
-After: [3, 6, 2, 3]
-
-Before: [0, 2, 1, 2]
-4 1 2 3
-After: [0, 2, 1, 1]
-
-Before: [2, 2, 1, 0]
-13 1 2 1
-After: [2, 4, 1, 0]
-
-Before: [1, 0, 3, 3]
-10 1 0 1
-After: [1, 1, 3, 3]
-
-Before: [3, 3, 2, 0]
-1 2 2 2
-After: [3, 3, 4, 0]
-
-Before: [1, 2, 1, 2]
-11 1 3 0
-After: [1, 2, 1, 2]
-
-Before: [1, 3, 1, 3]
-6 0 3 3
-After: [1, 3, 1, 0]
-
-Before: [3, 3, 1, 3]
-8 2 1 1
-After: [3, 3, 1, 3]
-
-Before: [1, 0, 0, 1]
-4 3 3 0
-After: [0, 0, 0, 1]
-
-Before: [1, 2, 2, 2]
-11 1 3 3
-After: [1, 2, 2, 1]
-
-Before: [3, 1, 2, 1]
-8 1 0 0
-After: [3, 1, 2, 1]
-
-Before: [3, 0, 1, 2]
-8 1 3 3
-After: [3, 0, 1, 2]
-
-Before: [1, 1, 3, 3]
-0 1 0 3
-After: [1, 1, 3, 1]
-
-Before: [0, 0, 1, 2]
-13 3 2 1
-After: [0, 4, 1, 2]
-
-Before: [2, 3, 0, 1]
-13 0 2 0
-After: [4, 3, 0, 1]
-
-Before: [1, 2, 2, 0]
-2 1 2 1
-After: [1, 1, 2, 0]
-
-Before: [2, 3, 1, 0]
-13 0 2 2
-After: [2, 3, 4, 0]
-
-Before: [0, 1, 2, 3]
-3 1 0 3
-After: [0, 1, 2, 1]
-
-Before: [2, 3, 2, 2]
-15 1 3 1
-After: [2, 6, 2, 2]
-
-Before: [0, 1, 2, 0]
-3 1 0 3
-After: [0, 1, 2, 1]
-
-Before: [1, 2, 2, 2]
-15 0 2 2
-After: [1, 2, 2, 2]
-
-Before: [1, 2, 2, 1]
-12 1 1 2
-After: [1, 2, 1, 1]
-
-Before: [0, 1, 1, 0]
-3 1 0 0
-After: [1, 1, 1, 0]
-
-Before: [3, 3, 0, 1]
-14 0 3 1
-After: [3, 9, 0, 1]
-
-Before: [1, 0, 2, 1]
-10 1 0 2
-After: [1, 0, 1, 1]
-
-Before: [0, 3, 2, 3]
-9 0 0 2
-After: [0, 3, 0, 3]
-
-Before: [0, 2, 1, 2]
-11 1 3 3
-After: [0, 2, 1, 1]
-
-Before: [2, 0, 1, 3]
-6 0 3 1
-After: [2, 0, 1, 3]
-
-Before: [1, 1, 2, 3]
-0 1 0 3
-After: [1, 1, 2, 1]
-
-Before: [3, 0, 2, 2]
-1 2 2 1
-After: [3, 4, 2, 2]
-
-Before: [1, 3, 2, 0]
-5 3 2 3
-After: [1, 3, 2, 2]
-
-Before: [3, 3, 0, 3]
-8 2 0 1
-After: [3, 3, 0, 3]
-
-Before: [0, 0, 3, 3]
-9 0 0 3
-After: [0, 0, 3, 0]
-
-Before: [0, 3, 1, 3]
-8 2 1 3
-After: [0, 3, 1, 3]
-
-Before: [1, 1, 3, 2]
-0 1 0 3
-After: [1, 1, 3, 1]
-
-Before: [1, 0, 0, 3]
-10 1 0 2
-After: [1, 0, 1, 3]
-
-Before: [2, 0, 1, 2]
-13 3 2 3
-After: [2, 0, 1, 4]
-
-Before: [3, 2, 3, 2]
-13 1 2 0
-After: [4, 2, 3, 2]
-
-Before: [0, 1, 0, 2]
-3 1 0 3
-After: [0, 1, 0, 1]
-
-Before: [1, 1, 3, 1]
-0 1 0 0
-After: [1, 1, 3, 1]
-
-Before: [0, 1, 3, 0]
-3 1 0 0
-After: [1, 1, 3, 0]
-
-Before: [0, 1, 0, 1]
-3 1 0 1
-After: [0, 1, 0, 1]
-
-Before: [3, 2, 1, 2]
-4 1 2 2
-After: [3, 2, 1, 2]
-
-Before: [1, 1, 2, 3]
-0 1 0 0
-After: [1, 1, 2, 3]
-
-Before: [3, 2, 3, 2]
-11 1 3 2
-After: [3, 2, 1, 2]
-
-Before: [0, 1, 3, 1]
-3 1 0 1
-After: [0, 1, 3, 1]
-
-Before: [1, 1, 2, 0]
-0 1 0 3
-After: [1, 1, 2, 1]
-
-Before: [0, 1, 3, 0]
-9 0 0 3
-After: [0, 1, 3, 0]
-
-Before: [2, 2, 3, 1]
-14 2 3 2
-After: [2, 2, 9, 1]
-
-Before: [0, 1, 0, 1]
-3 1 0 2
-After: [0, 1, 1, 1]
-
-Before: [3, 3, 3, 3]
-15 0 3 3
-After: [3, 3, 3, 9]
-
-Before: [2, 1, 2, 3]
-6 0 3 0
-After: [0, 1, 2, 3]
-
-Before: [0, 2, 1, 2]
-8 0 3 1
-After: [0, 2, 1, 2]
-
-Before: [0, 2, 2, 1]
-2 1 2 1
-After: [0, 1, 2, 1]
-
-Before: [1, 0, 1, 2]
-10 1 0 0
-After: [1, 0, 1, 2]
-
-Before: [1, 2, 3, 3]
-15 1 3 3
-After: [1, 2, 3, 6]
-
-Before: [2, 1, 2, 3]
-15 1 2 3
-After: [2, 1, 2, 2]
-
-Before: [1, 2, 2, 1]
-14 1 3 3
-After: [1, 2, 2, 6]
-
-Before: [1, 1, 1, 0]
-0 1 0 1
-After: [1, 1, 1, 0]
-
-Before: [3, 2, 3, 1]
-4 3 3 0
-After: [0, 2, 3, 1]
-
-Before: [0, 2, 2, 2]
-11 1 3 2
-After: [0, 2, 1, 2]
-
-Before: [2, 1, 3, 1]
-14 3 2 3
-After: [2, 1, 3, 2]
-
-Before: [0, 2, 2, 3]
-2 1 2 0
-After: [1, 2, 2, 3]
-
-Before: [0, 1, 3, 3]
-5 0 3 2
-After: [0, 1, 3, 3]
-
-Before: [0, 3, 2, 2]
-15 1 2 0
-After: [6, 3, 2, 2]
-
-Before: [2, 2, 1, 2]
-14 3 3 1
-After: [2, 6, 1, 2]
-
-Before: [2, 2, 2, 2]
-11 1 3 1
-After: [2, 1, 2, 2]
-
-Before: [3, 2, 2, 2]
-11 1 3 0
-After: [1, 2, 2, 2]
-
-Before: [1, 3, 2, 1]
-15 0 2 0
-After: [2, 3, 2, 1]
-
-Before: [1, 2, 0, 0]
-15 0 1 2
-After: [1, 2, 2, 0]
-
-Before: [1, 2, 2, 3]
-1 1 2 1
-After: [1, 4, 2, 3]
-
-Before: [3, 2, 2, 1]
-7 3 2 0
-After: [3, 2, 2, 1]
-
-Before: [3, 2, 2, 0]
-12 1 1 2
-After: [3, 2, 1, 0]
-
-Before: [1, 0, 3, 3]
-6 0 3 1
-After: [1, 0, 3, 3]
-
-Before: [2, 0, 2, 1]
-1 0 2 3
-After: [2, 0, 2, 4]
-
-Before: [2, 0, 1, 2]
-13 0 2 0
-After: [4, 0, 1, 2]
-
-Before: [2, 2, 2, 2]
-12 2 1 0
-After: [1, 2, 2, 2]
-
-Before: [2, 2, 0, 2]
-13 3 2 1
-After: [2, 4, 0, 2]
-
-Before: [3, 3, 3, 0]
-14 2 3 1
-After: [3, 9, 3, 0]
-
-Before: [3, 1, 0, 2]
-4 3 3 3
-After: [3, 1, 0, 0]
-
-Before: [0, 2, 2, 3]
-1 1 2 0
-After: [4, 2, 2, 3]
-
-Before: [0, 1, 1, 2]
-9 0 0 1
-After: [0, 0, 1, 2]
-
-Before: [3, 3, 1, 0]
-14 1 3 2
-After: [3, 3, 9, 0]
-
-Before: [2, 0, 2, 3]
-5 1 2 2
-After: [2, 0, 2, 3]
-
-Before: [1, 1, 1, 2]
-0 1 0 0
-After: [1, 1, 1, 2]
-
-Before: [3, 2, 3, 3]
-15 1 3 0
-After: [6, 2, 3, 3]
-
-Before: [1, 3, 2, 1]
-14 1 3 0
-After: [9, 3, 2, 1]
-
-Before: [2, 0, 2, 2]
-1 2 2 0
-After: [4, 0, 2, 2]
-
-Before: [0, 2, 1, 2]
-11 1 3 0
-After: [1, 2, 1, 2]
-
-Before: [0, 1, 1, 1]
-3 1 0 3
-After: [0, 1, 1, 1]
-
-Before: [1, 0, 1, 0]
-10 1 0 1
-After: [1, 1, 1, 0]
-
-Before: [1, 1, 1, 1]
-4 3 3 3
-After: [1, 1, 1, 0]
-
-Before: [3, 2, 2, 2]
-14 0 3 3
-After: [3, 2, 2, 9]
-
-Before: [0, 1, 2, 1]
-9 0 0 0
-After: [0, 1, 2, 1]
-
-Before: [2, 0, 2, 3]
-1 2 2 0
-After: [4, 0, 2, 3]
-
-Before: [1, 1, 1, 3]
-0 1 0 3
-After: [1, 1, 1, 1]
-
-Before: [0, 1, 0, 3]
-3 1 0 1
-After: [0, 1, 0, 3]
-
-Before: [2, 0, 2, 1]
-5 1 2 0
-After: [2, 0, 2, 1]
-
-Before: [1, 3, 3, 1]
-14 0 2 0
-After: [2, 3, 3, 1]
-
-Before: [1, 0, 0, 3]
-6 0 3 1
-After: [1, 0, 0, 3]
-
-Before: [2, 3, 0, 3]
-6 0 3 3
-After: [2, 3, 0, 0]
-
-Before: [0, 1, 2, 2]
-1 3 2 3
-After: [0, 1, 2, 4]
-
-Before: [3, 1, 2, 3]
-1 2 2 2
-After: [3, 1, 4, 3]
-
-Before: [3, 1, 0, 3]
-8 2 0 3
-After: [3, 1, 0, 3]
-
-Before: [3, 3, 1, 2]
-14 0 3 3
-After: [3, 3, 1, 9]
-
-Before: [3, 0, 3, 2]
-4 3 3 3
-After: [3, 0, 3, 0]
-
-Before: [2, 3, 1, 0]
-8 2 1 0
-After: [3, 3, 1, 0]
-
-Before: [0, 1, 2, 1]
-3 1 0 2
-After: [0, 1, 1, 1]
-
-Before: [0, 1, 3, 2]
-3 1 0 0
-After: [1, 1, 3, 2]
-
-Before: [1, 1, 2, 0]
-15 0 2 1
-After: [1, 2, 2, 0]
-
-Before: [0, 3, 2, 2]
-1 3 2 0
-After: [4, 3, 2, 2]
-
-Before: [1, 0, 1, 2]
-10 1 0 3
-After: [1, 0, 1, 1]
-
-Before: [0, 2, 2, 0]
-12 1 1 0
-After: [1, 2, 2, 0]
-
-Before: [1, 1, 3, 3]
-0 1 0 1
-After: [1, 1, 3, 3]
-
-Before: [1, 0, 2, 0]
-10 1 0 2
-After: [1, 0, 1, 0]
-
-Before: [2, 3, 2, 1]
-15 1 2 1
-After: [2, 6, 2, 1]
-
-Before: [1, 2, 0, 0]
-8 1 0 1
-After: [1, 3, 0, 0]
-
-Before: [3, 2, 1, 2]
-11 1 3 3
-After: [3, 2, 1, 1]
-
-Before: [1, 1, 1, 1]
-0 1 0 3
-After: [1, 1, 1, 1]
-
-Before: [2, 3, 1, 3]
-6 0 3 3
-After: [2, 3, 1, 0]
-
-Before: [0, 2, 1, 3]
-13 1 2 2
-After: [0, 2, 4, 3]
-
-Before: [1, 0, 3, 1]
-7 3 2 3
-After: [1, 0, 3, 3]
-
-Before: [2, 1, 0, 0]
-8 3 0 3
-After: [2, 1, 0, 2]
-
-Before: [1, 1, 1, 2]
-0 1 0 2
-After: [1, 1, 1, 2]
-
-Before: [3, 2, 2, 2]
-1 3 2 3
-After: [3, 2, 2, 4]
-
-Before: [3, 1, 1, 1]
-14 0 3 3
-After: [3, 1, 1, 9]
-
-Before: [2, 2, 3, 3]
-6 0 3 0
-After: [0, 2, 3, 3]
-
-Before: [0, 1, 1, 2]
-3 1 0 2
-After: [0, 1, 1, 2]
-
-Before: [3, 2, 1, 2]
-14 0 3 0
-After: [9, 2, 1, 2]
-
-Before: [2, 0, 3, 1]
-7 3 2 3
-After: [2, 0, 3, 3]
-
-Before: [1, 2, 2, 1]
-2 1 2 0
-After: [1, 2, 2, 1]
-
-Before: [0, 0, 2, 1]
-4 3 3 3
-After: [0, 0, 2, 0]
-
-Before: [3, 2, 3, 3]
-12 3 0 3
-After: [3, 2, 3, 1]
-
-Before: [1, 1, 2, 2]
-0 1 0 3
-After: [1, 1, 2, 1]
-
-Before: [2, 3, 1, 1]
-14 1 3 2
-After: [2, 3, 9, 1]
-
-Before: [1, 0, 2, 1]
-15 0 2 1
-After: [1, 2, 2, 1]
-
-Before: [0, 1, 2, 3]
-9 0 0 3
-After: [0, 1, 2, 0]
-
-Before: [3, 0, 0, 2]
-4 3 3 0
-After: [0, 0, 0, 2]
-
-Before: [3, 0, 3, 1]
-7 3 2 3
-After: [3, 0, 3, 3]
-
-Before: [3, 2, 2, 3]
-12 2 1 1
-After: [3, 1, 2, 3]
-
-Before: [0, 3, 3, 3]
-2 1 3 1
-After: [0, 1, 3, 3]
-
-Before: [1, 0, 0, 0]
-10 1 0 1
-After: [1, 1, 0, 0]
-
-Before: [1, 3, 0, 3]
-2 1 3 3
-After: [1, 3, 0, 1]
-
-Before: [3, 2, 2, 3]
-12 3 0 2
-After: [3, 2, 1, 3]
-
-Before: [1, 1, 2, 0]
-0 1 0 0
-After: [1, 1, 2, 0]
-
-Before: [0, 2, 2, 1]
-2 1 2 2
-After: [0, 2, 1, 1]
-
-Before: [1, 0, 1, 2]
-10 1 0 2
-After: [1, 0, 1, 2]
-
-Before: [1, 0, 3, 0]
-14 0 2 2
-After: [1, 0, 2, 0]
-
-Before: [0, 2, 3, 2]
-11 1 3 3
-After: [0, 2, 3, 1]
-
-Before: [0, 1, 0, 3]
-3 1 0 2
-After: [0, 1, 1, 3]
-
-Before: [3, 3, 2, 1]
-12 1 0 0
-After: [1, 3, 2, 1]
-
-Before: [0, 2, 3, 3]
-13 1 2 0
-After: [4, 2, 3, 3]
-
-Before: [1, 1, 3, 0]
-0 1 0 1
-After: [1, 1, 3, 0]
-
-Before: [1, 2, 2, 2]
-2 1 2 2
-After: [1, 2, 1, 2]
-
-Before: [2, 1, 3, 3]
-13 0 2 2
-After: [2, 1, 4, 3]
-
-Before: [1, 0, 1, 3]
-10 1 0 3
-After: [1, 0, 1, 1]
-
-Before: [2, 1, 3, 2]
-7 3 1 1
-After: [2, 3, 3, 2]
-
-Before: [1, 1, 1, 0]
-0 1 0 0
-After: [1, 1, 1, 0]
-
-Before: [0, 2, 3, 2]
-13 3 2 3
-After: [0, 2, 3, 4]
-
-Before: [3, 2, 2, 3]
-12 3 0 3
-After: [3, 2, 2, 1]
-
-Before: [2, 3, 2, 3]
-2 1 3 1
-After: [2, 1, 2, 3]
-
-Before: [2, 3, 0, 3]
-6 0 3 1
-After: [2, 0, 0, 3]
-
-Before: [2, 2, 2, 3]
-1 2 2 0
-After: [4, 2, 2, 3]
-
-Before: [3, 2, 3, 2]
-4 3 3 1
-After: [3, 0, 3, 2]
-
-Before: [0, 2, 2, 0]
-12 1 1 1
-After: [0, 1, 2, 0]
-
-Before: [2, 2, 3, 2]
-11 1 3 2
-After: [2, 2, 1, 2]
-
-Before: [3, 0, 2, 3]
-1 2 2 2
-After: [3, 0, 4, 3]
-
-Before: [0, 3, 2, 0]
-9 0 0 0
-After: [0, 3, 2, 0]
-
-Before: [0, 2, 3, 1]
-9 0 0 2
-After: [0, 2, 0, 1]
-
-Before: [0, 1, 1, 1]
-3 1 0 2
-After: [0, 1, 1, 1]
-
-Before: [2, 2, 2, 3]
-2 1 2 0
-After: [1, 2, 2, 3]
-
-Before: [0, 1, 2, 3]
-15 3 2 0
-After: [6, 1, 2, 3]
-
-Before: [1, 1, 0, 2]
-7 3 1 3
-After: [1, 1, 0, 3]
-
-Before: [1, 1, 1, 1]
-0 1 0 0
-After: [1, 1, 1, 1]
-
-Before: [1, 2, 3, 3]
-15 0 1 3
-After: [1, 2, 3, 2]
-
-Before: [0, 3, 2, 3]
-2 1 3 1
-After: [0, 1, 2, 3]
-
-Before: [0, 3, 0, 0]
-8 2 1 3
-After: [0, 3, 0, 3]
-
-Before: [2, 0, 2, 3]
-1 0 2 0
-After: [4, 0, 2, 3]
-
-Before: [0, 3, 0, 3]
-5 0 3 3
-After: [0, 3, 0, 3]
-
-Before: [0, 1, 2, 0]
-3 1 0 0
-After: [1, 1, 2, 0]
-
-
-
-7 3 2 0
-7 2 1 1
-7 1 0 3
-8 1 0 1
-14 1 2 1
-1 2 1 2
-7 3 3 1
-7 2 0 0
-14 3 0 3
-13 3 2 3
-0 1 0 1
-14 1 1 1
-1 1 2 2
-7 2 2 1
-7 3 1 0
-7 1 0 3
-1 3 3 3
-14 3 3 3
-1 2 3 2
-3 2 1 0
-14 3 0 3
-13 3 0 3
-7 2 3 2
-14 2 0 1
-13 1 0 1
-6 3 2 2
-14 2 2 2
-1 0 2 0
-7 3 1 1
-7 2 2 3
-14 3 0 2
-13 2 0 2
-7 2 1 3
-14 3 3 3
-1 0 3 0
-7 0 0 3
-14 0 0 2
-13 2 3 2
-14 0 0 1
-13 1 1 1
-10 3 2 3
-14 3 2 3
-1 0 3 0
-3 0 1 1
-7 0 1 0
-7 1 1 2
-7 3 1 3
-9 3 2 0
-14 0 1 0
-1 1 0 1
-3 1 0 3
-14 0 0 2
-13 2 2 2
-7 3 2 1
-14 2 0 0
-13 0 1 0
-3 0 2 0
-14 0 2 0
-1 0 3 3
-3 3 2 1
-7 2 1 0
-14 2 0 2
-13 2 3 2
-14 0 0 3
-13 3 2 3
-8 0 2 2
-14 2 2 2
-1 1 2 1
-14 0 0 2
-13 2 0 2
-14 1 0 3
-13 3 1 3
-15 3 0 2
-14 2 1 2
-1 2 1 1
-3 1 0 0
-14 2 0 1
-13 1 3 1
-7 2 1 3
-7 2 0 2
-5 2 3 3
-14 3 2 3
-14 3 3 3
-1 0 3 0
-3 0 0 3
-7 1 1 2
-7 2 1 1
-7 3 0 0
-8 1 0 1
-14 1 2 1
-14 1 3 1
-1 3 1 3
-3 3 0 1
-7 0 0 3
-14 1 0 0
-13 0 0 0
-7 2 2 2
-7 3 2 0
-14 0 2 0
-1 1 0 1
-7 1 1 2
-14 2 0 3
-13 3 2 3
-7 3 3 0
-9 0 2 2
-14 2 1 2
-1 2 1 1
-3 1 2 2
-14 1 0 1
-13 1 0 1
-7 1 2 0
-7 3 1 3
-13 0 1 1
-14 1 1 1
-1 2 1 2
-3 2 0 1
-7 2 0 3
-7 2 3 2
-7 2 3 0
-5 0 3 2
-14 2 2 2
-1 1 2 1
-3 1 1 0
-14 0 0 1
-13 1 2 1
-14 0 0 2
-13 2 3 2
-14 2 0 3
-13 3 3 3
-8 1 2 1
-14 1 1 1
-1 1 0 0
-3 0 0 2
-7 3 3 0
-7 2 3 3
-7 0 0 1
-0 0 3 3
-14 3 2 3
-1 3 2 2
-3 2 0 3
-14 3 0 2
-13 2 2 2
-7 1 1 1
-12 2 0 0
-14 0 2 0
-1 0 3 3
-3 3 3 1
-7 0 2 3
-7 3 0 2
-7 2 3 0
-8 0 2 3
-14 3 3 3
-1 3 1 1
-7 3 3 3
-2 0 2 2
-14 2 2 2
-14 2 1 2
-1 2 1 1
-3 1 3 3
-7 1 0 0
-7 3 2 1
-7 2 3 2
-3 0 2 1
-14 1 1 1
-14 1 3 1
-1 1 3 3
-3 3 1 0
-14 1 0 1
-13 1 0 1
-7 3 2 2
-7 0 1 3
-7 2 1 1
-14 1 1 1
-1 0 1 0
-3 0 0 1
-7 2 0 0
-7 2 2 2
-7 2 2 3
-11 0 3 2
-14 2 3 2
-1 1 2 1
-14 1 0 2
-13 2 3 2
-7 0 3 3
-2 0 2 0
-14 0 2 0
-14 0 3 0
-1 1 0 1
-3 1 2 0
-7 2 3 2
-7 3 3 1
-7 3 2 3
-12 2 1 1
-14 1 3 1
-1 1 0 0
-7 0 0 1
-7 0 2 2
-7 2 0 3
-10 2 3 2
-14 2 3 2
-1 2 0 0
-3 0 3 1
-14 3 0 0
-13 0 0 0
-7 2 2 2
-5 2 3 3
-14 3 1 3
-1 3 1 1
-3 1 2 2
-7 1 0 3
-14 0 0 1
-13 1 2 1
-7 2 1 0
-4 0 3 1
-14 1 2 1
-1 2 1 2
-3 2 3 0
-7 3 1 3
-7 3 3 1
-7 1 0 2
-9 3 2 1
-14 1 3 1
-14 1 1 1
-1 0 1 0
-3 0 0 2
-7 0 3 3
-14 2 0 1
-13 1 3 1
-7 2 2 0
-12 0 1 0
-14 0 1 0
-1 0 2 2
-14 0 0 0
-13 0 2 0
-5 0 3 0
-14 0 2 0
-1 2 0 2
-3 2 2 0
-7 2 1 3
-7 2 1 2
-12 2 1 1
-14 1 2 1
-1 0 1 0
-3 0 2 2
-7 0 3 1
-7 2 3 0
-11 0 3 0
-14 0 3 0
-14 0 2 0
-1 0 2 2
-3 2 3 1
-7 1 0 0
-7 3 2 2
-7 3 3 3
-14 0 2 2
-14 2 2 2
-1 2 1 1
-3 1 3 2
-7 1 0 3
-7 3 1 1
-7 2 0 0
-15 3 0 3
-14 3 3 3
-1 3 2 2
-3 2 3 1
-7 1 0 3
-7 1 0 0
-14 1 0 2
-13 2 2 2
-1 0 3 3
-14 3 2 3
-14 3 2 3
-1 3 1 1
-3 1 2 3
-14 0 0 2
-13 2 3 2
-7 0 3 1
-13 0 1 1
-14 1 2 1
-1 1 3 3
-3 3 2 2
-14 3 0 3
-13 3 1 3
-7 2 0 1
-7 3 3 0
-1 3 3 1
-14 1 3 1
-1 1 2 2
-3 2 1 1
-7 2 2 0
-7 0 3 3
-7 2 1 2
-6 3 2 3
-14 3 1 3
-1 3 1 1
-3 1 1 3
-7 1 1 0
-7 1 0 1
-7 3 3 2
-14 1 2 2
-14 2 3 2
-14 2 1 2
-1 2 3 3
-7 3 3 1
-7 2 2 2
-3 0 2 2
-14 2 3 2
-1 2 3 3
-3 3 2 1
-7 0 3 3
-7 2 2 2
-7 3 2 0
-12 2 0 3
-14 3 3 3
-1 1 3 1
-7 0 3 3
-7 3 0 2
-14 1 0 0
-13 0 2 0
-2 0 2 2
-14 2 2 2
-1 1 2 1
-7 3 1 3
-7 3 0 2
-0 3 0 3
-14 3 1 3
-1 3 1 1
-14 2 0 3
-13 3 1 3
-4 0 3 3
-14 3 2 3
-14 3 1 3
-1 1 3 1
-3 1 1 0
-14 1 0 2
-13 2 2 2
-7 1 2 1
-7 0 2 3
-6 3 2 3
-14 3 1 3
-1 3 0 0
-3 0 2 3
-14 3 0 1
-13 1 0 1
-7 1 3 0
-3 0 2 0
-14 0 2 0
-14 0 2 0
-1 0 3 3
-14 0 0 0
-13 0 1 0
-7 0 0 2
-14 0 2 2
-14 2 1 2
-1 3 2 3
-7 2 2 2
-3 0 2 2
-14 2 3 2
-1 3 2 3
-3 3 2 2
-7 2 1 0
-7 2 0 3
-11 0 3 3
-14 3 2 3
-1 3 2 2
-3 2 0 0
-7 2 3 1
-7 0 2 3
-7 2 1 2
-6 3 2 3
-14 3 3 3
-14 3 1 3
-1 0 3 0
-7 0 3 3
-6 3 2 2
-14 2 1 2
-1 0 2 0
-14 0 0 3
-13 3 1 3
-7 1 0 1
-7 0 2 2
-14 1 2 2
-14 2 2 2
-14 2 2 2
-1 0 2 0
-3 0 1 3
-7 2 1 0
-7 3 3 2
-14 1 2 0
-14 0 2 0
-1 3 0 3
-3 3 0 0
-14 0 0 3
-13 3 2 3
-7 0 2 2
-10 2 3 2
-14 2 1 2
-1 2 0 0
-3 0 1 1
-14 0 0 2
-13 2 3 2
-14 1 0 3
-13 3 0 3
-7 3 2 0
-7 2 0 0
-14 0 1 0
-1 0 1 1
-7 0 1 2
-7 0 0 0
-7 2 1 3
-10 2 3 3
-14 3 2 3
-1 1 3 1
-7 2 0 3
-10 2 3 0
-14 0 1 0
-1 1 0 1
-7 2 3 2
-7 0 2 3
-7 3 1 0
-8 2 0 0
-14 0 3 0
-1 1 0 1
-7 3 0 3
-14 0 0 2
-13 2 0 2
-7 1 3 0
-9 3 2 3
-14 3 1 3
-1 1 3 1
-7 0 3 3
-7 3 2 2
-7 0 1 0
-10 3 2 3
-14 3 2 3
-1 1 3 1
-3 1 3 3
-7 3 3 0
-7 1 3 1
-7 0 2 2
-2 2 0 2
-14 2 1 2
-1 3 2 3
-3 3 1 1
-7 2 3 2
-7 2 0 0
-7 0 3 3
-6 3 2 2
-14 2 2 2
-1 2 1 1
-3 1 3 2
-7 1 2 1
-7 2 3 3
-15 1 0 3
-14 3 2 3
-14 3 3 3
-1 2 3 2
-7 1 0 3
-7 2 3 1
-4 0 3 0
-14 0 2 0
-1 0 2 2
-3 2 2 0
-14 2 0 2
-13 2 1 2
-7 0 3 3
-5 1 3 3
-14 3 1 3
-1 0 3 0
-3 0 2 1
-7 2 1 0
-7 1 3 3
-15 3 0 3
-14 3 3 3
-14 3 1 3
-1 1 3 1
-3 1 3 3
-7 1 2 1
-7 0 2 2
-7 1 1 0
-14 0 2 1
-14 1 2 1
-1 1 3 3
-3 3 1 2
-7 3 0 1
-7 2 0 0
-14 2 0 3
-13 3 1 3
-13 3 1 3
-14 3 2 3
-14 3 3 3
-1 3 2 2
-3 2 2 0
-7 0 0 2
-7 3 0 3
-9 3 2 1
-14 1 2 1
-14 1 3 1
-1 0 1 0
-7 0 1 3
-7 3 3 1
-7 2 0 2
-12 2 1 3
-14 3 1 3
-14 3 1 3
-1 3 0 0
-7 1 2 3
-14 0 0 2
-13 2 3 2
-1 3 3 3
-14 3 1 3
-1 3 0 0
-3 0 0 2
-7 2 2 3
-7 2 1 0
-11 0 3 0
-14 0 3 0
-1 0 2 2
-3 2 3 3
-7 3 1 2
-7 1 3 0
-13 0 1 2
-14 2 2 2
-1 3 2 3
-7 1 0 1
-7 2 1 0
-7 1 3 2
-15 1 0 1
-14 1 1 1
-14 1 1 1
-1 1 3 3
-3 3 3 0
-7 3 1 1
-7 3 1 3
-14 2 0 2
-13 2 0 2
-9 3 2 3
-14 3 2 3
-14 3 3 3
-1 3 0 0
-3 0 1 1
-7 2 1 0
-7 1 2 2
-7 2 1 3
-11 0 3 2
-14 2 2 2
-14 2 1 2
-1 1 2 1
-7 2 0 2
-7 0 2 0
-7 1 0 3
-1 3 3 3
-14 3 1 3
-1 1 3 1
-3 1 0 0
-14 2 0 1
-13 1 3 1
-7 0 2 2
-7 1 3 3
-1 3 3 2
-14 2 1 2
-1 0 2 0
-3 0 3 2
-7 0 3 0
-7 0 3 3
-7 2 2 1
-7 3 0 3
-14 3 1 3
-14 3 3 3
-1 2 3 2
-3 2 1 1
-7 2 2 2
-7 2 0 3
-7 3 0 0
-12 2 0 0
-14 0 3 0
-14 0 1 0
-1 0 1 1
-7 1 3 2
-7 2 0 0
-7 1 3 3
-4 0 3 3
-14 3 1 3
-1 3 1 1
-14 2 0 3
-13 3 0 3
-7 3 1 0
-14 0 0 2
-13 2 2 2
-6 3 2 3
-14 3 2 3
-1 3 1 1
-3 1 2 2
-7 0 0 1
-14 3 0 3
-13 3 1 3
-7 2 2 0
-15 3 0 0
-14 0 3 0
-1 2 0 2
-3 2 2 1
-7 0 0 2
-14 3 0 0
-13 0 3 0
-9 0 2 0
-14 0 2 0
-1 0 1 1
-7 2 2 0
-7 0 3 3
-7 3 1 2
-8 0 2 2
-14 2 1 2
-14 2 3 2
-1 2 1 1
-3 1 1 0
-14 1 0 1
-13 1 3 1
-7 2 0 2
-6 3 2 2
-14 2 3 2
-1 0 2 0
-3 0 1 1
-7 1 1 3
-7 2 0 0
-7 3 1 2
-7 2 3 0
-14 0 2 0
-1 0 1 1
-7 0 0 3
-14 0 0 0
-13 0 1 0
-10 3 2 2
-14 2 1 2
-1 2 1 1
-3 1 0 0
-14 3 0 2
-13 2 0 2
-7 0 2 1
-7 2 2 3
-10 2 3 1
-14 1 1 1
-1 0 1 0
-3 0 1 1
-14 2 0 0
-13 0 2 0
-7 3 1 2
-7 1 2 3
-8 0 2 0
-14 0 3 0
-1 1 0 1
-3 1 2 2
-7 2 3 1
-7 2 1 3
-7 2 3 0
-11 0 3 1
-14 1 1 1
-1 2 1 2
-3 2 0 1
-14 2 0 2
-13 2 2 2
-14 3 0 0
-13 0 3 0
-7 0 0 3
-6 3 2 2
-14 2 1 2
-1 1 2 1
-7 0 2 0
-7 2 1 2
-7 3 0 0
-14 0 3 0
-1 0 1 1
-3 1 0 3
-7 3 1 0
-7 3 3 2
-14 0 0 1
-13 1 2 1
-8 1 0 0
-14 0 3 0
-1 3 0 3
-3 3 2 1
-7 0 2 0
-7 0 2 3
-7 2 0 2
-6 3 2 2
-14 2 2 2
-14 2 3 2
-1 2 1 1
-3 1 1 0
-7 3 3 1
-7 1 3 3
-7 0 1 2
-9 1 2 1
-14 1 2 1
-1 0 1 0
-3 0 0 3
-7 2 0 1
-7 3 2 0
-9 0 2 2
-14 2 3 2
-1 2 3 3
-14 1 0 2
-13 2 2 2
-7 1 2 1
-12 2 0 1
-14 1 3 1
-14 1 1 1
-1 1 3 3
-3 3 1 2
-7 2 0 0
-7 1 2 3
-7 1 3 1
-4 0 3 1
-14 1 2 1
-14 1 3 1
-1 1 2 2
-7 3 3 1
-7 2 2 3
-12 0 1 0
-14 0 3 0
-1 0 2 2
-3 2 2 1
-7 3 1 2
-7 3 2 0
-0 0 3 2
-14 2 3 2
-1 1 2 1
-3 1 0 0
-7 2 1 2
-7 1 2 1
-15 1 3 2
-14 2 1 2
-14 2 2 2
-1 2 0 0
-3 0 2 1
-7 1 0 3
-7 1 2 2
-7 1 1 0
-1 3 3 2
-14 2 3 2
-14 2 2 2
-1 2 1 1
-3 1 0 2
-7 0 1 0
-7 2 3 1
-1 3 3 0
-14 0 1 0
-1 0 2 2
-3 2 0 0
-7 1 1 1
-7 2 0 3
-7 3 3 2
-15 1 3 3
-14 3 3 3
-1 0 3 0
-7 2 0 2
-7 0 1 3
-7 0 3 1
-6 3 2 1
-14 1 2 1
-14 1 1 1
-1 0 1 0
-3 0 2 3
-7 3 1 2
-7 3 3 0
-7 3 2 1
-7 2 0 2
-14 2 1 2
-1 2 3 3
-7 3 2 2
-7 1 2 1
-9 0 2 0
-14 0 2 0
-14 0 3 0
-1 3 0 3
-3 3 0 1
-7 1 3 3
-14 1 0 0
-13 0 3 0
-7 2 3 2
-12 2 0 3
-14 3 3 3
-1 1 3 1
-3 1 2 0
-7 3 1 2
-7 3 0 1
-7 1 1 3
-14 3 2 3
-14 3 2 3
-14 3 1 3
-1 0 3 0
-3 0 3 1
-7 1 3 3
-7 0 2 2
-7 2 3 0
-4 0 3 2
-14 2 2 2
-1 2 1 1
-7 1 2 0
-7 2 3 3
-7 0 0 2
-10 2 3 3
-14 3 1 3
-1 3 1 1
-7 3 1 3
-7 3 2 0
-2 2 0 2
-14 2 1 2
-14 2 1 2
-1 2 1 1
-14 2 0 0
-13 0 1 0
-7 3 0 2
-7 0 2 3
-7 2 0 0
-14 0 2 0
-1 0 1 1
-3 1 0 3
-14 1 0 0
-13 0 3 0
-7 2 0 2
-7 2 2 1
-8 2 0 1
-14 1 3 1
-14 1 3 1
-1 1 3 3
-3 3 2 2
-7 2 3 0
-7 2 1 3
-7 3 3 1
-0 1 0 3
-14 3 2 3
-14 3 1 3
-1 3 2 2
-3 2 3 1
-7 0 0 2
-7 3 0 0
-7 2 2 3
-9 0 2 0
-14 0 1 0
-1 0 1 1
-7 2 3 2
-7 0 1 3
-7 0 2 0
-5 2 3 2
-14 2 2 2
-1 1 2 1
-3 1 1 2
-7 2 0 1
-5 1 3 1
-14 1 1 1
-1 2 1 2
-3 2 3 1
-7 3 0 3
-7 0 0 2
-14 2 0 0
-13 0 1 0
-14 0 2 0
-14 0 3 0
-1 1 0 1
-3 1 1 3
-7 2 2 1
-7 3 2 0
-8 1 0 1
-14 1 3 1
-1 1 3 3
-3 3 2 1
-14 2 0 3
-13 3 0 3
-14 1 0 0
-13 0 0 0
-14 0 0 2
-13 2 3 2
-10 3 2 2
-14 2 1 2
-14 2 2 2
-1 1 2 1
-3 1 3 2
-7 2 3 0
-14 2 0 3
-13 3 1 3
-7 0 1 1
-1 3 3 1
-14 1 3 1
-1 1 2 2
-3 2 2 1
-14 0 0 2
-13 2 2 2
-7 1 1 0
-7 0 0 3
-3 0 2 0
-14 0 3 0
-1 0 1 1
-3 1 1 2
-7 2 2 3
-7 2 0 0
-7 3 0 1
-5 0 3 0
-14 0 3 0
-1 2 0 2
-7 2 3 0
-14 1 0 3
-13 3 0 3
-14 1 0 1
-13 1 1 1
-15 1 0 3
-14 3 1 3
-1 3 2 2
-3 2 2 1
-7 2 1 2
-14 0 0 3
-13 3 1 3
-7 0 1 0
-7 3 0 0
-14 0 2 0
-1 0 1 1
-3 1 1 2
-7 2 1 3
-7 3 0 1
-7 2 3 0
-11 0 3 3
-14 3 3 3
-1 2 3 2
-3 2 1 1
-7 2 2 3
-7 0 1 2
-14 1 0 0
-13 0 0 0
-10 2 3 2
-14 2 1 2
-14 2 3 2
-1 2 1 1
-7 3 3 0
-7 3 0 3
-7 3 2 2
-9 3 2 2
-14 2 1 2
-1 2 1 1
-3 1 2 2
-14 0 0 1
-13 1 0 1
-7 0 0 3
-7 1 1 0
-13 0 1 0
-14 0 1 0
-14 0 2 0
-1 2 0 2
-14 2 0 0
-13 0 2 0
-7 2 3 3
-11 0 3 1
-14 1 2 1
-1 1 2 2
-3 2 1 1
-7 3 3 3
-7 3 3 2
-2 0 2 3
-14 3 1 3
-14 3 3 3
-1 1 3 1
-3 1 0 3
-7 1 1 2
-7 3 0 1
-12 0 1 1
-14 1 2 1
-1 1 3 3
-3 3 3 1
-14 3 0 2
-13 2 0 2
-7 2 2 3
-11 0 3 3
-14 3 2 3
-1 1 3 1
-3 1 1 2
-7 3 3 1
-7 1 2 3
-4 0 3 3
-14 3 3 3
-14 3 2 3
-1 2 3 2
-3 2 0 0
-7 0 2 2
-14 2 0 3
-13 3 1 3
-1 3 3 1
-14 1 2 1
-14 1 2 1
-1 1 0 0
-3 0 2 2
-7 2 1 0
-7 1 0 1
-15 1 0 1
-14 1 2 1
-14 1 2 1
-1 2 1 2
-3 2 2 1
-7 3 3 3
-7 3 2 2
-8 0 2 0
-14 0 3 0
-1 0 1 1
-7 0 2 2
-7 2 1 3
-14 1 0 0
-13 0 3 0
-2 2 0 0
-14 0 3 0
-14 0 3 0
-1 0 1 1
-3 1 0 2
-7 2 2 0
-7 2 3 1
-11 0 3 0
-14 0 3 0
-14 0 1 0
-1 0 2 2
-3 2 2 3
-7 2 2 0
-7 1 3 2
-14 3 0 1
-13 1 3 1
-12 0 1 0
-14 0 2 0
-14 0 3 0
-1 3 0 3
-3 3 2 0
-7 2 2 2
-7 0 1 3
-6 3 2 3
-14 3 1 3
-1 3 0 0
diff --git a/src/16/notes.txt b/src/16/notes.txt deleted file mode 100644 index c8cbf8b..0000000 --- a/src/16/notes.txt +++ /dev/null @@ -1,47 +0,0 @@ -R4 = 65536
-n * 256 > 65536 <=> n = 257
-#
-0 : R1 = 123
-1 : R1 = R1 & 456
-2 : R1 = (R1 == 72)
-3 : R3 = R1 + R3
-4 : R3 = 0
-5 : R1 = 0
-6 : R4 = R1 | 65536
-7 : R1 = 3798839
-8 : R5 = R4 & 255
-9 : R1 = R1 + R5
-10 : R1 = R1 & 16777215
-11 : R1 = R1 * 65899
-12 : R1 = R1 & 16777215
-13 : R5 = (256 > R4)
-14 : R3 = R5 + R3
-15 : R3 = R3 + 1
-16 : R3 = 27
-17 : R5 = 0
-18 : R2 = R5 + 1
-19 : R2 = R2 * 256
-20 : R2 = (R2 > R4)
-21 : R3 = R2 + R3
-22 : R3 = R3 + 1
-23 : R3 = 25
-24 : R5 = R5 + 1
-25 : R3 = 17
-26 : R4 = R5
-27 : R3 = 7
-28 : R5 = (R1 == R0)
-29 : R3 = R5 + R3
-30 : R3 = 5
-
-6851325 (low)
-4903765 (low)
-4455450
-13530460
-
-16127846
-3319808
-
-11077029
-1993108
-
-11011493
\ No newline at end of file diff --git a/src/16/solve.py b/src/16/solve.py deleted file mode 100644 index e2098e3..0000000 --- a/src/16/solve.py +++ /dev/null @@ -1,121 +0,0 @@ -from sys import argv as args
-
-
-def parseLog(ls):
- data = list()
- before = [int(v) for v in ls[0].split("[")[1].split("]")[0].split(",")]
- ins = [int(v) for v in ls[1].split(" ")]
- after = [int(v) for v in ls[2].split("[")[1].split("]")[0].split(",")]
- return (before, ins, after)
-
-file = open("input.txt")
-inslog = list()
-input = file.readlines()
-file.close()
-progsec = None
-
-for i in range(0, len(input), 4):
- if input[i] == "\n":
- progsec = i
- break
- inslog.append(parseLog(input[i:i+4]))
-
-
-register = list()
-
-opmap = dict()
-opmap["addr"] = lambda a, b : register[a] + register[b]
-opmap["addi"] = lambda a, b : register[a] + b
-opmap["mulr"] = lambda a, b : register[a] * register[b]
-opmap["muli"] = lambda a, b : register[a] * b
-opmap["banr"] = lambda a, b : register[a] & register[b]
-opmap["bani"] = lambda a, b : register[a] & b
-opmap["borr"] = lambda a, b : register[a] | register[b]
-opmap["bori"] = lambda a, b : register[a] | b
-opmap["setr"] = lambda a, b : register[a]
-opmap["seti"] = lambda a, b : a
-opmap["gtir"] = lambda a, b : 1 * (a > register[b])
-opmap["gtri"] = lambda a, b : 1 * (register[a] > b)
-opmap["gtrr"] = lambda a, b : 1 * (register[a] > register[b])
-opmap["eqir"] = lambda a, b : 1 * (a == register[b])
-opmap["eqri"] = lambda a, b : 1 * (register[a] == b)
-opmap["eqrr"] = lambda a, b : 1 * (register[a] == register[b])
-
-def getPossible(ins):
- global register
- sregister = register[:]
- before = ins[0]
- after = ins[2]
- register = before
- a = ins[1][1]
- b = ins[1][2]
- c = ins[1][3]
- ops = list(opmap.values())
- possibles = list()
- for i in range(len(ops)):
- op = ops[i]
- res = None
- try:
- res = op(a, b)
- except:
- continue
- if res == after[c]:
- possibles.append(i)
- register = sregister
- return possibles
-
-def solve1():
- global register
- uncertain = 0
- for ins in inslog:
- if len(getPossible(ins)) >= 3:
- uncertain += 1
- print(uncertain)
- return
-
-def solve2():
- possible = dict()
- for ins in inslog:
- o = ins[1][0]
- if o in possible:
- possible[o] = [op for op in getPossible(ins) if op in possible[o]]
- else:
- possible[o] = getPossible(ins)
-
- certain = False
- while not certain:
- singles = [p[0] for p in possible.values() if len(p) == 1]
- for p in possible:
- if len(possible[p]) != 1:
- possible[p] = [v for v in possible[p] if v not in singles]
-
- certain = True
- for p in possible.values():
- if len(p) != 1:
- certain = False
- break
-
- ntrans = dict()
- for p in possible: # flatten
- ntrans[p] = possible[p][0]
-
- for i in range(progsec, len(input)): # execute program
- l = input[i]
- if l == "\n": continue
- cmd = [int(v) for v in l.split(" ")]
- while len(register)-1 < cmd[3]:
- register.append(0)
-
- register[cmd[3]] = list(opmap.values())[ntrans[cmd[0]]](cmd[1], cmd[2])
-
-
- print(register[0])
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/17/.gitignore b/src/17/.gitignore deleted file mode 100644 index 53752db..0000000 --- a/src/17/.gitignore +++ /dev/null @@ -1 +0,0 @@ -output diff --git a/src/17/input.txt b/src/17/input.txt deleted file mode 100644 index c383645..0000000 --- a/src/17/input.txt +++ /dev/null @@ -1,1884 +0,0 @@ -x=309, y=1432..1458
-y=231, x=423..450
-y=1629, x=355..382
-y=1321, x=462..472
-x=478, y=804..815
-x=447, y=583..592
-y=1585, x=315..369
-x=463, y=743..745
-y=1705, x=370..372
-x=478, y=784..794
-x=590, y=149..154
-x=322, y=839..858
-x=322, y=33..38
-y=257, x=474..501
-y=530, x=562..584
-x=588, y=1364..1368
-y=1048, x=567..578
-x=391, y=395..398
-x=585, y=1397..1401
-y=590, x=452..467
-x=549, y=133..146
-y=743, x=463..465
-x=377, y=564..585
-x=405, y=91..97
-x=356, y=893..907
-x=410, y=700..702
-x=583, y=1128..1132
-x=375, y=1449..1455
-x=354, y=1408..1418
-y=876, x=468..477
-y=573, x=402..408
-y=667, x=390..409
-y=1393, x=490..495
-y=1719, x=614..617
-x=379, y=510..530
-y=524, x=369..371
-x=442, y=9..21
-x=380, y=950..975
-x=552, y=66..68
-x=429, y=1005..1020
-x=340, y=216..240
-y=1115, x=580..608
-x=487, y=672..689
-y=519, x=460..468
-y=450, x=503..506
-y=1104, x=369..494
-y=367, x=588..592
-x=409, y=1604..1630
-y=681, x=615..629
-y=1544, x=397..400
-y=71, x=338..349
-x=444, y=283..288
-x=622, y=224..251
-x=465, y=743..745
-x=591, y=1464..1471
-x=349, y=1691..1696
-x=327, y=1158..1162
-x=566, y=237..247
-x=533, y=1366..1368
-y=398, x=364..391
-x=382, y=1446..1458
-x=387, y=1637..1645
-y=266, x=505..524
-y=911, x=365..392
-x=618, y=348..350
-y=24, x=550..568
-y=244, x=558..560
-y=1046, x=360..378
-x=530, y=502..515
-y=1270, x=610..620
-x=623, y=136..162
-y=1477, x=330..349
-x=415, y=834..850
-x=358, y=1489..1502
-x=617, y=1707..1719
-y=1223, x=460..476
-x=382, y=1294..1319
-x=492, y=177..184
-x=372, y=1695..1705
-x=538, y=1573..1598
-x=415, y=238..249
-x=383, y=1070..1077
-y=1371, x=579..600
-x=394, y=1071..1077
-x=586, y=320..334
-x=420, y=481..499
-x=520, y=1307..1320
-x=349, y=1593..1605
-x=577, y=1291..1314
-y=1728, x=326..348
-x=628, y=1007..1011
-y=1424, x=605..608
-x=435, y=1072..1076
-x=355, y=1250..1256
-x=390, y=648..667
-x=520, y=695..721
-y=1011, x=603..628
-x=404, y=701..702
-x=584, y=685..687
-y=1357, x=354..356
-y=645, x=614..620
-x=470, y=992..1002
-y=1543, x=381..385
-y=1143, x=544..546
-x=320, y=1232..1234
-x=633, y=1132..1142
-x=477, y=872..876
-x=340, y=316..339
-x=352, y=1073..1079
-x=486, y=814..831
-x=475, y=1620..1640
-x=553, y=1074..1086
-y=1579, x=345..361
-x=522, y=457..458
-y=585, x=498..635
-x=468, y=513..519
-y=745, x=463..465
-y=1537, x=397..400
-x=448, y=1004..1020
-x=492, y=1543..1546
-x=567, y=1593..1614
-x=566, y=1384..1393
-x=491, y=717..729
-x=334, y=461..481
-y=1697, x=505..508
-y=1437, x=389..403
-x=582, y=36..48
-x=594, y=1323..1345
-x=401, y=1495..1501
-y=1335, x=494..508
-y=782, x=509..511
-x=611, y=484..496
-x=462, y=1281..1297
-x=503, y=1436..1462
-y=850, x=415..420
-y=646, x=336..361
-x=548, y=238..247
-x=330, y=404..406
-x=502, y=408..426
-y=1122, x=307..309
-y=1084, x=342..359
-y=1144, x=312..334
-y=1409, x=380..387
-x=591, y=263..266
-x=367, y=1493..1495
-y=147, x=348..350
-x=496, y=1689..1707
-y=1037, x=434..450
-x=533, y=502..515
-x=513, y=676..689
-x=478, y=700..710
-x=368, y=778..781
-y=1380, x=346..363
-x=604, y=481..493
-x=325, y=438..459
-x=621, y=1606..1614
-y=1533, x=528..530
-x=603, y=929..942
-x=541, y=504..518
-y=1126, x=514..537
-y=369, x=588..592
-x=578, y=216..224
-x=558, y=88..92
-y=997, x=491..500
-x=509, y=779..782
-x=540, y=983..993
-y=641, x=365..370
-x=332, y=501..524
-x=542, y=1261..1274
-y=885, x=417..433
-x=514, y=384..387
-y=1252, x=309..321
-x=412, y=1571..1597
-x=409, y=648..667
-y=1096, x=510..512
-y=1694, x=430..441
-x=516, y=1005..1025
-x=460, y=513..519
-y=1640, x=463..475
-x=420, y=1684..1686
-x=523, y=556..560
-x=381, y=1349..1352
-x=559, y=443..450
-y=975, x=354..380
-x=356, y=865..872
-x=500, y=528..542
-x=402, y=1639..1649
-y=1422, x=605..608
-x=383, y=1474..1476
-y=1385, x=618..633
-x=378, y=240..265
-x=548, y=322..326
-x=570, y=342..351
-x=552, y=1366..1368
-y=836, x=306..322
-x=528, y=527..537
-x=382, y=1617..1629
-x=295, y=1349..1351
-x=326, y=1266..1278
-y=235, x=460..466
-y=53, x=362..384
-x=440, y=157..170
-y=625, x=347..372
-x=610, y=339..353
-y=836, x=464..480
-x=524, y=1572..1598
-y=1604, x=376..378
-x=429, y=180..182
-y=1073, x=350..352
-y=713, x=336..359
-x=618, y=1343..1356
-x=378, y=692..695
-x=471, y=92..101
-x=610, y=1192..1194
-y=1217, x=431..455
-y=1146, x=360..520
-y=73, x=314..316
-x=592, y=1296..1308
-y=1617, x=303..307
-x=324, y=673..687
-x=594, y=793..799
-x=496, y=1051..1063
-x=342, y=400..413
-x=502, y=72..82
-x=578, y=257..268
-y=1255, x=509..528
-x=534, y=1153..1163
-x=599, y=680..694
-y=1667, x=582..599
-x=352, y=1388..1399
-x=373, y=826..832
-x=466, y=230..235
-x=343, y=584..595
-x=626, y=1148..1164
-y=1234, x=484..509
-x=322, y=1053..1056
-x=349, y=1664..1667
-x=335, y=500..524
-x=533, y=278..279
-x=392, y=132..136
-x=434, y=1037..1039
-x=537, y=484..489
-x=375, y=1474..1476
-x=445, y=360..387
-x=555, y=406..420
-x=365, y=897..911
-y=324, x=378..389
-y=1702, x=457..473
-x=353, y=1368..1377
-x=460, y=950..959
-y=354, x=444..449
-y=1505, x=569..578
-x=329, y=1681..1699
-x=476, y=1214..1223
-x=569, y=523..525
-y=542, x=522..538
-y=1684, x=370..375
-x=618, y=1188..1202
-x=518, y=1239..1248
-x=415, y=1206..1210
-x=306, y=818..836
-x=438, y=1605..1618
-x=373, y=1621..1623
-x=595, y=1591..1599
-x=348, y=1725..1728
-x=552, y=864..867
-x=504, y=245..247
-y=537, x=528..532
-y=869, x=584..601
-x=339, y=1536..1540
-y=1271, x=511..524
-x=602, y=147..162
-y=1446, x=509..534
-y=1563, x=326..344
-y=563, x=305..330
-y=1536, x=339..344
-x=440, y=325..330
-y=1182, x=510..514
-x=481, y=493..506
-y=313, x=576..592
-x=393, y=371..376
-x=394, y=1262..1272
-x=591, y=710..727
-x=345, y=250..265
-y=995, x=568..577
-y=278, x=413..418
-x=598, y=1073..1099
-y=1560, x=333..338
-x=486, y=32..44
-x=577, y=926..934
-x=361, y=642..646
-y=193, x=528..549
-x=301, y=518..544
-y=1208, x=312..321
-x=342, y=656..662
-x=603, y=1323..1345
-x=503, y=775..785
-y=689, x=396..400
-x=596, y=895..902
-x=526, y=833..841
-x=498, y=783..794
-x=326, y=1725..1728
-x=475, y=1563..1588
-x=419, y=724..738
-x=321, y=1527..1531
-x=433, y=142..158
-x=596, y=1469..1496
-x=341, y=982..989
-y=378, x=497..504
-y=1599, x=621..633
-x=355, y=1617..1629
-y=1039, x=434..450
-x=360, y=827..832
-x=393, y=1467..1479
-y=937, x=344..350
-x=501, y=251..257
-y=526, x=369..371
-x=527, y=427..438
-y=1599, x=595..615
-x=486, y=1562..1588
-x=358, y=1550..1563
-y=82, x=471..502
-x=300, y=259..276
-y=808, x=492..494
-x=444, y=335..354
-y=1368, x=443..445
-x=567, y=1022..1048
-x=620, y=440..452
-x=572, y=600..612
-x=442, y=583..592
-y=194, x=622..624
-y=184, x=375..379
-x=304, y=1432..1458
-x=443, y=617..637
-x=332, y=1446..1458
-x=327, y=888..913
-x=588, y=1463..1471
-y=1278, x=313..326
-y=493, x=526..550
-x=301, y=438..459
-x=467, y=1158..1182
-y=592, x=442..447
-x=618, y=1364..1385
-x=499, y=35..37
-x=470, y=673..689
-x=620, y=1255..1270
-x=329, y=792..815
-x=389, y=513..532
-y=1598, x=524..538
-x=350, y=1073..1079
-x=414, y=514..532
-x=334, y=128..155
-y=1021, x=404..422
-x=543, y=1457..1476
-x=527, y=297..303
-x=363, y=1677..1687
-x=325, y=399..413
-x=436, y=728..749
-x=561, y=1187..1192
-x=632, y=1149..1164
-y=630, x=474..493
-y=1471, x=422..436
-y=1074, x=553..556
-y=882, x=377..389
-x=404, y=1010..1021
-x=307, y=1461..1481
-y=1018, x=473..478
-x=568, y=35..48
-x=351, y=1194..1202
-x=373, y=1449..1455
-x=516, y=610..617
-y=617, x=607..616
-y=493, x=601..604
-x=618, y=1545..1561
-y=158, x=419..433
-x=560, y=235..244
-x=362, y=38..53
-x=309, y=1120..1122
-x=342, y=1066..1084
-x=495, y=1381..1393
-x=505, y=1634..1641
-x=526, y=791..798
-y=1052, x=583..589
-x=557, y=1135..1146
-x=318, y=34..38
-y=601, x=426..428
-x=530, y=70..74
-y=1099, x=581..598
-y=342, x=466..468
-x=512, y=1094..1096
-x=568, y=984..995
-y=32, x=599..618
-y=1720, x=590..608
-x=365, y=630..641
-y=1571, x=453..466
-y=492, x=617..624
-y=1301, x=341..359
-x=536, y=777..784
-x=589, y=1051..1052
-x=429, y=802..819
-y=1397, x=469..471
-x=620, y=627..645
-y=1431, x=557..576
-y=785, x=503..529
-y=1269, x=402..404
-y=940, x=419..458
-x=590, y=1024..1039
-x=345, y=1576..1579
-x=387, y=287..306
-x=628, y=137..162
-x=336, y=641..646
-x=624, y=1651..1661
-y=944, x=505..511
-x=481, y=989..999
-x=369, y=1595..1608
-y=858, x=317..322
-x=302, y=260..276
-x=347, y=766..769
-x=599, y=1665..1667
-x=561, y=1384..1393
-x=354, y=1345..1357
-y=330, x=530..554
-x=614, y=1708..1719
-y=420, x=540..555
-x=313, y=1011..1029
-x=297, y=1074..1096
-x=362, y=765..769
-y=1409, x=579..595
-y=287, x=585..588
-x=594, y=1024..1039
-y=247, x=504..519
-x=448, y=616..637
-y=210, x=542..566
-x=629, y=666..681
-x=383, y=832..834
-y=238, x=300..324
-x=364, y=1347..1361
-y=405, x=466..478
-y=35, x=494..499
-x=611, y=1553..1556
-y=993, x=540..552
-y=1667, x=342..349
-x=592, y=300..313
-x=563, y=916..934
-x=471, y=1239..1256
-x=463, y=89..98
-x=472, y=1319..1321
-x=373, y=1556..1560
-x=566, y=218..229
-y=617, x=516..540
-y=249, x=415..441
-x=426, y=1177..1182
-y=816, x=400..421
-x=319, y=117..140
-y=821, x=311..315
-y=1563, x=358..381
-y=1143, x=346..357
-x=546, y=777..784
-x=300, y=213..238
-x=417, y=861..885
-x=604, y=1292..1314
-x=389, y=1533..1552
-y=1661, x=618..624
-y=160, x=390..399
-y=542, x=494..500
-y=669, x=504..526
-x=549, y=175..193
-x=412, y=1262..1272
-x=457, y=339..356
-x=400, y=435..454
-x=521, y=1173..1185
-y=1142, x=614..633
-x=392, y=599..621
-x=514, y=1112..1126
-x=618, y=119..142
-y=44, x=486..505
-x=490, y=372..384
-y=355, x=564..581
-x=305, y=694..715
-y=1548, x=559..572
-y=481, x=334..347
-x=583, y=1532..1557
-y=396, x=548..564
-x=400, y=811..816
-x=423, y=361..387
-x=411, y=334..337
-y=1531, x=302..321
-x=570, y=445..455
-x=394, y=1637..1645
-x=468, y=801..811
-x=538, y=1506..1533
-y=454, x=400..423
-x=561, y=1437..1448
-y=585, x=364..377
-x=503, y=219..224
-x=555, y=1303..1317
-x=616, y=609..617
-y=824, x=311..315
-x=543, y=1166..1176
-x=305, y=1594..1604
-x=301, y=288..305
-y=1567, x=418..432
-y=1546, x=473..492
-y=1210, x=499..516
-y=748, x=491..511
-y=1256, x=464..471
-x=411, y=146..164
-y=1248, x=518..520
-x=473, y=1699..1702
-y=347, x=466..468
-x=318, y=1149..1167
-y=155, x=334..358
-x=490, y=677..689
-y=1311, x=623..625
-x=408, y=53..80
-y=1056, x=318..322
-y=1372, x=382..409
-x=434, y=84..91
-x=352, y=865..872
-x=483, y=373..384
-y=1418, x=334..354
-y=387, x=514..534
-x=355, y=1516..1518
-x=391, y=688..701
-y=38, x=318..322
-y=195, x=583..590
-x=363, y=1370..1380
-y=1577, x=493..499
-y=1194, x=608..610
-x=605, y=968..992
-x=531, y=40..56
-y=460, x=475..478
-x=384, y=147..164
-x=353, y=1285..1291
-x=615, y=1590..1599
-x=381, y=1549..1563
-x=497, y=473..492
-x=552, y=984..993
-y=959, x=539..551
-y=65, x=466..479
-x=318, y=1053..1056
-x=568, y=182..186
-x=342, y=1598..1621
-y=1493, x=470..490
-x=609, y=928..942
-y=290, x=578..597
-y=467, x=303..320
-x=457, y=1698..1702
-x=460, y=492..506
-x=588, y=367..369
-x=470, y=1489..1493
-y=1438, x=344..367
-x=544, y=1132..1143
-x=473, y=1280..1297
-x=566, y=320..334
-x=402, y=1267..1269
-y=1215, x=590..605
-x=358, y=1532..1544
-x=625, y=1301..1311
-y=999, x=478..481
-x=514, y=811..817
-x=384, y=940..944
-y=74, x=530..539
-x=542, y=1036..1039
-y=899, x=443..494
-y=426, x=464..466
-x=358, y=128..155
-x=419, y=927..940
-x=505, y=645..647
-y=452, x=620..631
-x=520, y=1134..1146
-x=454, y=947..956
-x=456, y=738..748
-x=592, y=667..669
-y=229, x=394..406
-x=444, y=1514..1520
-x=375, y=1674..1684
-y=1338, x=350..539
-x=340, y=1463..1474
-y=91, x=434..447
-y=418, x=609..613
-x=574, y=179..189
-x=612, y=224..251
-x=595, y=1188..1202
-x=356, y=585..595
-y=1228, x=406..424
-y=1540, x=339..344
-y=1291, x=351..353
-x=338, y=1387..1399
-x=518, y=407..426
-y=1182, x=467..479
-y=413, x=325..342
-y=1407, x=621..624
-x=346, y=1511..1525
-y=1449, x=373..375
-x=361, y=1516..1518
-x=355, y=1430..1435
-y=1164, x=626..632
-x=530, y=733..734
-x=364, y=1556..1560
-y=798, x=505..526
-x=506, y=1043..1058
-x=492, y=801..808
-x=438, y=10..21
-x=460, y=89..98
-x=480, y=1422..1426
-y=1192, x=608..610
-y=1588, x=475..486
-y=637, x=443..448
-y=1090, x=540..562
-x=586, y=297..310
-y=420, x=609..613
-y=715, x=303..305
-x=583, y=1050..1052
-x=302, y=983..993
-x=432, y=1402..1406
-y=1710, x=589..606
-x=560, y=256..268
-x=551, y=953..959
-x=494, y=1090..1104
-y=1501, x=401..418
-x=603, y=412..425
-x=593, y=1171..1178
-y=1079, x=350..352
-x=385, y=1527..1543
-x=485, y=1010..1021
-y=80, x=408..427
-x=371, y=109..117
-x=454, y=1245..1255
-y=944, x=384..412
-x=524, y=1550..1560
-y=989, x=327..341
-y=69, x=314..316
-x=370, y=1511..1525
-y=1476, x=524..543
-x=330, y=1465..1477
-y=1317, x=528..555
-y=727, x=582..591
-x=409, y=1363..1372
-x=609, y=1022..1025
-y=240, x=333..340
-y=1165, x=425..428
-x=534, y=384..387
-x=515, y=219..224
-x=485, y=854..856
-x=377, y=876..882
-x=543, y=431..434
-y=602, x=322..330
-x=464, y=1238..1256
-x=400, y=1537..1544
-x=482, y=1375..1398
-x=315, y=1611..1625
-x=613, y=1040..1061
-x=436, y=1457..1471
-x=378, y=1593..1604
-x=535, y=431..434
-x=344, y=1536..1540
-y=1630, x=409..420
-x=546, y=1511..1536
-y=101, x=453..471
-x=615, y=666..681
-y=981, x=405..470
-y=1455, x=373..375
-x=550, y=11..24
-x=403, y=1418..1437
-y=76, x=413..420
-x=604, y=718..720
-x=422, y=1520..1526
-x=541, y=917..934
-y=706, x=486..493
-x=413, y=221..226
-x=504, y=375..378
-x=598, y=361..372
-x=472, y=821..832
-x=413, y=61..76
-y=149, x=590..595
-y=1725, x=415..428
-x=443, y=1356..1368
-x=334, y=1342..1345
-x=367, y=1427..1438
-y=1552, x=389..407
-x=426, y=492..494
-x=480, y=163..166
-x=527, y=76..87
-y=733, x=371..381
-x=502, y=871..890
-x=511, y=1265..1271
-x=576, y=299..313
-x=590, y=1206..1215
-x=537, y=1436..1448
-x=353, y=251..265
-x=579, y=1392..1409
-y=130, x=560..574
-y=1427, x=598..623
-y=1291, x=548..554
-x=392, y=1657..1667
-y=1396, x=550..576
-x=528, y=39..56
-x=605, y=1422..1424
-x=417, y=481..499
-x=564, y=344..355
-x=321, y=1241..1252
-x=315, y=1571..1585
-x=481, y=1028..1042
-y=907, x=353..356
-x=342, y=1665..1667
-x=436, y=107..134
-x=322, y=593..602
-y=481, x=313..331
-y=1625, x=295..315
-x=539, y=69..74
-y=1368, x=588..592
-y=1474, x=340..343
-x=405, y=967..981
-x=301, y=763..789
-y=162, x=623..628
-y=738, x=394..419
-y=1351, x=295..310
-y=1398, x=482..485
-x=356, y=1345..1357
-x=541, y=1512..1536
-x=307, y=287..305
-y=426, x=502..518
-y=834, x=383..392
-y=119, x=593..600
-x=561, y=1129..1132
-x=314, y=69..73
-x=569, y=760..788
-x=515, y=1307..1320
-y=280, x=307..311
-x=583, y=146..162
-x=312, y=1196..1208
-y=1604, x=305..322
-x=296, y=1681..1683
-y=34, x=400..424
-x=554, y=204..207
-x=367, y=329..332
-y=1479, x=370..393
-x=562, y=507..530
-x=326, y=1549..1563
-x=344, y=1427..1438
-x=451, y=1536..1538
-x=554, y=317..330
-y=142, x=604..618
-x=331, y=1599..1621
-y=1039, x=539..542
-y=337, x=408..411
-y=1643, x=354..356
-x=577, y=983..995
-y=1608, x=369..385
-x=346, y=1371..1380
-y=1368, x=421..425
-x=363, y=330..332
-x=504, y=659..669
-y=85, x=378..391
-x=494, y=1332..1335
-y=163, x=477..480
-x=589, y=667..669
-x=498, y=1379..1393
-y=859, x=471..491
-x=334, y=1133..1144
-x=614, y=1605..1614
-y=1345, x=594..603
-x=434, y=824..826
-x=381, y=714..733
-y=247, x=548..566
-y=1673, x=474..489
-x=429, y=908..918
-x=431, y=292..295
-x=621, y=1591..1599
-x=337, y=1637..1652
-x=509, y=1423..1446
-x=574, y=792..799
-y=1671, x=380..398
-x=303, y=1012..1029
-x=442, y=949..959
-y=431, x=535..543
-x=516, y=1196..1210
-y=268, x=560..578
-x=404, y=1294..1319
-y=266, x=591..619
-y=1063, x=382..496
-y=1683, x=296..299
-x=299, y=1682..1683
-x=309, y=1241..1252
-x=449, y=801..819
-y=967, x=316..344
-x=336, y=1149..1167
-x=579, y=579..582
-x=295, y=116..140
-y=276, x=300..302
-x=478, y=390..405
-y=992, x=605..612
-y=328, x=490..497
-x=302, y=1528..1531
-y=212, x=467..471
-y=1210, x=447..449
-y=428, x=380..393
-y=1022, x=605..609
-x=460, y=1215..1223
-x=347, y=1691..1696
-y=499, x=417..420
-y=1204, x=508..510
-x=610, y=1256..1270
-x=546, y=1166..1176
-x=393, y=1390..1412
-y=350, x=618..622
-y=1448, x=537..561
-y=366, x=397..417
-y=87, x=505..527
-x=464, y=824..836
-x=508, y=1692..1697
-y=1409, x=423..438
-x=347, y=1153..1161
-x=347, y=461..481
-y=595, x=343..356
-y=1086, x=553..556
-y=1210, x=415..417
-y=1406, x=430..432
-x=556, y=1480..1507
-y=492, x=497..517
-x=356, y=1639..1643
-x=614, y=1133..1142
-y=332, x=363..367
-x=586, y=993..1006
-x=329, y=89..111
-x=370, y=1468..1479
-x=424, y=23..34
-x=629, y=367..394
-y=519, x=598..623
-x=493, y=618..630
-x=468, y=342..347
-x=369, y=524..526
-x=478, y=1008..1018
-x=554, y=1281..1291
-x=532, y=527..537
-x=450, y=217..231
-x=590, y=180..195
-x=511, y=918..944
-x=352, y=736..756
-x=553, y=1168..1180
-x=599, y=16..32
-x=418, y=273..278
-y=621, x=383..392
-x=499, y=1568..1577
-x=479, y=338..356
-y=913, x=324..327
-x=438, y=1395..1409
-x=344, y=911..937
-y=755, x=518..525
-x=372, y=599..625
-y=1255, x=436..454
-x=423, y=218..231
-y=1560, x=516..524
-x=548, y=1281..1291
-x=560, y=108..130
-y=749, x=422..436
-x=515, y=10..23
-y=1077, x=383..394
-y=1273, x=549..564
-x=382, y=1363..1372
-x=313, y=471..481
-y=1294, x=542..560
-x=380, y=100..120
-x=558, y=381..393
-x=610, y=744..772
-y=315, x=399..416
-x=420, y=834..850
-y=942, x=603..609
-y=1000, x=395..411
-y=134, x=430..436
-x=484, y=1221..1234
-y=1504, x=468..470
-x=463, y=1498..1518
-x=359, y=1281..1301
-y=111, x=306..329
-x=524, y=250..266
-x=410, y=609..635
-y=734, x=530..544
-x=371, y=1714..1727
-x=416, y=306..315
-x=445, y=1356..1368
-y=154, x=590..595
-x=359, y=100..120
-y=1520, x=444..447
-x=602, y=1488..1493
-y=1481, x=307..312
-y=662, x=342..370
-x=509, y=346..349
-y=687, x=324..351
-x=512, y=345..349
-x=347, y=1016..1021
-x=540, y=1070..1090
-x=311, y=821..824
-y=288, x=444..466
-x=489, y=1184..1199
-x=580, y=627..637
-x=417, y=363..366
-x=498, y=304..312
-y=182, x=429..453
-x=332, y=1231..1234
-x=422, y=727..749
-x=493, y=704..706
-y=1538, x=430..451
-x=475, y=1408..1412
-x=566, y=841..850
-x=470, y=967..981
-x=453, y=91..101
-x=431, y=1073..1076
-x=334, y=1483..1495
-y=326, x=539..548
-y=186, x=375..379
-x=428, y=594..601
-x=585, y=274..287
-x=467, y=209..212
-y=1633, x=478..483
-x=389, y=1417..1437
-x=471, y=209..212
-y=184, x=492..502
-x=463, y=759..772
-x=540, y=609..617
-x=333, y=215..240
-x=518, y=696..721
-x=483, y=1070..1082
-x=458, y=360..385
-y=1163, x=509..534
-x=370, y=630..641
-y=817, x=514..532
-x=386, y=173..191
-x=363, y=1637..1646
-x=370, y=1674..1684
-x=434, y=1155..1172
-y=189, x=557..574
-x=364, y=563..585
-y=310, x=584..586
-x=562, y=18..20
-y=769, x=347..362
-x=601, y=853..869
-y=1234, x=320..332
-y=694, x=443..449
-x=417, y=1206..1210
-x=345, y=1592..1605
-x=466, y=284..288
-x=461, y=1441..1467
-x=394, y=723..738
-y=1020, x=429..448
-x=348, y=1405..1414
-x=485, y=596..609
-y=489, x=537..542
-x=608, y=1717..1720
-x=342, y=1636..1646
-x=328, y=735..756
-x=384, y=240..265
-x=541, y=1709..1727
-y=756, x=328..352
-x=505, y=736..745
-x=525, y=556..560
-x=379, y=1717..1730
-x=508, y=1070..1082
-x=621, y=1100..1120
-y=434, x=535..543
-y=954, x=583..591
-x=583, y=181..195
-y=1536, x=541..546
-x=428, y=1707..1725
-x=394, y=1203..1212
-x=460, y=230..235
-x=499, y=9..23
-x=621, y=412..425
-x=501, y=1437..1462
-x=427, y=54..80
-x=582, y=1664..1667
-x=312, y=983..993
-x=408, y=334..337
-x=558, y=235..244
-x=328, y=1485..1498
-x=394, y=777..781
-y=815, x=329..341
-x=528, y=1241..1255
-x=576, y=1639..1642
-y=1286, x=504..523
-x=581, y=1252..1264
-x=334, y=1407..1418
-x=404, y=1267..1269
-y=1645, x=431..442
-x=361, y=1015..1021
-x=448, y=133..146
-x=519, y=246..247
-x=591, y=1219..1243
-x=385, y=1596..1608
-x=557, y=366..368
-y=1401, x=585..587
-x=532, y=810..817
-x=579, y=1352..1371
-x=570, y=1252..1264
-x=608, y=1192..1194
-y=506, x=460..481
-x=588, y=274..287
-x=577, y=1437..1456
-x=566, y=197..210
-y=1272, x=394..412
-y=635, x=410..419
-x=592, y=367..369
-x=406, y=522..525
-x=569, y=1490..1505
-y=265, x=378..384
-x=430, y=1677..1694
-y=1642, x=576..578
-x=389, y=1349..1352
-x=605, y=1488..1493
-y=704, x=464..466
-x=384, y=39..53
-x=623, y=1412..1427
-x=478, y=989..999
-x=344, y=951..967
-x=466, y=342..347
-x=529, y=1637..1658
-x=510, y=1094..1096
-x=378, y=65..85
-x=549, y=723..728
-y=1180, x=535..553
-y=1176, x=543..546
-y=1399, x=338..352
-y=745, x=502..505
-y=1498, x=328..345
-x=463, y=633..653
-x=578, y=680..694
-x=602, y=1533..1536
-y=1621, x=373..375
-x=478, y=1619..1633
-y=1623, x=373..375
-y=1402, x=430..432
-x=419, y=610..635
-x=590, y=1716..1720
-x=336, y=700..713
-x=470, y=1504..1511
-x=383, y=599..621
-x=307, y=259..280
-x=348, y=136..147
-x=322, y=819..836
-x=635, y=573..585
-y=387, x=423..445
-x=413, y=274..278
-x=590, y=1436..1456
-x=578, y=523..525
-x=453, y=1546..1571
-x=612, y=967..992
-y=1185, x=501..521
-x=388, y=1202..1212
-x=406, y=1203..1228
-x=509, y=1154..1163
-x=369, y=137..150
-x=528, y=1530..1533
-x=607, y=610..617
-x=455, y=1192..1217
-y=701, x=369..391
-x=353, y=892..907
-x=479, y=1158..1182
-x=443, y=889..899
-x=428, y=1165..1167
-x=389, y=315..324
-y=48, x=568..582
-y=1199, x=489..493
-y=890, x=502..520
-y=959, x=442..460
-x=617, y=477..492
-x=524, y=1265..1271
-x=601, y=719..720
-y=265, x=345..353
-x=345, y=1486..1498
-y=1178, x=593..608
-x=330, y=593..602
-y=525, x=395..406
-y=1687, x=363..381
-x=539, y=952..959
-x=584, y=832..839
-x=509, y=305..312
-x=462, y=1319..1321
-x=509, y=1221..1234
-x=396, y=463..466
-x=580, y=1109..1115
-x=585, y=489..498
-x=565, y=1197..1219
-y=498, x=568..585
-y=209, x=344..350
-y=1120, x=614..621
-y=1652, x=329..337
-x=305, y=58..78
-y=1161, x=347..349
-y=956, x=452..454
-y=1096, x=297..306
-x=511, y=779..782
-y=1605, x=345..349
-y=741, x=295..300
-x=582, y=709..727
-x=615, y=1017..1030
-x=305, y=561..563
-y=1146, x=537..557
-x=571, y=1639..1656
-y=875, x=344..362
-x=505, y=75..87
-y=473, x=541..609
-y=565, x=512..532
-y=689, x=470..487
-y=772, x=463..486
-x=387, y=482..505
-x=315, y=1341..1345
-x=602, y=367..394
-x=572, y=1522..1548
-x=350, y=136..147
-x=458, y=927..940
-x=310, y=1041..1064
-x=551, y=1701..1720
-y=815, x=461..478
-x=505, y=32..44
-x=447, y=83..91
-y=419, x=410..419
-y=1172, x=416..434
-x=433, y=861..885
-x=380, y=421..428
-y=1666, x=613..630
-y=215, x=459..477
-x=397, y=363..366
-x=429, y=1504..1525
-x=376, y=1593..1604
-x=561, y=1644..1652
-x=295, y=714..741
-y=1219, x=538..565
-x=583, y=1296..1308
-x=550, y=1380..1396
-x=391, y=65..85
-x=566, y=182..186
-x=494, y=51..65
-y=56, x=528..531
-x=494, y=1616..1627
-x=468, y=872..876
-y=1039, x=590..594
-y=120, x=359..380
-x=466, y=391..405
-x=453, y=823..826
-x=430, y=1535..1538
-x=573, y=342..351
-y=186, x=566..568
-x=317, y=840..858
-x=503, y=429..450
-y=1404, x=380..387
-x=490, y=1382..1393
-y=305, x=301..307
-x=593, y=114..119
-x=520, y=1239..1248
-x=582, y=1238..1240
-y=1064, x=310..329
-y=1240, x=582..584
-x=620, y=720..734
-x=603, y=1007..1011
-x=375, y=1621..1623
-y=1597, x=412..428
-y=20, x=506..508
-y=356, x=457..479
-y=1656, x=547..571
-y=748, x=456..475
-y=1202, x=342..351
-x=464, y=717..729
-x=577, y=360..372
-x=386, y=90..97
-x=447, y=493..494
-x=455, y=361..385
-y=458, x=496..522
-x=595, y=149..154
-x=547, y=1638..1656
-x=609, y=462..473
-x=538, y=1197..1219
-x=595, y=1393..1409
-x=562, y=443..450
-x=391, y=1028..1042
-x=307, y=1617..1621
-x=453, y=180..182
-x=389, y=875..882
-x=374, y=109..117
-x=329, y=1636..1652
-x=515, y=1689..1707
-x=499, y=1617..1627
-y=832, x=472..474
-y=1618, x=438..445
-x=530, y=318..330
-y=518, x=524..541
-y=65, x=494..516
-x=488, y=814..831
-y=1614, x=614..621
-x=514, y=1179..1182
-x=389, y=28..31
-y=29, x=606..608
-x=496, y=1495..1500
-x=458, y=1441..1467
-y=1006, x=586..591
-x=586, y=814..823
-x=336, y=404..406
-x=497, y=375..378
-x=303, y=463..467
-x=570, y=362..376
-x=466, y=1545..1571
-x=344, y=1550..1563
-y=1476, x=375..383
-x=605, y=86..99
-x=500, y=976..997
-x=576, y=657..675
-x=307, y=1120..1122
-y=1021, x=468..485
-y=496, x=594..611
-x=606, y=25..29
-y=376, x=371..393
-x=432, y=1551..1567
-x=450, y=908..918
-x=447, y=1514..1520
-y=1107, x=571..575
-y=455, x=552..570
-x=575, y=1218..1243
-x=509, y=1242..1255
-x=508, y=7..20
-y=1167, x=425..428
-x=603, y=832..839
-x=399, y=157..160
-y=1544, x=332..358
-y=1621, x=303..307
-x=421, y=1366..1368
-y=329, x=354..358
-x=623, y=505..519
-y=525, x=569..578
-x=450, y=1037..1039
-y=21, x=438..442
-x=400, y=671..689
-y=92, x=556..558
-y=609, x=485..505
-x=441, y=239..249
-x=578, y=1021..1048
-y=1518, x=355..361
-x=406, y=211..229
-y=1082, x=483..508
-x=375, y=29..31
-x=447, y=1207..1210
-x=452, y=568..590
-y=1030, x=599..615
-y=702, x=404..410
-x=512, y=552..565
-x=306, y=90..111
-x=552, y=1644..1652
-y=330, x=440..454
-x=397, y=1537..1544
-y=191, x=365..386
-y=1687, x=614..628
-x=453, y=419..433
-x=471, y=1374..1397
-x=494, y=800..808
-y=1029, x=303..313
-x=357, y=1682..1699
-x=330, y=562..563
-x=380, y=1660..1671
-x=306, y=1075..1096
-y=170, x=440..564
-x=392, y=897..911
-y=1361, x=348..364
-x=498, y=574..585
-x=370, y=657..662
-x=613, y=418..420
-x=516, y=641..650
-x=524, y=1456..1476
-y=788, x=555..569
-x=630, y=1644..1666
-y=1308, x=583..592
-y=25, x=606..608
-x=537, y=1134..1146
-y=1352, x=381..389
-x=508, y=1194..1204
-y=166, x=477..480
-x=416, y=1156..1172
-y=1511, x=468..470
-x=378, y=1040..1046
-x=556, y=1074..1086
-x=425, y=1165..1167
-x=609, y=418..420
-y=669, x=589..592
-y=1397, x=585..587
-x=587, y=685..687
-x=385, y=481..505
-x=501, y=1174..1185
-x=360, y=1041..1046
-x=603, y=1544..1561
-x=560, y=1284..1294
-x=336, y=1251..1256
-x=505, y=791..798
-x=381, y=1527..1543
-x=502, y=736..745
-y=466, x=373..396
-x=510, y=1194..1204
-x=341, y=793..815
-y=1495, x=334..339
-x=357, y=1368..1377
-x=540, y=406..420
-x=538, y=530..542
-x=490, y=317..328
-x=300, y=714..741
-x=628, y=1676..1687
-y=867, x=527..552
-y=1182, x=422..426
-y=1426, x=480..502
-x=350, y=195..209
-x=428, y=1570..1597
-x=300, y=156..181
-x=425, y=1367..1368
-y=1526, x=416..422
-x=303, y=694..715
-x=324, y=214..238
-x=468, y=1011..1021
-x=397, y=550..567
-x=518, y=731..755
-x=371, y=1389..1412
-x=625, y=719..734
-y=146, x=448..549
-x=586, y=626..637
-x=589, y=1698..1710
-y=123, x=462..541
-x=539, y=1036..1039
-x=624, y=478..492
-x=614, y=1342..1356
-y=1645, x=387..394
-x=618, y=15..32
-x=513, y=1496..1500
-x=321, y=1196..1208
-y=162, x=583..602
-x=474, y=821..832
-x=605, y=1022..1025
-x=416, y=1683..1686
-x=532, y=552..565
-x=333, y=1547..1560
-x=474, y=252..257
-y=1576, x=345..361
-x=614, y=1100..1120
-x=442, y=1627..1645
-y=532, x=389..414
-x=396, y=671..689
-y=425, x=603..621
-x=469, y=1373..1397
-x=349, y=49..71
-y=1686, x=416..420
-x=456, y=57..60
-x=461, y=803..815
-x=598, y=1413..1427
-x=353, y=1430..1435
-x=455, y=1589..1596
-y=181, x=300..312
-x=295, y=1611..1625
-y=650, x=466..516
-y=251, x=612..622
-x=373, y=286..306
-x=602, y=657..675
-x=449, y=685..694
-y=1720, x=551..577
-x=486, y=760..772
-x=633, y=1364..1385
-x=360, y=1156..1165
-y=372, x=577..598
-y=1165, x=342..360
-y=71, x=620..625
-x=310, y=1348..1351
-x=457, y=867..881
-y=695, x=378..381
-y=1435, x=353..355
-x=534, y=1507..1533
-x=591, y=947..954
-x=549, y=1017..1044
-x=346, y=1132..1143
-x=409, y=222..226
-x=530, y=1017..1044
-y=1021, x=347..361
-x=524, y=505..518
-x=550, y=481..493
-x=550, y=834..841
-y=850, x=557..566
-y=1285, x=351..353
-x=395, y=988..1000
-x=555, y=381..393
-y=1101, x=376..422
-y=1507, x=556..560
-x=342, y=1155..1165
-x=530, y=1529..1533
-x=487, y=991..1002
-y=1467, x=458..461
-x=478, y=449..460
-x=598, y=505..519
-x=350, y=1328..1338
-y=339, x=340..348
-x=330, y=1158..1162
-x=369, y=1571..1585
-x=565, y=813..823
-x=516, y=1550..1560
-x=454, y=325..330
-x=584, y=1238..1240
-y=394, x=602..629
-x=343, y=1463..1474
-y=23, x=499..515
-x=575, y=1104..1107
-y=1104, x=502..522
-x=548, y=67..68
-y=560, x=523..525
-y=530, x=358..379
-x=376, y=1098..1101
-x=581, y=1073..1099
-x=630, y=338..353
-x=354, y=949..975
-x=348, y=315..339
-x=525, y=731..755
-y=1596, x=443..455
-y=1332, x=494..508
-y=734, x=620..625
-x=499, y=1197..1210
-y=1730, x=359..379
-x=462, y=110..123
-x=604, y=119..142
-x=395, y=522..525
-y=974, x=431..449
-x=371, y=524..526
-x=486, y=704..706
-y=1345, x=315..334
-x=571, y=1103..1107
-x=502, y=177..184
-x=421, y=810..816
-y=1496, x=596..617
-x=331, y=470..481
-x=624, y=1391..1407
-x=494, y=888..899
-x=614, y=626..645
-y=1192, x=561..568
-x=411, y=988..1000
-y=1393, x=561..566
-x=388, y=131..136
-x=451, y=632..653
-x=361, y=1697..1709
-x=584, y=853..869
-x=359, y=1716..1730
-x=527, y=865..867
-y=993, x=302..312
-y=1414, x=346..348
-y=20, x=560..562
-y=839, x=584..603
-y=349, x=509..512
-y=207, x=552..554
-y=1699, x=329..357
-x=430, y=108..134
-y=1727, x=527..541
-x=510, y=1379..1393
-x=471, y=73..82
-x=528, y=176..193
-y=351, x=570..573
-y=902, x=576..596
-y=728, x=549..568
-x=485, y=1374..1398
-x=576, y=1411..1431
-y=295, x=425..431
-y=687, x=584..587
-y=823, x=565..586
-x=410, y=1315..1324
-x=466, y=57..65
-x=358, y=312..329
-x=557, y=180..189
-y=1500, x=496..513
-y=544, x=301..306
-x=371, y=1493..1495
-x=594, y=483..496
-x=486, y=645..647
-x=502, y=1421..1426
-x=477, y=205..215
-x=577, y=1702..1720
-y=1264, x=570..581
-y=1495, x=367..371
-x=452, y=947..956
-y=637, x=580..586
-x=592, y=1364..1368
-x=560, y=1480..1507
-x=542, y=484..489
-y=523, x=569..578
-x=348, y=1348..1361
-x=312, y=157..181
-x=490, y=1488..1493
-x=549, y=1255..1273
-x=568, y=722..728
-x=619, y=262..266
-x=508, y=1332..1335
-y=647, x=486..505
-y=385, x=455..458
-x=528, y=1439..1442
-x=510, y=1179..1182
-x=568, y=11..24
-y=1652, x=552..561
-x=502, y=1090..1104
-y=1553, x=609..611
-y=1696, x=347..349
-x=493, y=1568..1577
-x=311, y=765..787
-x=581, y=345..355
-x=474, y=1656..1673
-x=483, y=1408..1412
-y=831, x=486..488
-y=819, x=429..449
-y=505, x=385..387
-y=1132, x=561..583
-y=98, x=460..463
-x=329, y=59..78
-x=381, y=1676..1687
-y=918, x=429..450
-y=368, x=557..560
-y=1646, x=342..363
-y=1707, x=496..515
-x=601, y=481..493
-y=1691, x=347..349
-y=645, x=486..505
-x=419, y=142..158
-x=400, y=24..34
-x=608, y=1109..1115
-x=570, y=913..916
-x=419, y=399..419
-x=559, y=1523..1548
-x=597, y=277..290
-x=480, y=823..836
-x=622, y=190..194
-x=560, y=18..20
-x=526, y=1439..1442
-x=618, y=1651..1661
-x=392, y=831..834
-x=479, y=58..65
-x=527, y=1708..1727
-x=473, y=1008..1018
-x=517, y=473..492
-x=306, y=517..544
-x=578, y=87..99
-x=608, y=25..29
-x=389, y=1657..1667
-x=586, y=219..229
-x=621, y=1391..1407
-x=449, y=972..974
-y=1324, x=410..431
-y=1556, x=609..611
-x=364, y=394..398
-y=1044, x=530..549
-x=342, y=1194..1202
-x=349, y=1153..1161
-x=371, y=713..733
-x=371, y=138..150
-x=479, y=1499..1518
-y=1621, x=331..342
-x=552, y=204..207
-x=430, y=1402..1406
-y=1393, x=498..510
-x=468, y=1504..1511
-y=1243, x=575..591
-x=494, y=529..542
-y=856, x=481..485
-y=353, x=610..630
-x=390, y=157..160
-x=420, y=61..76
-x=494, y=35..37
-x=312, y=1133..1144
-x=369, y=1091..1104
-x=381, y=1488..1502
-x=315, y=821..824
-x=522, y=529..542
-x=511, y=739..748
-x=505, y=917..944
-x=608, y=1422..1424
-x=466, y=422..426
-x=357, y=1133..1143
-x=398, y=1659..1671
-x=620, y=1532..1536
-x=623, y=1301..1311
-x=539, y=1327..1338
-x=578, y=276..290
-x=443, y=684..694
-x=535, y=1169..1180
-y=1162, x=327..330
-y=78, x=305..329
-y=1533, x=534..538
-x=477, y=163..166
-x=364, y=1714..1727
-y=729, x=464..491
-y=934, x=541..563
-y=1256, x=336..355
-x=572, y=1594..1614
-x=491, y=846..859
-x=341, y=1280..1301
-y=781, x=368..394
-y=1314, x=577..604
-x=466, y=640..650
-y=1709, x=361..378
-y=934, x=577..591
-y=916, x=570..587
-y=406, x=330..336
-y=334, x=566..586
-x=518, y=1637..1658
-y=164, x=384..411
-y=224, x=576..578
-x=467, y=569..590
-y=376, x=550..570
-y=1061, x=610..613
-x=475, y=739..748
-x=466, y=801..811
-x=591, y=994..1006
-y=675, x=576..602
-x=475, y=1260..1274
-x=550, y=363..376
-x=375, y=184..186
-y=1238, x=582..584
-y=1614, x=567..572
-y=384, x=483..490
-x=489, y=1655..1673
-x=523, y=1282..1286
-y=303, x=527..543
-x=332, y=1533..1544
-x=471, y=847..859
-x=384, y=550..567
-x=546, y=1132..1143
-x=580, y=601..612
-x=528, y=1304..1317
-y=841, x=526..550
-y=494, x=426..447
-y=1462, x=501..503
-y=136, x=388..392
-y=37, x=494..499
-y=881, x=457..484
-x=422, y=1098..1101
-x=365, y=173..191
-x=354, y=1639..1643
-y=450, x=559..562
-y=1502, x=358..381
-y=787, x=311..331
-y=1412, x=475..483
-x=338, y=1547..1560
-x=303, y=1617..1621
-y=1384, x=561..566
-x=459, y=206..215
-x=491, y=738..748
-x=418, y=1494..1501
-x=552, y=428..438
-x=506, y=7..20
-y=1368, x=533..552
-x=617, y=1470..1496
-x=445, y=1606..1618
-x=474, y=618..630
-x=378, y=316..324
-x=506, y=429..450
-x=600, y=1351..1371
-y=1525, x=429..456
-x=422, y=1456..1471
-x=541, y=462..473
-x=418, y=1551..1567
-y=692, x=378..381
-x=324, y=887..913
-y=1561, x=603..618
-x=436, y=1244..1255
-y=117, x=371..374
-y=1471, x=588..591
-y=1667, x=389..392
-y=484, x=537..542
-y=567, x=384..397
-x=316, y=69..73
-x=568, y=490..498
-x=493, y=1184..1199
-x=354, y=313..329
-y=832, x=360..373
-y=811, x=466..468
-x=380, y=1404..1409
-x=600, y=744..772
-y=1002, x=470..487
-y=1202, x=595..618
-x=562, y=1069..1090
-x=599, y=1016..1030
-x=622, y=348..350
-x=614, y=1677..1687
-x=370, y=1695..1705
-x=347, y=599..625
-x=605, y=1206..1215
-x=449, y=1207..1210
-x=316, y=951..967
-y=1514, x=444..447
-x=420, y=1603..1630
-x=408, y=552..573
-x=534, y=1422..1446
-x=402, y=553..573
-x=464, y=422..426
-x=576, y=216..224
-x=351, y=1285..1291
-y=312, x=498..509
-x=497, y=316..328
-x=327, y=982..989
-x=304, y=763..789
-y=789, x=301..304
-x=542, y=196..210
-x=349, y=1466..1477
-x=423, y=1395..1409
-x=329, y=1041..1064
-x=431, y=1627..1645
-y=31, x=375..389
-y=1442, x=526..528
-x=542, y=1283..1294
-x=520, y=872..890
-x=423, y=434..454
-y=826, x=434..453
-x=505, y=596..609
-x=416, y=1519..1526
-x=606, y=1699..1710
-x=424, y=1204..1228
-x=407, y=1534..1552
-x=631, y=440..452
-y=1560, x=364..373
-y=1627, x=494..499
-x=576, y=1381..1396
-y=1167, x=318..336
-x=320, y=464..467
-y=1456, x=577..590
-y=404, x=330..336
-x=344, y=194..209
-x=466, y=701..704
-x=593, y=1532..1557
-x=311, y=259..280
-y=872, x=352..356
-x=443, y=1590..1596
-x=518, y=1043..1058
-x=587, y=913..916
-y=459, x=301..325
-x=473, y=1542..1546
-x=574, y=108..130
-x=483, y=1620..1633
-y=784, x=536..546
-x=464, y=702..704
-y=772, x=600..610
-x=360, y=1134..1146
-y=226, x=409..413
-x=584, y=297..310
-y=1412, x=371..393
-y=140, x=295..319
-y=393, x=555..558
-y=1653, x=305..310
-x=633, y=1590..1599
-y=1493, x=602..605
-x=431, y=1315..1324
-x=557, y=1412..1431
-y=794, x=478..498
-y=1025, x=605..609
-y=1518, x=463..479
-x=516, y=51..65
-x=578, y=1638..1642
-y=1525, x=346..370
-x=481, y=854..856
-x=359, y=1066..1084
-y=1557, x=583..593
-x=472, y=418..433
-x=546, y=277..279
-x=305, y=1631..1653
-x=541, y=110..123
-x=573, y=921..929
-x=313, y=1266..1278
-x=449, y=334..354
-x=399, y=306..315
-x=441, y=1677..1694
-x=564, y=1256..1273
-x=557, y=842..850
-x=410, y=399..419
-y=1042, x=391..481
-y=1319, x=382..404
-x=564, y=158..170
-y=710, x=478..502
-y=1458, x=332..382
-x=378, y=1698..1709
-y=689, x=490..513
-x=613, y=1644..1666
-y=229, x=566..586
-y=1658, x=518..529
-x=522, y=1091..1104
-y=1377, x=353..357
-x=625, y=58..71
-x=350, y=911..937
-y=1320, x=515..520
-x=583, y=946..954
-y=653, x=451..463
-x=312, y=1461..1481
-x=544, y=732..734
-x=502, y=699..710
-x=594, y=579..582
-y=1274, x=475..542
-y=612, x=572..580
-x=491, y=975..997
-x=498, y=1634..1641
-x=387, y=1404..1409
-x=539, y=322..326
-x=521, y=1006..1025
-y=150, x=369..371
-y=1727, x=364..371
-y=279, x=533..546
-x=331, y=764..787
-x=568, y=1186..1192
-x=526, y=482..493
-x=393, y=421..428
-x=587, y=1397..1401
-y=438, x=527..552
-y=1212, x=388..394
-x=381, y=692..695
-x=441, y=56..60
-y=694, x=578..599
-y=1641, x=498..505
-y=1536, x=602..620
-y=1058, x=506..518
-x=624, y=190..194
-x=584, y=507..530
-x=608, y=1170..1178
-x=422, y=1178..1182
-x=564, y=384..396
-x=496, y=456..458
-x=382, y=1051..1063
-x=600, y=114..119
-y=582, x=579..594
-x=526, y=658..669
-x=361, y=1576..1579
-y=929, x=567..573
-x=431, y=1191..1217
-y=433, x=453..472
-x=556, y=89..92
-x=351, y=673..687
-x=338, y=50..71
-y=1076, x=431..435
-x=475, y=450..460
-y=799, x=574..594
-x=578, y=1491..1505
-x=555, y=760..788
-x=620, y=58..71
-x=358, y=510..530
-x=339, y=1483..1495
-x=537, y=1112..1126
-x=359, y=699..713
-y=68, x=548..552
-x=382, y=1640..1649
-x=567, y=920..929
-x=543, y=298..303
-x=379, y=184..186
-x=552, y=446..455
-x=609, y=1553..1556
-x=548, y=383..396
-x=369, y=689..701
-y=720, x=601..604
-x=322, y=1593..1604
-x=505, y=1692..1697
-x=346, y=1405..1414
-x=431, y=972..974
-y=1025, x=516..521
-x=591, y=925..934
-x=484, y=867..881
-y=721, x=518..520
-y=1356, x=614..618
-x=456, y=1503..1525
-y=524, x=332..335
-y=99, x=578..605
-x=371, y=370..376
-x=415, y=1707..1725
-x=422, y=1010..1021
-x=344, y=862..875
-x=426, y=593..601
-y=1649, x=382..402
-x=362, y=861..875
-x=610, y=1040..1061
-x=310, y=1632..1653
-y=1458, x=304..309
-x=576, y=895..902
-y=224, x=503..515
-y=515, x=530..533
-y=306, x=373..387
-x=394, y=212..229
-x=373, y=463..466
-y=97, x=386..405
-y=1297, x=462..473
-x=560, y=366..368
-x=425, y=293..295
-y=60, x=441..456
-x=463, y=1619..1640
-x=412, y=941..944
-x=529, y=774..785
-x=505, y=250..266
-x=504, y=1281..1286
diff --git a/src/17/solve.py b/src/17/solve.py deleted file mode 100644 index 95f0bc4..0000000 --- a/src/17/solve.py +++ /dev/null @@ -1,212 +0,0 @@ -from sys import argv as args
-
-debug = False
-
-def parseLine(l):
- s = l.split(", ")
- if s[0].startswith("y="):
- s = s[::-1]
-
- res = [[int(x) for x in v.split("=")[1].split("..")] for v in s]
- return res
-
-file = open("input.txt")
-sinput = file.read()
-file.close()
-
-ainput = """x=495, y=2..7
-y=7, x=495..501
-x=501, y=3..7
-x=498, y=2..4
-x=506, y=1..2
-x=498, y=10..13
-x=504, y=10..13
-y=13, x=498..504"""
-
-sinput = [l for l in sinput.split("\n") if len(l) != 0]
-
-constraints = [parseLine(l) for l in sinput]
-
-xmin = min(c[0][0] for c in constraints)-1
-xmax = max(c[0][-1] for c in constraints)+1
-ymin = min(c[1][0] for c in constraints)
-ymax = max(c[1][-1] for c in constraints)
-xdif = xmax - xmin + 1
-ydif = ymax - ymin + 1
-
-#print(xmin, xmax)
-#print(ymin, ymax)
-
-vmap = [[0 for x in range(xdif)] for y in range(ydif)]
-
-def setMap(x, y, v):
- global vmap
- if y < ymin or y > ymax or x < xmin or x > xmax:
- return
- vmap[y-ymin][x-xmin] = v
-
-def getMap(x, y):
- global vmap
- if x > xmax or x < xmin:
- return 1
- elif y > ymax:
- return 0
- return vmap[y-ymin][x-xmin]
-
-def drawWall(c):
- if len(c[0]) == 1:
- for y in range(c[1][0], c[1][1] + 1):
- setMap(c[0][0], y, 1)
- else:
- for x in range(c[0][0], c[0][1] + 1):
- setMap(x, c[1][0], 1)
-
-for c in constraints:
- drawWall(c)
-
-spring = (500, 0)
-
-
-### SETUP END
-
-
-def interpretChar(v):
- chars = [".", "#", "|", "~"]
- return chars[v]
-
-def drawMap():
- for y in range(ydif):
- print("".join([interpretChar(v) for v in vmap[y]]))
-
-def fwriteMap():
- f = open("output","w+")
- for y in range(ydif):
- f.write("".join([interpretChar(v) for v in vmap[y]])+"\n")
- f.close()
-
-def isstatic(p):
- return getMap(p[0], p[1]) in (1, 3)
-
-def isfree(p):
- return getMap(p[0], p[1]) == 0
-
-def move(p):
- x = p[0]
- y = p[1]
- if isfree((x, y+1)):
- return (x, y+1)
- onblock = isstatic((x, y+1))
- if not onblock:
- return (x,y)
- npos = [(x + dir, y) for dir in [-1, 1]]
- npos = [np for np in npos if isfree(np) and onblock]
- if len(npos) > 1:
- return npos
- elif len(npos) == 1:
- return npos[0]
- return (x, y)
-
-def fillfloor(p):
- onblock = True
- isblock = False
- x = p[0]
- while onblock and not isblock and x >= xmin:
- x -= 1
- isblock = isstatic((x, p[1]))
- onblock = isstatic((x, p[1]+1))
- if not isblock:
- return None # edge
- lx = x+1
-
- onblock = True
- isblock = False
- x = p[0]
- while onblock and not isblock and x <= xmax:
- x += 1
- isblock = isstatic((x, p[1]))
- onblock = isstatic((x, p[1]+1))
- if not isblock:
- return None
- rx = x-1
-
- return [(i, p[1]) for i in range(lx, rx+1)]
-
-def countWFlowing():
- water = 0
- for y in range(ymin, ymax+1):
- for x in range(xmin, xmax+1):
- if getMap(x,y) == 2:
- water += 1
- return water
-
-def countWStatic():
- water = 0
- for y in range(ymin, ymax+1):
- for x in range(xmin, xmax+1):
- if getMap(x,y) == 3:
- water += 1
- return water
-
-def simulate():
- heads = [spring]
- while len(heads) > 0:
- cp = heads[-1]
- if isstatic((cp[0], cp[1]+1)):
- # solid below => expand
- res = fillfloor(cp)
- if res:
- for p in res:
- setMap(p[0], p[1], 3)
- nhead = None
- for x in range(res[0][0], res[-1][0]+1):
- np = (x, res[0][1]-1)
- if getMap(np[0], np[1]) == 2:
- nhead = np
- break
- if nhead == None: # head got trapped
- heads.pop()
- else:
- heads[-1] = nhead
- continue
-
- res = move(cp)
- if type(res[0]) == tuple:
- heads.pop()
- heads += res
- for p in res:
- setMap(p[0], p[1], 2)
- else:
- if res != cp:
- if res[1] <= ymax:
- setMap(res[0], res[1], 2)
- heads[-1] = res
- else:
- heads.pop()
- else:
- heads.pop()
-
- if debug:
- print(heads)
- input()
- fwriteMap()
-
-def solve1():
- simulate()
- #fwriteMap()
- print(countWFlowing() + countWStatic())
- return
-
-def solve2():
- simulate()
- #fwriteMap()
- print(countWStatic())
- return
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/18/input.txt b/src/18/input.txt deleted file mode 100644 index 0f62ca5..0000000 --- a/src/18/input.txt +++ /dev/null @@ -1,50 +0,0 @@ -|...||..|....|..#..|.|..#.|......#|.||.||.|..|....
-.#.....#....#|||#|#..||..|.#..|....#...||.#.#|.|.|
-.|...|#..|||..|.#....#..|.|....|...||...#.#|...|#.
-.........|.|.#||.##.#|.||.|#..||..||...##.##......
-..|.||.#.|.|.|....||#.....|.|.||##.#|##.|....|.#..
-#..#|#..|#...|...#...#....#|##......#..|||#..#.#..
-...#.#.#|...||...|.#...||#.....|##|||.....#.#.#.|.
-.#..|.###|#.|.##......||..#...#.#..|#.|.##.#.#.|..
-..||.|.|.....###...#|...###..##|.#.#....#|..##.|.|
-.##..#.|.#....##...||.|#..#.####..|#..##.|...#....
-..#...#|..|..|.|.#|#.|.|..|..||......#|.|...##..|.
-..||...##|#.....#|..|..|.|.##.|.##.|#|.##|.||...#.
-..|.||......#...#......|......|.##...|..|.|.#...#.
-||#.#|...#.......#......|..|#.#.|.....#...#.|##..|
-.....||.|..|##.#|..#..#|..#|.##....##|.##.||...###
-#|..#..#....|...|.|....#.##...#..|.|..#........|#|
-....#.|.....##.|..##.....##..#.....|#.|.#.|.#.###.
-...###........|.....|..|#..#..|##..###.....#||..||
-#.#...#|..##...|..|||#.....|#|.......#..#.......#|
-#.....||||.#..##.|..|#|.#..|.......|##.|#|#....#.|
-#..##|...|....#.#.#.||.|..|.....#|...|....#|..##|#
-#..|||#..#..|..#|....#.........#...#...#...|.|...#
-.........|.|...#...|...#|##..#.....#.|.#..||.#...#
-.|#...#|...#.###.|#.||.|..#..#.####..#..||.#.#|..|
-.|#....||#|#|.|.|#....##..||.##|....#....#||...|.|
-...|....|...|.||#...#...........#..#....##|.#....|
-....#|#..#....|##...#..|#..#.|......|#........|#..
-.|..#...|..#.|.#....#....#.|...#..|........|..|...
-...##|....||...##...|......|#..|..#..|.........##.
-..##.|.#..........##.|....|##|.....|.#.#.|.....|.#
-#|.|.......#|..#..#.#.|..|.|.#.||#.#...|.#..|.....
-||.#............#...|...#..|#|..||##...#.|#|##|.#|
-..|..||####.|....|##.#.|...|||#..|.|.|.........##.
-...|....|..||.#..##||.|||#..|..#...#.##...||.|..||
-....|...|##...#|.|.|..#|..|#|..##.|....||..|.|.||.
-#..#.......|.#..#..||...#|..#.....#|#..|..|...##..
-#...#..##..|.#...#.....|......###|..|...||.....|..
-#.|..#..|#..|#|..#..||#......|#.......|.#....###..
-#...#||...##|.#.#|####|...|......|.#.#..|#.##...|.
-|.#..#....#..#.....|#..|#.|..##.#..|#|##........||
-#.........##..|....|#.........||..||##...||.|..|.|
-.#....#.......#..|#.|...|....#.#.#........##.##.|.
-.#.#..|.|#..|..#..###...|.#......|.|#.|.##..|.|##.
-..||..|.##.##|...|....#||##....#..#.|#|.|#||#..|..
-.......#|#||.....|.||.|##..|.|....|....|.#...#..|.
-#||##|.||..|##.|..|#.#.|.|....#|.#|.....|||..#.||.
-.||#.|#...||#.#..#..|.|#.....#.#.|#.|...#..#...#..
-#........|..#...|#..###.|.#|...#..#...........#.|#
-.|...#|....||.|...#.|..|.||##.|..#|.#|..|.#....#..
-||....###...#...|||.||..#.|.....||.#|..###..|....#
diff --git a/src/18/solve.py b/src/18/solve.py deleted file mode 100644 index 270ace1..0000000 --- a/src/18/solve.py +++ /dev/null @@ -1,106 +0,0 @@ -from sys import argv as args
-from copy import deepcopy
-from collections import deque
-
-states = (".", "|", "#")
-
-ivals = dict()
-ivals["#"] = 0
-ivals["."] = 0
-ivals["|"] = 0
-
-def parseLine(l):
- return tuple([states.index(c) for c in l])
-
-inputstr = open("input.txt").read()
-
-sinputstr = """.#.#...|#.
-.....#|##|
-.|..|...#.
-..|#.....#
-#.#|||#|#|
-...#.||...
-.|....|...
-||...#|.#|
-|.||||..|.
-...#.|..|."""
-
-vmap = [parseLine(l) for l in inputstr.split("\n") if len(l) != 0]
-ylen = len(vmap)
-xlen = len(vmap[0])
-
-def getAt(x, y):
- if y < 0 or y >= ylen or x < 0 or x >= xlen:
- return None
- return vmap[y][x]
-
-def next(x, y):
- v = vmap[y][x]
- around = list()
- [[around.append(getAt(x+i-1, y+j-1)) for j in range(3) if not (i == 1 and j == 1)] for i in range(3)]
- if v == 0:
- if len([v for v in around if v == 1]) >= 3:
- return 1
- elif v == 1:
- if len([v for v in around if v == 2]) >= 3:
- return 2
- elif v == 2:
- if len([v for v in around if v == 1]) < 1 or len([v for v in around if v == 2]) < 1:
- return 0
- return v
-
-def getVals():
- vals = [0 for x in range(3)]
- for y in range(ylen):
- for x in range(xlen):
- vals[vmap[y][x]] += 1
- return vals
-
-def drawMap(cmap):
- for y in range(ylen):
- print("".join([str(c) for c in cmap[y]]))
-
-def iterate(n):
- global vmap
- for i in range(n):
- omap = [deque() for y in range(ylen)]
- for y in range(ylen):
- for x in range(xlen):
- omap[y].append(next(x, y))
- vmap = omap
-
-def getRes():
- vals = getVals()
- return (vals[1] * vals[2])
-
-def solve1():
- #drawMap(vmap)
- iterate(10)
- vals = getVals()
- #drawMap(vmap)
- print(vals[1] * vals[2])
- return
-
-def solve2():
- iterate(1000)
- omap = deepcopy(vmap)
- counter = 0
- while True:
- iterate(1)
- counter += 1
- if vmap == omap:
- break
-
- #print(counter)
- print(getRes())
- #drawMap(vmap)
- return
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/19/input.txt b/src/19/input.txt deleted file mode 100644 index 0392b90..0000000 --- a/src/19/input.txt +++ /dev/null @@ -1,37 +0,0 @@ -#ip 4
-addi 4 16 4
-seti 1 5 1
-seti 1 2 2
-mulr 1 2 3
-eqrr 3 5 3
-addr 3 4 4
-addi 4 1 4
-addr 1 0 0
-addi 2 1 2
-gtrr 2 5 3
-addr 4 3 4
-seti 2 7 4
-addi 1 1 1
-gtrr 1 5 3
-addr 3 4 4
-seti 1 9 4
-mulr 4 4 4
-addi 5 2 5
-mulr 5 5 5
-mulr 4 5 5
-muli 5 11 5
-addi 3 1 3
-mulr 3 4 3
-addi 3 18 3
-addr 5 3 5
-addr 4 0 4
-seti 0 3 4
-setr 4 2 3
-mulr 3 4 3
-addr 4 3 3
-mulr 4 3 3
-muli 3 14 3
-mulr 3 4 3
-addr 5 3 5
-seti 0 4 0
-seti 0 5 4
diff --git a/src/19/solve.py b/src/19/solve.py deleted file mode 100644 index f764a99..0000000 --- a/src/19/solve.py +++ /dev/null @@ -1,131 +0,0 @@ -from sys import argv as args
-from math import sqrt
-
-def parseCommand(l):
- s = l.split(" ")
- args = [s[0]]
- args = args + [int(v) for v in s[1:]]
- return args
-
-file = open("input.txt")
-input = file.read()
-file.close()
-
-sinput = """#ip 0
-seti 5 0 1
-seti 6 0 2
-addi 0 1 0
-addr 1 2 3
-setr 1 0 0
-seti 8 0 4
-seti 9 0 5"""
-
-input = input.split("\n")
-
-inspaddr = int(input[0][4:])
-
-instructs = [parseCommand(l) for l in input[1:] if len(l) != 0]
-
-register = [0 for x in range(inspaddr+1)]
-
-opmap = dict()
-opmap["addr"] = lambda a, b : register[a] + register[b]
-opmap["addi"] = lambda a, b : register[a] + b
-opmap["mulr"] = lambda a, b : register[a] * register[b]
-opmap["muli"] = lambda a, b : register[a] * b
-opmap["banr"] = lambda a, b : register[a] & register[b]
-opmap["bani"] = lambda a, b : register[a] & b
-opmap["borr"] = lambda a, b : register[a] | register[b]
-opmap["bori"] = lambda a, b : register[a] | b
-opmap["setr"] = lambda a, b : register[a]
-opmap["seti"] = lambda a, b : a
-opmap["gtir"] = lambda a, b : 1 * (a > register[b])
-opmap["gtri"] = lambda a, b : 1 * (register[a] > b)
-opmap["gtrr"] = lambda a, b : 1 * (register[a] > register[b])
-opmap["eqir"] = lambda a, b : 1 * (a == register[b])
-opmap["eqri"] = lambda a, b : 1 * (register[a] == b)
-opmap["eqrr"] = lambda a, b : 1 * (register[a] == register[b])
-
-
-def solve1():
- global register, insptr
- while register[inspaddr] < len(instructs):
- insptr = register[inspaddr]
- ins = instructs[insptr]
- #print(register)
-
- # execute command
- if len(register) <= ins[3]:
- register += [0 for x in range(ins[3] - len(register) + 1)]
- register[ins[3]] = opmap[ins[0]](ins[1], ins[2])
-
- # increment instruction pointer
- register[inspaddr] += 1
-
- print(register[0])
-
-
-alpha = [chr(c + ord('a')) for c in range(26)]
-
-dismap = dict()
-dismap["addr"] = lambda a, b : "%s + %s" % (alpha[a], alpha[b])
-dismap["addi"] = lambda a, b : "%s + %d" % (alpha[a], b)
-dismap["mulr"] = lambda a, b : "%s * %s" % (alpha[a], alpha[b])
-dismap["muli"] = lambda a, b : "%s * %d" % (alpha[a], b)
-dismap["banr"] = lambda a, b : str(alpha[a] & alpha[b])
-dismap["bani"] = lambda a, b : str(alpha[a] & b)
-dismap["borr"] = lambda a, b : str(alpha[a] | alpha[b])
-dismap["bori"] = lambda a, b : str(alpha[a] | b)
-dismap["setr"] = lambda a, b : str(alpha[a])
-dismap["seti"] = lambda a, b : str(a)
-dismap["gtir"] = lambda a, b : "(%d > %s)" % (a, alpha[b])
-dismap["gtri"] = lambda a, b : "(%s > %d)" % (alpha[a], b)
-dismap["gtrr"] = lambda a, b : "(%s > %s)" % (alpha[a], alpha[b])
-dismap["eqir"] = lambda a, b : "(%d == %s)" % (a, alpha[b])
-dismap["eqri"] = lambda a, b : "(%s == %d)" % (alpha[a], b)
-dismap["eqrr"] = lambda a, b : "(%s == %s)" % (alpha[a], alpha[b])
-
-def disassemble():
- for i in range(len(instructs)):
- ins = instructs[i]
- print(i ,":",alpha[ins[3]],"=", dismap[ins[0]](ins[1], ins[2]))
- print()
-
-def solve2(): # disassembled and reverse engineered to solve
- #disassemble()
- #return
-
- f = 10551276 # found by running
-
- res = 0
- sqrtf = sqrt(f)
- for i in range(1, int(sqrtf)):
- if f % i == 0:
- res += i + f / i
-
- if int(sqrtf) % f == 0:
- res += sqrtf
-
- print(int(res))
- """ divisor sum algo disassembled
- c = 1
- b = 1
- a = 0
- while b <= f:
- c = 1
- while c <= f:
- if b * c == f:
- a += b
- c += 1
- print(".")
- b += 1
- """
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/2/input.txt b/src/2/input.txt deleted file mode 100644 index 0bb005f..0000000 --- a/src/2/input.txt +++ /dev/null @@ -1,250 +0,0 @@ -vtnihorkulbfvjcyzmsjgdxplw
-vtnihorvujbfejcyzmsqgdlpaw
-vtnihoriulbzejcyzmsrgdxpaw
-vtsihowkulbfejcyzmszgdxpaw
-vtnizorkunbfejcyzmsqgdypaw
-vtnihorkdlbfojcyzmsqgdfpaw
-vtpioorkulbfejcysmsqgdxpaw
-vtnvhorkulbfhjcyzmsqgdipaw
-vtrihorkylbaejcyzmsqgdxpaw
-vtnigorkulbfejcyzmszgjxpaw
-rtnihorkklbfejcyzmslgdxpaw
-vtnihorkqlbfejcyzmsqgmppaw
-vgnisorkulbfejcyzmsqgdkpaw
-atnihorkulbfejcyzmdbgdxpaw
-vtnihorkulbfejcezmsqqixpaw
-vtnihorkucbfejcxzmsqgdypaw
-vtnihorkulxfajcyzmsqgyxpaw
-vbnihorkulbfescyzmsqgdxpae
-vanshorkulbfejcyzjsqgdxpaw
-vtnihoukulbfejcyzmwqgdxpbw
-vtndhorkulbfejcyxmgqgdxpaw
-ztnihlrkupbfejcyzmsqgdxpaw
-vtoihkrkulbfejhyzmsqgdxpaw
-vtnihorkalbiejcyzmsqgdxeaw
-vtnihorhulcfejcyzqsqgdxpaw
-vtnshotkulbfejcyzmsqvdxpaw
-vtnihoryulbfejcyzmsqgpspaw
-vtnihorkukbfmjcyzmsqgdxpcw
-vtnihorkulbfejcybmsqgdupxw
-vlnihorkulbfejcyzmsqgdmpac
-vtnihorkulbfejcezmfqgdkpaw
-vpnihorkulbfejcyzmsqfdxyaw
-vtnihorkulbjejcysmcqgdxpaw
-vdnihorkulffejcyzisqgdxpaw
-vtnihorkulkfsjcyzrsqgdxpaw
-vtnihorkulqfegoyzmsqgdxpaw
-vtnihorkulbfeyhyzgsqgdxpaw
-vnnihorkulbfejcyzmdqgdxpfw
-vtnihorkulstejcyzmsqgdxpak
-vtnphorkujbfejcczmsqgdxpaw
-vtpihorkulbfejcyzmskgdxiaw
-vtnihorkulbfejcdzmxqsdxpaw
-vtnihorgulbfticyzmsqgdxpaw
-veniuorkulbfejcyzmsqgdmpaw
-vhnihorkclbfejyyzmsqgdxpaw
-vtnihorkulbfejcyzmrqgsrpaw
-dtnihorkzlhfejcyzmsqgdxpaw
-vtnizorkulbfejcyzhsqgdxdaw
-vtnihohkulbfejcybmpqgdxpaw
-vtnihbrzulbfejcyzmsqgdppaw
-stnihorkulmfejcyzmsqgdxeaw
-vtnihorkulbfejmgzwsqgdxpaw
-vtnihcrkulbfnjdyzmsqgdxpaw
-vxxihorkulbfejcyzmsqddxpaw
-vtnhhorkulbfejcyzmsqgdpiaw
-vtnihoakulbfvjcyzmmqgdxpaw
-vtbbhorkulbfejcyqmsqgdxpaw
-vtnihnukulbfejcxzmsqgdxpaw
-vteihorgulkfejcyzmsqgdxpaw
-vbnihorkulbfejcyzmsqgdxpmt
-itnihorkulbuejcyzmsqgdxpxw
-vtnfhqrkulbfejcwzmsqgdxpaw
-vtnihorkubbfedcyzmsqpdxpaw
-rtnihorkulhfejcyzmsqgdxpah
-vtnihorzulbfejcyqmsqqdxpaw
-vtnihorkulbfeecyzmsqgdcgaw
-vtniuorkulbfejpyzmsqxdxpaw
-vtnicorkilbfajcyzmsqgdxpaw
-vtzihorkulbfejcyzmsqgaxpkw
-vtnihomkulbfejcyzmsqgvmpaw
-vznihockulbfejcyzmsqgdjpaw
-vtqmhorkulhfejcyzmsqgdxpaw
-ptnihorkulbfsjcyzbsqgdxpaw
-ftnihorkulbfejcepmsqgdxpaw
-vtnhhorkulbfejyyzxsqgdxpaw
-vtnihorkulbfejcyzmsiwdxpxw
-vtnikorkulbfejvyzmnqgdxpaw
-vtnihorkulbgejoyzmsqhdxpaw
-vtnihorkulbwejqylmsqgdxpaw
-vtnihorkdlbfejcyzwsqgdrpaw
-vtnihorkulbfojcyzmtugdxpaw
-vtnihonkulbtejcyzxsqgdxpaw
-vtnihorkulrfevcyzmsqgdxpcw
-vtnioorkulbfejcynmsqgdxpad
-vtnihorkudffejcyzhsqgdxpaw
-vtnihorkelbfejcqzmsqgdxbaw
-jtnihokkulbfejcyzmsqgdrpaw
-ztnihorrulbfejcyzlsqgdxpaw
-vtwiforkulbfejcyzmsqpdxpaw
-vtnihopvulbfejcyzmsqgzxpaw
-vtnihzrkulafejcyzmsqgdxpaj
-vtnixoekulbfejcyzmsqgdxpak
-vtnihorkulbfejxyzmsqgdxhlw
-vtnihorkulbfwjcyzmmqcdxpaw
-vtnihorkulbfejcywmsdgdxzaw
-vtnihorkulbfejfyzmsqggxuaw
-vtnihnrkurbfejcyzmsqggxpaw
-vtuihorkulbkejcyzmsqgdxpww
-vtnihoriuljfejcyzssqgdxpaw
-vtnihorkulyftjcezmsqgdxpaw
-vtnihorkklbfeccyzmsqgdppaw
-vtnihorkulbfdpcyzmsqgdxpcw
-vtnihqrkulgfejcyzmeqgdxpaw
-vtnihorktlbfejdyzmswgdxpaw
-vinihzrkulbfeacyzmsqgdxpaw
-vtuihorkupbfejcyzmsqgdxplw
-vtnihorkulbfcjcyzmlqgdxpsw
-vtnihorkllbfejcyzmsqgdxvak
-qtnihorkulbfdjcyzusqgdxpaw
-vtniherkulbhejcyzmsqgzxpaw
-vtnzhorgulbfejcyzmsqgdxpew
-vtnihoykulhfjjcyzmsqgdxpaw
-vtnihookulyfejcyzmsqgdxqaw
-jtnihorkulbfejcyzmssgdxpaq
-vtnicorkulwfejcyzmsxgdxpaw
-wtnihorkuubfejcyzmsqgdxpam
-vtnihorkuggfejcyzmsdgdxpaw
-vtnihurkulbfgjcyzmsqrdxpaw
-ptnihorkuabfejcyzmsqgqxpaw
-vtrihoykulbfejcyzmsqgdxpam
-otnihorkulbfejcyzmpqgdxpjw
-vtyihorkulbfejdyznsqgdxpaw
-vtnihornulbfrjcizmsqgdxpaw
-vtnihfrlulbfejcyzmsqgdxpah
-atnihorkulbfejcyossqgdxpaw
-vtnihorkuljfejcyzysqgdxpow
-vtniyorkulbfejcyzmsqgdxbaz
-venihorkulbfejctzmqqgdxpaw
-vtrihorkulbfejcyjmsqgdxpfw
-venitorkulbfexcyzmsqgdxpaw
-vtbihorkulbfejcyzmwqgdxpyw
-vtnihorkuubfejxyzmsqgdxkaw
-vtqihorkulbnejcyzmsqgdxnaw
-vteihorkurbfejcyzmsqwdxpaw
-vtgjhorkxlbfejcyzmsqgdxpaw
-ytniworkulbfejcyzmsqgdxptw
-vtnihorkulbfejcyzmsvgixhaw
-dtnihorkusbfejcyzmsqidxpaw
-vtnihurkulbfejcdzmkqgdxpaw
-vtgihorkulbfejcyzhsqgdxpaf
-vtniudrkulbfeacyzmsqgdxpaw
-vtnihorkulbfejcyemsokdxpaw
-vtnihorkulbfejcyjmwqgdxpag
-vtnihorpulbfetcpzmsqgdxpaw
-ctnzhorkulbfejcyzmfqgdxpaw
-vanihorkuhbwejcyzmsqgdxpaw
-vtnihonkurbfejcyzvsqgdxpaw
-vtnihgrkulbcejcbzmsqgdxpaw
-vtnihorkutbfeacyzmsqcdxpaw
-vtniaorkuhbfqjcyzmsqgdxpaw
-vtnihorkylbfozcyzmsqgdxpaw
-vtnihorkulbfejcypmfqgdxpbw
-vtrphonkulbfejcyzmsqgdxpaw
-vtnihorkulbdejcywmsqydxpaw
-vtnikorkulbfejvyzknqgdxpaw
-vznihorkulbfejcyzmsqbdxpam
-vtmghorkulbfejcyzmsqghxpaw
-vtnihorkulbfejcyzmshglxpfw
-vtiihorkulbfejcjzmsqgdxoaw
-rtnihorkulbfejcuzmsqgdxpow
-vtnthoikulbuejcyzmsqgdxpaw
-vtniholkulbfcjcyzmsqgdxpvw
-vdnihorkulbbejcyzmsqgdxdaw
-ntnihorkulbfojcyzmsqgdxzaw
-vtniqorkulbfejcyzklqgdxpaw
-vtnihorkulhfejcpzmsqgdxprw
-vhnihorkulqfejcyzmsqgdapaw
-vtnihorkolafejcyzmsqadxpaw
-vtnihorkulbpejcyzasqgtxpaw
-vtnihgiyulbfejcyzmsqgdxpaw
-dtnihorkulbffjcyzmsqgdfpaw
-vtnvhorhulbfejcyzmpqgdxpaw
-vtniholkulbfebcyzmsqgnxpaw
-vunihorkulbbejcyznsqgdxpaw
-vtnihorkulbfehcyomsqgaxpaw
-vtnihorkllboejcyzmsigdxpaw
-vtnihwrkulbfejcywmsqgdxiaw
-vtnoherkulbfbjcyzmsqgdxpaw
-vtnbhorkulbfejcyzmsqgkxpaa
-vtnihorkilbfdjxyzmsqgdxpaw
-vtnfhorkuvbfejcyzmsqgixpaw
-vtnyhorkulbpejcyzmsqgdxjaw
-vtnihomkalbfejcyzmqqgdxpaw
-vtnihorkulbfejcybmsqgjxvaw
-vtnihorkulbfgjcnzmsqbdxpaw
-vtnihorkulbfejcyzmpqgsxpap
-lmnihorkulbfejcizmsqgdxpaw
-vtmahkrkulbfejcyzmsqgdxpaw
-vtnihorkulbfujcyrcsqgdxpaw
-vtnzhorkulbfejcyzjvqgdxpaw
-vtnicorkulbfejmyzmsqgdxvaw
-vtnyhojkulbfejcyzmsngdxpaw
-vtnuhorkulbfejcyzlsqgdxpmw
-vtnihorkulufejcgzmtqgdxpaw
-vtnihfrkulbfejnyzmsigdxpaw
-vtnzhorkulbdejnyzmsqgdxpaw
-vttihorkulbfejcyzmyqgdxwaw
-vknihorkulbfejnylmsqgdxpaw
-vtnihorkulbfejcfrmsqgdxpaz
-vtnchormulbfejcyzmsqgdopaw
-vtnihorkulbfebcyzusqgdxpam
-jtnihorwulbfejcyzksqgdxpaw
-ctnihodkutbfejcyzmsqgdxpaw
-vonihorkultfejcyzmsqgixpaw
-vtnihorkulbqejcyzmsqgdypcw
-vfnihorkulbfbjcyzmsqcdxpaw
-utnihorkulbfejcyqmsqgdxraw
-vtnihorkjllfejcyzmskgdxpaw
-vtnihorkulbfejcyvisqgdapaw
-vtnihorkclzfejcyzmsqvdxpaw
-vtnihwrkvlffejcyzmsqgdxpaw
-vtnihlrkulbfejcrzmsqydxpaw
-vtnihorkulbfbjtysmsqgdxpaw
-vtnihorkulbfxjcepmsqgdxpaw
-ttnihorkulbfejpyzmsqgdxpaz
-vtnwhorkolbfejcdzmsqgdxpaw
-vtnihorkulbfejcyzdsqgdxppn
-vtnwporkulbfercyzmsqgdxpaw
-vtnshorxuvbfejcyzmsqgdxpaw
-vtnihxrkulbfejcyomsqfdxpaw
-vtnwhorkrljfejcyzmsqgdxpaw
-vqnihorkulbfejcyzmtqgdxpuw
-vtnnhorkulbfhrcyzmsqgdxpaw
-vtuihwrkulbfedcyzmsqgdxpaw
-vtgbhorkucbfejcyzmsqgdxpaw
-vtnitorkulbfejcozmsqgdkpaw
-otnihomkulbfejcyzmsqgdxhaw
-vtnihgrkulbfrjcyzmsqxdxpaw
-vtnihorkulbfujcyzmsqghxpzw
-vsnihopkhlbfejcyzmsqgdxpaw
-vtniherkulbfejcyzmpzgdxpaw
-vtnxhorkulbfejcszmsqgdxcaw
-vtnihorkulbfejctzmsxadxpaw
-vtnihorkslbmejcyzmsqgnxpaw
-vtnwhorgulbfegcyzmsqgdxpaw
-vtnihorkulbfsjcyzmsqgdxiau
-vtnihorkulbfejcyzmsqldxpbj
-vtnghorkulbfmjcyzmsqgdxpaa
-vtnihorkulbfetcyzmpqudxpaw
-vtnbhorkulbfejcyzmsqgdupyw
-ntnihorhulbfejwyzmsqgdxpaw
-vjnihorkulbfejcyqosqgdxpaw
-vtiihorbulbfejcbzmsqgdxpaw
-vtnihorkulbfejxlzmpqgdxpaw
-vtnihorkolbfejcyfmsqgdxraw
-vtnihqrrulbfedcyzmsqgdxpaw
-ctnihorkulbfejcyzmsqgdxpsy
-vtnihorkulbfkjcezmspgdxpaw
-ztnihorkulbmcjcyzmsqgdxpaw
-vinihorkulbfedcyzmsqgdxpau
diff --git a/src/2/solve.py b/src/2/solve.py deleted file mode 100644 index 79e60e7..0000000 --- a/src/2/solve.py +++ /dev/null @@ -1,47 +0,0 @@ -from sys import argv as args
-
-file = open("input.txt")
-data = [x.replace("\n","") for x in file.readlines()]
-file.close()
-
-def solve1():
- doubles = 0
- triples = 0
- for s in data:
- counts = list((0,) * 26) # characters
- for c in s:
- counts[ord(c[0])-97] += 1
- if 2 in counts:
- doubles += 1
- if 3 in counts:
- triples += 1
- print(doubles * triples)
-
-def compare(s1, s2):
- dif = 0
- same = list()
- for i in range(len(s1)):
- if s1[i] != s2[i]:
- dif += 1
- else:
- same.append(s1[i])
- return(dif, same)
-
-def solve2():
- for i in range(len(data)):
- for j in range(i, len(data)):
- if i == j:
- continue
- res = compare(data[i], data[j])
- if res[0] == 1:
- print("".join(res[1]))
- return
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/20/.gitignore b/src/20/.gitignore deleted file mode 100644 index 53752db..0000000 --- a/src/20/.gitignore +++ /dev/null @@ -1 +0,0 @@ -output diff --git a/src/20/input.txt b/src/20/input.txt deleted file mode 100644 index 9c6c2aa..0000000 --- a/src/20/input.txt +++ /dev/null @@ -1 +0,0 @@ -^WSWSWSWNWSSWWWWWNENESENNWWNENENESENEEES(SWNWSS(WW(SS|N(W|E))|E)|EEENNEENESSWSSSSEENNESSENESSWWWWSWWWSWWSSSEEENEENWW(WWSEWNEE|)NEEESSENEENN(WSWNWESENE|)ESENENEEENEESWSESWWNWWSESWW(N|WSEESSSWWWNN(ESENSWNW|)N(WSW(SESSWSSSESSSSWWWSWWNNNENESS(WSNE|)EENWN(E|NWNENWNEN(NWWS(WN(NEEEWWWS|)WWWSEESSESWWNNWWSWNWSWNWNWWSSWWWSESENESENN(ESSSSSSENNNESENNN(WWSEWNEE|)ESE(ESWSW(N|SESSWWW(NE(NWES|)E|SESWWWWWSESWWWWWNWWSWWWSSSWWNWSWWNENWNENENNESSE(EEENWNNWSSWNNNNWWSWNWNENNWNNENEESENESEENNW(WWWWNWSWSWSSSWNNWSSWWNENWWNNNNWNWSWSSSSSWNNNWWSWSWSESEE(NWNENSWSES|)SENEENNE(SSE(N|SEESENESSSE(NNNEWSSS|)ESSE(NEENSWWS|)SWWS(WNWSWWWWSWWWNWNEEE(SWEN|)EEENWWWWNENESENEEE(NWWNWWS(WWWS(WNN(WSWNN(WSWWWNWWWWWWNWNEESENENESS(EEEE(SWEN|)(NWNWSWNNEENEE(SWSNEN|)NE(S|NWNENNENESESWWSEE(SSWNWS|ENENWNWNWWWWWWSEE(SWS(E|SSWS(E|WWNNNWSSWWNWWSSE(N|EEES(WWS(WWN(E|WWNNWNENE(SSS|EEEE(S|NENEE(NNNWNWNWNWNNEENEEESSWW(NEWS|)S(WNWESE|)ES(W|SESEES(WW|ENNWWNEENWW(WSNE|)NNNNNESEEESSSW(WWNNEESW(ENWWSSNNEESW|)|SSEESWSEENNNNNNEEENNEENESSESSWNWNWSSWSWW(NEWS|)SSEEN(W|EEEEN(ESESSWSSSWWWSESWWSS(WNWNNWNWN(WWWNNSSEEE|)EEENES(EEENNN(E|WWWS(ESEN|WWWSE))|SSW(NWES|)S)|SSEEEE(SWSWWWNEE(WWSEEEWWWNEE|)|NNES(S|EENNW(S|NWN(WSS(W(WSW(SEENSWWN|)N|NN)|E)|ENNEENWW(WSSNNE|)NENWNEESSENEENWNNWNWNEEEESSS(WNNWESSE|)EENNNW(SS|NENNENWNNEENNEENWNWSWNWSSWNNNNNWSWSESSWNWSWWSSSWWNWSWWNENWWSWSSE(ESENESESWWSS(SSSENNNEN(EEEENNNNESESSS(ENNNNWN(EEENSWWW|)NWWS(E|W(N|SSSSWNNW(SS|W)))|SW(WWWWSSSS(W(W|NNN)|E(ESNW|)N)|NNN))|W)|WNNWNWWWWSES(ENEWSW|)WWWSES(ENSW|)WW(SSSSWENNNN|)NWNWW(SEWN|)WWWNNWNWSWWWWNNNWNWWNWNWWWSESWSSESWSSSEENN(WSNE|)EENWNEE(NWWW(W|SS|N(E|N))|SSE(NN|SEESENEESSW(N|S(WSWWSWWWWWWSSW(NNNNNEESWSEENNNEE(NWWEES|)SWSSENE(EEN(WNWSNESE|)E|S)|SSESWSSSSENNESENESENESEE(ENNN(ESSENSWNNW|)WSW(SEWN|)WNNE(S|N(ESEWNW|)WNN(ESNW|)WWSSWW(NNESNWSS|)(SESWS(EEENN(WSNE|)NN|W)|W))|SWWWWWWS(SSSESSES(E(EEE|N)|WSSSSWSWW(SEESSEENNN(WSSNNE|)EN(EESSEEESWSWWSESWSEENEENN(WSWENE|)EEESESSWWW(SESSSWSESSENNENWNNEN(EESWS(EENN(NWNNW(NNW(WNN(WSWS(WNN(E|NWSWNWS(NESENEWSWNWS|))|E)|ESEESSEENW(ESWWNNSSEENW|))|S)|SS)|EEESSWNWSSWSWW(NEWS|)SEESESSWWWSESEESESWWNWWSWNWSWWSEESWWSSEEN(ENNEE(N|EESSWWSW(NNEEWWSS|)WSWWWWWWNENWWSSSSSSWNNNWSSWNWWNENWNNEES(W|S(S|EENNNENNENEE(EENNNN(WWSSWS(EENNSSWW|)WWSWSWWNENNNEEE(SWWSNEEN|)ENWNWNEEE(ESWWEENW|)NNNN(ESNW|)WWWSEESSWWN(WWWSESSWNWWSWWNNE(ENWNWSW(SSSSSSSESESSENNE(NENNWN(EEE(NNN|E)|WSS(SWNWNENW(ESWSESNWNENW|)|E)|N)|SSS(WWSWNNW(SSSSEE(NWES|)SWSW(SSSSEENWNEEE(SSESSESENNWNN(NWSNES|)EEENENNW(NEEEEESENESSSSEESSESSWNWWNN(ESNW|)WWWNWSWW(WSW(NWES|)SESWSS(ENENNNEEEEESWSSWS(WW(NNNEESWS(NENWWSNEESWS|)|W)|EENESEN(NWWEES|)EES(ENNEENWNW(NWNEENWNENWWWNEENESENESEENNNENWNWNENENESENNNWWNNNNNESSESWSEEESEENWNNWNW(SSEWNN|)WN(NWWNEENWN(E|WSWWSESSWSSE(SWSESS(EE|WWN(E|NWNNE(S|NWWN(WSWSESSE(SSW(SESESSW(SSS(ENNE(NNNEN(WWNNSSEE|)E|SE(S(W|S)|N))|W(NNN|WWS(W(SSSSEENW(ESWWNNSSEENW|)|W)|E)))|N)|N|WW)|NN)|ENE(NN(WS|NEE)|S|E)))))|N))|EEEES(W|SEENEENW(WWSNEE|)NENEN(WWSNEE|)E(N|SESSWW(NEWS|)SEEENENWNEN(WW|ESSESESSSWSSWSWNWNENE(S|NENW(N|WSWSWSSWSEESWWWSSWSWWNENWNWN(NNN(W|EESWSES(E(S(S|W)|ENWNNEE(SWEN|)N(E|WWW))|W))|WSWWSW(NN(N|EE)|SWWS(WNSE|)SESSESESESEESSSWSEESWWSESWSEEEES(EENESEEEEENWNEENNNWWNENESESSENEESSSSWWNW(NEE(S|N)|SS(WNSE|)EEEENEES(W|EEENWWNNNEESWSEEESS(WNSE|)ENENWNWNNNEEESSW(NWSNES|)SEEENWNENNW(NEEENENWNENNENENNWSWSWNWNNNEENWNENNENNWNNEENENNNWWWNNESENNNNWWSESWWNNWWSSSE(ESSSEEESWSWNWWNWSWWWSESENEEESWSESS(E|WSWNWNE(E|N(N|WWSWWSESE(ESWSSWNNWNWWNNNWWWNWNEESENEENNNEES(ENE(N(EESWENWW|)WNWSWNWW(S(WWWN(EE|WNW(SSESSES(ENN(W|EESWSE)|WWNWSSSSE(ESWWWNWSWSESEESSSWWSESWWSEEESSSENNESSESSWNWSWNWSSEEESSEEEEEENNESE(NNNNNNWSSWSWS(EENSWW|)WNWSSW(S(WN|EENES)|NNNENWNEESE(SWEN|)ENWNENEEN(EE(NENN(EN|WSWS)|SWS(WW|SSSESWSSEE(SWWEEN|)N(W|NENWNWNN(SSESESNWNWNN|))))|WWNNWWWWWWSEESESS(ENENNW(S|W)|WW(SS|N(E|NWSSWNN(WSNE|)NNNNEN(WWW|ESS(EE(NWNN(ESNW|)W|EE)|W)))))))|SSW(WWWWWSS(WWWW(SSSEENWNE(WSESWWEENWNE|)|NNWWNEEN(WWNWWSESS(SEEWWN|)WNWNWWNWSWNWWSWSSWNWWNNEE(SWEN|)ENNNNENNN(EENESSWSW(N|SSWSEENNESSS(EENES(SWEN|)EENWNWWNENE(EESE(SW(WNWESE|)SS|N)|NWNENENWNWW(NENE(ES(ES(ENSW|)W|W)|NWNENENWNWN(WS(SES|WN)|EESENE(SSWENN|)NN(E(NNWSNESS|)E|WWS(WNWSNESE|)E)))|SS(ENSW|)SSSW(W|NNNN|SSS)))|WWW))|WSSWSSSWWWNWSSS(E(NEEEWWWS|)SSSEESEESESSS(WW(S|NENWNWW(NWES|)SSS(ENN|WN))|ENNNNNEE(SSSW(NN|SSS(ENNENES(NWSWSSNNENES|)|W))|N(WW(WSSNNE|)N|E(S|E))))|WNWNWNWNEENENE(SS(EESENSWNWW|)WS(S|W)|NWWSWSWW(EENENEWSWSWW|))))|ESSSENES(NWSWNNSSENES|)))|EE(NWES|)SS)|N))|NN))|NENN(WSNE|)NNE(ENNNWESSSW|)S))|E)|NEEEENE(SS|NNWW(NENWNEEEESESS(WWN(WNEWSE|)E|ENNNESSEEENWWNNEEENWWWNENENWWNEENENNWSWW(S(WSWW(NEWS|)WSSSEENE(NWWSNEES|)(SSWS(W(S|WWN(EE|WWS(E|W(WSNE|)N)))|E)|E)|E)|NENNNW(WWWNWSWWNWW(WWNWW(WSSNNE|)NENNNW(NWNNENWWNNWNWWSESWSSWSSWSWSWS(WWNWSWWS(E|SWSSSWSSWNNWWSSSWWSWSSS(WNNNNWNNEEENE(SSWW(W|S)|NN(WSWSNENE|)ESENNESE(SWEN|)NN(WWWSNEEE|)NNE(SS|NWNNNEENNENENENW(WSW(SW(SS|W)|N)|NNENWNW(WWWNW(NEENESES(WW|ENESEESESSWSEEEES(ENNNWNWNENNWWS(E|W(NNNEEES(WW|ENEEESSSWWN(NESNWS|)WSSSESESESSEENNNESSSESEESEENESEENNNESENENEEENNENWNNENWWSSWWNENWWSWWSESSES(ENEN(ESSW|WWN)|SWNWNNWWWWWNWWWWNW(SSEEEESSW(NWWWS(WNWN(W|E)|SS)|SSENEENN(WSNE|)EEESWSW(SEE(NEWS|)S(WWW(S|W(NEWS|)W)|S)|N))|NNNENNWWWNNWNENESSSEENNW(NNEEENWWNWSWSWNWWNEEENWWNEEENWWNNWNENWNEEESSW(SSEEENNNNNNNWNWNNEES(W|SEESWSEESSEEEESESSENEEENENNNESEENNNWNWNEEEESENN(WWWWWWSWWWWSSESESE(NNN(W(S|W)|ESSE(ESNW|)N)|SSWSWWNEN(NWNWNNNWSWNN(WSSWW(SES(SSEEEE(NWWNENWWSS(NNEESWENWWSS|)|S|E)|W)|WNN(ESENSWNW|)W(WWWWWWSSEE(NWES|)SSESES(SSSSWENNNN|)WWNWSWWNENWN(EESNWW|)WWWSESE(N|SWSSENESSSSESWWWSWWWWWNNESENNWWNNESEESSE(SWEN|)ENN(ESSNNW|)W(S|NNNWSSWNWWWSWWSSSSENE(NWNEWSES|)SSWSSSENEN(EEESENESE(NENWESWS|)SSEESWSWNWSWWSWSSWWNNWSWSESSWNWNNWWSESWWNWWWWWWWNWNENEENWWWSWWWWSEESE(SESWSESWWNWNN(ESNW|)WSSSWNNNWSSWSESEESWWWSSSSSENES(SWSWNWWNENWNNWNWSSWSWNNWWNEEE(NENWWWWNENESEENWNWNWWNWNWSWWWNWSSSEEN(ESEE(NWES|)S(ENEWSW|)SWNWWWWSESSENNESEES(EEE|SWSESWWSWNNWN(WSSESWSWS(SENEEEEEESSWNWWS(WW(NE|WWSEE)|ESEEEEEEESS(ENNEEN(ESNW|)WWN(WSWNNENN(WSWWSSE(N|SWWNNNNNWSWWS(EE|WWW))|N)|E)|W(S|NWWS(WNWSWN|E))))|WNWWNEENNE(SS|NNN(ESNW|)NNWSSWWSSSE(NENWESWS|)SWW(S|NWNNNE(SS|NWNWWSW(NNEENNENWWW(SESWENWN|)NEEENNNESESWSESSW(N|SWSEENES(SW(SEWN|)W|ENNWNENWNENESS(SSSS|ENNENWNEESSSWSEE(SWEN|)NNNESEEENENNWWWS(SENEWSWN|)WWNWNWSWWNNNNESS(EENENWNENWWNWSWWWWNWWNWSSSWW(NNE(S|NWNEENNNESSEESEENWNNNN(EESSS(WNNSSE|)SESS(W(SWNW(WWNWESEE|)S|N)|ENNENESSEENNNESSESWSEESSESSENENWNWNNNNNWNEN(ESEEN(W|ESSWWSSSW(SEES(SEENESEEESWWWSSSWSWNWSSWWSESWW(SEESENNNESEESWSW(N|SEESE(S(WWWWWNN(ESEEWWNW|)WNWW(SWW(SEEE(ESW(SEES(W|EE(N(ESNW|)W|SWSSW(NN|SEE(N(N|E)|S(SS|W)))))|WW)|N)|WWNEEE)|N)|EE)|NN(ENNW(NWN(W(S|W)|EN(NENWNEEENNEEENENWNWNENEENNWWWN(EEEEEEEESWWSSWSW(NNNESNWSSS|)SSENEEN(ESESSE(NENWNNW(S|N(WSWNSENE|)NEN(W|ESS(SSENESESS(ENE(NNE(SSEWNN|)NNEES(W|EENWN(E|WWWWWWWSS(WNNSSE|)EE(ENWWEESW|)S(W|S)))|S)|WW(SW|NE))|W)))|SSSSWSESESSSSESENESS(E(NE(S|NWN(W|NESEES(SWN|EN)))|SS)|WWSWNNWNWNWNEE(NWWWWNNNWWNWSSESWWSWNNENNN(WWWSES(ENSW|)SWWSW(NNEEWWSS|)WSEEESSEEN(WNNWESSE|)EEEN(W|E(SEESWWWWS(ESSSWS(WNSE|)EENNNESEEE(S(ENSW|)WSWNWS|NWNW(S|WW))|W(WWWSWWNENNW(S|W)|N))|NN))|NEN(NNWNEWSESS|)ESENEESWSS(WNWWEESE|)EE(SWSES(W|E)|N(W|E(S|NWNNWW))))|S)))|W)|WSWNWWSWSESWSESEESS(EN(ESNW|)NNWNN(ESENEE|W(SS|N))|WWWN(NWWW(WNEN(ENNE(SSSWENNN|)N(E|W)|W)|S(EE|S))|EE)))|W))|S)|W)))|NNNNWN(EEE(SWSEWNEN|)NESENN(ESSNNW|)W|NNWWWW(NNE(EESWWEENWW|)NWWSWNN(SSENEEWWSWNN|)|SEESWWSWSE(EEE(N(WW|NN)|E)|S))))|W)|NNN))|WWWS(ESSESS|WWWS(ESSNNW|)WWW(SEWN|)NEEN(EEE|WW))))|WWS(ESSWNSENNW|)WWN(E|WSSW(SSENSWNN|)NN)))|SEESENEEN(WWNEWSEE|)EE(EEESSNNWWW|)SSW(N|WWSWSEEESSE(NNNWWEESSS|)ESWW(WNNWSWNWWNW(NNESES|SSSSSENE(NWNEWSES|)S)|S)))|S))))|SESWSEE(SWS(WNSE|)EE|NNN))))))|EE(NEWS|)S))|W)|S)|EEENWWNENN(ESSENNEESSW(N|SE(EENWNEE(S|NWWNNEES(E(NNWWWNN(WSSSSWWN(E|WW(SEWN|)N)|ESENEEESSESE(NESEN(NWWWEEES|)ESSENESEE(SWEN|)NWNNE(S|EEEEEEEEN(E|WWWNN(ESNW|)WSWS(WNN(WSSWWWSSW(ENNEEEWWWSSW|)|NE(S|EE))|E)))|SWWWN(NNWESS|)E))|S)|W))|SWS(ES|WNN)))|WSWW(NE|SE)))|N)|W)))|SS))|EEEEEE)|E))|ESESENN(ESSSWWSSSWSSWSWWNWSSESSSWWWSSENEEESWWSWWWWWSEEESWSSWWNWSWNWSSWNNNEENNE(SSEESNWWNN|)NENESENNWWWSWWWWNWWNNESENE(SENEES(WSWWEENE|)ENN(W|EENEE(NWNEEEE(S|ENWNW(S|NEN(WNWESE|)ESSENNN(SSSWNNSSENNN|)))|SSW(WS(EEEN|WN)|N)))|NNWNWSS(WWWSESSWSESW(SESWSESWWNW(SSSESWSEEEENWWNN(EENNNENN(EESS(ENNEWSSW|)W(N|SSW(N|SESW(SSSWWWSWNWSWSESENESENNESESWSEEENNEENENESENNWWWSWNN(ENEEEEENEN(NNESESWSSWSEEENN(WSNE|)NENNW(N(WSNE|)EENNW(NWNENN(WSNE|)ESSES(EENNEEEESENEESWSESENENWNNWNNNENENEESEEENWNEESESWSWSSEESSSENEE(NWNNE(S|NNNWSW(NNEENNNNWSWWWWWWWSWSWWNNN(WWSESWWWWWSSENESSWWWN(WWSESEESWWSEEESS(EENE(S|NWNW(SS|WNEEE(S|NE(S|EN(EEENE(SS|EEN(ESE(S|EN(ESNW|)W)|WW))|WWW(NEEWWS|)S)))))|WWN(E|WSWNNW(NENSWS|)S(SSESNWNN|)W))|NNNNESEEENWW(EESWWWEEENWW|))|EE(SWSNEN|)EEEEEEE)|S(E|S(W(N|W)|SS))))|SSSSWSWWWSSWNWSSSSWSWNNENWNWWWSWNWWSSWNWNWNEE(S|EENEN(ESS(W|EENNENW(WSSNNE|)NEEESWSEE(SWWWSES(NWNEEEWWWSES|)|ENESENEN(WWWW(S|NENWWSWNNWWW(SEESWENWWN|)NN(WSNE|)ESENEN(WW(W|N)|ESS(SEEWWN|)W))|N)))|WNWWN(E|WNWWSESESS(ENESNWSW|)WNWNWSSSWW(WSSESWWSSESEENWN(ENENE(SSSSW(SESSSEESSSWNWSSSWNNWSSWWNENWWWNNNENNESESWSES(WWNSEE|)EEN(EE|WNNN(ESSNNW|)WN(WWWN(E|WSSESWW(SS(E(N|SWSSE(SSENNESSESWSWWSWWWSESWWNNNNESEEN(NW(N(N|E)|WWWSSSSWWW(NEN(W|E(S|N))|WSESENESE(SWWWSSSSSESS(WNW(WNENNNWSSWWWNWSWSS(EEE(S|N(ESNW|)WW)|WNNNW(SS|NEE(S|NWNWNW(S(SEWN|)W|NNWNEE(EESSENEEEESWSEESSWNWWWSW(SEESENNW(ESSWNWESENNW|)|NN(EENWESWW|)W(WNWNEWSESE|)S)|NWWW(SS|WNWN(E|N)))))))|S)|EENEENNNNESSENNNEEESWSESENEENNWW(SEWN|)NWWWNNW(NEESSENNESES(ENNEEESSSESWWSW(NN(NE(NWES|)S|WW)|SSSSWSWWNN(E(ENWESW|)S|WWSESWSSSSENENESSSSSSSWSESWSSWSWSWNNENNNE(SS|NNNWNN(ESE(SS|NN)|WNWWW(NNNW(SSWNNSSENN|)NEENNEE(N(NN|E)|SWSESSWNWSSEE(WWNNESNWSSEE|))|SEESWSW(SW(SES(WW|SENENN(WSNE|)NE(N|SS(ENSW|)SSWS(E|SWW(NEWS|)SSSSWSEENNE(NWNEWSES|)SENEEESWSSSSESEENWNNN(WSSNNE|)EESEEENNWW(SEWN|)NENNENWWWWW(SWS(EEE(SSWNWS|N(ESNW|)W)|W)|NEENNENNEESWSEENESSSW(NWWS(WNSE|)E|SEESESEESENNNWNNESENENENWWNNWNWNNNNESENNEEENWNNWWSWS(EENSWW|)WNNNE(NWWSWSSE(N|SS(SWSESWWWNWNNWWNNESEESSE(S|NN(ESNW|)NWNNWNWN(ENEESS(WNSE|)(ENENNESSENNENWNWWS(WS(S|WWWNEENNWWW(NWNENNW(SWWN(E|WSW(SWS(E(EEN(ESNW|)W|S)|WW)|N))|NEN(W|ESEENWNNEEEESEEESESESWWWSEEEENNEENNNNWSSSWWNWNNNNNWSWSSW(SEENNSSWWN|)NNWWWSEESWWWNNWNWNNENN(WWW(N(N|E)|SE(E|SWSESS(WNSE|)ESS(ENSW|)SS))|EN(N|ESEEE(NNWSWENESS|)SWWSSS(ENNEEEEEN(W|NNEN(W|ENESSWSESENE(SSWSSWWNW(NE(ES|NWN)|W(SESWSSE(S(W|S)|NENESEE(N(NN|W)|SSW(N|SSE(N|SWSWWSSESWSESSENE(SSWSSWNWN(WWSESSSEESWWS(WNNWWWNENE(ESWENW|)NNW(SWSNEN|)NEEEN(ESNW|)NWNENWWSSS(E|WNW(WWNWSW(S|NNNWSWS(WNNEN(EENNE(NWWEES|)ESE(NESEWNWS|)SWSES(SENES|WWNNN)|W)|E))|S))|SSSEENESE(NNNNW(SWS(E|W(S|N))|NEN(WWWNSEEE|)NN)|SSWNWSWNWSSWSSS(WWNNNN(WWSESNWNEE|)NNESE(SWSSSNNNEN|)N|ENESESWSSEEN(W|E(SSWSESWSSWWSWNNWNEENWN(WW(WSSW(SSSWWSEEEENWNNE(NNEWSS|)SESSSWSESSWSWNN(E|NWSWNWWN(EEEE|NNNWSSSSSWNNNNNWSSSW(SSE(N|SESENESSSSWNNWSWWSESSESEENEN(WW(WNSE|)S|ENESESWSSWSWSWNWSSWSWSESESEEESESWWSSWNWSWWNENN(ESENEWSWNW|)WWS(WNNWNEE(NWWNWWWWNNESENNEEENWWNWSWWS(E|WSSSWSSWSSWNWWWNENWNWNWWNNW(NNESEESS(WNSE|)ESENEEES(SWS(E|W(SEWN|)N(NEWS|)W)|ENNNENWWWWSEESWWWWNNWWNENESE(NESENENNNNN(NNNN(WWSESSSWWNN(ESNW|)NWSSWW(SESSW(SS(WS(SWNWESEN|)E|EEENESENNNWSWW(SWEN|)N(N|E))|N)|WNNNE(SESWENWN|)NWN(EENNNWW(EESSSWENNNWW|)|WW))|N)|ESSESENESSEEENWWNN(WWW|NNEEE(NWWWWN|SSWS(WNNEWSSE|)E(EN(ESNW|)N|SSSESWW(NWSWNWWS(SENSWN|)WW(NEN(WNSE|)E|W)|SEESE(N|E(SWS(E|SWSWNWN(EEN|WS))|EEENEN)))))))|SS))|WSESWSES(WWSWNSENEE|)ESSSENE(NWN(NWES|)E|SSSEESWSESENNNESESENNWN(ENESEENEE(NWNN(ESNW|)WWWSEESW(S|WW)|ESWSSWSWWW(SWWSSWSESEENESSESSESES(WWNWNNWSSWWS(EEE|WWWWWWNNWWSESWWWNENWWNENNWSW(SSWSS(ENESNWSW|)WW(NENWESWS|)W|NNEN(W|EEN(W|ENWNENESSSSWSSSS(WNNNWESSSE|)EEEESES(WWNSEE|)EENWNWNWNNWSSWWNEN(W|NEEN(ESE(NENNSSWS|)SS(WNSE|)SE(N|SESENN(E|W))|WWNNE(SEWN|)NWNWN(WSWSNENE|)E))))))|ENNWNENNNENNWSWNWN(ENENNESE(SEESWSEESEENNEN(WWWSES|ESESWSESWW(SWWN(E|WWSESSWSESEES(WWWNWNWNW(NEN(E(NWN(EE|NNW(N|W))|S(S|E))|W)|SSES(E|W))|EEENNEEESS(WNWSNESE|)ENEENE(SSWWEENN|)NNWWWWS(ESENEWSWNW|)WNWN(WWSS(WWS(EESW|WNNEE)|E(E|N))|NEEENESENNNWSWNWNWW(WNENNW(SWWSEWNEEN|)NNNESES(SSES(EEES(E(SSSSSWWWWW(EEEEENSWWWWW|)|NNNNNWWSWS(SENE(N|S)|WNNENEENWWNWSW(SEWN|)WNNE(S|NNNEENNWSWNW(NNNESES(EEENNE(NNNWNNE(S|NNWSWWSW(NNEENEENN(SSWWSWENEENN|)|SESSW(S(EE(SSWNWESENN|)N(ESNW|)NNN|W(WWS(WWW(S|NEENNWSWNNW(ESSENEWSWNNW|))|S)|N))|N)))|SSSWWSSSWWSSENESSEE(SS|NWNENNNWSS(NNESSSNNNWSS|)))|W)|SSW(N|SWSWSWWSEEENE(NENSWS|)SSWS(S|WNWSWNWN(SESENEWSWNWN|)))))))|WW)|W)|W)|SSSEN(ESNW|)N))))|NN))|N)|WSW(S(WNWSSNNESE|)ESSEN(ESSWSNENNW|)N|N)))|NEN(E(ENSW|)S|W)))|WWWWNEE(WWSEEEWWWNEE|)))))|SE(N|E))|E)))|NNNWNEE(NWES|)E)))|N)|NENE(NWES|)S)|EESSSW)|NNNNWS(SS|WNN(WSWENE|)EE))))))|E)|NWNENWN(ENSW|)W)))))|WWWWSE))|NWNENN(N|W(S|WW)))))|WNNNWSS(W|S))))))|S(EE|S)))|E)|SS)|WSWSES(E(ESNW|)N|WSSWSSW(NWWWSNEEES|)SESENN(N|EESSW(N|SWWSS(ENEENE(SEESENN(WW|ESSESSS(WWSS(WNNNN(ESENSWNW|)WNW(WW|S)|SE(SEWN|)NN)|E(E|NN)))|N)|W(NNN|SESWSS)))))))|EE))|S))))))|N)|N))))))|W)|SSWNWWSES(E|WSWSESSWW(N(NNW(NEEWWS|)SS|E)|S))))|N))|S)|EE)|N))|W)|NNNWWSESWWNNN(E|WWW)))|E))|NN)|N(WW(W|S)|NN))|W)|NNNESS)))))|W)|S)|S)|W)|WWSESS(W(SS|W|N)|E))|WW)))|W(NEWS|)S)|W)|W)|WNNN(NNNEN(EESWENWW|)NW(NEWS|)S|WSW(S(ESNW|)W|N)|E))|E))|W)))|N)|S))))|SESSES(E|W)))|WSSSWNNWN(WSW(NN(W|NN(NWES|)E)|SWSSSSWW(NEN(W|N)|SS(SWNNWNE(WSESSEWNNWNE|)|ENESE(ENENNWNW(SS(S|E)|NENESSE(E|SS))|S))))|E)))|S)|S))))|EENWNEEESEENESSWSS(ENESENNWNNNN(WWS(E|W(NW(SWWEEN|)NN|S))|ESSEEEESWS(EES(W|EENWNWNENNN(EN(E(S|EE(E|NNW(NENNSSWS|)SW(N|W)))|W)|WWSESWWNWSWN(SENESEWNWSWN|)))|WNW(S|W)))|SWNW(SSSWSESWSS(WNW(S|NNWWW(SEEWWN|)NN(W|EEES(E(NEWS|)SS|WW)|N))|SEESS(WNWESE|)EESENE(NEEN(EESWENWW|)WNNWNEN(ESSSNNNW|)WWWSSE(N|SWSW(NWN(WSNE|)ENWNNNES(E|S)|SEENEN))|S))|NENWWN))))|EEEE(SWEN|)NN(WSWENE|)NNEESS(SWNNSSEN|)E(NNNWN(WSNE|)N|E))|SS)|SSE(SWEN|)(N|EEE))|SS)))|S(E|S))))|S)|WSSSESWW(NWES|)SS)|N))))|NN)|S)))|WWWWWNNWWNWSWWSWNWW(NENWNENNWSW(NNEN(EEESW(SSEEESS(WSWWNNE(E|S)|EEE(SWEN|)NWNENN(ESNW|)WNWSWW(NEN(E|NWW(NEN|SE))|S(EE(E|SS)|W)))|W)|W)|S(W|S))|SS(WNWSNESE|)E(N|EEEEN(EESWENWW|)W)))))))))))|S)|W))|WWWWWWWWNNNEN(EE(NN|SWSS(WNSE|)EEE(NW(W|NN)|EE))|W))|NENNNEESS(WNSE|)ENESSW)|S)|NWW(N|W))|N)|N(N|E))|ENE(E|SSS)))|NNNEEEESW(WW|SE(EEENWN(EEEEENW(ESWWWWEEEENW|)|NNNNW(SWSWWS(WWNNE(NWNEWSES|)(EE|S)|EEE(SS|N))|NNE(SEEWWN|)N))|SS)))|S)|E)|EE(EE(NWWNSEES|)E|SWSSE(E|N)))|SWSES(WWNSEE|)SS))))|W))|W)|W)|NE(NWES|)E)|NW(NN|S))|NNE(NE(NWNNW(NNE(SESSNNWN|)NNNWSS|SSS)|S)|S)))|E)))|EEENWNN(SSESWWEENWNN|))))))|N)))))))|WW(W|N))))))|S(W|SE(SWSNEN|)N)))))|EE)|EE))))|E)))|E)|W)|E)|EEEN(W|E))|E)|E)|SW(S(EEENWESWWW|)S|W))|E))|NWNNES)|S)|SWS(ES|WN))))|NN)|N)|E)|E))|N)|N)))$
diff --git a/src/20/solve.py b/src/20/solve.py deleted file mode 100644 index e978e91..0000000 --- a/src/20/solve.py +++ /dev/null @@ -1,164 +0,0 @@ -from sys import argv as args
-from copy import deepcopy
-
-sinput = list(open("input.txt").read().strip())
-
-ainput = "^ENWWW(NEEE|SSE(EE|N))$"
-
-def getMap(p):
- return vmap[p[1] + spos[1]][p[0] + spos[0]]
-
-def setMap(p, c):
- global vmap, spos
- vmap[p[1] + spos[1]][p[0] + spos[0]] = c
-
-def newpos(p, c):
- p = p[:]
- if c == "N":
- p[1] -= 2
- elif c == "S":
- p[1] += 2
- elif c == "W":
- p[0] -= 2
- elif c == "E":
- p[0] += 2
- return p
-
-def calcpos(stack):
- p = [0,0]
- for c in stack:
- p = newpos(p, c)
- return p
-
-xmin = 0
-xmax = 0
-ymin = 0
-ymax = 0
-
-def checkSize(stack):
- global xmin, xmax, ymin, ymax
- p = calcpos(stack)
- if p[0] < xmin:
- xmin = p[0]
- if p[0] > xmax:
- xmax = p[0]
- if p[1] < ymin:
- ymin = p[1]
- if p[1] > ymax:
- ymax = p[1]
-
-def drawRoute(stack):
- p = calcpos(stack)
- setMap(p, ".")
- np = newpos(p, stack[-1])
- cp = [0,0]
- cp[0] = p[0] + int((p[0] - np[0])/2)
- cp[1] = p[1] + int((p[1] - np[1])/2)
- setMap(cp, "+")
-
-def iterRegex(func):
- stacklens = [0]
- stack = []
- for i in range(1, len(sinput)-1):
- c = sinput[i]
- if c == "(":
- stacklens.append(0)
- elif c == "|":
- for i in range(stacklens[-1]):
- stack.pop()
- stacklens[-1] = 0
- elif c == ")":
- for i in range(stacklens[-1]):
- stack.pop()
- stacklens.pop()
- else:
- stack.append(c)
- stacklens[-1] += 1
- func(stack)
-
-def fwriteMap():
- f = open("output", "w+")
- for y in range(len(vmap)):
- f.write("".join([str(v) for v in vmap[y]]) + "\n")
- f.close()
-
-mshape = None
-spos = None
-vmap = None
-
-def genMap():
- global vmap, mshape, spos
- iterRegex(checkSize)
- xdif = xmax - xmin + 2
- ydif = ymax - ymin + 2
-
- spos = (-xmin+1, -ymin+1)
- mshape = (xdif, ydif)
-
- vmap = [["#" for x in range(xdif+1)] for y in range(ydif+1)]
- vmap[spos[1]][spos[0]] = "X"
-
- iterRegex(drawRoute)
-
-
-adjacent = ((-1, 0), (0, -1), (1, 0), (0, 1))
-
-def genCountmap(sp):
- countmap = dict()
- next = dict()
- next[(sp[0], sp[1])] = 0
- counter = 0
- steps = list()
- while len(next) > 0 and len(steps) == 0: # first steps available will be shortest
- countmap = {**countmap, **next} # merge dictionaries
- counter += 1
- temp = dict()
- for n in next:
- for dir in adjacent:
- nx = n[0]+dir[0]
- ny = n[1]+dir[1]
- if getMap((nx, ny)) != "#" and (nx, ny) not in countmap and (nx, ny) not in temp:
- temp[(nx,ny)] = counter
- next = temp
- return countmap
-
-def nextStep(cmap, p):
- # adjacent squares
- npos = [[p[0] + dir[0], p[1] + dir[1]] for dir in adjacent]
-
- # steps and dist
- steps = [[np[0], np[1], cmap[np[0], np[1]]] for np in npos if (np[0], np[1]) in cmap]
-
- if len(steps) == 0:
- return None
- else:
- return sorted(steps, key = lambda x: x[2])[0] #closest
-
-### SETUP
-
-genMap()
-#print("finished generating..")
-
-### PROBLEM CODE
-
-def solve1():
- cmap = genCountmap((0,0))
- ipos = sorted(cmap, key = lambda x : cmap[x])[-1]
- print(int(cmap[ipos]/2))
- #fwriteMap()
- return
-
-def solve2():
- cmap = genCountmap((0,0))
- count = len([v for v in cmap if int(cmap[v]/2) >= 1000 and getMap(v) == "."])
- print(count)
- return
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/21/input.txt b/src/21/input.txt deleted file mode 100644 index d60c037..0000000 --- a/src/21/input.txt +++ /dev/null @@ -1,32 +0,0 @@ -#ip 3
-seti 123 0 1
-bani 1 456 1
-eqri 1 72 1
-addr 1 3 3
-seti 0 0 3
-seti 0 7 1
-bori 1 65536 4
-seti 3798839 3 1
-bani 4 255 5
-addr 1 5 1
-bani 1 16777215 1
-muli 1 65899 1
-bani 1 16777215 1
-gtir 256 4 5
-addr 5 3 3
-addi 3 1 3
-seti 27 6 3
-seti 0 2 5
-addi 5 1 2
-muli 2 256 2
-gtrr 2 4 2
-addr 2 3 3
-addi 3 1 3
-seti 25 3 3
-addi 5 1 5
-seti 17 1 3
-setr 5 6 4
-seti 7 8 3
-eqrr 1 0 5
-addr 5 3 3
-seti 5 6 3
diff --git a/src/21/solve.py b/src/21/solve.py deleted file mode 100644 index 1261009..0000000 --- a/src/21/solve.py +++ /dev/null @@ -1,139 +0,0 @@ -from sys import argv as args
-from math import sqrt
-
-def parseCommand(l):
- s = l.split(" ")
- args = [s[0]]
- args = args + [int(v) for v in s[1:]]
- return args
-
-file = open("input.txt")
-sinput = file.read()
-file.close()
-
-ainput = """#ip 0
-seti 5 0 1
-seti 6 0 2
-addi 0 1 0
-addr 1 2 3
-setr 1 0 0
-seti 8 0 4
-seti 9 0 5"""
-
-sinput = sinput.split("\n")
-
-inspaddr = int(sinput[0][4:])
-
-instructs = [parseCommand(l) for l in sinput[1:] if len(l) != 0]
-
-register = [0 for x in range(inspaddr+1)]
-
-opmap = dict()
-opmap["addr"] = lambda a, b : register[a] + register[b]
-opmap["addi"] = lambda a, b : register[a] + b
-opmap["mulr"] = lambda a, b : register[a] * register[b]
-opmap["muli"] = lambda a, b : register[a] * b
-opmap["banr"] = lambda a, b : register[a] & register[b]
-opmap["bani"] = lambda a, b : register[a] & b
-opmap["borr"] = lambda a, b : register[a] | register[b]
-opmap["bori"] = lambda a, b : register[a] | b
-opmap["setr"] = lambda a, b : register[a]
-opmap["seti"] = lambda a, b : a
-opmap["gtir"] = lambda a, b : 1 * (a > register[b])
-opmap["gtri"] = lambda a, b : 1 * (register[a] > b)
-opmap["gtrr"] = lambda a, b : 1 * (register[a] > register[b])
-opmap["eqir"] = lambda a, b : 1 * (a == register[b])
-opmap["eqri"] = lambda a, b : 1 * (register[a] == b)
-opmap["eqrr"] = lambda a, b : 1 * (register[a] == register[b])
-
-def varname(v):
- return "R"+str(v)
-
-dismap = dict()
-dismap["addr"] = lambda a, b : "%s + %s" % (varname(a), varname(b))
-dismap["addi"] = lambda a, b : "%s + %d" % (varname(a), b)
-dismap["mulr"] = lambda a, b : "%s * %s" % (varname(a), varname(b))
-dismap["muli"] = lambda a, b : "%s * %d" % (varname(a), b)
-dismap["banr"] = lambda a, b : "%s & %s" % (varname(a), varname(b))
-dismap["bani"] = lambda a, b : "%s & %d" % (varname(a), b)
-dismap["borr"] = lambda a, b : "%s | %s" % (varname(a), varname(b))
-dismap["bori"] = lambda a, b : "%s | %d" % (varname(a), b)
-dismap["setr"] = lambda a, b : "%s" % (varname(a))
-dismap["seti"] = lambda a, b : "%d" % (a)
-dismap["gtir"] = lambda a, b : "(%d > %s)" % (a, varname(b))
-dismap["gtri"] = lambda a, b : "(%s > %d)" % (varname(a), b)
-dismap["gtrr"] = lambda a, b : "(%s > %s)" % (varname(a), varname(b))
-dismap["eqir"] = lambda a, b : "(%d == %s)" % (a, varname(b))
-dismap["eqri"] = lambda a, b : "(%s == %d)" % (varname(a), b)
-dismap["eqrr"] = lambda a, b : "(%s == %s)" % (varname(a), varname(b))
-
-def disassemble(s, e):
- for i in range(s, e):
- ins = instructs[i]
- print(i ,":",varname(ins[3]),"=", dismap[ins[0]](ins[1], ins[2]))
- print()
-
-def executeProgram():
- global register, insptr
- while register[inspaddr] < len(instructs):
- insptr = register[inspaddr]
- ins = instructs[insptr]
-
- # execute command
- if len(register) <= ins[3]:
- register += [0 for x in range(ins[3] - len(register) + 1)]
- register[ins[3]] = opmap[ins[0]](ins[1], ins[2])
-
- # part 1
- #if insptr == 13 and register[4] == 1:
- # print(register)
- # return
-
- # increment instruction pointer
- register[inspaddr] += 1
-
-### SETUP
-
-
-### PROGRAM CODE
-
-
-def solve1():
- r0 = 1797184 # (first opportunity for comparison r1 and r0)
-
- #disassemble(0, len(instructs))
- #executeProgram()
-
- print(r0)
- return
-
-def solve2():
- r1 = 0
- possibles = list()
- while True:
- r4 = r1 | 65536 # flip 9th bit
- r1 = 3798839
- while True: # scan bytes of r4 and add them to r1 and multiply
- r5 = r4 & 255
- r1 += r5
- r1 = r1 & 16777215
- r1 *= 65899 # equals 1 00000001 01101011
- r1 = r1 & 16777215
- if r4 < 256:
- break
- r4 = int(r4/256) # bit shift 8 to the right
- if r1 not in possibles:
- possibles.append(r1)
- #print("=>",r1)
- elif r1 == possibles[-1]:
- print(possibles[-1])
- break
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/22/input.txt b/src/22/input.txt deleted file mode 100644 index 9b643c6..0000000 --- a/src/22/input.txt +++ /dev/null @@ -1,2 +0,0 @@ -depth: 4848
-target: 15,700
diff --git a/src/22/solve.py b/src/22/solve.py deleted file mode 100644 index 29db6d7..0000000 --- a/src/22/solve.py +++ /dev/null @@ -1,108 +0,0 @@ -# second part was solved with help from subreddit
-
-from sys import argv as args
-import networkx
-
-adjacent = [[-1, 0], [0, -1], [1, 0], [0, 1]]
-
-# load file
-file = open("input.txt")
-sinput = file.read()
-file.close()
-
-# create symbol definitions
-symbols = [".", "=", "|"]
-rocky, wet, narrow = 0, 1, 2
-torch, gear, neither = 0, 1, 2
-
-tooloptions = dict()
-tooloptions[rocky] = (torch, gear)
-tooloptions[wet] = (gear, neither)
-tooloptions[narrow] = (torch, neither)
-
-# parse input file
-def parseInput(si):
- s = si.split("\n")
- depth = int(s[0].split(": ")[1])
- target = [int(v) for v in s[1].split(": ")[1].split(",")]
- return depth, target
-
-# get erosion level from geological index
-def getErosionLevel(n):
- return (n + depth) % 20183
-
-# generate map of erosion types
-def genMap():
- grid = [[0 for x in range(mrange[0])] for y in range(mrange[1])]
-
- # generate values on x side
- grid[0] = [getErosionLevel(x * 16807) for x in range(mrange[0])]
-
- # generate values on y side
- for y in range(mrange[1]):
- grid[y][0] = getErosionLevel(y * 48271)
-
- # fill in other positions
- for y in range(1, mrange[1]):
- for x in range(1, mrange[0]):
- grid[y][x] = getErosionLevel(grid[y-1][x] * grid[y][x-1])
-
- # mod 3 for env type
- grid = [[grid[y][x] % 3 for x in range(mrange[0])] for y in range(mrange[1])]
-
- # start position is rocky
- grid[target[1]][target[0]] = 0
-
- return grid
-
-# define constants from input file
-depth, target = parseInput(sinput)
-mrange = (target[0] + 100, target[1] + 100) # 100 block padding for potential hook-paths
-
-vmap = genMap()
-
-# risk level of area is sum of risk levels
-def getRiskLevel(width, height):
- risk = 0
- for y in range(height + 1):
- for x in range(width + 1):
- risk += vmap[y][x]
- return risk
-
-
-# indices of blocks around pos p
-def getAround(p):
- return [[p[0] + di[0], p[1] + di[1]] for di in adjacent]
-
-# traverse grid using dijkstra's algorithm (3d)
-def dijkstra():
- graph = networkx.Graph()
- for y in range(mrange[1]):
- for x in range(mrange[0]):
- tools = tooloptions[vmap[y][x]]
- graph.add_edge((x, y, tools[0]), (x, y, tools[1]), weight = 7) # always takes 7 minutes to switch, 2 z-options for each tool
- for (nx, ny) in getAround((x, y)): # for all surrounding positions
- if 0 <= nx < mrange[0] and 0 <= ny < mrange[1]:
- ntools = tooloptions[vmap[ny][nx]]
- for tool in [t for t in tools if t in ntools]: # if tool is usable in both environments
- graph.add_edge((x, y, tool), (nx, ny, tool), weight = 1) # then it only takes 1 minute
- return networkx.dijkstra_path_length(graph, (0, 0, torch), (target[0], target[1], torch))
-
-#print("setup done..")
-
-### PROGRAM CODE
-
-def solve1():
- print(getRiskLevel(target[0], target[1]))
-
-def solve2():
- print(dijkstra())
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/23/input.txt b/src/23/input.txt deleted file mode 100644 index 907fba5..0000000 --- a/src/23/input.txt +++ /dev/null @@ -1,1000 +0,0 @@ -pos=<-16209987,47027970,47490542>, r=98801023
-pos=<73745460,41591621,42240956>, r=76560913
-pos=<4551319,6410013,77079444>, r=82537741
-pos=<-55798978,49930734,33808479>, r=79339065
-pos=<56057232,43991106,52515158>, r=60369161
-pos=<27685939,25858127,69445550>, r=67061283
-pos=<22783600,-683534,51135109>, r=70390130
-pos=<40167657,26125450,48671980>, r=58502052
-pos=<54015509,18650011,53936040>, r=85089447
-pos=<84654974,41945044,56166134>, r=94663913
-pos=<-46787351,48583488,47946572>, r=62570098
-pos=<19314005,97561006,51616905>, r=61212789
-pos=<24477527,46824853,50396966>, r=75100485
-pos=<67176091,46416523,30655622>, r=76751755
-pos=<-21150714,30959067,70905379>, r=77516823
-pos=<112218820,120699018,77494742>, r=55203229
-pos=<63770215,45551080,55860088>, r=69867429
-pos=<6379372,35506523,118307115>, r=92841505
-pos=<98096818,59728529,48249403>, r=98795760
-pos=<21527515,49560695,41315388>, r=74283972
-pos=<54834592,23221039,40704011>, r=77557183
-pos=<55426131,33893125,52095886>, r=69416781
-pos=<27596914,9934002,24452432>, r=79858015
-pos=<28090284,54212215,80637111>, r=55660928
-pos=<22829834,38364639,102907046>, r=83160527
-pos=<3668198,42627590,-18678120>, r=79661927
-pos=<103927773,50000865,47157607>, r=96872388
-pos=<36970463,45301027,87281941>, r=74739332
-pos=<33391255,-136600539,47600155>, r=87688788
-pos=<33665785,6992101,63192343>, r=85654056
-pos=<61173816,64883908,55555682>, r=74334136
-pos=<5097583,50069485,70432602>, r=60583429
-pos=<-1837092,78149001,59623045>, r=52961786
-pos=<-60254277,61998488,50503967>, r=86109418
-pos=<53977623,47174375,48514069>, r=51105170
-pos=<15601233,25924567,83048475>, r=68513023
-pos=<61361862,40953736,36970270>, r=70085412
-pos=<47547625,48236340,63394460>, r=58493616
-pos=<-63676796,44893701,56746887>, r=91949623
-pos=<87869217,42543699,52458504>, r=93571952
-pos=<32427048,17383348,52171127>, r=63002681
-pos=<81882342,52633871,54975916>, r=82212849
-pos=<70696757,44417317,55052272>, r=77119556
-pos=<-49248140,48737162,63680856>, r=80612077
-pos=<13918083,40390867,56560725>, r=84721595
-pos=<45452531,78018774,48053402>, r=64245527
-pos=<122091904,-27603918,34341477>, r=98462907
-pos=<77203590,45381319,48399764>, r=76009880
-pos=<57064408,44265526,51628232>, r=60214965
-pos=<16070640,53224911,90418044>, r=52434346
-pos=<35569361,39258587,91258220>, r=83356927
-pos=<9266305,-14804864,69422130>, r=91380305
-pos=<69537538,45933425,51327688>, r=70719672
-pos=<25585454,6947031,82170082>, r=96596377
-pos=<30639357,86989378,69892037>, r=80241676
-pos=<15753723,62546317,88149704>, r=59170501
-pos=<12855538,19978510,72163429>, r=60828332
-pos=<46404854,48880849,25641181>, r=58530637
-pos=<-55889541,54067735,54822996>, r=78132750
-pos=<41058882,36477717,72731301>, r=73100552
-pos=<46890524,38019010,47800562>, r=52459939
-pos=<31474689,24135827,25118982>, r=68867406
-pos=<96487710,47525097,50424697>, r=95175247
-pos=<49691010,61157444,17924445>, r=76504583
-pos=<40540965,41876057,86259788>, r=80712543
-pos=<33894722,-2428504,66917260>, r=99028363
-pos=<56723849,49175014,49948029>, r=53284817
-pos=<-30794270,57206520,31548596>, r=60664368
-pos=<73564235,61400251,46857703>, r=74542914
-pos=<50230740,37144250,54713473>, r=63587807
-pos=<33140809,16563216,50640572>, r=63006017
-pos=<78239061,39894506,46620636>, r=80753142
-pos=<19839558,48569582,41983045>, r=86418555
-pos=<64720131,45442707,71074558>, r=86140097
-pos=<21457591,12606422,44332714>, r=51166205
-pos=<53725145,78495032,53630822>, r=78571718
-pos=<43734268,22198578,63834795>, r=81158400
-pos=<21771033,50476594,46487442>, r=57349480
-pos=<17051700,28960038,105050402>, r=88930165
-pos=<-18344770,47674325,94566658>, r=81656729
-pos=<53690567,36285538,33032505>, r=71020161
-pos=<62596515,62743208,61128652>, r=79189162
-pos=<57223206,34405104,64928051>, r=83534116
-pos=<11829266,46127298,53324603>, r=68528612
-pos=<78262895,53220717,32577200>, r=82487080
-pos=<13876706,-17203933,69360895>, r=96229381
-pos=<1432258,2466968,69722185>, r=82242700
-pos=<55142824,17490510,60748876>, r=94189109
-pos=<54534147,70727873,57669388>, r=75652186
-pos=<48649521,50158347,56730144>, r=51009192
-pos=<36254749,31612966,199545974>, r=69834600
-pos=<12713539,43388882,-16167874>, r=72140165
-pos=<15293434,12604209,81398838>, r=79875960
-pos=<-12226196,82874914,57477922>, r=65931636
-pos=<55414530,27891313,76227929>, r=99539116
-pos=<-3214003,71845811,62636393>, r=51048754
-pos=<47317326,31864552,46854267>, r=58094894
-pos=<33621572,70179735,84493713>, r=81015867
-pos=<-31157992,41971599,54992735>, r=60598760
-pos=<-6565817,30537085,59150864>, r=51599243
-pos=<26040451,10276472,67233790>, r=78785619
-pos=<-9377417,22961418,77297688>, r=80133336
-pos=<-31455163,47474342,69151181>, r=69551704
-pos=<12347416,49879987,66463008>, r=83625401
-pos=<24352926,18651035,53296590>, r=54786430
-pos=<21535513,30531456,6161487>, r=71490349
-pos=<27353414,12930603,27343507>, r=73726872
-pos=<40948831,48373073,76082712>, r=64446317
-pos=<90922819,43664008,51436920>, r=94483573
-pos=<95901984,53671403,54584582>, r=96878705
-pos=<496719,75206859,67122627>, r=55185250
-pos=<26687396,25498336,64050389>, r=61027345
-pos=<17008662,9290371,30714222>, r=63651597
-pos=<13091033,7361420,62651595>, r=64169079
-pos=<89671041,66491288,49999754>, r=98882863
-pos=<59882546,46663400,47620974>, r=56628711
-pos=<87101386,45508539,47318881>, r=84699594
-pos=<45475543,55304319,82271799>, r=75772380
-pos=<44482272,35793511,27613792>, r=67722623
-pos=<51319604,35806204,54539578>, r=65840847
-pos=<36251727,53297127,50749236>, r=92755594
-pos=<20784337,34927212,49970474>, r=80484149
-pos=<15081418,72186832,76913680>, r=56902641
-pos=<-19373364,75634015,16244758>, r=82975025
-pos=<28986836,15822980,74547083>, r=83498937
-pos=<36401949,34990986,55367621>, r=52566460
-pos=<54595254,46310166,49948012>, r=54020963
-pos=<39784774,22581345,56449213>, r=69440488
-pos=<32290220,18277524,59512701>, r=69313902
-pos=<48841968,43780382,90240460>, r=91089970
-pos=<25569157,-15885460,56395751>, r=93638214
-pos=<44290962,21726746,47365822>, r=65717886
-pos=<58217123,45116498,35265903>, r=64482281
-pos=<63242944,47468029,60274913>, r=71837737
-pos=<41921146,14579274,55047915>, r=78177703
-pos=<35082182,23433908,31357271>, r=66938948
-pos=<-41745520,55032124,64322796>, r=74453061
-pos=<89483854,36242092,50686383>, r=99716110
-pos=<-18428434,42488730,32228176>, r=50991328
-pos=<26539721,61700251,54811617>, r=78993320
-pos=<35745027,43347675,69843919>, r=58029214
-pos=<55551797,40133351,46783489>, r=57989814
-pos=<73277883,49306136,49363646>, r=69123808
-pos=<41328708,14615105,32896741>, r=80464413
-pos=<24355178,-15165549,47534306>, r=82843195
-pos=<12741008,28698289,79114502>, r=58945148
-pos=<46280279,88189533,55896827>, r=83087401
-pos=<71840345,48196815,69091010>, r=88522382
-pos=<21867617,28933226,90405305>, r=79127578
-pos=<-22111659,37170464,54577924>, r=55939091
-pos=<74753799,37626920,26622580>, r=97151874
-pos=<-33233446,23673463,65264098>, r=91243777
-pos=<63703596,53768919,43093372>, r=57959547
-pos=<21689341,47523258,83572411>, r=53526595
-pos=<16104682,39976757,81821905>, r=53737797
-pos=<34341621,49348508,53271674>, r=73754793
-pos=<28713678,48347792,52665655>, r=59784304
-pos=<-44557541,49112081,50128372>, r=61993602
-pos=<15611067,50472688,56496573>, r=77499817
-pos=<28155302,56820155,7215922>, r=61340089
-pos=<30142712,75249794,73282061>, r=71395316
-pos=<19563200,31655975,-2390374>, r=76945121
-pos=<45316184,28301941,63819256>, r=76621493
-pos=<-58822393,41399159,52007667>, r=85850551
-pos=<85439557,47865361,50181181>, r=83543302
-pos=<61219321,57339205,59699536>, r=70978975
-pos=<12702571,31243144,87807651>, r=65054926
-pos=<15913429,39656114,121157788>, r=93203087
-pos=<21783328,45025340,42445890>, r=84705547
-pos=<29529025,47582200,50397780>, r=82577309
-pos=<69141052,33504917,41396423>, r=80887368
-pos=<20010841,95986253,52126261>, r=60844065
-pos=<31080682,103152018,69697014>, r=96650829
-pos=<63979353,46299690,84868254>, r=98336196
-pos=<2372524,64645160,30440764>, r=79346435
-pos=<5594935,33832616,89847963>, r=66840156
-pos=<70149544,42867469,14935636>, r=98993964
-pos=<72027944,37978949,52905695>, r=82742805
-pos=<9008546,15909210,10253278>, r=72108282
-pos=<-25205732,29845445,52876789>, r=64656691
-pos=<73115779,48976059,50530315>, r=70457975
-pos=<27510427,10020616,82199214>, r=95477391
-pos=<62028292,38168188,55268688>, r=74916860
-pos=<-8805465,85625532,12773938>, r=85869253
-pos=<-10547582,8713883,46694851>, r=64948201
-pos=<13410194,27385806,99989241>, r=81801503
-pos=<22719567,37243277,76871789>, r=58136433
-pos=<37290216,34006595,62093726>, r=61165474
-pos=<45157080,23569186,33913884>, r=74321570
-pos=<26713948,1122681,78458414>, r=99837563
-pos=<27958057,47737175,80870002>, r=56879297
-pos=<61247315,61474051,53092349>, r=68534495
-pos=<34297427,8233221,43683213>, r=69028617
-pos=<851641,-18176823,60770160>, r=94515620
-pos=<35366439,36416696,72516368>, r=67254047
-pos=<26678851,44555934,118379531>, r=96290405
-pos=<18791088,4747346,54722449>, r=64554096
-pos=<-30614396,35309724,38002656>, r=64581516
-pos=<-10320557,76729842,93474188>, r=93877069
-pos=<13776253,112564232,47459616>, r=66520809
-pos=<-19426400,76077875,73457390>, r=82314393
-pos=<20392710,-597374,75723277>, r=92501204
-pos=<73565874,44941739,46762681>, r=71174659
-pos=<44794582,45211865,34417889>, r=51812431
-pos=<30808532,11094130,61030147>, r=76532437
-pos=<46909639,5793869,53612079>, r=90516030
-pos=<27513857,3328475,16421598>, r=94411369
-pos=<21640888,8618138,58030066>, r=66841101
-pos=<60187840,48378575,49626488>, r=57223601
-pos=<53323160,35056110,60192977>, r=74248013
-pos=<39045276,34764803,92526128>, r=92594547
-pos=<29788477,33246508,82610486>, r=74940456
-pos=<61287491,41064943,75859138>, r=91869706
-pos=<83805674,38606862,33472372>, r=98374442
-pos=<24765096,72558665,83491980>, r=73536803
-pos=<73243064,48794009,48347901>, r=68585135
-pos=<2257507,48610195,50126246>, r=50579503
-pos=<56097309,27350537,68965302>, r=93499983
-pos=<27401848,61892753,108424451>, r=90440369
-pos=<38085245,31391991,62957917>, r=65439403
-pos=<27389873,44871535,57954105>, r=93238295
-pos=<28642998,55245239,47015295>, r=59138145
-pos=<59538529,72127104,48554461>, r=72940901
-pos=<24695503,17370947,71439981>, r=74552391
-pos=<190046363,60522528,59689720>, r=92569687
-pos=<83874063,57401017,55642739>, r=89638527
-pos=<37870963,32991930,88576851>, r=89243765
-pos=<59858602,21117176,60067051>, r=94596816
-pos=<62954004,39908683,30959151>, r=78733760
-pos=<-53805700,48011649,48466717>, r=70680467
-pos=<33918641,25229014,60092421>, r=64570019
-pos=<29935706,34682379,24104345>, r=57796544
-pos=<45469975,42072374,51688123>, r=50873804
-pos=<239645,49028770,53431321>, r=50918757
-pos=<22090049,90648730,38816139>, r=57503031
-pos=<73604072,38716803,53552837>, r=84228037
-pos=<-51648900,56507375,61236299>, r=82745278
-pos=<11433948,43173426,103762424>, r=67811156
-pos=<23769388,39639423,-15963779>, r=86741470
-pos=<90108754,49907193,36538383>, r=90310826
-pos=<40849395,23391212,49075614>, r=62321996
-pos=<60821623,36192478,49278751>, r=69695738
-pos=<-55004700,46205783,64401507>, r=89620119
-pos=<63891681,29314730,23382396>, r=97842273
-pos=<22899842,15990496,81493049>, r=84190251
-pos=<89442429,47657270,41332006>, r=87100806
-pos=<79902041,44400909,61780770>, r=93069934
-pos=<12154437,4371833,26551604>, r=67878763
-pos=<27961135,87898499,76297820>, r=84878304
-pos=<31179984,28156901,39622919>, r=50047728
-pos=<58834795,30116288,46805154>, r=71312238
-pos=<-37468150,39344404,49020703>, r=63564073
-pos=<13787634,30078047,95312289>, r=74809856
-pos=<21258677,24051888,59906910>, r=52901660
-pos=<25225987,10325944,48238626>, r=58926753
-pos=<-10216665,25028155,91775630>, r=93383813
-pos=<63196009,23817526,51927834>, r=87094186
-pos=<78200816,44278767,50093045>, r=79803049
-pos=<12524886,4324522,65091297>, r=69079602
-pos=<48398389,35662075,50732742>, r=59256899
-pos=<23193286,27697887,23748030>, r=58395019
-pos=<82171057,54001603,31121508>, r=88631620
-pos=<15882046,39600274,101297409>, r=73367075
-pos=<70345026,37464544,69938048>, r=98606419
-pos=<-31043984,49767824,33513724>, r=55042141
-pos=<-55745758,44494393,32168250>, r=86362423
-pos=<56968345,37311126,47328713>, r=62774012
-pos=<30491191,36646570,70589772>, r=60222460
-pos=<48790001,39470499,56116026>, r=61223433
-pos=<28232060,46775992,59299221>, r=73067993
-pos=<68721330,45676371,55700353>, r=74533436
-pos=<38025035,19071830,68806731>, r=83548020
-pos=<42463034,37837946,80990100>, r=81403157
-pos=<36140392,49413460,90167162>, r=72682232
-pos=<26340970,55295635,91433924>, r=65791237
-pos=<15217405,9663894,22720612>, r=69480434
-pos=<81192075,46831788,43722714>, r=77285227
-pos=<15791903,28617628,110143879>, r=93105998
-pos=<16868923,49996635,56353961>, r=59812204
-pos=<42072515,52655370,102307622>, r=89756283
-pos=<14064447,19989302,103921055>, r=93784250
-pos=<37033923,49843789,84769975>, r=67748133
-pos=<22272907,-8628448,64767492>, r=91456997
-pos=<66433463,32496150,53421452>, r=83146990
-pos=<20376840,-12139249,36699606>, r=82464067
-pos=<-23069411,40763186,74371558>, r=73097410
-pos=<16697985,15972562,66507867>, r=63021135
-pos=<58007380,45899300,56513705>, r=64409631
-pos=<12761878,101691058,52895130>, r=60068852
-pos=<65894728,48209002,40462715>, r=63870563
-pos=<-23578044,34329341,37436507>, r=59091730
-pos=<68670964,16020450,49033118>, r=97471527
-pos=<33450874,47692314,-16223660>, r=88629759
-pos=<29781906,110368238,48159734>, r=81030671
-pos=<-27382509,21051143,53767746>, r=76518917
-pos=<60711958,39335255,52007845>, r=69172501
-pos=<11873166,88653870,23702422>, r=60405198
-pos=<58456301,48334661,79898883>, r=85808755
-pos=<50561688,48802388,55004270>, r=52551686
-pos=<43906493,32073585,51254496>, r=58875453
-pos=<47202402,50487493,70388561>, r=62891312
-pos=<-24116893,35291116,42635465>, r=53469675
-pos=<29209795,48521255,32274473>, r=85692282
-pos=<22484243,31939044,41793056>, r=82345538
-pos=<39097645,48891805,-19388309>, r=96241673
-pos=<59448744,68318970,40736586>, r=70611679
-pos=<83899973,37394573,49527516>, r=91820849
-pos=<55119095,50531578,51820611>, r=52196052
-pos=<45909585,53516236,86611488>, r=78758039
-pos=<19575906,47754929,98232262>, r=65841157
-pos=<19821157,36832032,108165950>, r=86942918
-pos=<-42420092,49011802,49296701>, r=59124779
-pos=<16472049,493910,53543555>, r=65309626
-pos=<68475317,41875907,27009080>, r=86237985
-pos=<67975635,48132669,50642322>, r=66273143
-pos=<25514411,65896120,89685291>, r=73816791
-pos=<16076440,89463609,74072826>, r=72333648
-pos=<27038996,32284186,65083628>, r=55626291
-pos=<-45037807,54600267,50510768>, r=63501514
-pos=<75059894,43339425,51691601>, r=79200072
-pos=<45152503,13344493,68568525>, r=96164400
-pos=<23873270,96606052,51217763>, r=64418135
-pos=<35898574,15927821,56647149>, r=72405745
-pos=<14612996,38731636,51361472>, r=77646591
-pos=<-5902131,-3009640,68615229>, r=93946649
-pos=<74100631,46397060,60185704>, r=83677550
-pos=<2936997,10598739,66630803>, r=69514991
-pos=<33570368,26782253,65025779>, r=67601981
-pos=<22620708,70858421,14393696>, r=62665863
-pos=<69466587,47252697,80746089>, r=98747882
-pos=<57532000,43090615,46974285>, r=57203560
-pos=<-33323057,91524681,48752606>, r=86952945
-pos=<41867684,17902013,28694498>, r=81918918
-pos=<146474118,-17792253,48791288>, r=91760988
-pos=<43673493,41382502,93959889>, r=92038818
-pos=<88776317,60159570,51464487>, r=93121118
-pos=<41060247,13736073,29064377>, r=84907334
-pos=<42728063,-10035065,46708469>, r=95259841
-pos=<-31248574,22471388,51225348>, r=76422198
-pos=<-18292749,36619041,94605944>, r=92699396
-pos=<17669559,37527354,30367227>, r=58873366
-pos=<54066075,11948262,58745633>, r=96651610
-pos=<45634092,29248479,22896668>, r=80136484
-pos=<-3795303,14198844,66360238>, r=72376722
-pos=<52020051,48753548,73821716>, r=72876113
-pos=<44548645,71463152,22277466>, r=77314771
-pos=<95943902,49609488,50198922>, r=92321250
-pos=<11382219,49322850,110903283>, r=68750606
-pos=<16308951,38157204,77052401>, r=50992004
-pos=<49901052,45124447,52037873>, r=52602362
-pos=<11714697,46522793,60277422>, r=86501043
-pos=<32599204,10080713,42412200>, r=66753836
-pos=<-50339159,23376356,49895699>, r=93278133
-pos=<-481926,60817079,58399771>, r=73508417
-pos=<-34775068,30743004,72593787>, r=93045883
-pos=<31703167,37579991,26710568>, r=54060155
-pos=<41418042,75865990,48410305>, r=58415074
-pos=<55730667,44335603,79466153>, r=86649137
-pos=<48921063,-1366791,47738032>, r=93813807
-pos=<18627860,75681093,104199391>, r=91229054
-pos=<-36525811,42687600,48387004>, r=58644992
-pos=<28641236,45199073,77647713>, r=56877756
-pos=<56454486,55389785,46595035>, r=51160090
-pos=<-44194179,46266759,53335689>, r=67682726
-pos=<44618256,47710737,68453471>, r=61148903
-pos=<77229388,30534622,48416640>, r=90899526
-pos=<77687829,54469926,72231820>, r=97110635
-pos=<63121199,36032263,53619717>, r=76496503
-pos=<12666308,1966278,52017002>, r=58505385
-pos=<9020703,41272284,104812725>, r=70939694
-pos=<-19876219,41329660,67061534>, r=62027710
-pos=<55241981,44813263,63241753>, r=69458443
-pos=<16356575,44485986,96742222>, r=64400701
-pos=<13419236,-2544111,43252873>, r=59358359
-pos=<22342824,37447768,-22522083>, r=94064662
-pos=<48434035,43030917,54104152>, r=55295183
-pos=<-39720309,18033694,53711823>, r=91818270
-pos=<68153523,24661189,51517065>, r=90797317
-pos=<57325117,36293425,52234259>, r=69053961
-pos=<13722317,-5975253,73260726>, r=88746404
-pos=<-22350557,14129834,68397483>, r=93037852
-pos=<-32846284,27309425,48298945>, r=70255582
-pos=<57109144,31122521,61722057>, r=83497409
-pos=<32946559,19404403,79754970>, r=89084974
-pos=<60061590,34361758,74387621>, r=95875303
-pos=<22533855,20654706,97156873>, r=94823874
-pos=<60152075,61920634,64021170>, r=78814818
-pos=<88164102,48936730,36418698>, r=89456571
-pos=<63892308,79586772,55868598>, r=92068421
-pos=<61532968,43473306,50786055>, r=64633657
-pos=<145623332,-2263726,69014308>, r=80292810
-pos=<2244472,27189143,66161887>, r=53148205
-pos=<-621732,102357809,52028838>, r=68360948
-pos=<61015381,58405279,64915602>, r=77056999
-pos=<60036547,55462799,48852232>, r=57072293
-pos=<94133369,46514549,54630562>, r=98037409
-pos=<72882906,59169748,51959185>, r=76732560
-pos=<32368075,60813968,24159462>, r=52602971
-pos=<54820773,44932220,56461271>, r=62137817
-pos=<62827112,31108663,57634227>, r=85140656
-pos=<51289253,34882837,19403489>, r=83650579
-pos=<175246533,31538525,67205974>, r=99505297
-pos=<25835322,2476858,51057405>, r=70203756
-pos=<12647698,-16202354,75015212>, r=99653119
-pos=<25266699,55270130,56338470>, r=67556059
-pos=<2882839,17030271,89204393>, r=85711363
-pos=<13196433,2362720,73412118>, r=80033960
-pos=<-11541580,50263890,48002742>, r=62312381
-pos=<34454328,40838677,18099279>, r=62164019
-pos=<37346077,31634254,28037442>, r=64321911
-pos=<11550857,42697314,39371708>, r=86650306
-pos=<-56401026,55366533,48205618>, r=73325693
-pos=<3816696,43852368,85718508>, r=54469130
-pos=<-79970804,49758850,41406694>, r=96084636
-pos=<14157508,103810845,60988076>, r=71677137
-pos=<4883606,49148947,120911158>, r=83298303
-pos=<-54154624,54732055,71287395>, r=93526560
-pos=<-107075921,141613208,48460011>, r=79578616
-pos=<68124043,48018177,54869429>, r=70763515
-pos=<83883062,40301975,59748843>, r=99118141
-pos=<54330488,26956855,58785754>, r=81947247
-pos=<76716545,35766972,30606196>, r=96991168
-pos=<16733076,27004538,93131598>, r=78648559
-pos=<3164345,49994959,56199522>, r=85739181
-pos=<-65558371,46915176,49114144>, r=84177039
-pos=<22685992,58644418,-950811>, r=65861709
-pos=<46358820,77830246,73429650>, r=90340073
-pos=<31784224,4207619,58310315>, r=81674765
-pos=<40645163,40567313,4653981>, r=82071403
-pos=<74363782,34217574,48163864>, r=84097917
-pos=<71820542,48586015,47738648>, r=66761057
-pos=<22234457,96842307,42253839>, r=60403387
-pos=<78451229,48820222,54996216>, r=80415223
-pos=<55176882,40544947,76946620>, r=87366696
-pos=<29097323,92590803,48640896>, r=63049730
-pos=<47699581,38966811,43687798>, r=51692495
-pos=<41901097,23376954,18308495>, r=86863193
-pos=<40226381,50474536,48478776>, r=60204013
-pos=<22090484,103665863,61385007>, r=79862151
-pos=<39247750,46181881,65887820>, r=54741938
-pos=<44210292,28931291,57045309>, r=68112618
-pos=<90306607,55489067,44378311>, r=84997943
-pos=<26653020,44999935,112425297>, r=89866225
-pos=<122251992,147643275,47675356>, r=94393500
-pos=<54219761,60627098,37141976>, r=61285654
-pos=<36649940,35082339,35920668>, r=52294500
-pos=<84892874,48719177,50121076>, r=82082848
-pos=<43120199,45946706,82533341>, r=75494753
-pos=<29831398,24225673,63889088>, r=65282736
-pos=<87394874,44998738,49682919>, r=87867324
-pos=<48084711,44048093,63225183>, r=63050163
-pos=<43079746,21416551,61833837>, r=79284894
-pos=<-27985227,50324769,88476742>, r=82556945
-pos=<12936227,-40139519,49809699>, r=98673305
-pos=<52836924,33137569,74342803>, r=89830087
-pos=<20467909,19474436,73112536>, r=69893864
-pos=<-44655883,49991909,47503850>, r=58587565
-pos=<39619033,24778414,30323670>, r=71165088
-pos=<19701254,77089381,95844145>, r=85355833
-pos=<30357825,18623923,53787778>, r=61309535
-pos=<28689384,13553180,85027304>, r=95951414
-pos=<22738613,44005405,92031474>, r=66552524
-pos=<24096661,16884327,51212128>, r=54212327
-pos=<41221658,20947737,74264841>, r=90326709
-pos=<68704250,49495499,37096454>, r=68759850
-pos=<41015706,30453802,34374780>, r=62834656
-pos=<-39192967,44418054,7052818>, r=95001429
-pos=<58346423,29905829,49694789>, r=73923235
-pos=<-47411321,37316615,28943783>, r=88430221
-pos=<6313009,62147666,88907284>, r=58094460
-pos=<-18949075,25664501,21189086>, r=79374791
-pos=<-6231316,47877771,94894815>, r=69668092
-pos=<-4959627,-11284677,51207141>, r=83871070
-pos=<-26800100,31316792,85891899>, r=97794986
-pos=<14800798,45475080,60920218>, r=72772631
-pos=<15574017,34567333,47616823>, r=66137500
-pos=<12571199,54183215,132092028>, r=91567229
-pos=<85964775,48452816,55987158>, r=89287458
-pos=<32528848,61756003,83668280>, r=70674142
-pos=<30415640,45251980,77786048>, r=58737656
-pos=<67405095,42038057,69727689>, r=90882628
-pos=<-27282332,29932094,67302192>, r=81072131
-pos=<27079726,55818148,118457056>, r=94075852
-pos=<47427996,25432369,65752919>, r=83536399
-pos=<35912784,28823686,2889180>, r=90847490
-pos=<19022011,10805866,42244718>, r=52618965
-pos=<55358564,45107226,86922766>, r=92961987
-pos=<91759672,52695604,55771385>, r=92947404
-pos=<60858731,31571552,49336855>, r=74411908
-pos=<46105003,47719012,104076255>, r=98250390
-pos=<64769624,44050871,46823679>, r=63330378
-pos=<56334065,35473114,46976697>, r=63625520
-pos=<38784558,36154334,74158463>, r=72576536
-pos=<15139892,18208980,77208777>, r=69927622
-pos=<29773988,37862753,46837729>, r=75128840
-pos=<-19400907,31009643,82672979>, r=87483874
-pos=<22436249,4335612,40742681>, r=64005480
-pos=<57933119,49369634,42963977>, r=52247105
-pos=<28821341,50174459,94048725>, r=68483455
-pos=<42766720,46919122,67704700>, r=59340324
-pos=<43192236,27198101,49575789>, r=61358052
-pos=<-43692646,50057336,47231844>, r=57286951
-pos=<24831701,44238507,82312902>, r=58694420
-pos=<-19868908,46213059,29145531>, r=51789614
-pos=<37674304,49027851,49803431>, r=90236159
-pos=<24179213,63137357,81030652>, r=61067930
-pos=<-835109,16301785,8763875>, r=83048767
-pos=<60007651,48580022,37157717>, r=60917473
-pos=<-3513465,58931192,36689940>, r=55272504
-pos=<64730482,44061727,58071338>, r=74527937
-pos=<57557140,27453254,49956610>, r=75848545
-pos=<-50758494,45826073,49691770>, r=71044146
-pos=<62645509,43017700,73596116>, r=89011779
-pos=<43962359,59963273,58181592>, r=54827941
-pos=<52767000,-690037,48453913>, r=97698880
-pos=<36714194,13278504,58057504>, r=77281248
-pos=<46379652,23339944,54461382>, r=73289025
-pos=<74833796,38777792,55501950>, r=87345964
-pos=<23836805,41117550,54512089>, r=73696116
-pos=<94628232,45461045,54228196>, r=99183319
-pos=<-202999,18069622,15568647>, r=73844178
-pos=<55086259,69483283,67351942>, r=84642235
-pos=<24550342,19362192,54084961>, r=55060970
-pos=<43561989,42181396,88479347>, r=85648270
-pos=<-10024336,12574124,61824031>, r=75694149
-pos=<63093494,50487012,63430637>, r=71824989
-pos=<13238260,46838666,114531109>, r=76718572
-pos=<-34508328,31733290,61903414>, r=81098212
-pos=<47273878,56549746,61206875>, r=57751410
-pos=<51901311,47124485,54742381>, r=55307053
-pos=<48911462,42998379,52595262>, r=54296238
-pos=<8423758,33788169,81472480>, r=55680436
-pos=<52489834,37039683,24551750>, r=77545996
-pos=<23221192,46053010,27109621>, r=98563626
-pos=<78341303,34632795,52942740>, r=92439118
-pos=<32822753,50528340,48492662>, r=97586626
-pos=<36078569,60831753,61121675>, r=50752802
-pos=<55393077,32887415,62078817>, r=80372957
-pos=<52577411,47834409,95027660>, r=95558504
-pos=<7982580,35935469,100410636>, r=72912221
-pos=<28254934,-5692809,48594864>, r=78330449
-pos=<93164787,53953121,37319613>, r=93379220
-pos=<69683700,50311127,43526271>, r=62493847
-pos=<69096402,68831913,54068839>, r=84717956
-pos=<-15616652,53162917,-21828268>, r=94820191
-pos=<35830017,36797729,60460363>, r=55280585
-pos=<35725837,39987392,71708389>, r=63234702
-pos=<28921285,10377573,21486225>, r=83705064
-pos=<58009877,36953434,64309175>, r=81153603
-pos=<4041304,23448367,80380950>, r=69311143
-pos=<-40188030,50193428,73717210>, r=80131916
-pos=<45331205,43356992,-10246333>, r=98868108
-pos=<33231458,35304292,63319974>, r=57035283
-pos=<83212557,55802897,49643328>, r=81379842
-pos=<52407685,62044414,55808689>, r=62981541
-pos=<24465344,55030614,40709025>, r=54511963
-pos=<34822445,35586247,94835471>, r=89859730
-pos=<41947430,106641696,58499087>, r=99808954
-pos=<34007805,25332256,74415584>, r=78879361
-pos=<42353277,21583684,43211560>, r=64205555
-pos=<46824219,41469745,81092671>, r=82235471
-pos=<39175888,64066480,56005552>, r=51968987
-pos=<35169294,14706659,70874056>, r=87124538
-pos=<31756579,36505937,69862353>, r=60901351
-pos=<66186233,74698949,62308132>, r=95914312
-pos=<18299494,9943745,88313443>, r=92457156
-pos=<64305625,54642605,46635994>, r=58305361
-pos=<43342211,54051656,-12524699>, r=93499604
-pos=<1204873,43713891,90688678>, r=62189555
-pos=<-13283018,54729947,41861605>, r=69590101
-pos=<-31932080,38880157,7478672>, r=92852555
-pos=<67997362,18838826,53846693>, r=98793093
-pos=<45005507,45677940,68474889>, r=63590345
-pos=<25047748,19693002,56942178>, r=58084775
-pos=<59536893,53878804,44330064>, r=52666034
-pos=<-12305191,18814086,32691404>, r=68079081
-pos=<48514310,71015090,73260507>, r=85510764
-pos=<23215433,24849773,62414951>, r=56568576
-pos=<48375251,44217463,50195484>, r=50141167
-pos=<8533516,5205217,57154320>, r=59835206
-pos=<41744489,61900670,68759898>, r=65125788
-pos=<25995530,53455792,52876125>, r=84745629
-pos=<41898674,28658953,46841382>, r=55868987
-pos=<46615138,40873389,53992506>, r=55522112
-pos=<13621634,15130507,61150930>, r=55429905
-pos=<28800949,96176199,42744584>, r=65812962
-pos=<50716446,46054079,51943058>, r=52393279
-pos=<66090044,46936103,49597951>, r=64539754
-pos=<12384728,99052817,46672196>, r=50830830
-pos=<30507487,46324078,49196636>, r=53377596
-pos=<56707853,42200865,4638876>, r=96515756
-pos=<45826945,29273332,70679395>, r=83020876
-pos=<65858096,44235953,74579721>, r=91990032
-pos=<28468588,10920920,16097499>, r=88097726
-pos=<39759374,55004146,65068076>, r=52552527
-pos=<32722185,9152217,77258644>, r=96616467
-pos=<40263724,90798362,74141016>, r=97923911
-pos=<63813583,25734960,52445419>, r=86311957
-pos=<13623156,-11399099,50323103>, r=71133222
-pos=<18835638,13208529,78575760>, r=79990895
-pos=<31131751,31960100,16459375>, r=69359930
-pos=<-5532018,47842393,49544702>, r=58199211
-pos=<52543769,56002412,56281106>, r=57548097
-pos=<17271103,16098713,85210155>, r=82170398
-pos=<8560336,-262030,79159540>, r=87280971
-pos=<49926956,35704274,61116865>, r=71127399
-pos=<24101783,26395277,56890858>, r=50385330
-pos=<31297309,36015975,73610976>, r=64680170
-pos=<60951357,47487423,50040977>, r=59292976
-pos=<-6552339,46865581,54171566>, r=97135699
-pos=<12266799,29794615,102575318>, r=80835894
-pos=<41362010,-1001153,50726468>, r=88877562
-pos=<-79408914,53316703,42177087>, r=94760688
-pos=<104015414,-12058702,95553517>, r=85034410
-pos=<36118486,58455496,73252433>, r=60547157
-pos=<-162951879,53857833,83594703>, r=82185074
-pos=<15903426,43651781,104639242>, r=72678942
-pos=<-32854808,26002494,56327108>, r=79599457
-pos=<21099481,19094332,100959051>, r=98752255
-pos=<24167618,-8739717,30495704>, r=89059173
-pos=<72394872,39330632,49717840>, r=78570062
-pos=<54775712,32622258,55154577>, r=73096062
-pos=<861857,49218541,51118330>, r=58066068
-pos=<-5468812,11766419,47201314>, r=57323538
-pos=<54376534,50267426,68123851>, r=68020831
-pos=<-11193839,16324032,71540744>, r=82830218
-pos=<-60523002,57442850,50274191>, r=81592741
-pos=<-29839548,43107702,59094053>, r=62245514
-pos=<40995692,35189656,31867983>, r=60585578
-pos=<2127548,79947411,64210470>, r=55382907
-pos=<76435206,62567388,49224029>, r=80947342
-pos=<18292419,78668262,89502317>, r=79183714
-pos=<61543563,48678038,49393560>, r=58047050
-pos=<49056268,16749754,54586590>, r=82681442
-pos=<32160288,47889573,74659453>, r=54718020
-pos=<43809313,17203556,60239870>, r=82633519
-pos=<18382152,13782734,50572366>, r=50960144
-pos=<-4612540,43956582,74570265>, r=51646458
-pos=<36877255,77690656,71014199>, r=78302974
-pos=<8461245,107223701,82490762>, r=94606042
-pos=<61128848,32827418,55774134>, r=79863718
-pos=<35913499,38963411,33332024>, r=50265639
-pos=<1127776,127388872,36292973>, r=94180310
-pos=<5714307,34985745,46938437>, r=89784313
-pos=<-15828124,26101435,54773764>, r=60920527
-pos=<17592081,23832016,67514705>, r=57062704
-pos=<22653811,39455116,-26751413>, r=96597920
-pos=<83579555,50410261,40303906>, r=79513010
-pos=<29570730,41524388,115128062>, r=98963193
-pos=<62901527,46405373,72119120>, r=84403400
-pos=<42033717,49579045,28951343>, r=50151335
-pos=<50290153,79090876,13155390>, r=99806125
-pos=<32838667,20265229,82380525>, r=90742084
-pos=<27072546,25112976,60984139>, r=58731786
-pos=<51760954,99673414,42947756>, r=92067022
-pos=<96223097,46579168,48454836>, r=93886917
-pos=<20539700,89615026,50388392>, r=53263954
-pos=<87474324,48927205,58630524>, r=92965513
-pos=<87649196,50247640,46578408>, r=79768044
-pos=<63644165,45941702,48165556>, r=61655968
-pos=<33917984,4384397,66017074>, r=91338622
-pos=<90694157,50424925,44050932>, r=82865925
-pos=<39280851,63394294,29871881>, r=56383866
-pos=<25736639,3788474,70557146>, r=88293650
-pos=<59625129,68137746,50847955>, r=71331539
-pos=<61786342,88735694,43227520>, r=90874904
-pos=<66478154,41830201,57355016>, r=77790879
-pos=<83213797,55956176,53769628>, r=85660378
-pos=<14226222,58285154,111838422>, r=77070532
-pos=<-11089422,72660627,37151124>, r=50811403
-pos=<11525519,36372344,-9153000>, r=70953805
-pos=<25625653,11933339,43090128>, r=57249743
-pos=<36965738,80069817,28251408>, r=72364572
-pos=<2572456,15663929,100772980>, r=98956227
-pos=<48816868,52979093,10561684>, r=74814866
-pos=<27764324,7364015,56320592>, r=72508887
-pos=<14680376,45038335,52622286>, r=87447411
-pos=<37306057,35355772,58697872>, r=56436152
-pos=<55684043,32089169,68474119>, r=87856982
-pos=<-18599421,-5478046,57047646>, r=97544769
-pos=<46354713,6968713,57464127>, r=92638083
-pos=<12118033,36165008,65677052>, r=92989592
-pos=<676447,14621732,49607037>, r=50728470
-pos=<45415617,25927891,47690084>, r=62966053
-pos=<51847139,43968466,50866526>, r=54533096
-pos=<57224688,40723631,79967977>, r=92256877
-pos=<-41974385,48487581,80338473>, r=90245001
-pos=<16279186,32644408,70877830>, r=50300455
-pos=<85730512,71284983,49342982>, r=99079305
-pos=<43300839,49858117,87012245>, r=76242982
-pos=<26140848,85069690,51915298>, r=55846552
-pos=<20067563,36478896,98226338>, r=77602895
-pos=<39024976,27267627,48331999>, r=55877287
-pos=<18110738,19933929,9316375>, r=75507977
-pos=<38156702,29592331,90417231>, r=94769476
-pos=<34468095,39311352,92446616>, r=83391277
-pos=<-25451345,41357746,73731306>, r=74245009
-pos=<145307806,16055465,95063224>, r=75973034
-pos=<88345475,44366394,46860999>, r=86627939
-pos=<6746817,43065828,49395836>, r=95953060
-pos=<89668345,49174202,42502939>, r=84638925
-pos=<19422506,48109611,52984496>, r=89581683
-pos=<23615329,24451475,80055897>, r=75007733
-pos=<24561493,70588119,78915934>, r=66786277
-pos=<-20892926,-38826140,130041705>, r=52046051
-pos=<56952734,44502535,86146779>, r=94384964
-pos=<59125451,70835494,37750123>, r=75791215
-pos=<59725315,44820369,88398197>, r=99091066
-pos=<57563903,84369724,56767806>, r=91422143
-pos=<18891838,32251556,89134226>, r=71562367
-pos=<-69109214,43003113,52687251>, r=95212996
-pos=<37148297,44575567,19114076>, r=60106192
-pos=<82516570,52959759,49160201>, r=77357244
-pos=<19925280,22565540,89295485>, r=82443083
-pos=<39831007,75957528,84332801>, r=92842107
-pos=<56267863,56708031,53720953>, r=59417573
-pos=<24392246,16027229,40515445>, r=54497098
-pos=<63416774,22732986,60340221>, r=96812001
-pos=<18771596,11907097,89674460>, r=92326888
-pos=<18295602,-904377,65180787>, r=80168710
-pos=<76729461,42587467,58598855>, r=88528733
-pos=<25931532,2564546,11558661>, r=98455851
-pos=<51390419,34959237,79913376>, r=92132677
-pos=<94475054,62344308,46861391>, r=96401848
-pos=<26239695,23326743,52168243>, r=50869390
-pos=<66754433,36150331,60711348>, r=87103297
-pos=<13266196,33527546,106571230>, r=82097743
-pos=<-111114055,25436871,-16523878>, r=63252951
-pos=<11785966,44919593,51105643>, r=92641366
-pos=<35035786,25809847,51892798>, r=56906614
-pos=<15815182,42589787,-28524114>, r=88397274
-pos=<-12205162,32089283,61698274>, r=58233858
-pos=<24004232,46728143,47520031>, r=80510576
-pos=<-39813644,45613790,54431313>, r=65051203
-pos=<11920487,38615876,104246746>, r=73339363
-pos=<11594417,28228040,87840235>, r=66994730
-pos=<30139945,39056924,99484053>, r=86355178
-pos=<73761945,56681469,48614608>, r=71778765
-pos=<59980939,29175677,26217768>, r=91235042
-pos=<30800201,20881857,60419025>, r=66125344
-pos=<-34885630,41760696,81446273>, r=90990848
-pos=<13252723,44070799,52426754>, r=94797487
-pos=<27523884,25555060,62301005>, r=60057803
-pos=<32470726,44648260,50078802>, r=96898852
-pos=<-53460454,38096864,58236941>, r=90020247
-pos=<-7776033,22272570,221743855>, r=86784484
-pos=<47643890,27979205,40999038>, r=65313513
-pos=<-49206723,45418829,48581232>, r=68789009
-pos=<26415945,-5360609,59927893>, r=87492289
-pos=<19632729,78551565,62425950>, r=53330966
-pos=<-29090215,37747226,47368558>, r=55131296
-pos=<-51203935,53688305,57192245>, r=75436998
-pos=<53194351,20229586,67261433>, r=96014134
-pos=<59033165,36574712,47501506>, r=65747804
-pos=<28726549,27459466,93978463>, r=91033437
-pos=<-30349534,63679163,66487486>, r=73868777
-pos=<20354826,55708258,37414470>, r=72587261
-pos=<42872525,39192697,50827455>, r=50295430
-pos=<4189367,50148842,96495172>, r=58576579
-pos=<19839189,17405958,53327135>, r=51548236
-pos=<58403995,10724829,48552702>, r=92019833
-pos=<56925937,26654482,53930796>, r=79990192
-pos=<85525382,46874490,48028508>, r=82467632
-pos=<78385761,56459173,49607407>, r=77173058
-pos=<28013172,47226074,79168364>, r=55743341
-pos=<-36546158,49367662,58228805>, r=61827009
-pos=<3642627,47501084,48667348>, r=57476869
-pos=<-15026375,34676964,79400636>, r=76169828
-pos=<44776752,36631338,71777618>, r=75710994
-pos=<50724281,61695377,82977929>, r=88118313
-pos=<50543721,68583753,53494826>, r=65343024
-pos=<64977795,48269498,54421041>, r=66917342
-pos=<64337633,33093342,58674046>, r=85706180
-pos=<84494054,42694659,47766968>, r=85354223
-pos=<79454530,40991599,47286470>, r=81537244
-pos=<23892691,60032681,90072163>, r=66718981
-pos=<21372139,1624627,53503785>, r=69039163
-pos=<32035749,76966477,77095200>, r=78818138
-pos=<-39499597,25497978,52638773>, r=83060005
-pos=<-10727342,21233519,89113195>, r=95026634
-pos=<34649133,-17816943,154076639>, r=51706066
-pos=<-310521,29251681,80872892>, r=68351348
-pos=<-35626731,35652256,75324884>, r=91719269
-pos=<-28584393,32369975,43021280>, r=60472430
-pos=<61823323,45088436,60143456>, r=72666223
-pos=<19033380,42730838,53791921>, r=74141163
-pos=<89830892,52562549,46779381>, r=81893560
-pos=<60608855,18813091,52694817>, r=90278462
-pos=<17267224,9563744,50202739>, r=53694165
-pos=<55214888,49890270,77081555>, r=78194093
-pos=<21982510,-9174335,56667109>, r=83611796
-pos=<35336772,34419679,54381440>, r=51087223
-pos=<35732933,81750930,86722356>, r=96927086
-pos=<40366133,48699432,63195639>, r=50650272
-pos=<13860407,36375969,101322588>, r=74595100
-pos=<16654655,36160858,79841714>, r=56123648
-pos=<13730532,24543010,108062953>, r=93038317
-pos=<56199116,27392338,60095346>, r=84689997
-pos=<44970060,64701313,51356719>, r=53748935
-pos=<71898699,50091653,58409487>, r=76004388
-pos=<18623007,7703241,34029562>, r=63537736
-pos=<-69845451,43522664,36014739>, r=97587341
-pos=<-53398759,61033989,53124637>, r=80910003
-pos=<18996826,123082386,64172124>, r=98972193
-pos=<15071090,48002057,56402678>, r=57294116
-pos=<64784508,42817602,60967142>, r=78722225
-pos=<33099124,20384062,48987534>, r=57490445
-pos=<56499928,48281788,30462746>, r=64403000
-pos=<62602261,43877833,56646859>, r=71159357
-pos=<40601081,46287045,83500099>, r=73602278
-pos=<46785400,44105544,53710952>, r=52178655
-pos=<31776156,49138212,57102165>, r=60343554
-pos=<-8087849,101058920,53869413>, r=76368664
-pos=<68800958,28321106,60722937>, r=96990643
-pos=<44816049,54633928,75794575>, r=67965727
-pos=<53252976,16997617,52757921>, r=84801128
-pos=<20159573,4917801,67394005>, r=78423671
-pos=<25186863,36991940,50906823>, r=71847864
-pos=<46455946,49323556,32169085>, r=51610830
-pos=<15112853,9193790,78091697>, r=79798602
-pos=<35172783,44955593,9138129>, r=67726599
-pos=<36845715,-3865187,58915348>, r=95414111
-pos=<12724806,43742754,47758789>, r=63661481
-pos=<13740984,41462272,59374328>, r=57290740
-pos=<7184350,-5378407,35786459>, r=69686895
-pos=<30315306,19909058,60567093>, r=66761347
-pos=<23042705,48106561,51062072>, r=50370479
-pos=<38003218,18795506,63663686>, r=78659260
-pos=<-50152515,23434111,49563288>, r=92701310
-pos=<19779981,31020057,87716735>, r=72264514
-pos=<54675785,37143320,47301025>, r=60621369
-pos=<27317419,85532118,10755307>, r=85674671
-pos=<24220749,30298714,65600831>, r=55311342
-pos=<38298211,16829754,79700955>, r=96957274
-pos=<-41859234,48457035,49945636>, r=59767580
-pos=<15266796,50152960,-16783399>, r=68545261
-pos=<17354489,34934398,73509340>, r=51717315
-pos=<76679677,41784174,46600433>, r=77283789
-pos=<75785122,49189963,24555572>, r=88687133
-pos=<31602386,-1809514,54021584>, r=83221452
-pos=<24197293,118556292,36240959>, r=90093112
-pos=<41713307,36996636,24935624>, r=66428640
-pos=<64299038,38463199,55694734>, r=77318434
-pos=<7757987,3749260,53680732>, r=58593180
-pos=<56221259,45539040,51392924>, r=57863010
-pos=<86280392,40570521,49823680>, r=91321406
-pos=<40985822,38422757,62675052>, r=61025959
-pos=<-19769433,28482426,78681909>, r=86388751
-pos=<-6975289,5730781,37065950>, r=71457939
-pos=<61259091,50186505,46648264>, r=53508700
-pos=<8622052,32220056,49275276>, r=88278530
-pos=<61833857,50412963,46753340>, r=53962077
-pos=<-4399009,48809097,49452903>, r=56894734
-pos=<48606866,55703082,56835691>, r=53866623
-pos=<40277235,43060796,86674977>, r=79679544
-pos=<66381376,38657592,47549643>, r=71061283
-pos=<66610246,33076581,51254403>, r=80575997
-pos=<-2229,78636750,63424870>, r=55416397
-pos=<18377518,48832963,53562604>, r=60890684
-pos=<90908649,49671025,54674574>, r=91700065
-pos=<62717793,49507540,49498777>, r=58496891
-pos=<-26695452,9896056,59394189>, r=92613353
-pos=<96813903,49950678,36030803>, r=97480109
-pos=<-45934044,48006955,85314808>, r=99661609
-pos=<28345752,89056626,57135197>, r=67258391
-pos=<46911176,67966691,50703397>, r=58302218
-pos=<45655336,-1240007,50118609>, r=92802415
-pos=<27257302,48792534,114476548>, r=88729184
-pos=<45076163,60506472,99480933>, r=97784511
-pos=<24440656,6331158,66321442>, r=80218952
-pos=<86718134,53471098,64974817>, r=97884835
-pos=<13002461,39245232,82230607>, r=51775751
-pos=<44016665,17763542,57611529>, r=79652512
-pos=<-40064560,37224025,75652211>, r=94912530
-pos=<68208507,25863026,38158715>, r=90834297
-pos=<57565384,22102840,65819937>, r=97070379
-pos=<-47003116,46864661,75781978>, r=92340060
-pos=<38490016,32334280,92578602>, r=94522370
-pos=<-5714689,45715794,87305984>, r=63724875
-pos=<4169961,32223055,70655443>, r=50682064
-pos=<11631169,53756595,112500350>, r=70608970
-pos=<27964048,53760540,51946071>, r=92193390
-pos=<62492358,64684669,60220122>, r=80117908
-pos=<-27985050,39566338,86615198>, r=91453594
-pos=<-52065594,42472259,56377190>, r=82390370
-pos=<3898843,34780596,84015287>, r=61755735
-pos=<73216183,66007552,63917955>, r=95862769
-pos=<-33586886,28099044,37596253>, r=75170893
-pos=<62162136,43593080,35027233>, r=70189425
-pos=<42380204,45054117,82581795>, r=75695929
-pos=<45713633,71246439,58274227>, r=67955009
-pos=<58496590,28810046,66509544>, r=91984064
-pos=<54228416,29844211,60458606>, r=80630925
-pos=<59125452,49727840,68165913>, r=73351472
-pos=<31594381,31254777,60488769>, r=56616312
-pos=<32996607,28401497,-6185652>, r=97428371
-pos=<-27676173,72955050,62868850>, r=76852602
-pos=<36595255,83832410,61664703>, r=74813170
-pos=<52289767,76573303,55458584>, r=77042452
-pos=<-34430198,64069661,41407622>, r=61304548
-pos=<15997561,36915640,46433122>, r=54038958
-pos=<16413353,47783146,34674415>, r=64901486
-pos=<64015954,32627612,35048732>, r=82987175
-pos=<21913810,20066037,60927310>, r=58562956
-pos=<96002159,52824857,46573747>, r=88121609
-pos=<39394945,28882724,7474056>, r=89685818
-pos=<20056233,48412744,50668598>, r=51524642
-pos=<30581455,6484858,69827246>, r=89711776
-pos=<73531536,63489490,52817602>, r=82559358
-pos=<65079976,47254318,50149238>, r=63763076
-pos=<58105319,28997976,74309152>, r=99204458
-pos=<21645135,25383360,65148930>, r=57198651
-pos=<59322587,38618996,31830445>, r=75520670
-pos=<75723124,49496530,47681602>, r=69696040
-pos=<72472729,43854197,49307273>, r=73713667
-pos=<92245604,45344606,55387050>, r=98076063
-pos=<87346974,40579582,55400523>, r=97955832
-pos=<58553092,85903549,61580627>, r=98758064
-pos=<22211175,17784675,38135312>, r=52938902
-pos=<-46446441,46123527,56447350>, r=73189932
-pos=<79651174,60649653,46567278>, r=79588813
-pos=<3183358,100608031,62255472>, r=73032671
-pos=<84980054,44306467,57852320>, r=94314054
-pos=<13159152,29544137,118948329>, r=98351255
-pos=<55989149,34723518,60253057>, r=77306587
-pos=<7464919,27618769,50195292>, r=76432568
-pos=<45662029,18032820,57472487>, r=80889542
-pos=<66488550,47840796,60192370>, r=74628113
-pos=<100834168,48505590,47688018>, r=95804844
-pos=<87058178,55277294,63550312>, r=98606540
-pos=<-19261340,57535170,95998544>, r=86147581
-pos=<22462549,16255123,52915145>, r=54910418
-pos=<35394749,-14347718,38837399>, r=97552776
-pos=<49442112,80167286,56485161>, r=78815295
-pos=<66124088,25084623,60378789>, r=97206223
-pos=<-39094862,31312067,71694639>, r=95897158
-pos=<45547869,28670666,77058327>, r=89723604
-pos=<-35254682,48200671,53522661>, r=56996485
-pos=<-50681993,48889912,58602953>, r=76814767
-pos=<93416089,42886451,50093636>, r=96411181
-pos=<40273726,50187487,66338184>, r=52212762
-pos=<71495746,53518296,47340518>, r=65075268
-pos=<35337185,28850385,52422541>, r=54697230
-pos=<-37186059,23174072,65019898>, r=95451690
-pos=<3055203,42428530,50525534>, r=79863289
-pos=<70807397,48153577,52976082>, r=71417799
-pos=<45425352,22601606,54140471>, r=72752062
-pos=<34860856,50202696,84178116>, r=64624132
-pos=<-35019085,35299269,67521723>, r=83661179
-pos=<52396219,18046217,66743576>, r=96881503
-pos=<21320619,82371380,96152708>, r=92565605
-pos=<15886629,53838385,51253655>, r=58325490
-pos=<25540620,-144082,61949032>, r=83421601
-pos=<19607299,26079014,80784933>, r=70101061
-pos=<43625002,82379202,46671610>, r=65396639
-pos=<18087611,27416816,79754040>, r=66212759
-pos=<52278728,43457996,59554059>, r=64162646
-pos=<191891394,43647854,79856100>, r=87885001
-pos=<-23316041,33305239,21542834>, r=75747369
-pos=<41051615,43217745,79629775>, r=73251611
-pos=<25282015,96914280,81356373>, r=96273579
-pos=<86498829,49826166,49875799>, r=82336333
-pos=<-2914005,73696408,20031560>, r=60791049
-pos=<72317668,48710121,46906664>, r=66302188
-pos=<24124048,40230442,50737700>, r=70045992
-pos=<-15331082,23393472,69420246>, r=77777481
-pos=<60370615,61835353,41939391>, r=63847038
-pos=<27912835,58216095,95876603>, r=74726266
-pos=<13135381,29673914,-7200729>, r=77310078
-pos=<-4293975,-7924701,63718721>, r=92357382
-pos=<-7845395,8196541,81649819>, r=97718361
-pos=<57821160,39886034,47821779>, r=61544955
-pos=<35050365,102312488,47343243>, r=77426827
-pos=<12449896,27209138,16418756>, r=55470037
-pos=<34494730,73748079,90752501>, r=91716038
-pos=<57118108,63486407,40599841>, r=63585305
-pos=<31614222,37827352,66347891>, r=55922716
-pos=<71921216,57086361,62053860>, r=83782202
-pos=<40604336,61796038,95345438>, r=90466524
-pos=<42823781,91753158,31528226>, r=86629121
-pos=<13084484,44428600,39734739>, r=58630736
-pos=<46026357,72434951,50677960>, r=61860344
-pos=<44047082,25365962,65870631>, r=80339615
-pos=<33858606,24554085,63480297>, r=68572838
-pos=<13990494,12966574,37651100>, r=50020522
-pos=<85453922,48022937,62761507>, r=95980379
-pos=<-14758008,50462005,34355789>, r=56928077
-pos=<-68410383,64305072,50641199>, r=96709132
-pos=<30323743,56371517,79602907>, r=59018900
-pos=<-17874241,42022179,93323172>, r=85595054
-pos=<-65617654,54203269,55220274>, r=88393709
-pos=<24714328,14807957,19217556>, r=77336830
-pos=<13766705,14407030,95466028>, r=90613558
-pos=<15391997,96619121,55137901>, r=59869773
-pos=<22510663,75019333,95466166>, r=85716891
-pos=<69099146,47076193,31474558>, r=77195928
-pos=<44744760,6567211,31332589>, r=93492631
-pos=<9200050,27713300,-12919955>, r=83285900
-pos=<66111729,48955586,47702449>, r=60646506
-pos=<-10141224,77420819,98708097>, r=99622712
diff --git a/src/23/solve.py b/src/23/solve.py deleted file mode 100644 index dc029af..0000000 --- a/src/23/solve.py +++ /dev/null @@ -1,116 +0,0 @@ -# 2nd part solved with the help of subreddit - -from sys import argv as args -import math - -# read input file -file = open("input.txt") -sinput = file.read() -file.close() - -# nanobots consist of tuples containing: (position, radius) -nanobots = list() - -# parse a line of input file -def parseLine(l): - s = l.split(">, ") - pos = [int(v) for v in s[0].split("=<")[1].split(",")] - radius = int(s[1].split("=")[1]) - nanobots.append((pos, radius)) - -# parse input file -sinput = [parseLine(l) for l in sinput.split("\n") if len(l) != 0] - -# manhattan distance -def dist(p1, p2): - xd = abs(p1[0] - p2[0]) - yd = abs(p1[1] - p2[1]) - zd = abs(p1[2] - p2[2]) - return xd + yd + zd - -# two nanobots range overlap -def isoverlap(nb1, nb2): - return nb1[1] + nb2[1] >= dist(nb1[0], nb2[0]) - -# nanobots range completely inside anothers range -def isinside(nb1, nb2): - return dist(nb1[0], nb2[0]) <= nb2[1] - nb1[1] - -# check if range of nanobot is inside grid -def tileinrange(tile, nb, gridsize): - hgridsize = math.floor(gridsize / 2) # case gridsize = 1 => squares should have 0 width - nbp = nb[0] - ds = [abs(nbp[i] - tile[i]) for i in range(3)] - md = max(ds) - if md == 0: - return True - ds = [d * hgridsize / md for d in ds] # get distance along squares sides - return dist(nbp, tile) - sum(ds) <= nb[1] - -### PROGRAM CODE - -def solve1(): - maxr = max(nanobots, key = lambda x : x[1]) - inrange = 0 - for nb in nanobots: - if dist(nb[0], maxr[0]) <= maxr[1]: - inrange += 1 - print(inrange) - -def solve2(): - global nanobots - # use smaller getting grid like binary search to find position in range of most nanobots - minpx = min(nanobots, key = lambda x : x[0][0])[0][0] - minpy = min(nanobots, key = lambda x : x[0][1])[0][1] - minpz = min(nanobots, key = lambda x : x[0][2])[0][2] - minp = (minpx, minpy, minpz) - - maxpx = max(nanobots, key = lambda x : x[0][0])[0][0] - maxpy = max(nanobots, key = lambda x : x[0][1])[0][1] - maxpz = max(nanobots, key = lambda x : x[0][2])[0][2] - maxp = (maxpx, maxpy, maxpz) - - gridsize = max([maxp[i] - minp[i] for i in range(3)]) # largest dif dim to ensure all nanbots are in the grid - - bestpos = None - while gridsize >= 1: - maxintile = 0 - - # traverse grid in steps of gridsize - xsteps = math.ceil((maxp[0] - minp[0]) / gridsize) + 1 - ysteps = math.ceil((maxp[1] - minp[1]) / gridsize) + 1 - zsteps = math.ceil((maxp[2] - minp[2]) / gridsize) + 1 - for nx in range(xsteps): - for ny in range(ysteps): - for nz in range(zsteps): - x = minp[0] + nx * gridsize - y = minp[1] + ny * gridsize - z = minp[2] + nz * gridsize - intile = 0 - for nb in nanobots: - if tileinrange((x, y, z), nb, gridsize): # check if nanobots range intersects with tile - intile += 1 - if maxintile < intile: - maxintile = intile - bestpos = (x, y, z) - elif maxintile == intile: - if maxintile == 0 or sum([abs(v) for v in (x, y, z)]) < sum([abs(v) for v in bestpos]): # if two gridtiles have the same count, choose the one closest to the origin - bestpos = (x, y, z) - - if gridsize == 1: - break - gridsize = math.floor(gridsize / 2) - - minp = [v - gridsize for v in bestpos] - maxp = [v + gridsize for v in bestpos] - - print(sum(bestpos)) - -def main(): - if len(args) > 1: - if args[1] == "1": - solve1() - elif args[1] == "2": - solve2() - -main() diff --git a/src/24/input.txt b/src/24/input.txt deleted file mode 100644 index 969be90..0000000 --- a/src/24/input.txt +++ /dev/null @@ -1,23 +0,0 @@ -Immune System: -2728 units each with 5703 hit points (weak to fire) with an attack that does 18 cold damage at initiative 12 -916 units each with 5535 hit points (weak to bludgeoning) with an attack that does 55 slashing damage at initiative 20 -2255 units each with 7442 hit points (weak to radiation) with an attack that does 31 bludgeoning damage at initiative 8 -112 units each with 4951 hit points (immune to cold) with an attack that does 360 fire damage at initiative 9 -7376 units each with 6574 hit points (immune to cold, slashing, fire) with an attack that does 7 bludgeoning damage at initiative 4 -77 units each with 5884 hit points (weak to slashing) with an attack that does 738 radiation damage at initiative 6 -6601 units each with 8652 hit points (weak to fire, cold) with an attack that does 11 fire damage at initiative 19 -3259 units each with 10067 hit points (weak to bludgeoning) with an attack that does 29 cold damage at initiative 13 -2033 units each with 4054 hit points (immune to cold; weak to fire, slashing) with an attack that does 18 slashing damage at initiative 3 -3109 units each with 3593 hit points with an attack that does 9 bludgeoning damage at initiative 11 - -Infection: -1466 units each with 57281 hit points (weak to slashing, fire) with an attack that does 58 slashing damage at initiative 7 -247 units each with 13627 hit points with an attack that does 108 fire damage at initiative 15 -1298 units each with 41570 hit points (immune to fire, bludgeoning) with an attack that does 63 fire damage at initiative 14 -2161 units each with 40187 hit points (weak to fire) with an attack that does 33 slashing damage at initiative 5 -57 units each with 55432 hit points (weak to cold) with an attack that does 1687 radiation damage at initiative 17 -3537 units each with 24220 hit points (weak to cold) with an attack that does 11 fire damage at initiative 10 -339 units each with 44733 hit points (immune to cold, bludgeoning; weak to radiation, fire) with an attack that does 258 cold damage at initiative 18 -1140 units each with 17741 hit points (weak to bludgeoning; immune to fire, slashing) with an attack that does 25 fire damage at initiative 2 -112 units each with 44488 hit points (weak to bludgeoning, radiation; immune to cold) with an attack that does 749 radiation damage at initiative 16 -2918 units each with 36170 hit points (immune to bludgeoning; weak to slashing, cold) with an attack that does 24 radiation damage at initiative 1 diff --git a/src/24/notes.txt b/src/24/notes.txt deleted file mode 100644 index c81d665..0000000 --- a/src/24/notes.txt +++ /dev/null @@ -1,26 +0,0 @@ -infection and immune sys are armies - - made of groups of identical units - - group: - - same hitpoint - - same attack damage - - same initiative (who attacks first has highest) - - same weaknesses / immunities - - effective power = n of members * attack damage - -target selection: - - highest effective power chooses first sorted - if tie => higher initiative chooses first - - choose group it would damage most - if tie => largest effective power - if tie => largest intiative - if no group => no attack - -attack: - - attack in descending order of initiative - - regardless of army - - immune: 0 dmg - - weak: 2 x dmg - - only full death, units dont have dynamic health - - -(army, # of units, # of hp, initiative, dict of weaknesses / immunity, damage, type) diff --git a/src/24/solve.py b/src/24/solve.py deleted file mode 100644 index 020af79..0000000 --- a/src/24/solve.py +++ /dev/null @@ -1,129 +0,0 @@ -from sys import argv as args
-
-sinput = open("input.txt").read()
-
-immunesys = 0
-infection = 1
-ctype = 0
-
-# parse input from file
-def parseInput():
- groups = list()
- for l in sinput.split("\n"):
- pl = parseLine(l)
- if pl != None:
- groups.append(pl)
- return groups
-
-# parse line of input
-def parseLine(line):
- global ctype
- group = None
- if "Immune" in line:
- ctype = immunesys
- elif "Infection" in line:
- ctype = infection
- elif line != "":
- ls = line.split()
- group = dict()
- group["type"] = ctype
- group["units"] = int(ls[0])
- group["unithp"] = int(ls[4])
- group["initiative"] = int(ls[-1])
- group["weak"] = list()
- group["immune"] = list()
- if "(" in line:
- parenthstr = line.split("(")[1].split(")")[0]
- traits = parenthstr.split(";")
- for traitstr in traits:
- info = traitstr.split()
- group[info[0]] = [v.replace(",","") for v in info[2:]]
- dmginfo = line.split("does")[1].split("damage")[0].split()
- group["dmg"] = int(dmginfo[0])
- group["dmgtype"] = dmginfo[1]
- return group
-
-def getEffectivePower(g):
- return g["units"] * g["dmg"]
-
-def getDamage(attacker, defender):
- dmg = getEffectivePower(attacker)
- dmg *= (0 if attacker["dmgtype"] in defender["immune"] else 1)
- dmg *= (2 if attacker["dmgtype"] in defender["weak"] else 1)
- return dmg
-
-groups = parseInput()
-
-def fight():
- global groups
-
- lunits = 0
-
- immalive = len([g for g in groups if g["type"] == immunesys])
- infalive = len([g for g in groups if g["type"] == infection])
-
- while immalive > 0 and infalive > 0:
- # target selection
- attacked = list()
- attackpairs = list()
- groups = sorted(groups, key = lambda x : (getEffectivePower(x), x["initiative"]), reverse = True)
- for group in groups:
- # choose group of other army, which is not already being attacked and sort appropriately
- enemies = [g for g in groups if g["type"] != group["type"] and g not in attacked]
- if len(enemies) == 0:
- continue
- target = max(enemies, key = lambda x : (getDamage(group, x), getEffectivePower(x), x["initiative"]))
- if getDamage(group, target) != 0: # enemies which arent immune
- attacked.append(target)
- attackpairs.append((groups.index(group), groups.index(target)))
-
- # attacking phase
- attackpairs = sorted(attackpairs, key = lambda x : groups[x[0]]["initiative"], reverse = True)
-
- for ap in attackpairs:
- attacker = groups[ap[0]]
- attacked = groups[ap[1]]
- if attacker["units"] > 0 and attacked["units"] > 0: # if attacker or defender is dead, no need to attack
- dmg = getDamage(attacker, attacked)
- attacked["units"] = max(0, attacked["units"] - dmg // attacked["unithp"]) # remove whole numbers of units
-
- groups = [g for g in groups if g["units"] > 0]
- immalive = sum([g["units"] for g in groups if g["type"] == immunesys])
- infalive = sum([g["units"] for g in groups if g["type"] == infection])
- units = immalive + infalive
- if units == lunits:
- return units
- lunits = units
- return units
-
-def solve1():
- print(fight())
-
-def solve2():
- global groups
-
- immunewin = False
- boost = 1
- while not immunewin:
- groups = parseInput()
- for g in groups:
- if g["type"] == immunesys:
- g["dmg"] += boost
-
- fight()
-
- immunewin = (sum([0 if g["type"] == immunesys else 1 for g in groups]) == 0)
-
- boost += 1
-
- #print("boost:", boost)
- print("units:", sum([v["units"] for v in groups]))
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/25/input.txt b/src/25/input.txt deleted file mode 100644 index dfdbb5b..0000000 --- a/src/25/input.txt +++ /dev/null @@ -1,1248 +0,0 @@ --6,2,-8,3
-7,8,-1,-8
-7,-2,-4,-2
-4,-4,2,7
-5,8,-1,6
--1,6,-4,-5
--2,-6,-6,-6
-1,4,7,0
--1,-3,-8,2
-5,-6,-5,-2
--5,7,4,-2
--2,6,-1,6
-5,4,0,-7
-1,5,-8,-3
--3,3,8,2
-4,0,0,6
-4,-8,-3,3
-0,0,-7,-5
--2,0,5,-3
-2,1,7,-1
-1,6,2,2
-4,4,7,-6
--1,0,-1,1
-2,4,4,6
--4,3,-7,2
--5,-2,8,-7
-6,-8,-1,3
--8,-6,-7,-3
-4,1,-7,-1
--7,-5,-4,4
-5,-2,8,-5
--5,-1,4,-4
-3,-3,8,4
-3,8,-8,-7
--3,7,7,0
--7,-5,-3,5
--4,-5,-3,-2
-6,-8,3,8
--2,0,8,7
--4,3,5,7
--6,3,5,0
-5,2,-3,-3
-0,8,0,5
--5,-8,-1,-8
-2,6,0,6
-5,-4,0,0
-3,-2,-8,-5
-8,-4,-7,-7
--3,-7,-8,-2
-6,7,-2,3
-5,0,-6,0
-0,-6,0,2
-8,-4,6,-3
--5,-4,4,-4
-2,0,3,-1
-3,-5,8,5
-6,-1,5,5
--6,-5,-4,8
-7,-4,0,5
-5,3,1,6
--7,2,-3,1
--4,1,-6,-7
--4,4,0,8
--6,4,1,-8
-3,-6,-6,5
-2,-4,-3,2
--2,2,-2,1
-2,-4,0,0
-3,1,4,8
--1,3,-7,-5
--3,-7,2,0
--2,-2,-8,0
-1,6,0,7
--6,-3,0,-1
-7,0,-2,-7
-5,-5,-3,0
-7,0,0,5
--6,5,6,2
-0,8,3,-1
-0,-8,-7,-1
-3,6,7,-7
--2,4,-8,-3
-3,-3,-6,-4
--1,-5,0,2
--7,2,4,0
--2,7,4,-2
-2,4,-1,5
--1,-6,-6,4
-4,-6,-7,-2
--6,6,-4,-2
-5,-5,-2,-6
-4,5,4,0
-3,3,0,-5
--5,4,3,-2
--6,1,7,-6
-3,5,-8,5
--2,8,-2,-2
--5,6,-2,-7
--3,-6,7,-4
--8,-6,7,7
--5,-7,4,-4
--8,-8,-6,7
--7,-1,-2,-1
-3,-1,4,0
-3,6,1,-8
-2,6,-4,0
--6,4,4,6
-7,7,6,-5
-4,-3,-2,7
--1,8,2,-2
-3,-1,-4,5
--2,1,-6,-8
--3,1,7,-1
--7,-1,8,6
-4,2,6,-6
-8,-1,8,-8
-4,6,-1,4
-7,-1,6,5
-0,-6,2,3
--2,-8,-8,-6
-0,6,-4,-8
-4,-8,-7,6
--3,-3,2,2
-2,1,4,7
--3,7,-1,-8
-1,1,-2,-5
-3,-6,-4,7
--3,5,0,8
-3,3,1,0
-1,5,4,6
-7,0,-2,-5
-1,5,-3,7
--1,-4,3,4
--4,3,-2,0
--1,-8,2,0
--8,-8,3,-3
--2,-6,5,2
-8,-1,-3,-6
-2,-8,3,-5
--8,-8,3,4
--3,-5,-7,0
-0,3,1,3
--8,5,-6,4
-2,0,4,-2
--5,1,-7,0
--5,0,-2,1
-4,-7,0,3
-7,0,4,-1
-0,-3,5,4
--8,-8,-2,3
-2,5,4,6
-7,0,-8,-7
--1,8,3,-3
-1,-2,2,-4
--1,-3,3,-2
-4,6,7,-1
-3,8,2,-3
--1,-8,8,7
--8,4,7,-2
--8,2,-8,-7
--2,5,0,-5
--1,-2,-5,-5
-4,6,-2,0
-0,8,0,-4
-2,0,-2,-1
--8,0,-5,0
--2,-8,-5,6
-2,0,5,7
-6,0,7,0
--6,-8,3,-1
-2,2,6,-8
--8,7,-8,7
-5,0,7,-6
-0,-3,6,-4
--5,7,-6,-6
-2,5,0,-6
--6,8,-3,3
--8,-7,-1,-8
--1,3,0,0
-1,2,3,-7
--5,-1,7,2
-4,2,0,2
--6,-6,-1,-2
-1,0,8,-1
-0,-1,-8,7
-2,2,-6,-4
--2,3,2,6
--6,-6,-2,-3
--2,6,-2,1
-4,0,-8,7
-4,8,1,-1
-4,2,-2,5
-1,-2,-6,1
-1,5,-5,-4
-0,8,7,-6
-8,8,2,-3
--3,-4,-5,3
--2,6,-8,-1
--2,-2,-4,2
-0,6,-3,7
-8,3,-3,7
-6,0,-1,-6
-8,8,3,0
--7,0,8,7
--5,7,-2,0
-2,-7,7,3
-8,-5,0,0
--6,-8,1,-7
--7,-3,0,5
-5,6,1,-7
--3,8,-3,6
--4,0,-4,-5
-7,4,2,1
--7,-7,-8,6
-7,-7,4,4
--6,-2,-1,1
-5,7,-6,-5
-1,6,-2,5
--6,5,-6,3
--6,-8,0,0
-2,-4,2,8
-0,0,0,-8
--8,0,-2,2
-0,-4,-8,-8
-1,-5,-8,5
-6,-4,-5,6
-8,4,-5,-1
-8,-7,4,-4
--7,-6,-8,0
--2,3,-2,3
--8,-3,-6,-3
-0,5,5,0
-3,7,-8,6
-0,-7,-5,-1
-1,6,-4,-3
--4,5,-3,5
-7,-5,-5,8
--4,4,0,-8
-7,-7,0,2
-6,0,2,-8
--6,-4,1,0
--1,0,-2,4
--4,-8,5,7
--8,4,-5,-2
-2,8,-8,-8
--4,7,1,6
--2,-2,-7,3
-6,4,-1,0
--1,-7,-4,0
--4,0,3,0
-0,3,5,2
--4,-5,-1,0
-8,2,-6,0
--2,5,-3,8
-7,0,3,-2
-6,0,-5,0
-4,-6,-5,6
--7,8,0,-1
-8,-2,3,-4
-7,0,-4,7
--4,-6,-7,-7
-2,8,0,4
-1,-6,5,-6
-4,-7,-2,-2
-4,1,-6,2
-0,7,4,3
-4,1,-1,-5
-1,-4,6,-6
-1,2,-2,-2
-2,-2,6,-5
--8,6,-6,6
-0,6,8,2
--3,-2,0,-8
--6,-5,2,-6
-0,5,-8,-5
-1,-1,7,6
--6,-3,-7,-3
--4,-6,-1,0
-8,-3,-6,-2
--5,-2,6,-1
--1,0,3,1
-0,2,-6,7
-3,3,5,-2
-8,4,5,-1
--5,-1,0,-1
--6,-1,0,6
-2,6,-3,-3
-8,7,-8,4
--6,-8,-3,0
--1,-1,0,7
-6,-2,-8,4
--3,8,3,-1
-6,2,0,4
-0,-3,7,3
--5,3,-2,-1
--6,-7,-2,-3
-4,-5,-3,-6
--7,6,-2,4
--2,-5,7,0
-1,8,-8,7
-8,3,-3,4
--3,3,2,-4
-5,-7,4,1
-8,-3,-5,0
--5,-4,-1,-8
-2,1,-2,-3
--1,-4,-1,-7
--7,-8,-7,-2
-3,0,7,4
-6,3,7,7
-0,-2,-4,2
-0,-1,-6,7
--3,-8,-1,-7
--8,-6,-6,-4
--5,-4,-4,0
-0,7,-7,3
--8,-7,-6,-8
--5,3,0,-3
--7,-6,0,7
--7,6,-6,-2
--2,8,2,-4
-2,0,0,5
-0,5,-2,0
-8,-7,-7,-1
--1,3,2,-7
--3,4,-7,-4
--6,-3,2,-7
--7,5,4,3
-5,-1,-6,-2
-3,-7,1,0
--7,0,-4,-3
--6,8,-1,0
-3,8,4,-2
--1,-4,-8,-7
-3,3,8,1
--5,1,4,5
-8,8,-1,2
--3,-3,7,-4
-8,-3,2,-4
-6,-8,-6,8
-3,6,3,-2
--7,-2,6,-4
--6,-8,-8,5
-6,0,0,7
--6,7,0,7
-8,0,-6,-3
-0,-3,-7,0
--2,6,-7,-7
-5,-1,-3,0
-2,3,4,-5
-1,7,-6,0
-3,3,0,-3
--1,0,-8,-8
--2,5,-7,4
-7,-1,-8,5
--2,-1,-1,6
--2,-6,5,1
-4,-2,5,5
--7,8,4,7
--2,-2,6,5
--6,1,-5,3
--8,4,0,7
-8,-4,5,5
--4,8,-4,1
--8,0,5,4
-8,1,0,0
--6,-8,-6,-2
-2,-5,0,0
-5,-6,5,-4
-1,2,7,2
-8,-4,6,5
--6,0,7,6
-6,5,7,-6
--2,-6,-2,5
--6,-4,3,1
-6,-8,4,-4
-8,6,1,2
-7,5,7,-2
-7,-2,-6,-1
-4,-2,1,2
-1,1,-3,5
-0,-4,8,4
-5,2,-3,-4
-8,4,1,-3
--1,1,-8,1
--1,-1,0,5
--4,4,6,0
-0,6,-2,6
--3,4,5,5
--7,5,4,-4
-2,2,-2,-4
-8,-1,2,-5
--5,-2,6,-2
-7,2,1,6
--3,-2,4,-5
-8,8,-7,-8
-0,1,-8,-4
--3,-6,-3,3
--4,-4,8,4
--3,2,-4,-6
--6,5,-5,-2
--3,-7,-3,8
-0,6,-1,8
-8,0,7,1
-1,1,-8,-2
-6,-6,-7,3
-4,-5,8,-8
--3,-6,6,7
-8,-5,2,4
-2,5,-3,-4
--3,0,-6,7
--1,-7,7,0
-2,-3,-5,5
--7,-7,0,-2
-0,-4,7,8
-5,3,7,2
--2,-7,5,5
--6,-1,0,-8
--3,0,8,-5
--8,-1,1,1
-1,0,-6,8
--1,-5,8,4
--5,-4,4,8
-2,-3,0,-4
--4,-3,0,7
-5,6,5,-5
--3,-8,-3,-2
-5,8,-8,5
--7,-2,-2,-2
-7,6,8,6
-0,-6,4,-7
--1,-4,-7,0
-8,7,-6,6
-6,-5,-1,-3
-5,-2,-2,-3
-6,-3,-5,0
--8,5,6,-5
-3,-7,7,8
-1,3,-8,0
--6,8,-5,6
-6,-5,-5,-2
-3,8,1,-8
--8,5,2,0
-0,5,-3,6
--5,-7,-8,4
-0,7,0,0
--5,6,-5,6
--5,1,6,5
-6,1,-2,-8
-0,-8,3,1
-0,-3,-8,-3
-0,6,0,-2
--8,0,-7,-5
--8,2,0,6
-1,6,3,-4
-8,-5,0,-4
--6,7,0,0
-5,0,1,0
--8,8,2,8
--7,4,2,4
-0,3,-2,-4
--5,5,7,0
-5,0,-1,5
--7,8,-6,8
--8,-1,3,-3
-0,-7,-7,-7
--4,4,8,-2
-1,2,1,-4
-1,-5,-1,8
--3,8,-2,-2
-8,0,4,-4
--8,5,-5,3
--7,-7,-6,-2
-0,-6,-8,-8
--1,-2,-3,0
--4,0,1,7
-1,-6,-8,4
-0,8,6,-1
--8,-5,-7,8
-2,7,-8,4
--8,4,-3,2
-3,-1,-7,3
-4,-2,-6,-6
--1,-4,1,-2
-3,-4,2,-6
-2,4,5,-3
--7,7,1,6
-8,-6,-5,-3
--7,1,-6,0
--3,-6,-6,-8
--8,-5,-6,4
--5,-1,7,8
-0,7,6,2
-6,-2,-1,5
-0,4,-8,8
--3,-5,-8,0
-2,-6,-2,-1
-5,8,-6,4
--5,-1,0,-6
--8,-5,8,2
-5,6,-3,-3
--4,-7,2,6
-0,-3,-6,7
--4,-6,-8,-8
-6,7,1,3
-7,-2,4,-3
-4,2,3,1
-0,8,-3,-8
--8,0,1,0
-4,5,-4,-2
--2,-6,4,2
--4,0,-4,0
-8,-1,2,-2
-5,-7,8,1
--2,5,-6,1
-6,-7,3,-7
-2,1,0,6
--8,-3,-1,0
-8,-1,8,-3
-0,-6,6,0
-7,3,7,3
--8,0,6,-1
--5,-4,-5,0
--2,0,3,-7
-0,2,0,0
--3,6,6,3
--6,-3,-1,-3
-8,0,1,5
--7,4,-8,0
-8,8,-5,4
--2,0,-7,-4
--8,5,-7,-7
-8,0,-1,4
-8,-7,5,0
--6,-1,-4,2
--8,-8,6,-5
-7,2,-3,1
-2,0,2,6
-8,-7,-8,3
--2,-7,-8,0
-0,3,-1,4
--8,7,5,3
-0,-4,0,3
-6,6,-2,-6
--4,8,6,-3
-0,3,0,-4
-6,-2,1,5
-1,4,4,3
-0,-7,4,-1
-1,3,-8,-2
--5,0,4,0
-8,2,-6,-4
--8,8,-2,6
--5,7,-7,-2
-5,0,-4,-4
--1,-5,3,7
--2,-3,7,3
--3,4,2,0
--7,-8,1,3
--8,-8,-3,2
-0,5,-8,7
-1,7,-6,5
-2,-6,-5,0
--8,4,4,2
-7,3,1,-6
--5,-4,8,2
--7,7,0,0
-8,6,-1,6
-2,5,3,-7
--7,3,1,5
--8,-3,-4,3
-0,-2,0,8
--7,-7,-5,8
-3,6,3,0
--4,2,8,-4
--6,2,6,-3
-0,-7,-6,-7
-0,-6,3,-6
--4,-5,-5,-2
-1,-7,-2,-5
-5,7,0,4
-2,-1,3,-3
-7,1,-5,8
-0,3,0,2
-5,0,-5,-3
--2,6,2,5
-6,4,-4,-7
-4,-8,4,8
--5,-2,-6,7
--1,-4,-4,5
--2,-7,3,7
--3,-8,-2,2
-1,-2,-5,-3
-0,-4,-1,3
-4,8,2,-5
-8,6,-6,1
--8,-1,1,-4
-5,6,4,-8
--7,-6,-5,4
--3,-3,5,0
--6,7,2,1
--5,5,-1,0
-1,-8,2,0
-0,-3,-7,6
-4,-4,1,0
--4,-6,0,4
-4,0,4,0
-4,-7,3,-2
-0,-3,0,4
-2,-3,2,2
-2,0,0,-4
--8,6,6,4
-7,7,4,-2
-0,5,0,-1
-5,7,3,6
-5,2,4,-3
-5,4,-7,-6
--8,1,7,2
-0,5,8,-1
-5,-3,-6,0
--6,0,4,6
--2,-2,6,-6
--6,3,5,2
-8,-2,-3,-1
--8,1,3,-4
-1,-6,-5,-6
-8,-4,6,-1
--5,-7,-7,-5
--1,-6,1,-4
-4,2,-3,0
-7,1,-4,4
-2,6,-8,0
-7,7,2,-5
-5,-2,-8,-3
--5,0,3,2
--1,6,-1,-4
-6,4,-3,-4
-4,1,4,-6
-3,5,0,-1
-5,-3,7,2
-3,-3,-7,5
--3,-6,-1,2
--7,-6,5,5
--3,-7,1,-7
-5,5,-4,3
-6,-4,0,-1
--7,-8,-1,7
-6,1,3,8
-8,-3,-5,2
--3,1,-2,7
--3,8,3,-4
-0,-8,7,3
-5,0,-4,-3
-3,-8,2,4
--8,-3,6,-3
-0,6,-5,4
--2,-8,-2,0
--4,-4,-4,8
--6,8,-5,-1
--8,0,1,1
--4,3,1,-2
--1,-7,4,8
-3,0,7,-4
-5,7,3,-1
-7,-8,-3,1
-5,5,0,1
--3,-1,0,8
--6,-8,-4,1
--3,-1,-6,0
-0,-1,0,0
-6,0,0,8
-3,-1,-4,6
--4,4,0,-5
-3,7,1,7
--5,0,6,7
-5,-5,2,3
-5,-7,2,1
--6,1,-3,-6
-7,8,-2,8
-5,4,0,6
--8,-3,4,-3
--3,-6,2,6
-1,4,2,5
-0,7,6,-5
--1,7,5,4
-4,-5,-4,0
--2,1,4,-7
--2,0,0,8
-7,0,1,1
--3,-7,8,6
--2,-8,6,7
-6,3,-4,5
-5,2,-5,8
-4,-2,5,-2
-8,5,-4,-4
-2,6,-7,6
--4,-2,-6,-5
-0,5,-6,-1
-5,3,4,3
-4,2,1,5
-6,-6,-8,3
--7,2,3,-2
-0,2,2,1
-0,1,2,3
--6,4,1,-4
-7,-4,-1,4
--5,3,-3,0
-3,8,-3,-4
--2,-3,4,2
-4,7,-2,4
-4,-4,-3,-8
-1,0,-2,-6
-6,7,-4,0
--2,-7,2,-2
-0,4,2,2
--4,8,-1,0
--4,5,1,1
--2,-8,-1,4
-2,3,-3,4
--8,-4,-5,0
--6,3,0,2
-6,-5,1,0
-4,-2,-8,4
-0,7,-5,-2
--7,-3,5,-1
-5,7,-4,1
--3,-3,3,5
-2,0,-4,-4
--7,0,6,6
-4,-4,-3,-1
--6,6,-1,-6
--1,2,1,-8
--2,3,4,6
-5,8,-4,-8
-0,5,0,-4
--5,-3,7,7
-5,4,5,-2
-4,-2,8,-5
--4,2,-7,4
-1,-8,4,-4
-7,8,-7,3
-2,7,-8,-5
--1,-5,6,-7
-5,-4,7,-2
-0,-3,0,6
-0,-7,-2,2
-4,8,0,-1
-0,-3,5,-3
-5,-6,0,4
-1,-7,2,-2
--1,0,-3,1
--4,0,4,-6
-5,3,7,3
-7,-4,7,-8
--3,-5,3,7
-0,-6,8,2
-4,-6,-1,8
-0,-7,0,-8
--4,5,0,6
-7,6,-6,2
--6,-5,-7,3
-0,-1,4,-8
-4,6,-4,4
--4,-2,5,4
--8,-8,0,4
-2,-8,4,-1
-2,4,0,0
--6,-1,8,7
--6,5,8,-5
--3,-5,-7,-3
-3,-1,-5,-7
-0,4,-4,-7
-2,-4,-1,-6
--6,-6,0,5
-0,6,3,-5
-0,-3,8,2
-7,-6,6,-1
--3,7,-4,-5
--3,1,3,7
-5,-2,-6,-7
--6,3,-1,8
-0,0,-4,-2
--8,2,3,-4
-0,-2,-4,0
-1,8,-3,-7
--2,-4,3,0
-3,-8,7,0
--1,-6,3,-4
-3,0,8,4
-3,3,-5,-6
-5,0,-1,-2
-7,1,-4,8
-4,-5,3,-2
-4,-4,0,8
--4,2,1,-8
--8,0,-7,-2
-4,-2,0,0
--8,3,7,-8
-8,-8,6,-5
--8,0,3,-5
-6,3,-2,-3
-4,0,-5,7
--1,-5,-6,2
-4,-1,-7,2
--8,-1,-2,0
-1,7,-7,-2
-5,0,-5,-7
-8,-3,6,-2
-1,-6,2,-3
-6,-1,6,3
--7,4,3,4
--7,-5,-5,-4
--7,2,-8,-4
--5,8,3,-3
-1,2,-3,4
--6,-5,-4,1
-5,4,5,7
-0,0,-1,-4
-5,-8,3,-1
-5,6,-5,0
--7,-3,-6,0
-2,-8,0,1
-1,4,-7,-8
--4,-7,-6,3
-0,1,-1,0
--6,-1,6,0
-1,6,-4,-2
-8,-3,0,0
--2,0,-3,7
-3,8,-4,3
--8,7,2,0
-1,4,-6,3
-5,-3,4,-4
--3,-5,5,5
--6,4,-2,2
--4,0,2,4
--7,1,6,1
--2,2,4,6
--5,-2,6,0
--1,4,8,0
-0,8,6,-6
--6,6,-4,-7
--6,-7,3,0
-4,-1,3,4
-0,-7,-4,-6
--6,-5,-5,0
--2,-5,-4,0
-2,0,-8,6
--1,1,0,0
--6,-4,-3,-1
-7,5,-7,1
--5,-1,3,3
-6,1,0,1
-6,7,6,7
--3,1,0,-3
--5,-1,-6,4
--5,1,1,8
-8,-1,-2,-6
-3,0,6,7
-0,8,4,0
--8,0,-2,5
--4,-3,-5,5
--5,3,2,5
--2,-3,0,-6
--3,-4,1,-2
-8,-4,-7,-6
-2,8,6,-7
-3,-1,1,-6
-0,-8,1,3
--2,-4,8,0
-7,-7,-3,5
-8,5,6,-5
--3,7,2,8
-6,-1,-7,1
--4,0,-2,-2
-7,8,1,-3
--2,5,8,6
--7,-5,0,3
--7,3,-1,6
-2,-1,-4,0
--8,-6,2,-8
--7,-5,-5,1
-0,-5,-4,4
-5,-2,-3,-8
--5,-8,1,4
-5,0,7,-4
-8,7,1,-1
--4,-1,-5,2
-4,8,-6,1
--3,2,3,4
--5,-2,1,3
--3,5,5,4
--6,4,-1,5
-6,1,3,0
-0,-4,-5,0
--4,4,2,6
--7,-8,-6,7
-8,4,5,1
-0,5,-3,-1
-3,6,5,-8
-1,8,3,-6
-3,-3,-5,-8
--7,5,-5,0
--6,4,0,-6
--7,7,6,-3
--3,-1,7,8
--7,-7,1,-4
--7,-1,-8,6
-6,0,-2,2
--5,-8,0,7
--5,-4,8,4
-1,5,4,2
-8,8,-2,6
--3,2,-2,1
--5,-2,1,-2
-8,8,-8,-4
--7,-8,8,-4
-0,-6,8,-2
--6,8,1,0
--8,0,8,-4
--6,5,1,2
-1,7,5,-2
--4,1,0,-7
-2,-8,3,7
--1,-6,-2,-1
-3,-5,-1,7
-0,-7,2,1
-0,8,2,0
--1,-2,-8,-2
-6,2,5,0
-7,-8,-8,0
--2,1,2,6
--3,-7,-4,2
-7,1,4,-3
-5,4,-1,1
-8,-8,8,-7
-3,7,7,-1
-0,-7,0,-4
--4,2,7,-7
--7,2,-5,7
-7,-3,2,0
--8,1,2,0
-5,8,8,-3
-0,7,-2,7
--3,0,0,-1
-6,8,3,-1
-1,0,-8,0
-8,-5,6,6
-3,0,0,3
-1,4,-4,4
--2,-5,-3,3
-7,3,-1,-1
-2,-5,1,-5
--3,-2,6,6
-0,7,-2,-2
-0,0,3,-7
--1,-7,2,-2
--6,-1,0,1
--4,1,1,8
--4,-6,1,1
-5,7,3,-3
-8,-2,4,2
-0,-6,5,-8
-4,5,0,-6
-1,0,-2,-1
--6,0,0,-6
--5,-7,-4,-6
--8,8,-5,-2
-1,-7,0,4
-4,6,8,1
--2,-6,6,6
-7,1,-6,0
--5,6,-4,0
--4,1,1,4
-8,-7,-1,4
--7,8,4,-2
-8,5,-7,3
-2,-5,5,-1
--5,-5,3,8
--5,-3,-7,6
-5,2,2,1
--1,-7,-5,2
-0,7,8,-5
-6,-4,5,0
--1,5,-2,8
--8,7,0,7
--4,8,-1,1
-5,-1,1,-2
-2,-3,8,0
-0,6,-1,1
--2,7,-7,8
--6,1,-1,6
-5,7,-6,0
--5,-1,-6,-6
--2,3,-8,-5
-1,5,-7,-8
-7,-5,-2,5
--5,7,5,-2
--5,0,0,7
--4,-4,0,0
--3,0,2,-7
-5,4,3,-1
--5,-7,7,5
--2,-3,4,5
--5,-3,4,2
--7,0,-5,3
-0,0,-8,8
-0,5,-7,4
--8,-3,8,-2
--5,8,-2,-5
--8,8,0,0
--8,-3,5,-1
--6,1,8,-3
-3,7,-6,3
--6,6,2,5
-1,-4,-3,0
--8,-8,5,3
-1,-4,8,-2
-4,7,3,1
-7,0,4,0
-0,3,-4,-2
--7,3,7,4
--4,-7,-1,3
-1,-7,2,1
-3,3,-5,-1
-5,-7,2,2
-1,-4,-4,0
--8,5,-3,-1
-3,-3,4,0
-7,0,4,-5
-0,1,1,2
-1,-5,6,-5
--3,2,7,7
--3,-3,6,2
-2,-2,0,-3
-3,8,-3,2
--1,1,3,-4
-2,7,4,8
-7,6,-1,6
-8,8,6,5
-2,8,-6,-7
--1,-3,-3,3
-4,0,-5,-1
--4,-4,-1,2
-2,-1,-2,-3
-3,3,-3,1
--1,3,2,2
-4,1,4,7
--1,-6,-4,2
--5,-5,2,-1
--2,2,0,-5
--1,-8,5,-2
--6,1,-1,-1
--8,-8,0,2
-7,8,-7,-1
--6,7,0,-6
--4,4,8,-7
-7,1,5,7
--5,2,2,-5
-1,-2,-3,0
-0,7,-8,-5
--1,0,-5,6
--6,1,-4,-3
-8,2,4,-7
-0,-3,0,-7
-6,-5,-8,-4
--3,4,-3,7
-0,-1,-8,2
-3,1,-8,0
--8,1,3,7
--7,1,8,6
-7,7,-3,7
-4,0,2,-3
-0,-2,1,-7
--7,6,-3,7
--3,8,-7,4
-6,4,2,5
-3,-3,6,-7
-6,-8,-3,-1
--2,-8,-8,4
--3,-2,1,6
-3,1,-1,-1
-8,6,7,5
-5,7,7,-8
--7,3,3,4
-8,6,-5,-4
-1,-4,-5,-3
-4,6,-6,-6
--3,4,0,7
-1,-4,-3,8
-3,-7,-2,1
-2,-4,4,8
--5,1,-7,5
-0,-5,0,3
-0,7,-8,5
--8,-2,1,3
--5,8,8,6
-0,5,4,-1
-0,-8,-7,8
-3,2,1,-7
-2,-3,4,1
-5,4,7,-3
--8,-3,7,-3
--2,5,6,-5
-5,0,0,-3
--4,6,6,1
-8,-2,-5,2
-0,4,-2,3
--8,-5,-8,6
--5,0,5,7
--7,1,-8,4
-7,2,6,-2
--2,-7,-2,6
--7,7,0,5
--5,-3,1,4
--4,8,2,3
--7,0,0,-6
-2,4,0,8
-2,7,7,0
-7,4,-4,-3
-2,7,5,7
--3,4,1,3
--2,-3,-3,1
-2,8,-1,8
-0,-7,6,8
-1,6,5,5
--8,-6,-6,-5
-6,-8,-8,-1
--8,3,3,3
-5,-7,7,-2
-5,8,1,6
-0,2,3,5
--2,7,-7,-3
--5,6,1,-5
-6,7,-1,4
-8,-3,6,-7
-5,0,-8,3
-0,6,2,0
--8,-6,-6,5
-0,7,2,-3
-1,-4,6,-7
--6,7,0,4
-4,-4,0,4
-6,3,7,-2
-3,-8,2,3
-0,5,3,-8
-2,6,7,4
-2,-7,-5,1
--8,-3,-2,4
--7,-7,0,4
--4,-5,-6,1
--6,-6,0,-3
--8,8,-3,-4
--6,7,1,-6
--5,4,0,7
--4,-1,5,3
-5,-7,3,1
-0,-4,-6,-3
-6,-6,-1,-5
-3,1,5,-3
--1,1,2,-3
-0,7,-1,-7
--8,0,8,0
-0,8,0,-6
-2,-7,2,0
-0,-1,-2,-7
--2,0,1,1
-1,-7,8,4
-3,-6,0,7
-0,0,-5,4
-2,-7,0,6
--6,4,5,-7
--3,5,7,4
--2,-1,7,8
--7,0,-2,-4
-3,-6,6,0
-5,-4,-4,4
-6,8,8,-3
-6,-6,-6,3
-2,-3,-3,-3
-8,-5,-2,0
--3,5,7,-4
--7,-8,1,5
-0,-1,-1,-1
-8,1,7,-8
-4,4,2,4
-6,2,-1,2
--5,6,-6,5
--2,-5,-3,4
-6,-3,-4,0
-8,8,-5,-7
-2,2,0,-3
--5,-8,1,2
-7,-6,-2,8
--5,0,-3,3
--2,7,-4,-5
-8,-1,-6,1
-7,6,-1,-4
--3,0,2,1
-0,0,5,0
--1,8,-2,3
--3,2,1,-8
-1,7,-7,0
-1,4,-1,0
-6,-4,3,-2
--1,-6,-2,2
--2,2,2,2
-2,0,-3,5
--4,1,-8,-3
--4,1,5,-7
--6,8,1,4
-5,3,0,1
--8,-7,7,-1
--8,-3,1,-7
-0,2,4,7
-6,7,2,-8
-4,1,2,8
-3,-2,1,-5
-8,2,-7,6
-8,0,5,3
--7,4,8,-7
-3,8,-1,-7
--1,-5,-2,0
--3,0,6,3
-6,5,-3,-2
-1,8,7,-2
--4,-1,-7,-2
--6,-1,8,3
-8,-1,5,-6
-5,0,5,2
--4,8,0,-1
--5,2,7,-3
-5,-2,-6,5
-4,-4,4,0
--7,-1,-5,-5
--8,-5,4,5
-4,-6,-8,3
-7,2,7,-5
-1,6,2,-3
--3,3,-8,0
-1,-6,7,-3
--5,8,6,-3
--3,-2,-4,-6
-7,-7,-2,1
-5,4,-7,-1
-3,-4,-5,-1
--1,-5,6,-1
--8,4,-5,1
diff --git a/src/25/solve.py b/src/25/solve.py deleted file mode 100644 index 2e0f817..0000000 --- a/src/25/solve.py +++ /dev/null @@ -1,100 +0,0 @@ -from sys import argv as args
-
-sinput = open("input.txt").read()
-
-ainput = """1,-1,-1,-2
--2,-2,0,1
-0,2,1,3
--2,3,-2,1
-0,2,3,-2
--1,-1,1,-2
-0,-2,-1,0
--2,2,3,-1
-1,2,2,0
--1,-2,0,-2"""
-
-ainput = """1,-1,0,1
-2,0,-1,0
-3,2,-1,0
-0,0,3,1
-0,0,-1,-1
-2,3,-2,0
--2,2,0,0
-2,-2,0,-1
-1,-1,0,-1
-3,2,0,2"""
-
-ainput = """0,0,0,0
- 3,0,0,0
- 0,3,0,0
- 0,0,3,0
- 0,0,0,3
- 0,0,0,6
- 9,0,0,0
-12,0,0,0"""
-
-ainput = """-1,2,2,0
-0,0,2,-2
-0,0,0,-2
--1,2,0,0
--2,-2,-2,2
-3,0,2,-1
--1,3,2,2
--1,0,-1,0
-0,2,1,-2
-3,0,0,0"""
-
-def parseLine(l):
- return [int(v) for v in l.split(",")]
-
-coordinates = [parseLine(l) for l in sinput.split("\n") if len(l) != 0]
-
-def dist(c1, c2):
- return sum([abs(c1[i] - c2[i]) for i in range(4)])
-
-def getClose(coords, c):
- match = list()
- j = 0
- while j in range(len(coords)):
- if dist(c, coords[j]) <= 3:
- match.append(coords[j])
- coords.pop(j)
- else:
- j += 1
- return match
-
-def solve1():
- constellations = list()
- available = coordinates[:]
-
- while len(available) != 0:
- match = getClose(available, available[0])
-
- j = 0
- while j < len(match):
- match += getClose(available, match[j])
- j += 1
-
- constellations.append(match)
-
- print(len(constellations))
-
- """
- sum = 0
- for cons in constellations:
- sum += len(cons)
- print(sum)
- """
- return
-
-def solve2():
- return
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/3/input.txt b/src/3/input.txt deleted file mode 100644 index 2947617..0000000 --- a/src/3/input.txt +++ /dev/null @@ -1,1347 +0,0 @@ -#1 @ 916,616: 21x29
-#2 @ 182,253: 29x10
-#3 @ 5,24: 16x17
-#4 @ 369,697: 17x19
-#5 @ 268,954: 28x23
-#6 @ 974,162: 22x14
-#7 @ 178,904: 18x14
-#8 @ 304,923: 29x28
-#9 @ 597,714: 11x24
-#10 @ 453,481: 22x13
-#11 @ 152,717: 22x18
-#12 @ 637,836: 18x14
-#13 @ 248,522: 12x22
-#14 @ 378,677: 14x18
-#15 @ 136,571: 10x17
-#16 @ 928,358: 21x13
-#17 @ 627,767: 10x20
-#18 @ 347,955: 15x28
-#19 @ 241,629: 12x11
-#20 @ 545,53: 14x12
-#21 @ 70,931: 18x19
-#22 @ 723,235: 22x21
-#23 @ 770,799: 12x12
-#24 @ 177,775: 10x19
-#25 @ 968,858: 20x28
-#26 @ 761,321: 17x24
-#27 @ 664,421: 10x23
-#28 @ 353,417: 29x27
-#29 @ 219,243: 26x22
-#30 @ 132,378: 10x10
-#31 @ 275,648: 19x20
-#32 @ 285,88: 29x22
-#33 @ 595,862: 18x22
-#34 @ 101,955: 12x28
-#35 @ 390,824: 11x28
-#36 @ 803,340: 19x27
-#37 @ 240,447: 22x10
-#38 @ 962,943: 19x29
-#39 @ 489,195: 18x19
-#40 @ 870,841: 22x28
-#41 @ 717,945: 28x26
-#42 @ 173,784: 12x14
-#43 @ 40,909: 10x19
-#44 @ 220,541: 16x25
-#45 @ 248,213: 25x23
-#46 @ 584,900: 11x23
-#47 @ 722,486: 11x15
-#48 @ 682,976: 20x10
-#49 @ 284,838: 23x25
-#50 @ 486,646: 19x15
-#51 @ 434,698: 18x28
-#52 @ 515,922: 23x16
-#53 @ 99,370: 24x16
-#54 @ 694,316: 15x14
-#55 @ 599,409: 20x26
-#56 @ 540,465: 21x25
-#57 @ 227,616: 29x17
-#58 @ 134,620: 17x13
-#59 @ 749,156: 24x10
-#60 @ 240,665: 12x10
-#61 @ 96,364: 25x26
-#62 @ 465,565: 25x12
-#63 @ 833,983: 24x10
-#64 @ 683,226: 18x17
-#65 @ 152,372: 15x21
-#66 @ 782,831: 28x11
-#67 @ 320,948: 24x16
-#68 @ 144,821: 12x11
-#69 @ 737,677: 24x13
-#70 @ 155,926: 12x25
-#71 @ 757,418: 19x15
-#72 @ 418,712: 29x10
-#73 @ 475,607: 21x26
-#74 @ 646,202: 23x10
-#75 @ 276,595: 22x14
-#76 @ 943,801: 10x17
-#77 @ 674,186: 29x21
-#78 @ 69,284: 28x20
-#79 @ 921,772: 11x17
-#80 @ 477,722: 18x23
-#81 @ 159,379: 23x10
-#82 @ 594,159: 23x17
-#83 @ 804,559: 29x18
-#84 @ 257,113: 28x26
-#85 @ 554,655: 19x27
-#86 @ 33,468: 28x29
-#87 @ 274,156: 13x11
-#88 @ 589,365: 22x17
-#89 @ 609,736: 10x8
-#90 @ 263,820: 16x14
-#91 @ 403,279: 14x19
-#92 @ 838,782: 19x26
-#93 @ 354,731: 28x24
-#94 @ 215,969: 28x13
-#95 @ 644,715: 22x16
-#96 @ 612,784: 16x21
-#97 @ 685,811: 25x13
-#98 @ 377,236: 18x19
-#99 @ 563,425: 18x15
-#100 @ 609,342: 29x24
-#101 @ 801,427: 26x18
-#102 @ 675,371: 12x26
-#103 @ 270,80: 26x11
-#104 @ 757,608: 22x22
-#105 @ 916,752: 29x25
-#106 @ 317,767: 22x15
-#107 @ 844,222: 17x21
-#108 @ 811,664: 26x15
-#109 @ 822,257: 26x13
-#110 @ 694,340: 17x12
-#111 @ 795,423: 26x23
-#112 @ 177,311: 4x10
-#113 @ 151,820: 12x18
-#114 @ 841,608: 27x29
-#115 @ 170,435: 17x21
-#116 @ 200,626: 28x20
-#117 @ 944,767: 15x11
-#118 @ 870,192: 12x18
-#119 @ 497,203: 27x23
-#120 @ 391,247: 13x22
-#121 @ 161,724: 15x22
-#122 @ 244,947: 10x17
-#123 @ 663,289: 21x26
-#124 @ 58,460: 17x16
-#125 @ 566,398: 19x18
-#126 @ 412,651: 19x11
-#127 @ 555,658: 28x27
-#128 @ 807,444: 10x18
-#129 @ 780,5: 14x16
-#130 @ 990,472: 3x4
-#131 @ 642,593: 20x29
-#132 @ 44,340: 26x11
-#133 @ 372,183: 23x17
-#134 @ 474,771: 21x25
-#135 @ 570,313: 26x28
-#136 @ 390,104: 15x11
-#137 @ 234,113: 19x11
-#138 @ 95,862: 21x23
-#139 @ 481,700: 17x25
-#140 @ 570,310: 18x23
-#141 @ 582,447: 10x11
-#142 @ 25,831: 14x15
-#143 @ 582,323: 17x23
-#144 @ 478,281: 29x14
-#145 @ 935,274: 15x13
-#146 @ 664,967: 15x11
-#147 @ 473,567: 14x29
-#148 @ 682,331: 15x13
-#149 @ 859,734: 20x19
-#150 @ 456,668: 15x16
-#151 @ 346,674: 29x28
-#152 @ 588,117: 20x22
-#153 @ 405,808: 11x25
-#154 @ 486,248: 20x18
-#155 @ 57,745: 21x10
-#156 @ 93,840: 17x15
-#157 @ 62,396: 23x14
-#158 @ 897,817: 14x28
-#159 @ 192,178: 23x28
-#160 @ 619,213: 16x18
-#161 @ 502,559: 14x11
-#162 @ 758,672: 25x15
-#163 @ 459,886: 22x18
-#164 @ 87,723: 28x11
-#165 @ 119,465: 22x11
-#166 @ 956,943: 23x21
-#167 @ 119,812: 25x15
-#168 @ 916,3: 14x16
-#169 @ 323,750: 14x25
-#170 @ 930,48: 28x10
-#171 @ 342,956: 25x17
-#172 @ 145,125: 10x16
-#173 @ 852,80: 28x14
-#174 @ 143,704: 26x19
-#175 @ 142,350: 15x20
-#176 @ 965,7: 16x19
-#177 @ 363,672: 24x18
-#178 @ 256,766: 23x24
-#179 @ 590,883: 24x26
-#180 @ 35,32: 14x25
-#181 @ 383,215: 10x21
-#182 @ 453,875: 12x25
-#183 @ 632,30: 12x26
-#184 @ 234,584: 21x28
-#185 @ 689,859: 14x27
-#186 @ 157,83: 19x24
-#187 @ 906,331: 15x27
-#188 @ 633,35: 13x13
-#189 @ 772,685: 20x16
-#190 @ 904,382: 12x21
-#191 @ 273,110: 17x29
-#192 @ 919,361: 16x14
-#193 @ 562,281: 13x10
-#194 @ 480,641: 14x27
-#195 @ 504,778: 17x21
-#196 @ 694,464: 27x21
-#197 @ 625,282: 10x25
-#198 @ 812,986: 22x10
-#199 @ 141,317: 27x13
-#200 @ 742,805: 18x12
-#201 @ 681,596: 20x27
-#202 @ 752,170: 26x11
-#203 @ 405,548: 25x15
-#204 @ 7,11: 14x27
-#205 @ 103,686: 21x21
-#206 @ 664,580: 13x29
-#207 @ 348,310: 20x28
-#208 @ 926,95: 12x13
-#209 @ 755,694: 20x29
-#210 @ 258,435: 20x21
-#211 @ 814,669: 14x22
-#212 @ 582,41: 29x18
-#213 @ 587,983: 3x3
-#214 @ 739,359: 18x27
-#215 @ 738,156: 21x29
-#216 @ 230,651: 21x28
-#217 @ 144,597: 25x22
-#218 @ 472,196: 12x29
-#219 @ 748,532: 22x14
-#220 @ 16,717: 20x11
-#221 @ 833,370: 22x12
-#222 @ 972,81: 18x19
-#223 @ 828,239: 13x10
-#224 @ 610,839: 23x23
-#225 @ 869,228: 21x12
-#226 @ 281,645: 25x21
-#227 @ 0,533: 18x27
-#228 @ 533,725: 27x17
-#229 @ 10,973: 29x25
-#230 @ 973,819: 24x20
-#231 @ 35,42: 26x28
-#232 @ 631,601: 26x29
-#233 @ 923,573: 19x21
-#234 @ 743,526: 20x24
-#235 @ 381,765: 17x15
-#236 @ 811,589: 12x28
-#237 @ 578,307: 24x20
-#238 @ 562,368: 28x13
-#239 @ 641,615: 16x28
-#240 @ 912,235: 29x20
-#241 @ 762,804: 13x13
-#242 @ 591,165: 25x25
-#243 @ 588,19: 28x12
-#244 @ 371,699: 12x13
-#245 @ 136,460: 22x13
-#246 @ 680,828: 20x14
-#247 @ 651,318: 26x17
-#248 @ 829,500: 27x13
-#249 @ 552,469: 10x29
-#250 @ 983,686: 15x16
-#251 @ 428,442: 25x11
-#252 @ 819,114: 24x12
-#253 @ 762,632: 11x12
-#254 @ 618,843: 25x12
-#255 @ 38,380: 20x25
-#256 @ 349,24: 29x25
-#257 @ 107,172: 28x19
-#258 @ 751,349: 18x20
-#259 @ 150,419: 20x16
-#260 @ 205,579: 17x17
-#261 @ 190,456: 29x12
-#262 @ 126,722: 14x19
-#263 @ 658,936: 22x12
-#264 @ 835,3: 26x28
-#265 @ 268,604: 24x15
-#266 @ 753,737: 15x19
-#267 @ 142,934: 19x28
-#268 @ 908,166: 12x16
-#269 @ 471,923: 16x13
-#270 @ 42,777: 16x16
-#271 @ 145,310: 11x19
-#272 @ 301,629: 28x18
-#273 @ 206,976: 21x22
-#274 @ 482,567: 10x26
-#275 @ 724,515: 23x11
-#276 @ 290,735: 24x19
-#277 @ 33,157: 20x14
-#278 @ 89,591: 13x23
-#279 @ 194,608: 20x17
-#280 @ 297,914: 17x28
-#281 @ 13,320: 21x20
-#282 @ 652,204: 11x5
-#283 @ 374,476: 20x13
-#284 @ 224,580: 26x18
-#285 @ 482,633: 26x26
-#286 @ 779,921: 15x13
-#287 @ 693,963: 25x25
-#288 @ 907,136: 28x19
-#289 @ 605,942: 14x29
-#290 @ 212,633: 10x18
-#291 @ 466,652: 15x21
-#292 @ 217,692: 12x20
-#293 @ 445,13: 11x21
-#294 @ 628,907: 18x20
-#295 @ 713,214: 11x11
-#296 @ 172,604: 11x16
-#297 @ 87,187: 21x26
-#298 @ 107,845: 14x25
-#299 @ 387,555: 22x11
-#300 @ 581,710: 29x29
-#301 @ 142,293: 12x25
-#302 @ 663,830: 28x15
-#303 @ 529,914: 10x21
-#304 @ 809,90: 15x14
-#305 @ 50,510: 29x19
-#306 @ 588,457: 15x21
-#307 @ 272,224: 20x26
-#308 @ 84,138: 15x25
-#309 @ 484,429: 12x23
-#310 @ 777,15: 22x23
-#311 @ 520,510: 13x24
-#312 @ 931,156: 18x23
-#313 @ 834,30: 27x12
-#314 @ 797,920: 23x24
-#315 @ 466,319: 21x10
-#316 @ 723,786: 13x27
-#317 @ 319,629: 10x24
-#318 @ 143,429: 10x18
-#319 @ 260,188: 11x16
-#320 @ 75,270: 21x13
-#321 @ 99,84: 18x13
-#322 @ 836,570: 19x20
-#323 @ 920,513: 25x16
-#324 @ 460,852: 15x27
-#325 @ 77,910: 11x22
-#326 @ 738,281: 19x24
-#327 @ 884,183: 23x29
-#328 @ 945,302: 16x10
-#329 @ 169,38: 12x29
-#330 @ 748,165: 11x17
-#331 @ 895,719: 10x6
-#332 @ 570,524: 13x16
-#333 @ 55,742: 22x11
-#334 @ 616,34: 14x17
-#335 @ 662,596: 10x19
-#336 @ 441,205: 27x15
-#337 @ 286,9: 12x23
-#338 @ 481,954: 10x24
-#339 @ 825,83: 22x21
-#340 @ 949,943: 11x13
-#341 @ 765,258: 24x28
-#342 @ 762,600: 13x14
-#343 @ 616,72: 18x15
-#344 @ 513,54: 10x25
-#345 @ 612,226: 21x28
-#346 @ 836,73: 13x15
-#347 @ 226,422: 18x18
-#348 @ 433,794: 12x15
-#349 @ 256,47: 23x18
-#350 @ 106,210: 13x13
-#351 @ 721,614: 14x29
-#352 @ 12,616: 29x16
-#353 @ 151,253: 21x16
-#354 @ 565,673: 11x18
-#355 @ 135,826: 25x29
-#356 @ 755,770: 19x17
-#357 @ 520,125: 23x18
-#358 @ 139,78: 17x11
-#359 @ 753,793: 15x29
-#360 @ 730,108: 14x15
-#361 @ 755,827: 23x28
-#362 @ 613,122: 29x16
-#363 @ 152,252: 18x29
-#364 @ 715,763: 19x22
-#365 @ 822,215: 10x18
-#366 @ 730,725: 13x21
-#367 @ 842,289: 14x11
-#368 @ 704,636: 29x10
-#369 @ 451,486: 20x16
-#370 @ 767,389: 12x12
-#371 @ 621,29: 14x18
-#372 @ 407,335: 10x20
-#373 @ 55,762: 23x19
-#374 @ 393,794: 20x29
-#375 @ 545,494: 14x10
-#376 @ 585,411: 22x11
-#377 @ 93,698: 29x14
-#378 @ 792,523: 17x25
-#379 @ 249,36: 18x12
-#380 @ 220,141: 4x3
-#381 @ 576,826: 9x3
-#382 @ 9,531: 12x24
-#383 @ 381,332: 13x25
-#384 @ 960,810: 23x11
-#385 @ 470,925: 10x12
-#386 @ 76,36: 18x12
-#387 @ 376,690: 13x24
-#388 @ 913,707: 15x26
-#389 @ 881,192: 29x10
-#390 @ 255,462: 15x14
-#391 @ 609,854: 11x18
-#392 @ 607,163: 27x27
-#393 @ 823,570: 28x20
-#394 @ 888,532: 10x25
-#395 @ 835,452: 26x27
-#396 @ 95,359: 29x20
-#397 @ 89,363: 17x26
-#398 @ 348,966: 12x15
-#399 @ 848,657: 14x24
-#400 @ 916,45: 15x10
-#401 @ 720,729: 27x29
-#402 @ 859,743: 18x14
-#403 @ 236,661: 28x12
-#404 @ 158,726: 22x20
-#405 @ 42,981: 22x18
-#406 @ 396,112: 21x28
-#407 @ 249,679: 18x19
-#408 @ 573,663: 25x10
-#409 @ 65,355: 11x12
-#410 @ 688,530: 15x23
-#411 @ 539,110: 24x21
-#412 @ 852,491: 18x27
-#413 @ 565,979: 29x14
-#414 @ 897,530: 18x13
-#415 @ 331,654: 19x25
-#416 @ 726,395: 23x14
-#417 @ 22,639: 27x15
-#418 @ 647,913: 19x29
-#419 @ 961,955: 24x26
-#420 @ 927,324: 19x15
-#421 @ 689,336: 24x23
-#422 @ 817,648: 21x12
-#423 @ 663,283: 19x23
-#424 @ 454,960: 20x14
-#425 @ 276,158: 10x11
-#426 @ 766,736: 23x24
-#427 @ 102,726: 29x15
-#428 @ 116,668: 14x24
-#429 @ 915,97: 15x18
-#430 @ 349,423: 24x17
-#431 @ 381,91: 18x23
-#432 @ 115,110: 29x21
-#433 @ 559,220: 23x17
-#434 @ 150,659: 15x27
-#435 @ 675,590: 16x15
-#436 @ 624,340: 27x13
-#437 @ 564,677: 23x10
-#438 @ 78,278: 14x18
-#439 @ 163,606: 29x11
-#440 @ 360,356: 15x15
-#441 @ 927,300: 26x26
-#442 @ 104,585: 22x21
-#443 @ 512,352: 11x13
-#444 @ 688,506: 16x21
-#445 @ 406,402: 24x16
-#446 @ 612,157: 13x14
-#447 @ 217,693: 21x20
-#448 @ 822,247: 27x23
-#449 @ 761,412: 22x18
-#450 @ 744,247: 24x16
-#451 @ 656,432: 24x11
-#452 @ 441,854: 12x20
-#453 @ 532,106: 27x12
-#454 @ 128,248: 28x25
-#455 @ 502,769: 24x16
-#456 @ 552,231: 14x29
-#457 @ 108,882: 19x26
-#458 @ 897,0: 24x22
-#459 @ 69,783: 12x12
-#460 @ 854,181: 20x20
-#461 @ 177,46: 29x29
-#462 @ 200,696: 17x20
-#463 @ 164,202: 23x17
-#464 @ 760,630: 17x18
-#465 @ 889,779: 11x21
-#466 @ 667,525: 24x12
-#467 @ 500,188: 13x14
-#468 @ 942,650: 23x23
-#469 @ 331,395: 24x26
-#470 @ 564,41: 18x16
-#471 @ 122,154: 29x28
-#472 @ 931,865: 15x11
-#473 @ 532,441: 12x28
-#474 @ 286,0: 18x18
-#475 @ 208,641: 16x14
-#476 @ 423,490: 26x26
-#477 @ 643,185: 12x29
-#478 @ 323,159: 24x13
-#479 @ 848,642: 26x14
-#480 @ 311,890: 24x16
-#481 @ 174,444: 8x8
-#482 @ 14,24: 16x20
-#483 @ 805,931: 15x19
-#484 @ 117,327: 19x20
-#485 @ 821,503: 19x28
-#486 @ 477,926: 20x10
-#487 @ 631,637: 18x12
-#488 @ 889,558: 11x17
-#489 @ 732,750: 17x18
-#490 @ 265,10: 28x15
-#491 @ 444,3: 21x28
-#492 @ 109,867: 27x24
-#493 @ 15,327: 23x24
-#494 @ 409,550: 16x10
-#495 @ 178,205: 24x23
-#496 @ 380,492: 22x16
-#497 @ 772,228: 11x20
-#498 @ 416,279: 14x26
-#499 @ 911,563: 22x11
-#500 @ 144,916: 25x27
-#501 @ 575,425: 21x25
-#502 @ 356,780: 11x28
-#503 @ 226,897: 29x13
-#504 @ 594,317: 23x19
-#505 @ 289,121: 12x12
-#506 @ 574,926: 29x13
-#507 @ 754,882: 13x10
-#508 @ 614,709: 12x27
-#509 @ 835,680: 17x12
-#510 @ 720,475: 29x11
-#511 @ 808,311: 10x16
-#512 @ 812,944: 10x11
-#513 @ 113,83: 10x16
-#514 @ 541,246: 18x21
-#515 @ 729,339: 17x25
-#516 @ 862,853: 17x24
-#517 @ 303,423: 26x22
-#518 @ 61,469: 16x17
-#519 @ 567,234: 10x23
-#520 @ 868,92: 15x13
-#521 @ 619,809: 12x20
-#522 @ 799,619: 23x27
-#523 @ 552,422: 26x27
-#524 @ 860,662: 23x12
-#525 @ 425,556: 15x17
-#526 @ 566,565: 29x10
-#527 @ 437,494: 26x10
-#528 @ 554,116: 23x10
-#529 @ 52,386: 11x17
-#530 @ 475,702: 29x20
-#531 @ 853,874: 10x21
-#532 @ 761,245: 11x25
-#533 @ 646,88: 12x21
-#534 @ 79,578: 12x23
-#535 @ 544,88: 16x29
-#536 @ 328,160: 29x17
-#537 @ 357,331: 26x22
-#538 @ 590,922: 23x19
-#539 @ 975,86: 17x14
-#540 @ 546,104: 26x26
-#541 @ 36,665: 25x25
-#542 @ 310,778: 16x21
-#543 @ 145,420: 20x10
-#544 @ 948,246: 16x28
-#545 @ 157,839: 15x24
-#546 @ 596,169: 23x19
-#547 @ 489,134: 25x14
-#548 @ 932,265: 22x20
-#549 @ 370,740: 27x14
-#550 @ 496,426: 28x11
-#551 @ 104,881: 26x16
-#552 @ 550,356: 17x23
-#553 @ 423,426: 24x22
-#554 @ 888,936: 25x25
-#555 @ 732,843: 27x27
-#556 @ 622,537: 17x23
-#557 @ 617,31: 25x16
-#558 @ 501,434: 10x17
-#559 @ 401,611: 27x16
-#560 @ 862,751: 21x20
-#561 @ 254,131: 11x19
-#562 @ 573,129: 19x21
-#563 @ 211,159: 20x17
-#564 @ 225,906: 21x19
-#565 @ 321,244: 14x18
-#566 @ 767,433: 23x23
-#567 @ 949,799: 12x14
-#568 @ 445,198: 26x24
-#569 @ 41,658: 29x19
-#570 @ 256,318: 19x25
-#571 @ 574,153: 18x29
-#572 @ 62,323: 3x8
-#573 @ 817,653: 28x12
-#574 @ 959,266: 19x27
-#575 @ 575,747: 29x19
-#576 @ 103,359: 19x27
-#577 @ 848,228: 12x28
-#578 @ 5,591: 29x29
-#579 @ 161,409: 10x24
-#580 @ 247,297: 10x28
-#581 @ 725,483: 17x21
-#582 @ 236,966: 14x22
-#583 @ 831,111: 19x11
-#584 @ 192,587: 22x26
-#585 @ 156,603: 14x20
-#586 @ 565,809: 29x25
-#587 @ 394,22: 25x27
-#588 @ 941,870: 16x16
-#589 @ 568,740: 12x16
-#590 @ 773,912: 22x12
-#591 @ 799,405: 13x16
-#592 @ 30,967: 28x19
-#593 @ 776,272: 22x17
-#594 @ 276,801: 15x18
-#595 @ 89,71: 23x26
-#596 @ 902,943: 19x25
-#597 @ 948,146: 28x14
-#598 @ 413,776: 17x12
-#599 @ 799,467: 23x29
-#600 @ 938,243: 23x28
-#601 @ 483,952: 17x29
-#602 @ 6,595: 26x28
-#603 @ 69,516: 13x20
-#604 @ 478,829: 27x29
-#605 @ 382,229: 11x22
-#606 @ 947,201: 12x11
-#607 @ 568,639: 16x25
-#608 @ 475,876: 11x27
-#609 @ 710,216: 10x19
-#610 @ 655,584: 25x14
-#611 @ 482,665: 27x17
-#612 @ 1,189: 17x27
-#613 @ 199,679: 22x29
-#614 @ 439,375: 14x28
-#615 @ 128,321: 24x16
-#616 @ 896,390: 15x15
-#617 @ 945,791: 12x21
-#618 @ 267,84: 18x20
-#619 @ 550,210: 18x15
-#620 @ 667,613: 29x28
-#621 @ 196,311: 25x29
-#622 @ 798,215: 29x23
-#623 @ 939,496: 17x23
-#624 @ 38,232: 25x17
-#625 @ 295,751: 27x15
-#626 @ 766,159: 10x14
-#627 @ 640,902: 15x21
-#628 @ 498,419: 15x27
-#629 @ 795,403: 24x24
-#630 @ 710,367: 29x29
-#631 @ 593,714: 25x29
-#632 @ 821,97: 13x29
-#633 @ 519,500: 28x26
-#634 @ 616,770: 27x22
-#635 @ 354,121: 24x23
-#636 @ 969,32: 11x12
-#637 @ 401,344: 18x24
-#638 @ 588,918: 20x16
-#639 @ 173,907: 16x29
-#640 @ 771,372: 15x23
-#641 @ 799,783: 22x27
-#642 @ 737,98: 28x20
-#643 @ 781,341: 27x29
-#644 @ 35,236: 11x13
-#645 @ 297,935: 26x11
-#646 @ 648,95: 7x4
-#647 @ 28,26: 15x14
-#648 @ 637,828: 13x26
-#649 @ 154,947: 22x19
-#650 @ 302,852: 17x17
-#651 @ 934,150: 20x25
-#652 @ 964,269: 17x21
-#653 @ 503,824: 12x12
-#654 @ 79,70: 25x25
-#655 @ 233,668: 26x24
-#656 @ 479,672: 15x17
-#657 @ 881,161: 28x29
-#658 @ 91,588: 16x27
-#659 @ 138,60: 17x16
-#660 @ 924,626: 22x12
-#661 @ 728,395: 14x17
-#662 @ 840,819: 28x14
-#663 @ 883,215: 12x15
-#664 @ 105,624: 25x13
-#665 @ 752,741: 26x17
-#666 @ 890,572: 23x25
-#667 @ 510,904: 23x28
-#668 @ 220,431: 20x14
-#669 @ 706,806: 20x16
-#670 @ 523,860: 17x18
-#671 @ 818,608: 11x28
-#672 @ 113,727: 18x27
-#673 @ 550,513: 22x13
-#674 @ 163,468: 11x28
-#675 @ 750,629: 17x12
-#676 @ 921,681: 8x10
-#677 @ 687,78: 15x10
-#678 @ 117,637: 27x23
-#679 @ 20,483: 14x28
-#680 @ 413,261: 12x29
-#681 @ 932,258: 17x20
-#682 @ 501,822: 18x18
-#683 @ 368,91: 19x22
-#684 @ 280,684: 15x28
-#685 @ 848,611: 15x12
-#686 @ 48,121: 10x11
-#687 @ 964,881: 28x11
-#688 @ 317,431: 8x3
-#689 @ 771,426: 10x22
-#690 @ 861,373: 14x24
-#691 @ 372,433: 15x10
-#692 @ 788,713: 15x15
-#693 @ 727,796: 21x18
-#694 @ 106,366: 6x21
-#695 @ 172,364: 29x15
-#696 @ 212,878: 19x14
-#697 @ 20,2: 27x12
-#698 @ 741,577: 11x25
-#699 @ 200,229: 24x22
-#700 @ 596,24: 17x18
-#701 @ 282,934: 22x12
-#702 @ 55,615: 28x26
-#703 @ 4,600: 16x19
-#704 @ 387,817: 24x12
-#705 @ 955,100: 17x29
-#706 @ 286,526: 28x23
-#707 @ 144,62: 7x10
-#708 @ 477,231: 15x27
-#709 @ 521,678: 20x20
-#710 @ 279,249: 18x14
-#711 @ 471,336: 20x28
-#712 @ 18,507: 27x14
-#713 @ 576,221: 14x10
-#714 @ 646,705: 12x27
-#715 @ 631,211: 15x28
-#716 @ 680,79: 15x27
-#717 @ 682,360: 14x25
-#718 @ 268,2: 24x19
-#719 @ 469,235: 20x15
-#720 @ 977,373: 13x15
-#721 @ 352,842: 16x19
-#722 @ 310,91: 15x14
-#723 @ 394,539: 20x28
-#724 @ 366,841: 22x10
-#725 @ 644,573: 14x26
-#726 @ 252,815: 19x15
-#727 @ 575,714: 28x21
-#728 @ 23,706: 14x16
-#729 @ 208,607: 25x25
-#730 @ 506,183: 10x13
-#731 @ 641,852: 20x19
-#732 @ 820,533: 10x20
-#733 @ 381,851: 22x11
-#734 @ 799,908: 21x15
-#735 @ 597,96: 24x29
-#736 @ 592,876: 16x11
-#737 @ 945,807: 10x14
-#738 @ 407,578: 27x27
-#739 @ 150,649: 17x25
-#740 @ 615,596: 17x18
-#741 @ 893,717: 16x12
-#742 @ 153,252: 29x10
-#743 @ 186,626: 17x26
-#744 @ 2,596: 10x19
-#745 @ 704,113: 16x29
-#746 @ 716,221: 17x22
-#747 @ 132,912: 21x19
-#748 @ 428,562: 13x12
-#749 @ 528,946: 17x13
-#750 @ 110,213: 14x12
-#751 @ 836,597: 27x22
-#752 @ 786,842: 14x28
-#753 @ 299,769: 26x14
-#754 @ 958,24: 11x15
-#755 @ 93,306: 12x20
-#756 @ 201,803: 23x28
-#757 @ 79,70: 18x19
-#758 @ 52,393: 15x16
-#759 @ 237,320: 16x15
-#760 @ 430,564: 8x7
-#761 @ 566,236: 15x16
-#762 @ 156,829: 18x13
-#763 @ 581,239: 11x23
-#764 @ 307,358: 25x22
-#765 @ 76,841: 13x10
-#766 @ 384,830: 17x26
-#767 @ 901,827: 12x15
-#768 @ 426,653: 14x16
-#769 @ 804,519: 17x26
-#770 @ 45,495: 22x20
-#771 @ 320,948: 22x15
-#772 @ 518,635: 17x20
-#773 @ 886,848: 13x15
-#774 @ 726,546: 18x13
-#775 @ 359,190: 22x28
-#776 @ 705,371: 20x17
-#777 @ 818,518: 28x16
-#778 @ 606,733: 18x27
-#779 @ 639,119: 13x21
-#780 @ 429,788: 18x22
-#781 @ 299,744: 11x20
-#782 @ 189,655: 27x20
-#783 @ 513,665: 12x18
-#784 @ 494,443: 23x25
-#785 @ 75,297: 21x15
-#786 @ 356,679: 29x23
-#787 @ 482,218: 26x25
-#788 @ 500,212: 10x12
-#789 @ 94,661: 23x13
-#790 @ 283,708: 13x26
-#791 @ 597,936: 22x12
-#792 @ 77,94: 21x24
-#793 @ 750,403: 20x13
-#794 @ 368,102: 28x25
-#795 @ 601,88: 23x19
-#796 @ 96,163: 29x26
-#797 @ 326,601: 15x29
-#798 @ 434,289: 9x6
-#799 @ 10,4: 21x28
-#800 @ 42,622: 23x16
-#801 @ 693,221: 11x12
-#802 @ 807,618: 17x12
-#803 @ 763,875: 21x18
-#804 @ 615,641: 22x15
-#805 @ 625,78: 12x20
-#806 @ 591,237: 17x28
-#807 @ 744,585: 10x22
-#808 @ 56,623: 12x11
-#809 @ 606,776: 21x11
-#810 @ 579,25: 15x24
-#811 @ 729,209: 11x25
-#812 @ 667,505: 26x24
-#813 @ 439,18: 18x20
-#814 @ 464,880: 22x11
-#815 @ 757,638: 17x17
-#816 @ 844,272: 16x21
-#817 @ 153,774: 27x22
-#818 @ 267,531: 20x21
-#819 @ 45,783: 6x5
-#820 @ 864,643: 18x25
-#821 @ 162,922: 18x19
-#822 @ 58,319: 11x21
-#823 @ 971,840: 22x24
-#824 @ 87,590: 19x14
-#825 @ 354,419: 13x10
-#826 @ 729,396: 25x12
-#827 @ 660,971: 27x16
-#828 @ 830,777: 11x14
-#829 @ 862,818: 14x25
-#830 @ 142,706: 27x21
-#831 @ 488,335: 11x11
-#832 @ 652,173: 29x29
-#833 @ 482,243: 19x28
-#834 @ 774,434: 22x12
-#835 @ 486,192: 16x14
-#836 @ 6,526: 26x18
-#837 @ 672,75: 16x18
-#838 @ 323,719: 19x23
-#839 @ 693,816: 10x25
-#840 @ 567,123: 19x17
-#841 @ 427,32: 27x29
-#842 @ 549,436: 18x10
-#843 @ 102,496: 27x19
-#844 @ 410,557: 14x26
-#845 @ 935,803: 22x20
-#846 @ 775,233: 27x23
-#847 @ 357,79: 14x22
-#848 @ 771,743: 15x17
-#849 @ 30,613: 27x29
-#850 @ 580,213: 13x19
-#851 @ 933,939: 16x23
-#852 @ 151,309: 11x24
-#853 @ 925,10: 29x15
-#854 @ 97,83: 12x12
-#855 @ 474,479: 16x26
-#856 @ 246,331: 11x17
-#857 @ 972,116: 22x19
-#858 @ 959,104: 22x23
-#859 @ 225,489: 25x29
-#860 @ 428,187: 28x12
-#861 @ 458,883: 28x26
-#862 @ 778,919: 20x20
-#863 @ 785,532: 22x26
-#864 @ 37,496: 10x25
-#865 @ 550,798: 28x19
-#866 @ 634,886: 14x24
-#867 @ 400,762: 18x20
-#868 @ 753,180: 15x12
-#869 @ 403,254: 11x26
-#870 @ 620,696: 19x18
-#871 @ 903,706: 21x16
-#872 @ 31,927: 29x26
-#873 @ 281,816: 23x28
-#874 @ 462,860: 6x6
-#875 @ 131,138: 22x12
-#876 @ 720,92: 20x14
-#877 @ 252,174: 27x13
-#878 @ 243,539: 18x11
-#879 @ 389,39: 17x24
-#880 @ 133,104: 17x18
-#881 @ 182,254: 16x12
-#882 @ 417,374: 20x21
-#883 @ 489,849: 16x19
-#884 @ 354,429: 15x13
-#885 @ 60,345: 19x11
-#886 @ 277,949: 10x10
-#887 @ 517,888: 27x13
-#888 @ 12,930: 20x18
-#889 @ 810,307: 18x17
-#890 @ 78,960: 25x25
-#891 @ 788,206: 12x26
-#892 @ 253,600: 13x20
-#893 @ 459,495: 25x14
-#894 @ 539,785: 11x25
-#895 @ 567,411: 12x21
-#896 @ 531,240: 25x20
-#897 @ 532,922: 15x27
-#898 @ 633,924: 22x20
-#899 @ 791,842: 13x12
-#900 @ 210,666: 13x19
-#901 @ 506,564: 22x17
-#902 @ 278,965: 21x28
-#903 @ 454,968: 15x22
-#904 @ 363,643: 20x10
-#905 @ 468,875: 27x23
-#906 @ 743,759: 18x12
-#907 @ 76,30: 12x20
-#908 @ 607,803: 25x21
-#909 @ 365,751: 21x28
-#910 @ 69,34: 29x17
-#911 @ 70,341: 19x16
-#912 @ 959,681: 28x10
-#913 @ 881,560: 13x14
-#914 @ 315,721: 28x25
-#915 @ 555,737: 29x23
-#916 @ 838,442: 17x23
-#917 @ 5,533: 24x25
-#918 @ 702,547: 17x19
-#919 @ 378,249: 28x22
-#920 @ 72,755: 11x29
-#921 @ 562,805: 27x26
-#922 @ 89,66: 24x23
-#923 @ 404,921: 18x25
-#924 @ 730,369: 14x10
-#925 @ 784,759: 10x15
-#926 @ 641,616: 15x15
-#927 @ 733,523: 26x24
-#928 @ 811,687: 28x28
-#929 @ 905,514: 26x17
-#930 @ 937,5: 19x18
-#931 @ 345,639: 28x18
-#932 @ 253,659: 10x29
-#933 @ 56,614: 15x27
-#934 @ 288,673: 16x27
-#935 @ 779,863: 22x23
-#936 @ 761,819: 15x20
-#937 @ 900,386: 16x26
-#938 @ 921,946: 21x28
-#939 @ 404,152: 11x23
-#940 @ 542,362: 14x23
-#941 @ 873,137: 20x11
-#942 @ 311,897: 14x29
-#943 @ 99,575: 17x20
-#944 @ 352,792: 10x19
-#945 @ 969,120: 27x16
-#946 @ 733,963: 28x23
-#947 @ 437,950: 20x24
-#948 @ 355,367: 14x14
-#949 @ 242,362: 18x21
-#950 @ 618,823: 23x19
-#951 @ 191,398: 16x22
-#952 @ 576,28: 27x16
-#953 @ 247,975: 17x17
-#954 @ 504,937: 19x13
-#955 @ 84,869: 27x27
-#956 @ 35,635: 16x10
-#957 @ 952,979: 19x17
-#958 @ 122,313: 11x29
-#959 @ 219,512: 27x10
-#960 @ 170,943: 26x16
-#961 @ 141,380: 23x12
-#962 @ 364,335: 22x29
-#963 @ 241,220: 12x12
-#964 @ 836,8: 19x24
-#965 @ 121,497: 18x27
-#966 @ 716,106: 19x12
-#967 @ 797,574: 22x16
-#968 @ 464,315: 28x29
-#969 @ 494,702: 22x18
-#970 @ 418,505: 12x28
-#971 @ 169,835: 12x24
-#972 @ 575,689: 17x24
-#973 @ 102,357: 24x25
-#974 @ 199,942: 13x11
-#975 @ 745,743: 12x18
-#976 @ 837,32: 21x15
-#977 @ 700,488: 19x29
-#978 @ 770,644: 29x18
-#979 @ 847,467: 14x28
-#980 @ 673,575: 19x28
-#981 @ 258,475: 27x12
-#982 @ 405,632: 16x13
-#983 @ 591,82: 17x18
-#984 @ 820,376: 21x29
-#985 @ 895,761: 29x23
-#986 @ 111,328: 12x22
-#987 @ 799,299: 21x14
-#988 @ 912,164: 19x12
-#989 @ 110,648: 10x26
-#990 @ 366,40: 10x26
-#991 @ 162,758: 24x13
-#992 @ 645,973: 24x11
-#993 @ 680,812: 20x22
-#994 @ 13,159: 17x14
-#995 @ 724,803: 27x11
-#996 @ 860,745: 12x18
-#997 @ 140,939: 16x26
-#998 @ 237,377: 26x20
-#999 @ 163,935: 23x29
-#1000 @ 578,96: 21x16
-#1001 @ 277,794: 14x12
-#1002 @ 626,261: 10x25
-#1003 @ 735,160: 26x24
-#1004 @ 460,483: 25x14
-#1005 @ 765,257: 16x27
-#1006 @ 888,838: 12x17
-#1007 @ 949,269: 14x14
-#1008 @ 535,771: 21x17
-#1009 @ 620,429: 14x26
-#1010 @ 592,33: 28x24
-#1011 @ 942,163: 22x15
-#1012 @ 132,624: 19x22
-#1013 @ 143,332: 10x21
-#1014 @ 932,652: 15x29
-#1015 @ 358,754: 10x16
-#1016 @ 244,203: 29x16
-#1017 @ 194,406: 6x8
-#1018 @ 524,932: 21x13
-#1019 @ 957,642: 14x24
-#1020 @ 388,626: 19x11
-#1021 @ 730,215: 13x13
-#1022 @ 100,618: 24x10
-#1023 @ 141,568: 17x17
-#1024 @ 902,141: 28x27
-#1025 @ 205,319: 14x12
-#1026 @ 133,380: 14x22
-#1027 @ 784,840: 17x20
-#1028 @ 854,365: 13x27
-#1029 @ 167,465: 14x21
-#1030 @ 366,739: 13x12
-#1031 @ 609,804: 19x11
-#1032 @ 370,257: 25x26
-#1033 @ 150,696: 28x24
-#1034 @ 79,174: 10x22
-#1035 @ 575,878: 28x26
-#1036 @ 200,323: 29x10
-#1037 @ 915,335: 16x11
-#1038 @ 296,718: 24x29
-#1039 @ 402,564: 10x17
-#1040 @ 962,649: 20x12
-#1041 @ 38,126: 14x13
-#1042 @ 677,482: 26x26
-#1043 @ 474,884: 19x10
-#1044 @ 325,962: 29x28
-#1045 @ 405,545: 28x28
-#1046 @ 740,173: 15x26
-#1047 @ 86,34: 24x22
-#1048 @ 802,459: 26x24
-#1049 @ 428,192: 23x14
-#1050 @ 180,613: 28x26
-#1051 @ 984,723: 15x17
-#1052 @ 317,430: 17x10
-#1053 @ 789,835: 12x11
-#1054 @ 675,775: 29x28
-#1055 @ 971,35: 5x3
-#1056 @ 756,272: 13x19
-#1057 @ 665,333: 21x19
-#1058 @ 597,54: 17x26
-#1059 @ 501,867: 28x28
-#1060 @ 392,937: 20x20
-#1061 @ 151,383: 26x26
-#1062 @ 403,372: 12x26
-#1063 @ 471,877: 27x18
-#1064 @ 987,468: 10x22
-#1065 @ 850,612: 14x17
-#1066 @ 686,879: 17x24
-#1067 @ 794,549: 15x10
-#1068 @ 749,45: 22x25
-#1069 @ 636,231: 20x14
-#1070 @ 966,94: 19x15
-#1071 @ 860,486: 14x28
-#1072 @ 599,698: 11x28
-#1073 @ 2,154: 29x27
-#1074 @ 308,404: 28x26
-#1075 @ 207,457: 12x11
-#1076 @ 399,850: 11x13
-#1077 @ 815,81: 11x28
-#1078 @ 491,152: 26x11
-#1079 @ 670,561: 10x18
-#1080 @ 430,472: 18x29
-#1081 @ 240,702: 12x10
-#1082 @ 879,93: 16x19
-#1083 @ 250,108: 23x16
-#1084 @ 459,248: 25x15
-#1085 @ 795,706: 19x26
-#1086 @ 590,102: 23x27
-#1087 @ 874,931: 24x24
-#1088 @ 714,396: 26x14
-#1089 @ 132,176: 19x29
-#1090 @ 171,99: 12x16
-#1091 @ 170,618: 27x17
-#1092 @ 974,634: 17x28
-#1093 @ 507,137: 15x16
-#1094 @ 74,253: 25x28
-#1095 @ 612,947: 18x11
-#1096 @ 573,711: 17x19
-#1097 @ 144,957: 24x29
-#1098 @ 721,807: 24x10
-#1099 @ 288,370: 22x14
-#1100 @ 452,59: 26x29
-#1101 @ 935,312: 18x18
-#1102 @ 474,925: 11x12
-#1103 @ 606,59: 10x26
-#1104 @ 466,622: 14x21
-#1105 @ 248,938: 13x21
-#1106 @ 53,371: 29x26
-#1107 @ 867,90: 20x20
-#1108 @ 290,787: 23x16
-#1109 @ 764,58: 20x25
-#1110 @ 308,946: 20x19
-#1111 @ 31,140: 16x11
-#1112 @ 392,144: 19x25
-#1113 @ 948,836: 25x23
-#1114 @ 459,866: 21x22
-#1115 @ 488,562: 18x27
-#1116 @ 429,286: 20x21
-#1117 @ 68,311: 29x27
-#1118 @ 197,830: 13x11
-#1119 @ 218,525: 10x25
-#1120 @ 436,9: 16x12
-#1121 @ 32,824: 13x10
-#1122 @ 889,147: 27x11
-#1123 @ 312,388: 14x22
-#1124 @ 626,333: 26x14
-#1125 @ 729,751: 29x21
-#1126 @ 638,724: 25x16
-#1127 @ 353,741: 20x20
-#1128 @ 288,659: 12x11
-#1129 @ 76,95: 26x20
-#1130 @ 131,920: 23x11
-#1131 @ 129,385: 15x16
-#1132 @ 166,588: 15x25
-#1133 @ 761,338: 21x19
-#1134 @ 698,323: 16x18
-#1135 @ 558,79: 29x25
-#1136 @ 704,478: 20x14
-#1137 @ 785,276: 28x29
-#1138 @ 281,940: 19x14
-#1139 @ 519,631: 14x24
-#1140 @ 565,283: 6x3
-#1141 @ 131,952: 15x29
-#1142 @ 599,934: 28x23
-#1143 @ 376,562: 12x14
-#1144 @ 935,414: 12x16
-#1145 @ 845,792: 17x25
-#1146 @ 524,105: 25x28
-#1147 @ 816,199: 16x17
-#1148 @ 791,933: 23x22
-#1149 @ 70,84: 23x14
-#1150 @ 934,427: 14x11
-#1151 @ 890,552: 28x10
-#1152 @ 101,91: 19x21
-#1153 @ 611,596: 17x11
-#1154 @ 684,960: 17x29
-#1155 @ 80,151: 26x15
-#1156 @ 908,809: 11x27
-#1157 @ 262,730: 19x17
-#1158 @ 946,794: 21x25
-#1159 @ 55,296: 19x19
-#1160 @ 4,601: 16x25
-#1161 @ 632,708: 12x24
-#1162 @ 799,549: 13x28
-#1163 @ 913,374: 23x13
-#1164 @ 593,82: 18x27
-#1165 @ 784,721: 12x17
-#1166 @ 503,436: 20x11
-#1167 @ 470,655: 23x14
-#1168 @ 969,383: 13x12
-#1169 @ 397,491: 25x21
-#1170 @ 327,251: 26x10
-#1171 @ 534,232: 14x24
-#1172 @ 171,581: 16x17
-#1173 @ 520,149: 28x11
-#1174 @ 590,571: 11x24
-#1175 @ 297,907: 22x17
-#1176 @ 450,5: 23x11
-#1177 @ 570,641: 11x20
-#1178 @ 565,655: 17x21
-#1179 @ 969,654: 28x21
-#1180 @ 263,124: 12x22
-#1181 @ 606,95: 22x28
-#1182 @ 123,170: 12x16
-#1183 @ 250,692: 16x13
-#1184 @ 214,131: 22x25
-#1185 @ 25,981: 21x14
-#1186 @ 28,580: 24x11
-#1187 @ 256,589: 22x23
-#1188 @ 151,898: 28x16
-#1189 @ 387,597: 20x26
-#1190 @ 983,142: 14x23
-#1191 @ 922,516: 20x12
-#1192 @ 506,132: 13x20
-#1193 @ 410,407: 16x17
-#1194 @ 326,750: 12x10
-#1195 @ 838,19: 7x7
-#1196 @ 395,772: 26x22
-#1197 @ 561,709: 19x16
-#1198 @ 555,43: 29x21
-#1199 @ 684,77: 29x29
-#1200 @ 616,80: 21x22
-#1201 @ 188,871: 27x14
-#1202 @ 808,409: 20x25
-#1203 @ 65,141: 29x16
-#1204 @ 514,525: 11x14
-#1205 @ 258,977: 23x23
-#1206 @ 337,506: 13x26
-#1207 @ 662,592: 16x20
-#1208 @ 520,331: 25x22
-#1209 @ 571,859: 10x24
-#1210 @ 843,807: 13x17
-#1211 @ 3,199: 9x13
-#1212 @ 286,624: 10x25
-#1213 @ 259,754: 26x17
-#1214 @ 779,797: 24x16
-#1215 @ 117,685: 14x22
-#1216 @ 428,494: 25x27
-#1217 @ 695,39: 28x12
-#1218 @ 784,848: 28x29
-#1219 @ 142,742: 29x26
-#1220 @ 983,101: 11x24
-#1221 @ 582,892: 14x17
-#1222 @ 709,774: 25x17
-#1223 @ 96,65: 17x19
-#1224 @ 437,861: 24x19
-#1225 @ 105,956: 25x23
-#1226 @ 913,954: 22x17
-#1227 @ 940,233: 15x11
-#1228 @ 925,46: 12x23
-#1229 @ 6,524: 14x12
-#1230 @ 288,620: 26x28
-#1231 @ 442,13: 10x27
-#1232 @ 132,645: 20x12
-#1233 @ 820,229: 23x22
-#1234 @ 203,306: 10x12
-#1235 @ 192,167: 28x22
-#1236 @ 621,121: 13x22
-#1237 @ 820,103: 21x26
-#1238 @ 459,864: 25x20
-#1239 @ 542,709: 13x26
-#1240 @ 904,807: 26x11
-#1241 @ 67,837: 25x23
-#1242 @ 573,316: 12x21
-#1243 @ 638,125: 14x29
-#1244 @ 163,347: 15x28
-#1245 @ 454,786: 28x10
-#1246 @ 12,170: 26x13
-#1247 @ 720,350: 11x29
-#1248 @ 349,849: 10x17
-#1249 @ 304,833: 15x26
-#1250 @ 766,447: 21x16
-#1251 @ 972,658: 27x10
-#1252 @ 309,921: 22x28
-#1253 @ 127,615: 12x27
-#1254 @ 515,900: 23x26
-#1255 @ 480,228: 14x19
-#1256 @ 478,729: 17x12
-#1257 @ 391,221: 23x19
-#1258 @ 197,358: 21x11
-#1259 @ 138,630: 15x11
-#1260 @ 700,325: 17x22
-#1261 @ 958,140: 13x23
-#1262 @ 379,48: 27x25
-#1263 @ 623,409: 27x21
-#1264 @ 59,540: 29x22
-#1265 @ 697,129: 22x11
-#1266 @ 919,677: 21x18
-#1267 @ 205,197: 19x11
-#1268 @ 137,193: 25x25
-#1269 @ 621,540: 15x15
-#1270 @ 936,676: 10x20
-#1271 @ 0,929: 24x23
-#1272 @ 913,33: 27x26
-#1273 @ 110,361: 21x11
-#1274 @ 795,680: 22x19
-#1275 @ 61,624: 5x13
-#1276 @ 756,807: 13x26
-#1277 @ 299,154: 23x15
-#1278 @ 300,148: 21x24
-#1279 @ 132,64: 23x15
-#1280 @ 953,803: 26x22
-#1281 @ 534,104: 11x16
-#1282 @ 703,29: 10x15
-#1283 @ 486,707: 13x25
-#1284 @ 264,721: 23x26
-#1285 @ 84,256: 21x13
-#1286 @ 743,401: 15x18
-#1287 @ 293,431: 26x27
-#1288 @ 727,338: 20x18
-#1289 @ 12,573: 29x22
-#1290 @ 625,180: 17x26
-#1291 @ 62,291: 14x26
-#1292 @ 477,286: 18x11
-#1293 @ 267,734: 10x6
-#1294 @ 389,218: 16x19
-#1295 @ 965,933: 10x15
-#1296 @ 36,766: 28x14
-#1297 @ 574,728: 12x20
-#1298 @ 85,873: 25x13
-#1299 @ 441,393: 26x21
-#1300 @ 56,534: 29x23
-#1301 @ 412,371: 26x21
-#1302 @ 274,985: 12x13
-#1303 @ 940,199: 22x26
-#1304 @ 145,70: 21x12
-#1305 @ 388,5: 25x29
-#1306 @ 83,953: 11x11
-#1307 @ 802,833: 21x14
-#1308 @ 83,188: 15x24
-#1309 @ 564,130: 26x26
-#1310 @ 324,506: 21x25
-#1311 @ 618,333: 27x14
-#1312 @ 662,796: 14x22
-#1313 @ 463,490: 15x10
-#1314 @ 736,527: 23x13
-#1315 @ 385,116: 23x21
-#1316 @ 840,649: 21x15
-#1317 @ 514,32: 18x28
-#1318 @ 771,245: 25x18
-#1319 @ 199,950: 25x24
-#1320 @ 459,954: 17x11
-#1321 @ 516,148: 24x11
-#1322 @ 38,488: 23x11
-#1323 @ 960,611: 25x29
-#1324 @ 138,56: 19x19
-#1325 @ 979,715: 20x26
-#1326 @ 370,474: 20x11
-#1327 @ 552,497: 10x16
-#1328 @ 805,684: 16x23
-#1329 @ 633,208: 12x27
-#1330 @ 879,830: 15x28
-#1331 @ 413,499: 13x10
-#1332 @ 174,309: 13x19
-#1333 @ 133,767: 24x23
-#1334 @ 152,823: 11x11
-#1335 @ 516,935: 11x18
-#1336 @ 39,367: 17x29
-#1337 @ 262,138: 27x27
-#1338 @ 959,790: 20x18
-#1339 @ 150,916: 17x10
-#1340 @ 836,23: 21x24
-#1341 @ 405,391: 21x16
-#1342 @ 317,869: 20x28
-#1343 @ 935,692: 16x17
-#1344 @ 923,788: 26x21
-#1345 @ 3,555: 22x10
-#1346 @ 749,627: 14x12
-#1347 @ 32,136: 21x24
diff --git a/src/3/solve.py b/src/3/solve.py deleted file mode 100644 index 53dd245..0000000 --- a/src/3/solve.py +++ /dev/null @@ -1,74 +0,0 @@ -from sys import argv as args
-
-file = open("input.txt")
-data = [x for x in file.readlines()]
-file.close()
-
-#data = "#1 @ 1,3: 4x4","#2 @ 3,1: 4x4","#3 @ 5,5: 2x2"
-
-def parserect(l):
- split = l.split("@")
- id = int(split[0].replace("#",""))
- split = split[1].split(":")
- pos = [int(x) for x in split[0].split(",")]
- size = [int(x) for x in split[1].split("x")]
- return pos, size, id
-
-def createMap():
- global rectdata
- rectdata = [parserect(l) for l in data]
- msize = list([0,0])
- for i in range(len(rectdata)):
- r = rectdata[i]
- xm = r[0][0] + r[1][0]
- ym = r[0][1] + r[1][1]
- if i == 0 or xm > msize[0]:
- msize[0] = xm
- if i == 0 or ym > msize[1]:
- msize[1] = ym
-
- map = [[list() for y in range(msize[1])] for x in range(msize[0])]
- for r in rectdata:
- sx = r[0][0]
- sy = r[0][1]
- for x in range(sx, sx + r[1][0]):
- for y in range(sy, sy + r[1][1]):
- map[x][y].append(r[2])
-
- return map
-
-def solve1(): # answer: 114946
- map = createMap()
-
- overlap = 0
- for x in range(len(map)):
- for y in range(len(map[0])):
- if len(map[x][y]) > 1:
- overlap += 1
-
- print(overlap)
-
-def solve2(): # answer: 877
- map = createMap()
-
- overlap = set()
- for x in range(len(map)):
- for y in range(len(map[0])):
- if len(map[x][y]) > 1:
- for id in map[x][y]:
- overlap.add(id)
-
- # print(overlap)
-
- for i in range(1, len(rectdata)):
- if i not in overlap:
- print(i)
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/4/input.txt b/src/4/input.txt deleted file mode 100644 index c92ca08..0000000 --- a/src/4/input.txt +++ /dev/null @@ -1,986 +0,0 @@ -[1518-08-29 00:24] falls asleep
-[1518-08-06 00:20] falls asleep
-[1518-03-12 00:21] falls asleep
-[1518-06-17 00:45] wakes up
-[1518-06-27 00:46] falls asleep
-[1518-09-07 00:36] falls asleep
-[1518-07-22 00:23] wakes up
-[1518-05-18 00:35] falls asleep
-[1518-09-27 00:40] wakes up
-[1518-04-10 23:52] Guard #3559 begins shift
-[1518-03-16 00:44] wakes up
-[1518-05-16 00:23] wakes up
-[1518-06-18 00:00] Guard #1499 begins shift
-[1518-11-21 00:48] wakes up
-[1518-05-19 00:29] falls asleep
-[1518-03-20 23:58] Guard #73 begins shift
-[1518-09-28 00:18] falls asleep
-[1518-10-21 00:00] Guard #983 begins shift
-[1518-05-19 00:57] wakes up
-[1518-10-08 00:47] wakes up
-[1518-05-04 00:19] falls asleep
-[1518-07-30 00:30] falls asleep
-[1518-05-04 00:22] wakes up
-[1518-10-01 00:20] wakes up
-[1518-03-24 23:47] Guard #2411 begins shift
-[1518-06-19 00:00] Guard #1499 begins shift
-[1518-09-15 00:38] falls asleep
-[1518-07-26 00:50] falls asleep
-[1518-06-13 00:00] Guard #3499 begins shift
-[1518-08-30 00:03] Guard #983 begins shift
-[1518-04-18 00:44] wakes up
-[1518-07-09 00:53] falls asleep
-[1518-06-09 00:02] falls asleep
-[1518-10-09 23:56] Guard #3559 begins shift
-[1518-04-15 23:46] Guard #313 begins shift
-[1518-10-06 00:03] Guard #3499 begins shift
-[1518-10-27 23:59] Guard #2617 begins shift
-[1518-10-21 00:33] wakes up
-[1518-03-23 00:47] falls asleep
-[1518-07-21 00:31] wakes up
-[1518-06-05 00:21] falls asleep
-[1518-03-11 00:54] wakes up
-[1518-05-06 00:11] wakes up
-[1518-04-09 00:39] wakes up
-[1518-06-10 00:00] Guard #919 begins shift
-[1518-11-10 00:57] falls asleep
-[1518-09-27 00:27] falls asleep
-[1518-07-29 00:53] falls asleep
-[1518-07-26 00:38] falls asleep
-[1518-08-05 00:01] falls asleep
-[1518-06-07 00:59] wakes up
-[1518-11-22 00:39] falls asleep
-[1518-11-17 00:58] wakes up
-[1518-11-04 00:22] falls asleep
-[1518-09-10 00:34] wakes up
-[1518-04-11 00:25] wakes up
-[1518-04-14 23:58] Guard #3203 begins shift
-[1518-06-22 00:22] falls asleep
-[1518-04-07 00:48] falls asleep
-[1518-11-15 00:57] wakes up
-[1518-05-24 23:56] Guard #983 begins shift
-[1518-07-29 00:59] wakes up
-[1518-11-15 00:05] falls asleep
-[1518-11-22 00:02] Guard #3499 begins shift
-[1518-11-01 00:46] wakes up
-[1518-08-31 00:01] Guard #2411 begins shift
-[1518-06-30 00:39] falls asleep
-[1518-04-29 00:24] wakes up
-[1518-04-12 23:54] Guard #2099 begins shift
-[1518-05-04 00:48] falls asleep
-[1518-09-25 00:49] falls asleep
-[1518-09-21 00:28] falls asleep
-[1518-04-25 00:44] falls asleep
-[1518-04-13 00:43] falls asleep
-[1518-08-24 00:16] falls asleep
-[1518-07-02 00:43] wakes up
-[1518-04-26 00:00] Guard #241 begins shift
-[1518-06-26 00:29] falls asleep
-[1518-04-17 00:47] wakes up
-[1518-11-23 00:28] falls asleep
-[1518-10-04 00:53] wakes up
-[1518-11-20 00:46] falls asleep
-[1518-06-28 00:37] wakes up
-[1518-09-12 00:21] falls asleep
-[1518-04-20 23:54] Guard #73 begins shift
-[1518-03-21 23:57] Guard #1811 begins shift
-[1518-07-04 00:48] wakes up
-[1518-09-25 00:34] wakes up
-[1518-04-13 00:35] wakes up
-[1518-08-29 00:02] Guard #2657 begins shift
-[1518-03-30 00:03] Guard #1811 begins shift
-[1518-11-16 00:22] falls asleep
-[1518-08-16 00:29] falls asleep
-[1518-08-07 00:27] falls asleep
-[1518-03-26 23:57] Guard #1091 begins shift
-[1518-09-13 00:21] falls asleep
-[1518-11-12 00:42] wakes up
-[1518-05-14 00:01] Guard #1291 begins shift
-[1518-03-21 00:39] falls asleep
-[1518-04-23 00:22] falls asleep
-[1518-09-19 00:05] falls asleep
-[1518-04-02 00:42] falls asleep
-[1518-04-27 00:39] wakes up
-[1518-03-24 00:02] Guard #1033 begins shift
-[1518-03-16 00:59] wakes up
-[1518-05-11 23:50] Guard #3109 begins shift
-[1518-04-18 00:06] falls asleep
-[1518-08-31 00:33] wakes up
-[1518-09-18 23:48] Guard #3559 begins shift
-[1518-04-21 00:30] wakes up
-[1518-10-07 00:44] wakes up
-[1518-09-30 00:57] falls asleep
-[1518-10-08 00:56] wakes up
-[1518-06-19 00:37] wakes up
-[1518-10-22 00:33] falls asleep
-[1518-10-20 00:52] falls asleep
-[1518-11-13 00:27] wakes up
-[1518-07-05 00:11] falls asleep
-[1518-08-17 00:48] wakes up
-[1518-07-25 00:45] wakes up
-[1518-05-01 23:59] Guard #3109 begins shift
-[1518-07-31 00:10] falls asleep
-[1518-05-26 00:54] falls asleep
-[1518-08-10 23:57] Guard #3203 begins shift
-[1518-06-26 00:06] falls asleep
-[1518-09-24 00:12] falls asleep
-[1518-04-11 00:01] falls asleep
-[1518-06-01 00:02] Guard #2657 begins shift
-[1518-06-30 23:49] Guard #241 begins shift
-[1518-10-29 00:49] wakes up
-[1518-06-12 00:44] wakes up
-[1518-04-16 00:01] falls asleep
-[1518-10-13 00:55] wakes up
-[1518-05-21 00:28] falls asleep
-[1518-06-21 00:17] falls asleep
-[1518-06-05 00:47] falls asleep
-[1518-05-10 00:19] falls asleep
-[1518-09-05 00:04] falls asleep
-[1518-04-23 00:12] falls asleep
-[1518-07-16 00:56] wakes up
-[1518-07-26 00:00] Guard #3499 begins shift
-[1518-08-27 00:47] falls asleep
-[1518-09-24 00:32] falls asleep
-[1518-09-15 00:03] Guard #313 begins shift
-[1518-11-21 00:04] Guard #3499 begins shift
-[1518-07-11 00:49] wakes up
-[1518-06-27 00:35] falls asleep
-[1518-07-17 00:59] wakes up
-[1518-05-13 00:10] falls asleep
-[1518-09-28 00:04] Guard #3559 begins shift
-[1518-10-03 00:00] Guard #313 begins shift
-[1518-06-15 00:27] falls asleep
-[1518-09-24 00:59] wakes up
-[1518-10-29 23:50] Guard #983 begins shift
-[1518-06-17 00:48] falls asleep
-[1518-09-24 00:01] Guard #241 begins shift
-[1518-05-28 23:56] Guard #2657 begins shift
-[1518-04-17 00:00] Guard #1291 begins shift
-[1518-05-29 00:34] wakes up
-[1518-03-16 00:48] falls asleep
-[1518-05-25 00:59] wakes up
-[1518-04-11 00:42] falls asleep
-[1518-06-02 23:59] Guard #241 begins shift
-[1518-04-13 00:00] falls asleep
-[1518-07-22 00:35] falls asleep
-[1518-09-19 23:56] Guard #3109 begins shift
-[1518-08-05 23:52] Guard #3449 begins shift
-[1518-08-25 00:18] wakes up
-[1518-07-14 23:57] Guard #2617 begins shift
-[1518-05-08 00:19] falls asleep
-[1518-10-11 00:02] Guard #2657 begins shift
-[1518-03-21 00:22] falls asleep
-[1518-06-23 00:10] falls asleep
-[1518-05-28 00:41] falls asleep
-[1518-09-01 00:02] Guard #3109 begins shift
-[1518-09-13 00:43] wakes up
-[1518-05-19 00:16] wakes up
-[1518-10-03 00:59] wakes up
-[1518-05-04 00:59] wakes up
-[1518-06-15 00:53] falls asleep
-[1518-07-16 00:09] falls asleep
-[1518-08-11 00:48] falls asleep
-[1518-08-15 00:00] Guard #823 begins shift
-[1518-07-31 00:44] wakes up
-[1518-04-28 23:51] Guard #73 begins shift
-[1518-04-21 00:46] falls asleep
-[1518-09-21 00:42] wakes up
-[1518-05-27 00:26] falls asleep
-[1518-08-23 00:04] Guard #3203 begins shift
-[1518-07-13 00:01] falls asleep
-[1518-08-14 00:01] falls asleep
-[1518-07-10 00:50] wakes up
-[1518-11-05 00:37] wakes up
-[1518-08-12 00:58] wakes up
-[1518-03-11 00:33] falls asleep
-[1518-09-20 00:32] falls asleep
-[1518-09-03 00:56] wakes up
-[1518-03-21 00:40] wakes up
-[1518-07-03 00:22] falls asleep
-[1518-08-16 23:46] Guard #313 begins shift
-[1518-10-31 00:00] Guard #919 begins shift
-[1518-08-11 00:32] wakes up
-[1518-08-25 23:58] Guard #1033 begins shift
-[1518-09-01 23:57] Guard #2617 begins shift
-[1518-06-17 00:53] wakes up
-[1518-10-18 00:42] falls asleep
-[1518-07-11 00:14] falls asleep
-[1518-03-13 00:27] falls asleep
-[1518-10-28 00:58] wakes up
-[1518-07-31 00:01] Guard #3499 begins shift
-[1518-04-22 00:49] wakes up
-[1518-10-17 00:42] wakes up
-[1518-03-14 00:02] Guard #1033 begins shift
-[1518-08-09 00:38] falls asleep
-[1518-04-26 23:58] Guard #3109 begins shift
-[1518-05-09 00:34] falls asleep
-[1518-11-09 23:57] Guard #2099 begins shift
-[1518-05-22 00:28] falls asleep
-[1518-08-08 00:28] wakes up
-[1518-11-23 00:42] wakes up
-[1518-09-16 00:19] falls asleep
-[1518-04-08 00:12] falls asleep
-[1518-10-03 00:47] wakes up
-[1518-04-10 00:22] falls asleep
-[1518-07-30 00:37] wakes up
-[1518-11-16 00:47] wakes up
-[1518-08-12 00:13] falls asleep
-[1518-08-04 00:33] falls asleep
-[1518-09-24 00:14] wakes up
-[1518-09-13 00:56] wakes up
-[1518-10-10 00:25] falls asleep
-[1518-04-14 00:01] Guard #3559 begins shift
-[1518-06-25 23:59] Guard #241 begins shift
-[1518-07-19 00:02] falls asleep
-[1518-03-15 00:01] Guard #1033 begins shift
-[1518-09-18 00:15] falls asleep
-[1518-11-09 00:35] falls asleep
-[1518-08-22 00:11] falls asleep
-[1518-10-07 23:59] Guard #2411 begins shift
-[1518-08-02 23:59] Guard #3361 begins shift
-[1518-06-26 00:53] wakes up
-[1518-04-01 00:16] falls asleep
-[1518-11-08 23:58] Guard #2617 begins shift
-[1518-09-02 00:57] wakes up
-[1518-07-06 00:46] falls asleep
-[1518-07-21 00:17] falls asleep
-[1518-05-01 00:58] wakes up
-[1518-06-21 00:23] wakes up
-[1518-07-01 00:47] wakes up
-[1518-09-07 00:41] wakes up
-[1518-05-05 00:34] wakes up
-[1518-04-02 00:01] Guard #2099 begins shift
-[1518-07-03 00:19] wakes up
-[1518-06-01 00:39] falls asleep
-[1518-04-06 00:08] falls asleep
-[1518-08-24 00:01] Guard #2657 begins shift
-[1518-07-01 23:51] Guard #3109 begins shift
-[1518-08-13 00:04] Guard #2099 begins shift
-[1518-08-09 00:34] wakes up
-[1518-05-31 00:40] wakes up
-[1518-06-26 00:45] falls asleep
-[1518-06-26 23:59] Guard #983 begins shift
-[1518-07-01 00:36] wakes up
-[1518-03-24 00:26] falls asleep
-[1518-04-19 00:55] falls asleep
-[1518-04-06 00:09] wakes up
-[1518-10-15 00:24] falls asleep
-[1518-04-30 00:47] falls asleep
-[1518-05-08 00:08] falls asleep
-[1518-09-24 00:56] falls asleep
-[1518-04-24 00:04] Guard #3361 begins shift
-[1518-07-06 00:59] wakes up
-[1518-06-24 00:28] wakes up
-[1518-08-11 00:19] falls asleep
-[1518-04-19 23:58] Guard #1291 begins shift
-[1518-03-18 00:32] wakes up
-[1518-10-23 00:04] falls asleep
-[1518-10-19 00:04] Guard #3203 begins shift
-[1518-04-05 00:31] wakes up
-[1518-03-13 00:04] Guard #3449 begins shift
-[1518-06-15 00:22] wakes up
-[1518-03-26 00:10] falls asleep
-[1518-07-07 00:34] wakes up
-[1518-04-27 00:24] falls asleep
-[1518-04-30 00:49] wakes up
-[1518-04-17 00:18] falls asleep
-[1518-09-11 00:20] falls asleep
-[1518-05-07 00:56] wakes up
-[1518-05-23 00:24] wakes up
-[1518-03-28 00:44] wakes up
-[1518-08-10 00:12] falls asleep
-[1518-06-12 00:13] falls asleep
-[1518-09-23 00:58] wakes up
-[1518-08-29 00:59] wakes up
-[1518-09-04 00:33] falls asleep
-[1518-05-29 00:09] falls asleep
-[1518-04-25 00:00] Guard #3203 begins shift
-[1518-07-30 00:55] wakes up
-[1518-10-31 23:57] Guard #983 begins shift
-[1518-11-05 00:29] falls asleep
-[1518-06-06 00:12] falls asleep
-[1518-03-18 00:29] falls asleep
-[1518-08-30 00:58] wakes up
-[1518-11-08 00:13] wakes up
-[1518-08-08 00:11] falls asleep
-[1518-07-12 23:50] Guard #2099 begins shift
-[1518-03-15 00:56] wakes up
-[1518-06-07 00:39] falls asleep
-[1518-11-02 00:29] wakes up
-[1518-06-13 00:43] wakes up
-[1518-07-21 23:47] Guard #2099 begins shift
-[1518-10-12 00:38] wakes up
-[1518-08-23 00:36] falls asleep
-[1518-08-04 23:53] Guard #1091 begins shift
-[1518-06-29 00:51] wakes up
-[1518-03-28 00:10] falls asleep
-[1518-10-20 00:23] falls asleep
-[1518-11-12 00:04] Guard #2411 begins shift
-[1518-04-17 00:59] wakes up
-[1518-10-07 00:32] falls asleep
-[1518-09-06 00:39] wakes up
-[1518-03-27 00:34] falls asleep
-[1518-05-27 00:53] wakes up
-[1518-10-05 00:15] falls asleep
-[1518-10-02 00:15] falls asleep
-[1518-07-12 00:37] wakes up
-[1518-07-16 23:57] Guard #983 begins shift
-[1518-09-03 00:20] falls asleep
-[1518-04-13 00:46] wakes up
-[1518-06-14 23:50] Guard #983 begins shift
-[1518-09-12 00:48] falls asleep
-[1518-09-11 23:57] Guard #73 begins shift
-[1518-07-26 00:51] wakes up
-[1518-09-01 00:45] falls asleep
-[1518-05-30 00:53] wakes up
-[1518-08-09 00:28] falls asleep
-[1518-10-03 00:29] falls asleep
-[1518-09-02 00:49] wakes up
-[1518-09-06 00:03] falls asleep
-[1518-03-18 23:49] Guard #3449 begins shift
-[1518-07-04 00:03] Guard #2411 begins shift
-[1518-08-01 00:21] falls asleep
-[1518-06-15 00:44] wakes up
-[1518-11-22 23:56] Guard #3499 begins shift
-[1518-06-14 00:08] falls asleep
-[1518-08-01 00:03] Guard #1291 begins shift
-[1518-05-26 00:56] wakes up
-[1518-07-17 23:47] Guard #1091 begins shift
-[1518-11-02 00:03] Guard #3559 begins shift
-[1518-04-07 00:51] wakes up
-[1518-06-03 00:56] wakes up
-[1518-10-15 00:40] wakes up
-[1518-07-29 00:40] falls asleep
-[1518-06-25 00:18] falls asleep
-[1518-08-06 00:51] falls asleep
-[1518-05-23 00:11] falls asleep
-[1518-09-10 23:59] Guard #2411 begins shift
-[1518-08-23 00:59] wakes up
-[1518-03-15 00:29] falls asleep
-[1518-06-25 00:00] Guard #3499 begins shift
-[1518-06-02 00:38] wakes up
-[1518-07-25 00:29] falls asleep
-[1518-04-19 00:49] wakes up
-[1518-04-01 00:46] wakes up
-[1518-11-10 23:49] Guard #241 begins shift
-[1518-06-06 00:24] wakes up
-[1518-07-04 00:22] falls asleep
-[1518-05-28 00:54] wakes up
-[1518-07-25 00:57] wakes up
-[1518-03-30 00:54] falls asleep
-[1518-11-10 00:58] wakes up
-[1518-06-15 00:58] wakes up
-[1518-03-25 23:58] Guard #1033 begins shift
-[1518-08-10 00:00] Guard #3109 begins shift
-[1518-11-05 23:48] Guard #73 begins shift
-[1518-10-25 00:08] falls asleep
-[1518-08-25 00:35] falls asleep
-[1518-04-25 00:52] wakes up
-[1518-04-05 23:57] Guard #2617 begins shift
-[1518-09-20 00:55] falls asleep
-[1518-08-11 00:52] wakes up
-[1518-05-09 00:49] wakes up
-[1518-08-02 00:38] wakes up
-[1518-07-07 23:57] Guard #983 begins shift
-[1518-09-29 00:42] wakes up
-[1518-05-31 00:50] falls asleep
-[1518-08-04 00:57] falls asleep
-[1518-08-20 00:42] wakes up
-[1518-10-28 00:57] falls asleep
-[1518-11-20 00:54] wakes up
-[1518-10-08 00:13] falls asleep
-[1518-09-30 00:58] wakes up
-[1518-07-18 23:53] Guard #3499 begins shift
-[1518-03-15 23:50] Guard #1811 begins shift
-[1518-07-23 00:33] falls asleep
-[1518-08-26 00:35] wakes up
-[1518-11-07 00:17] falls asleep
-[1518-07-20 00:30] wakes up
-[1518-10-13 23:52] Guard #2657 begins shift
-[1518-05-21 00:31] wakes up
-[1518-11-01 00:21] falls asleep
-[1518-10-24 00:26] falls asleep
-[1518-04-28 00:02] Guard #1811 begins shift
-[1518-08-02 00:18] falls asleep
-[1518-10-26 00:09] falls asleep
-[1518-06-26 00:21] wakes up
-[1518-11-17 00:48] falls asleep
-[1518-08-28 00:45] falls asleep
-[1518-09-08 00:26] wakes up
-[1518-09-30 00:00] Guard #3499 begins shift
-[1518-09-25 00:00] Guard #1091 begins shift
-[1518-09-17 00:03] Guard #313 begins shift
-[1518-05-11 00:10] falls asleep
-[1518-11-18 00:32] wakes up
-[1518-06-08 00:48] wakes up
-[1518-08-06 00:00] falls asleep
-[1518-09-23 00:06] falls asleep
-[1518-05-25 00:29] falls asleep
-[1518-08-31 00:22] falls asleep
-[1518-07-11 00:55] falls asleep
-[1518-11-10 00:50] falls asleep
-[1518-04-28 00:33] falls asleep
-[1518-11-13 00:05] falls asleep
-[1518-07-25 00:49] falls asleep
-[1518-04-07 00:14] falls asleep
-[1518-09-05 23:50] Guard #3559 begins shift
-[1518-03-31 23:58] Guard #3203 begins shift
-[1518-07-24 00:03] Guard #823 begins shift
-[1518-06-07 00:34] wakes up
-[1518-05-15 00:19] falls asleep
-[1518-04-09 00:05] falls asleep
-[1518-07-30 00:06] falls asleep
-[1518-10-17 00:01] Guard #3203 begins shift
-[1518-06-19 00:45] falls asleep
-[1518-05-16 00:20] falls asleep
-[1518-08-22 00:33] wakes up
-[1518-06-08 00:14] falls asleep
-[1518-11-10 00:35] wakes up
-[1518-08-19 00:50] wakes up
-[1518-03-28 00:03] Guard #241 begins shift
-[1518-07-23 00:04] Guard #2617 begins shift
-[1518-06-13 00:26] falls asleep
-[1518-05-08 23:56] Guard #2099 begins shift
-[1518-03-22 23:50] Guard #3361 begins shift
-[1518-08-21 23:58] Guard #313 begins shift
-[1518-05-18 00:40] wakes up
-[1518-04-29 00:01] falls asleep
-[1518-08-08 00:54] wakes up
-[1518-11-01 00:53] falls asleep
-[1518-10-06 00:36] falls asleep
-[1518-03-19 00:19] wakes up
-[1518-05-28 00:11] falls asleep
-[1518-04-03 00:04] Guard #313 begins shift
-[1518-11-02 23:59] Guard #73 begins shift
-[1518-03-24 00:42] wakes up
-[1518-05-31 00:33] falls asleep
-[1518-05-17 00:23] wakes up
-[1518-08-08 00:41] falls asleep
-[1518-09-22 00:08] falls asleep
-[1518-11-01 00:31] wakes up
-[1518-11-06 00:22] wakes up
-[1518-04-08 23:51] Guard #3559 begins shift
-[1518-11-11 00:39] wakes up
-[1518-08-01 23:56] Guard #1033 begins shift
-[1518-05-05 23:58] Guard #3499 begins shift
-[1518-10-11 23:58] Guard #2099 begins shift
-[1518-06-08 00:54] wakes up
-[1518-05-23 00:21] falls asleep
-[1518-04-04 00:22] falls asleep
-[1518-05-26 00:02] Guard #919 begins shift
-[1518-04-14 00:51] wakes up
-[1518-07-20 00:13] falls asleep
-[1518-07-07 00:02] Guard #2099 begins shift
-[1518-10-18 00:15] falls asleep
-[1518-09-09 23:58] Guard #241 begins shift
-[1518-07-31 00:41] falls asleep
-[1518-05-26 00:46] wakes up
-[1518-11-09 00:39] wakes up
-[1518-09-02 00:27] falls asleep
-[1518-10-31 00:49] falls asleep
-[1518-06-30 00:56] falls asleep
-[1518-08-07 00:55] wakes up
-[1518-06-06 23:59] Guard #3499 begins shift
-[1518-03-24 00:58] wakes up
-[1518-06-11 00:02] Guard #919 begins shift
-[1518-06-11 00:14] falls asleep
-[1518-07-17 00:41] wakes up
-[1518-05-27 00:00] Guard #3499 begins shift
-[1518-11-19 00:02] Guard #3109 begins shift
-[1518-09-17 00:21] falls asleep
-[1518-11-03 00:53] falls asleep
-[1518-03-24 00:51] falls asleep
-[1518-04-30 00:02] Guard #1499 begins shift
-[1518-07-22 00:01] falls asleep
-[1518-03-25 00:00] falls asleep
-[1518-06-05 00:43] wakes up
-[1518-06-05 00:56] falls asleep
-[1518-08-24 00:35] wakes up
-[1518-06-22 00:02] Guard #2411 begins shift
-[1518-09-22 23:59] Guard #2657 begins shift
-[1518-06-14 00:48] wakes up
-[1518-07-09 00:00] Guard #3361 begins shift
-[1518-10-20 00:53] wakes up
-[1518-05-03 23:56] Guard #3559 begins shift
-[1518-10-09 00:10] falls asleep
-[1518-08-25 00:31] wakes up
-[1518-06-10 00:57] wakes up
-[1518-07-05 23:58] Guard #3361 begins shift
-[1518-04-05 00:26] falls asleep
-[1518-10-07 00:00] Guard #1811 begins shift
-[1518-05-16 00:58] wakes up
-[1518-08-25 00:11] falls asleep
-[1518-04-24 00:58] wakes up
-[1518-03-12 00:29] wakes up
-[1518-05-07 00:35] wakes up
-[1518-08-14 00:39] wakes up
-[1518-08-16 00:36] wakes up
-[1518-07-10 00:22] falls asleep
-[1518-10-31 00:09] falls asleep
-[1518-04-08 00:03] Guard #2411 begins shift
-[1518-10-01 00:05] falls asleep
-[1518-10-15 00:46] falls asleep
-[1518-09-09 00:30] wakes up
-[1518-03-14 00:50] wakes up
-[1518-08-17 00:02] falls asleep
-[1518-08-03 00:59] wakes up
-[1518-03-26 00:56] wakes up
-[1518-10-28 00:08] falls asleep
-[1518-07-23 00:52] wakes up
-[1518-05-15 00:49] wakes up
-[1518-10-21 00:15] falls asleep
-[1518-06-17 00:00] Guard #983 begins shift
-[1518-05-07 00:52] falls asleep
-[1518-08-31 00:58] wakes up
-[1518-07-04 23:59] Guard #2099 begins shift
-[1518-04-09 00:46] wakes up
-[1518-06-03 00:36] falls asleep
-[1518-05-06 00:06] falls asleep
-[1518-04-07 00:01] Guard #1291 begins shift
-[1518-06-17 00:15] falls asleep
-[1518-09-24 00:53] wakes up
-[1518-09-13 00:01] Guard #2099 begins shift
-[1518-07-14 00:04] Guard #2579 begins shift
-[1518-06-28 00:20] falls asleep
-[1518-06-27 00:58] wakes up
-[1518-05-02 00:19] falls asleep
-[1518-04-19 00:44] falls asleep
-[1518-08-09 00:45] wakes up
-[1518-04-27 00:44] wakes up
-[1518-07-15 00:53] wakes up
-[1518-10-06 00:55] wakes up
-[1518-09-08 00:25] falls asleep
-[1518-06-03 00:55] falls asleep
-[1518-05-28 00:43] wakes up
-[1518-07-11 00:04] Guard #3559 begins shift
-[1518-07-09 23:59] Guard #3499 begins shift
-[1518-09-18 00:57] wakes up
-[1518-11-14 00:01] falls asleep
-[1518-10-08 23:58] Guard #1811 begins shift
-[1518-04-12 00:50] wakes up
-[1518-04-08 00:28] wakes up
-[1518-04-10 00:59] wakes up
-[1518-10-29 00:16] falls asleep
-[1518-11-07 00:29] wakes up
-[1518-08-13 23:50] Guard #2099 begins shift
-[1518-10-10 00:49] wakes up
-[1518-06-02 00:09] falls asleep
-[1518-03-25 00:30] wakes up
-[1518-09-04 23:46] Guard #2657 begins shift
-[1518-03-30 23:58] Guard #1867 begins shift
-[1518-05-03 00:04] falls asleep
-[1518-11-19 00:50] falls asleep
-[1518-07-08 00:37] wakes up
-[1518-07-16 00:20] wakes up
-[1518-08-27 00:31] falls asleep
-[1518-04-15 00:23] wakes up
-[1518-08-05 00:27] wakes up
-[1518-07-05 00:13] wakes up
-[1518-08-06 00:42] wakes up
-[1518-05-28 00:03] Guard #3449 begins shift
-[1518-04-14 00:13] falls asleep
-[1518-10-16 00:45] falls asleep
-[1518-07-29 00:00] Guard #1811 begins shift
-[1518-05-24 00:57] wakes up
-[1518-06-01 00:48] wakes up
-[1518-09-12 00:29] wakes up
-[1518-04-06 00:15] falls asleep
-[1518-06-06 00:03] Guard #2657 begins shift
-[1518-07-28 00:41] wakes up
-[1518-09-30 00:39] falls asleep
-[1518-06-30 00:59] wakes up
-[1518-09-01 00:51] wakes up
-[1518-08-04 00:59] wakes up
-[1518-03-22 00:46] falls asleep
-[1518-05-13 00:00] Guard #1499 begins shift
-[1518-07-08 00:36] falls asleep
-[1518-04-09 00:45] falls asleep
-[1518-05-01 00:01] Guard #1499 begins shift
-[1518-09-22 00:03] Guard #3559 begins shift
-[1518-05-12 00:54] wakes up
-[1518-11-04 00:57] wakes up
-[1518-04-21 00:00] falls asleep
-[1518-11-19 23:56] Guard #2617 begins shift
-[1518-07-16 00:42] falls asleep
-[1518-04-10 00:00] Guard #1811 begins shift
-[1518-11-10 00:34] falls asleep
-[1518-08-18 00:01] Guard #241 begins shift
-[1518-08-04 00:45] wakes up
-[1518-11-21 00:36] falls asleep
-[1518-06-07 00:15] falls asleep
-[1518-10-28 00:36] wakes up
-[1518-07-15 23:57] Guard #2657 begins shift
-[1518-06-29 00:46] falls asleep
-[1518-03-17 00:54] wakes up
-[1518-08-22 00:12] wakes up
-[1518-11-20 00:26] wakes up
-[1518-10-02 00:23] wakes up
-[1518-07-26 00:43] wakes up
-[1518-04-23 00:57] wakes up
-[1518-04-22 23:57] Guard #2099 begins shift
-[1518-03-21 00:46] falls asleep
-[1518-04-04 00:30] wakes up
-[1518-04-20 00:45] wakes up
-[1518-08-31 00:47] falls asleep
-[1518-09-16 00:34] wakes up
-[1518-10-05 00:03] Guard #3499 begins shift
-[1518-04-11 23:57] Guard #3499 begins shift
-[1518-08-29 00:29] wakes up
-[1518-10-13 00:43] falls asleep
-[1518-07-12 00:29] falls asleep
-[1518-05-08 00:55] wakes up
-[1518-03-29 00:01] Guard #2579 begins shift
-[1518-10-31 00:56] wakes up
-[1518-11-17 00:49] wakes up
-[1518-06-03 23:46] Guard #313 begins shift
-[1518-05-02 00:48] wakes up
-[1518-05-17 23:58] Guard #3499 begins shift
-[1518-03-27 00:30] wakes up
-[1518-09-21 00:02] Guard #2099 begins shift
-[1518-05-22 00:30] wakes up
-[1518-10-04 00:40] wakes up
-[1518-03-23 00:49] wakes up
-[1518-08-16 00:00] Guard #3361 begins shift
-[1518-10-09 00:59] wakes up
-[1518-03-30 00:48] wakes up
-[1518-11-13 23:49] Guard #1811 begins shift
-[1518-06-28 23:59] Guard #2657 begins shift
-[1518-04-22 00:11] falls asleep
-[1518-05-17 00:15] falls asleep
-[1518-09-28 23:56] Guard #1811 begins shift
-[1518-07-15 00:59] wakes up
-[1518-09-26 23:59] Guard #3109 begins shift
-[1518-03-14 00:56] falls asleep
-[1518-08-06 00:11] wakes up
-[1518-03-23 00:28] wakes up
-[1518-11-07 23:52] Guard #3559 begins shift
-[1518-10-14 00:44] wakes up
-[1518-04-16 00:59] wakes up
-[1518-07-20 00:00] Guard #241 begins shift
-[1518-09-20 00:58] wakes up
-[1518-05-01 00:49] falls asleep
-[1518-05-15 00:03] Guard #241 begins shift
-[1518-10-24 00:29] wakes up
-[1518-10-03 23:59] Guard #2657 begins shift
-[1518-10-24 00:47] wakes up
-[1518-03-23 00:00] falls asleep
-[1518-10-11 00:41] wakes up
-[1518-08-28 00:03] Guard #983 begins shift
-[1518-10-04 00:49] falls asleep
-[1518-09-05 00:51] wakes up
-[1518-04-03 00:58] wakes up
-[1518-05-24 00:17] falls asleep
-[1518-06-16 00:56] wakes up
-[1518-06-20 23:57] Guard #3361 begins shift
-[1518-06-27 00:37] wakes up
-[1518-04-11 00:53] wakes up
-[1518-03-24 00:41] falls asleep
-[1518-04-05 00:01] Guard #2099 begins shift
-[1518-06-14 00:00] Guard #3499 begins shift
-[1518-03-27 00:44] wakes up
-[1518-11-07 00:01] Guard #73 begins shift
-[1518-09-25 00:55] wakes up
-[1518-04-24 00:34] falls asleep
-[1518-06-15 00:03] falls asleep
-[1518-08-25 00:22] falls asleep
-[1518-04-20 00:28] falls asleep
-[1518-10-30 00:05] falls asleep
-[1518-10-19 00:21] falls asleep
-[1518-10-03 00:39] falls asleep
-[1518-07-01 00:05] falls asleep
-[1518-06-30 00:52] wakes up
-[1518-04-26 00:40] wakes up
-[1518-10-20 00:04] Guard #3203 begins shift
-[1518-03-19 00:04] falls asleep
-[1518-04-07 00:40] wakes up
-[1518-05-05 00:55] wakes up
-[1518-05-22 00:04] Guard #313 begins shift
-[1518-06-08 23:47] Guard #241 begins shift
-[1518-08-17 00:28] wakes up
-[1518-06-17 00:25] wakes up
-[1518-03-12 00:35] falls asleep
-[1518-07-30 00:04] Guard #3109 begins shift
-[1518-03-14 00:57] wakes up
-[1518-07-11 00:56] wakes up
-[1518-04-21 23:56] Guard #1811 begins shift
-[1518-08-27 00:36] wakes up
-[1518-06-09 00:53] wakes up
-[1518-08-08 00:04] Guard #241 begins shift
-[1518-03-22 00:58] wakes up
-[1518-04-19 00:58] wakes up
-[1518-04-18 00:00] Guard #1091 begins shift
-[1518-09-28 00:48] wakes up
-[1518-08-01 00:52] wakes up
-[1518-03-19 00:29] falls asleep
-[1518-04-04 00:02] Guard #983 begins shift
-[1518-09-22 00:19] wakes up
-[1518-06-15 23:59] Guard #1499 begins shift
-[1518-05-10 00:29] wakes up
-[1518-06-18 00:28] falls asleep
-[1518-03-20 00:59] wakes up
-[1518-08-26 00:15] falls asleep
-[1518-10-24 00:01] Guard #3109 begins shift
-[1518-07-15 00:57] falls asleep
-[1518-06-05 00:59] wakes up
-[1518-11-02 00:14] falls asleep
-[1518-05-26 00:11] wakes up
-[1518-11-04 23:56] Guard #3499 begins shift
-[1518-10-08 00:53] falls asleep
-[1518-09-25 00:25] falls asleep
-[1518-09-25 23:56] Guard #3361 begins shift
-[1518-06-24 00:04] Guard #1033 begins shift
-[1518-05-07 00:04] Guard #1091 begins shift
-[1518-08-18 00:29] falls asleep
-[1518-09-13 00:47] falls asleep
-[1518-04-02 00:53] wakes up
-[1518-11-08 00:51] wakes up
-[1518-09-02 23:56] Guard #3203 begins shift
-[1518-08-06 00:55] wakes up
-[1518-10-01 23:58] Guard #2411 begins shift
-[1518-06-29 23:59] Guard #1811 begins shift
-[1518-05-07 00:48] wakes up
-[1518-11-12 00:37] falls asleep
-[1518-10-16 00:00] Guard #2657 begins shift
-[1518-07-07 00:29] falls asleep
-[1518-07-17 00:45] falls asleep
-[1518-11-01 00:57] wakes up
-[1518-10-26 00:02] Guard #1291 begins shift
-[1518-11-06 00:04] falls asleep
-[1518-09-29 00:22] falls asleep
-[1518-08-20 00:03] Guard #3499 begins shift
-[1518-07-03 00:47] wakes up
-[1518-05-01 00:25] wakes up
-[1518-08-10 00:49] wakes up
-[1518-03-13 00:55] wakes up
-[1518-08-13 00:59] wakes up
-[1518-06-08 00:53] falls asleep
-[1518-07-17 00:06] falls asleep
-[1518-06-25 00:41] wakes up
-[1518-10-31 00:11] wakes up
-[1518-05-05 00:32] falls asleep
-[1518-06-23 00:40] wakes up
-[1518-05-13 00:33] wakes up
-[1518-04-17 00:53] falls asleep
-[1518-05-01 00:09] falls asleep
-[1518-03-14 00:22] falls asleep
-[1518-10-27 00:01] Guard #1291 begins shift
-[1518-06-04 00:01] falls asleep
-[1518-10-16 00:50] wakes up
-[1518-07-08 00:45] falls asleep
-[1518-04-12 00:37] falls asleep
-[1518-10-18 00:38] wakes up
-[1518-09-14 00:10] falls asleep
-[1518-07-01 00:40] falls asleep
-[1518-11-08 00:20] falls asleep
-[1518-03-30 00:59] wakes up
-[1518-06-12 00:00] Guard #3499 begins shift
-[1518-08-27 00:00] Guard #1291 begins shift
-[1518-03-20 00:37] falls asleep
-[1518-09-30 00:44] wakes up
-[1518-09-20 00:43] wakes up
-[1518-10-27 00:08] falls asleep
-[1518-09-09 00:02] Guard #1091 begins shift
-[1518-08-13 00:21] falls asleep
-[1518-04-21 00:49] wakes up
-[1518-11-16 23:56] Guard #919 begins shift
-[1518-07-22 00:47] wakes up
-[1518-10-03 00:50] falls asleep
-[1518-09-26 00:50] wakes up
-[1518-06-08 00:02] Guard #1811 begins shift
-[1518-05-22 23:59] Guard #2617 begins shift
-[1518-07-31 00:34] wakes up
-[1518-10-22 23:52] Guard #313 begins shift
-[1518-08-03 00:49] falls asleep
-[1518-10-24 00:43] falls asleep
-[1518-05-08 00:01] Guard #1033 begins shift
-[1518-10-19 00:48] wakes up
-[1518-10-13 00:04] Guard #1091 begins shift
-[1518-07-18 00:18] wakes up
-[1518-10-20 00:36] wakes up
-[1518-10-04 00:33] falls asleep
-[1518-05-08 00:11] wakes up
-[1518-05-19 00:04] falls asleep
-[1518-04-06 00:55] wakes up
-[1518-08-10 00:38] wakes up
-[1518-06-10 00:34] falls asleep
-[1518-07-15 00:38] falls asleep
-[1518-08-18 00:35] wakes up
-[1518-03-27 00:18] falls asleep
-[1518-08-10 00:45] falls asleep
-[1518-07-30 00:22] wakes up
-[1518-06-22 23:59] Guard #2657 begins shift
-[1518-07-11 23:57] Guard #2617 begins shift
-[1518-10-15 00:47] wakes up
-[1518-08-25 00:02] Guard #1291 begins shift
-[1518-06-24 00:12] falls asleep
-[1518-03-16 23:57] Guard #2657 begins shift
-[1518-10-18 00:02] Guard #2657 begins shift
-[1518-05-11 00:58] wakes up
-[1518-03-30 00:37] falls asleep
-[1518-08-21 00:53] wakes up
-[1518-07-09 00:57] wakes up
-[1518-08-07 00:00] Guard #1499 begins shift
-[1518-09-02 00:56] falls asleep
-[1518-10-14 23:56] Guard #2099 begins shift
-[1518-09-19 00:48] wakes up
-[1518-05-30 00:04] Guard #1499 begins shift
-[1518-11-11 00:04] falls asleep
-[1518-03-21 00:57] wakes up
-[1518-05-20 23:57] Guard #1811 begins shift
-[1518-10-23 00:08] wakes up
-[1518-07-02 23:57] Guard #1811 begins shift
-[1518-10-28 23:58] Guard #241 begins shift
-[1518-05-12 00:05] falls asleep
-[1518-11-18 00:26] falls asleep
-[1518-03-21 00:27] wakes up
-[1518-07-29 00:50] wakes up
-[1518-10-24 23:56] Guard #2657 begins shift
-[1518-05-14 00:37] wakes up
-[1518-08-04 00:00] Guard #1033 begins shift
-[1518-06-20 00:52] wakes up
-[1518-05-10 00:00] Guard #73 begins shift
-[1518-08-19 00:02] Guard #1033 begins shift
-[1518-03-16 00:03] falls asleep
-[1518-03-12 00:03] Guard #2657 begins shift
-[1518-06-22 00:48] wakes up
-[1518-08-22 00:31] falls asleep
-[1518-05-11 00:02] Guard #1811 begins shift
-[1518-03-19 23:58] Guard #241 begins shift
-[1518-04-10 00:53] falls asleep
-[1518-10-21 23:57] Guard #919 begins shift
-[1518-06-28 00:04] Guard #2657 begins shift
-[1518-11-17 00:56] falls asleep
-[1518-07-09 00:45] wakes up
-[1518-06-11 00:44] wakes up
-[1518-04-10 00:48] wakes up
-[1518-11-01 00:37] falls asleep
-[1518-05-20 00:36] falls asleep
-[1518-05-23 23:56] Guard #1811 begins shift
-[1518-04-18 23:56] Guard #3109 begins shift
-[1518-05-31 00:02] Guard #2657 begins shift
-[1518-05-17 00:00] Guard #241 begins shift
-[1518-05-28 00:52] falls asleep
-[1518-10-30 00:07] wakes up
-[1518-08-30 00:26] falls asleep
-[1518-03-17 23:57] Guard #241 begins shift
-[1518-07-19 00:43] wakes up
-[1518-08-09 00:03] Guard #3109 begins shift
-[1518-09-11 00:41] wakes up
-[1518-07-27 23:50] Guard #2099 begins shift
-[1518-10-17 00:26] falls asleep
-[1518-05-30 00:14] falls asleep
-[1518-10-12 00:26] falls asleep
-[1518-06-16 00:44] falls asleep
-[1518-05-20 00:02] Guard #1033 begins shift
-[1518-06-16 00:24] falls asleep
-[1518-06-19 23:57] Guard #2411 begins shift
-[1518-10-27 00:53] wakes up
-[1518-06-10 00:53] falls asleep
-[1518-05-05 00:43] falls asleep
-[1518-09-04 00:03] Guard #2099 begins shift
-[1518-05-23 00:14] wakes up
-[1518-09-08 00:04] Guard #1291 begins shift
-[1518-05-03 00:52] wakes up
-[1518-07-25 00:03] Guard #1033 begins shift
-[1518-07-08 00:59] wakes up
-[1518-10-25 00:54] wakes up
-[1518-11-08 00:00] falls asleep
-[1518-06-20 00:47] falls asleep
-[1518-05-08 00:49] wakes up
-[1518-11-15 23:59] Guard #3109 begins shift
-[1518-06-18 00:55] wakes up
-[1518-03-11 00:04] Guard #1499 begins shift
-[1518-08-29 00:44] falls asleep
-[1518-05-16 00:28] falls asleep
-[1518-11-03 23:56] Guard #1291 begins shift
-[1518-04-26 00:18] falls asleep
-[1518-07-21 00:00] Guard #919 begins shift
-[1518-08-21 00:04] falls asleep
-[1518-10-14 00:05] falls asleep
-[1518-06-19 00:57] wakes up
-[1518-08-27 00:54] wakes up
-[1518-09-13 23:56] Guard #1499 begins shift
-[1518-08-20 23:48] Guard #3559 begins shift
-[1518-09-30 23:50] Guard #313 begins shift
-[1518-08-20 00:37] falls asleep
-[1518-07-18 00:03] falls asleep
-[1518-04-23 00:17] wakes up
-[1518-05-14 00:17] falls asleep
-[1518-06-20 00:27] falls asleep
-[1518-06-01 23:59] Guard #241 begins shift
-[1518-06-05 00:52] wakes up
-[1518-06-26 00:37] wakes up
-[1518-05-28 00:14] wakes up
-[1518-11-12 23:49] Guard #3449 begins shift
-[1518-11-10 00:53] wakes up
-[1518-06-05 00:00] Guard #983 begins shift
-[1518-10-26 00:45] wakes up
-[1518-11-03 00:55] wakes up
-[1518-09-10 00:31] falls asleep
-[1518-05-31 00:56] wakes up
-[1518-11-14 00:31] wakes up
-[1518-06-20 00:43] wakes up
-[1518-06-09 00:45] falls asleep
-[1518-10-18 00:48] wakes up
-[1518-07-30 00:43] falls asleep
-[1518-08-12 00:04] Guard #2657 begins shift
-[1518-09-15 00:59] wakes up
-[1518-05-07 00:16] falls asleep
-[1518-09-14 00:56] wakes up
-[1518-08-25 00:45] wakes up
-[1518-04-07 00:55] falls asleep
-[1518-07-13 00:32] wakes up
-[1518-03-24 00:28] wakes up
-[1518-11-22 00:40] wakes up
-[1518-09-12 00:59] wakes up
-[1518-03-12 00:47] wakes up
-[1518-09-17 23:59] Guard #1291 begins shift
-[1518-05-26 00:40] falls asleep
-[1518-04-07 00:57] wakes up
-[1518-03-17 00:48] falls asleep
-[1518-09-10 00:56] wakes up
-[1518-06-16 00:29] wakes up
-[1518-09-04 00:41] wakes up
-[1518-05-02 23:53] Guard #241 begins shift
-[1518-08-17 00:43] falls asleep
-[1518-09-17 00:59] wakes up
-[1518-09-07 00:01] Guard #3499 begins shift
-[1518-10-11 00:29] falls asleep
-[1518-05-18 23:53] Guard #3109 begins shift
-[1518-07-02 00:00] falls asleep
-[1518-04-03 00:06] falls asleep
-[1518-05-04 23:58] Guard #2657 begins shift
-[1518-06-03 00:48] wakes up
-[1518-06-10 00:48] wakes up
-[1518-09-09 00:06] falls asleep
-[1518-06-04 00:32] wakes up
-[1518-08-19 00:32] falls asleep
-[1518-06-17 00:31] falls asleep
-[1518-11-17 23:59] Guard #1811 begins shift
-[1518-04-27 00:43] falls asleep
-[1518-05-26 00:06] falls asleep
-[1518-07-03 00:07] falls asleep
-[1518-05-16 00:00] Guard #983 begins shift
-[1518-07-26 23:57] Guard #1867 begins shift
-[1518-10-22 00:36] wakes up
-[1518-09-10 00:39] falls asleep
-[1518-05-20 00:59] wakes up
-[1518-09-26 00:20] falls asleep
-[1518-05-07 00:38] falls asleep
-[1518-10-05 00:53] wakes up
-[1518-07-05 00:39] falls asleep
-[1518-11-20 00:09] falls asleep
-[1518-03-19 00:34] wakes up
-[1518-11-14 23:47] Guard #1291 begins shift
-[1518-06-19 00:14] falls asleep
-[1518-09-15 23:58] Guard #2617 begins shift
-[1518-08-28 00:46] wakes up
-[1518-07-28 00:04] falls asleep
-[1518-11-19 00:57] wakes up
-[1518-04-15 00:17] falls asleep
-[1518-05-08 00:52] falls asleep
-[1518-10-03 00:32] wakes up
-[1518-07-05 00:51] wakes up
-[1518-06-09 00:16] wakes up
-[1518-04-28 00:43] wakes up
-[1518-07-09 00:38] falls asleep
diff --git a/src/4/solve.py b/src/4/solve.py deleted file mode 100644 index 72c595a..0000000 --- a/src/4/solve.py +++ /dev/null @@ -1,109 +0,0 @@ -from sys import argv as args
-
-file = open("input.txt")
-data = [x for x in file.readlines()]
-file.close()
-
-def parse_entry(l):
- split = l.split(" ")
- date = " ".join(split[:2])
- time = int(split[1].split(":")[1].replace("]",""))
- if split[2] == "Guard":
- awake = None
- id = int(split[3].replace("#",""))
- else:
- id = 0
- awake = (True if split[2] == "wakes" else False)
- return time, id, awake, date
-
-class guard:
- def __init__(self, _id):
- self.shifts = list()
- self.id = _id
- self.awake = None
-
-def gen_shiftmap():
- shiftdata = [parse_entry(l) for l in data]
- shiftdata = sorted(shiftdata, key=lambda x: x[3]) #sort by date
-
- shiftmap = dict()
- ltime = shiftdata[0][0]
- cgid = shiftdata[0][1]
- for i in range(len(shiftdata)):
- entry = shiftdata[i]
- ctime = entry[0]
- gid = entry[1]
- cawake = entry[2]
-
- if gid != 0: # new shift
- if gid not in shiftmap:
- shiftmap[gid] = guard(gid)
- #if i != 0 and not shiftmap[cgid].awake: # not first
- # shiftmap[cgid].shifts.append((ltime, timedif(ctime, ltime), None))
- #ltime = ctime
- cgid = gid
- else:
- g = shiftmap[cgid]
- if cawake:
- if not g.awake:
- shiftmap[cgid].shifts.append((ltime, ctime - ltime))
- else:
- ltime = ctime
- g.awake = cawake
-
- return shiftmap
-
-def solve1():
- shiftmap = gen_shiftmap()
-
- maxsleep = None
- mg = None
- for g in shiftmap.values():
- minslept = 0
- for t in g.shifts:
- minslept += t[1]
- if not maxsleep or minslept > maxsleep:
- maxsleep = minslept
- mg = g
-
-
- timel = [0 for x in range(60)]
-
- for t in mg.shifts:
- for i in range(t[0], t[0] + t[1]):
- timel[(i-1)%60] += 1
-
- minute = timel.index(max(timel))+1
- print(minute * mg.id)
-
-def solve2():
- shiftmap = gen_shiftmap()
- timetables = dict()
-
- for g in shiftmap.values():
- timetables[g.id] = [0 for x in range(60)]
- for t in g.shifts:
- for i in range(t[0], t[0] + t[1]):
- timetables[g.id][i] += 1
-
- max = None
- mmin = None
- mgid = None
- for i in range(60):
- for gid in timetables:
- t = timetables[gid]
- if max is None or t[i] > max:
- max = t[i]
- mmin = i
- mgid = gid
-
- print(mgid * mmin)
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/5/input.txt b/src/5/input.txt deleted file mode 100644 index 1b4b16c..0000000 --- a/src/5/input.txt +++ /dev/null @@ -1 +0,0 @@ -HKkOohaAXxHrjUbByYuFfJMmOoZdDWVGgvwzZzUuUrRueERkIiKhnNpPdDXTtxMmwLlWGBbgTtoOmHOofSsFhrwWRWwytTwgGrRWYdcCUYyuqQHhpPiILPaApeElEeaAjJVvoiICIicdDOmnNMNZznoOgJmMFfjcCCcxXAaWiIwyYWwaAakBbLlJRrBbbBQqXrRNnHhcvVCxZzjKnrRNsSgGvVMmrqQWaAXxwRaAbHhBLlfkKCmMchiIHwRZJUujVvMmzrPsSpWZyYAaznHhNlLTtfSssSFuYjJyUWVvLlwqWZzqdDvVQNDdnzZGzZFqQfXxoOuUCcgRrSsHhbFfJPpjBdDyllLLdOoBXxtTqQRdDrrRbAalLyYvVqQYoOyDrRfFfFKZzkXxxAyAGgRNnrrRbJjzZWwBPpzZnNaYvVUsJjSRgHeEEehwWGrvVuZzfSsJjFaoOXesSDdHhwWEHwWMKkmkKeEABZzbahtTHhMpPxxXbTttTBhHXVvlLNngGyYvVpXxERrewiIVYyvWzTtEesuaAXxUUuuUSPpKqQwWkNnrBbRrRXVZzvjJAaIluULJjixoPpVvDdrQqRzfpPHRrhqQISsirwWNYynaARrzxXpPxXuURUulLrSswkKWLDdRFfrrRssShtTHNnkKYYylLlGieElLIgLqQIiySQsSqmMyYwWyIioOYbBlZMdDmnNzBQqbUfFuCcGYEeIiEeuUOqQoypPnNMmbBgHLlKdDkFqQfEAaeQBbqYbBnNPpyAHkvVfFgKkGIiKhuUFfaMmsLltTLOqQochfFgBbGHiICiIYEeUDdSssSKZzkaAuDdWeEweErRySZlLpoOPzpPjSiIsUuJjJPpkKDdAasxtTXCtTclDddlLDeEgkjJKrhHUBxXbVvDdhHNSsMhHmNnqNnsPpSoOQRrBFBbvKkBbkSsKQeEqqQQyYyYYrRyZPpzDdCNsSnwWGgcqxXCtNnTcOJjqCchHQegGEeEJjSsjdCcOoWwyVvYlLDnsSKnNkNKkQqAaJAaqQYTtDdSsipPItTyRKkrBdDblGWwJjganNABTtbLCcNNndnNDkKdzZDWwzaAZEeUdDzBbZrPpRHKkVDXxdvhoOWhHnNjZzJwkJjyYJjKLpPlvVMmRyCcnNYRrAfFtTbiINOonuUBEenNaCctpPTCTmMaAttrRTrVvCcpPTtRRJjrmMcnNnNnNpPrvrRgGcClUuLjJQqfkKxXWmXxMrkKIDdiRwFrbBRzYyZVfNnFKWwvVOokdDoUfLleEJjFuUUuNnJjbBEPcCrRkKmMpeEUubBeGgQRrqrhNnxuZzjJUPpcCLzZlXHeEHzfFaAZiNxXnqQEeIiFfIUulLGgTtHhwWhsCiIcgGWbYWwTtyBAfFlLfgZzGFXxGgOolLAaabBbShoODdHAatbUuDdvVTlVvLVvkPeEpKORSsrntTNCJjchKkEbBefFDMmdHhmMHFGgpPnNRrnNDOVkKHhXNnxvPrRMjJmpdDCcAalLEeybBYrQngVvjIiJGcKKEnNtTiTTttIyYejkgkKGKJkhHjvNaAaAnVJkKRriIjJhHvSsVQlLqTMUuitTImyYthIzFfZiyPpYHlgGLWwKCckKkzZbBNniHhwWRrfjJFrRyYtTbBZjQqdDGgTtWwJBbQqPpLbBlNhHnQqjXxJdDjKkpuUPlLAvREeryUurRxXYbGFfPpGgUuoqQNnOYXxHhsSTYhHhHytJbEJjehHBjgGGgsSyykKYYHNnhzZuUzzZRNnfFTtrjJeEZuUcCnvVNoOTtebBMmEcCPbaATzwWZtSOoCcjEeDXxdMcOoyYtTEeXCHhcjJZzUnNeEAadWwIiwWDsnNSupPxKkBbFmMcCiIrQqRygGOTtfOoFTtGgXxEeiILSsloVvJEkKXoOeExejrOoLiIMmUulTGKkOoaAhHCUuKkHhcoGgOTtCciIYyYygVvkKkKDvjJdlnNSceECsLcCDNwWVvnLxdDQqXxUuedDEkKXfFWwLVvlsSdDkKdDvwWMyYJjmPpjJVzZcCIigiIGgoOXpPxdDkKcClLVvpPIPpihHKkIbNnBPqjJQpGglGgnNLZXxziMlkKLsNnSxKwCcWkXpcmcCMCtTxXPoQqiIaiIzZnNAOMmckKCryYRcmMWkKwCzZmPpoOtTqNnxXLIilzpPZbrRJjIiuUBQMXxPPuUpZzpmpPOXxoMoOBHhbgPpGmeECcDdgGYGgiIJjyOomcBbsEeEexWnNlLOowXNntTjJAaqwWdvVtLlOopPeERrmMCcTeFfZbPRrpxyYhHcCWhHwaAhhHHthHTXjJcCsSeSsunNUdnlfqdBbDrRUuQFQqRLIBbiRroOccCkKSsCxXlQkxXLlKqiIsSWwmMrRrRrfiGgIGsSXAaLlsSxgfFpPlDdLxXkKJjFJClLjJcjLKZzkkKMmkYMmyIHhiJjmXszbBenqQJjIiWwNEvVKZzkMmaqQlLRronOoTtNfUuFhDdHbBUFfjJuMhHmvyCcYLoOyYlVxXGifFeEPpIbiIDdSqQsCckKRrAaqSPpsQBjJbEedDgGBYYynOBboNEEeeaqQeEAxXFfaTtFfwWrRAvPNnbRrBDLVvlPpHPpKkhxXpZzpPPjJdGkpPkKKgGgYyMnNerRbnZzqQNwWmMwOoObwxjJXkKxFfavAUuaVQqiIVvhHZzAQouLlKkDTtdJARramMjUxXOqdDjJorJjlLRhkKHOCcsSiIhHfMjJKkmFWxXwzZXtTcCLlWkKBaALlKkotrwWxXAaREeeEgGJpPjCcLlzZAasSiphCECcecPpYypYyJvVjuUfFrGglLMmdDRBNnbmiIpyYPyvcsSCVAaveEFRrbBfnNgDdLIoOUKkuUumMiHhlvVXeEsStTyYxGcdDtBbTUrwUVksvVSKxXvIiuqQoOQqJjWRMaAGOogmrsSRqQFfcCgXxAaPpogYyGJjrRQHhulLUqOGvVPpvVRrFWwfrpfFeIiWwSTRrtsNzeErELleRHhnvUusSVjaAcCJNAaVJzZjvsSoRrORrZoOqSsSoQqfFOmsSbByYRwWMmrMYcCyPpsufFMMjJmldlLDpPPWfUuPPpxXpQvVMmqqSnNsQMmFRrwWwWwzjuUJoAaZzOZpPpPrRMmdfXxFDXJjxfFEeOyJjqQhJQhHQGgcIiCqUCcujJbBqCmPpMdZhHiIeExZzDOodlLHjJfUOoNnLIiIVIiviDduUlAayYWTFftPpwLlCQqPpcLRkSvVsKrdDLlhHgiIDpXxOoPCYyDrRdSscdkmPpMKlgnNnVvNOzZVvJgGTtHhnNjoMmzZdkKDIkKiBvlLVoObGcCRLrgGTiHhtTNnVvYySkKLlsFfItBbYrRyYqQHhOWuUkiUuSRrsIWwcwWHhCGNngCUuSciIJjRrRQqrLlCqbGgbQqWwJjBZztThHRxXrWPeEmMpRBbbGgBIAaiWgqQHhRrIiGjTBbZzZgGdDVvMcqQiICWGgwLlmzgdUTtEeuHhDaAGfoOFFfUHhuSiIsXIZjPpzZJSsoGgQfFqOhHhMmLlUucCHpdDPmMvVmMlLoDhUuHeuUEuUdMmgtIiVrRvjJSsdBYybPtAHpPhMPpmtfFaAHuVvUAagGGIQqilzZLmHhMgCtTmMyYvEXxWwrFeEfeJjEeEdDRsgGSKkgGOoMXxaAXHhxMmMQrRKkMVvaAyYmSsuwWUUuBozZObZmMxXzBbKkqQUuqmOZzdcCDMmBbzZdDpPQqvVTtmcCpIinMJssSSjeERUuCcNnVapPAvqMmglLGSsxNnQFLlzBlQqjJrRfFLekKEdDVvuUNnTtcwiIbBKkmMWgGxFfXkKVvCFfMUumcCTtEeNnSsLlMmWwPpIiPpoZzODmMcXxClLdeEcCLMmQqEmfFwWpPejJlVvLEeUucHhRrCIiJjWwEeUChHcuLDdlxXHhBzLlNniIZLfFldpPDAyYNKknpPNdDUuyzZECcQhHbBqHMEemhFsSfeYuUfMqQmtOFfgGoHhTnNMmFnINniwWaAhXmMuOofeEgyEeoOuUcCYKkOoCtTGgcWkKWwwlQEeXxwoOWdAaPpoAaOwaANoOnNKkiIyYnVvWWmMIZrOowwWWRjJnCDdcNftGgHhFfPsSayYAjJpaAFfHZzrRhzZPijUOouJxXXxXIzZJnNSscCDdNnQqrRYPMSrNWwnNneVuZzUYzzZZQOoFfqQqcCoOnNyLRrlPTtkKXxgFfOOrkKsSRooDRcYypPiDewHoOhyrRiInNUuoOSVioOIRrbBHqQhoOUPyYHhFfpuvpJxXjUTQWwqpPljkKkKJwDdDKkDdlSsoOyYLrCcOoVAagGLgGnWGgwNlzZvCdDcEeqQqQzZWwOoKbBzuUlLZZzTtDkKdxXbBcCCcQqiuUUucCIKkeEZWATtZzawmVvBtTLhgGUuyzZYgGHDdlQzZqHhYzZtEOoVdDvKdDdDkeTQqysSpPOVPRrNKkESsikKuUCGgZmuIiKsSkuiBbISsyYvVXxEqQNnEwWOJjoRresvVlvVGgNYoOKkykKQqZznqQLmzZpPMkEeOpPUAaUuueEANnbQTtqtjJTBndDNOFfaASsrbBRbBPpoFsSfEetQqTUueEDAnNaTtIiiISLGglhHZzjJZgdDDdGzWwZwDdWtTtoOBbTagDdOoKCcuUkGAoOgGdDsSooWzXxZAoOaWUuwzgprRPSmMdDJjZbBzNfIiFpPfWgGwzZcbbBqQBzJjTtZrSfnAaNtTtTJNnlLzRKkjJVsSOoWwRrvhBbHXOorRxiIsRrmMSwWJxyYAaDxXuFfpPUkTtBbKhjBueEUbcChoOHCJjcSkGgKsJoOosSBbNOonBbAHhaOnNLrRlYnNJjyDdsdGgDoORsSZhHbfFBGgRZzvVrcCMmzokKOwIQqjRrJgGEebYxXSsyBiHiIqCcQJPwHKuUQqkPpPeEphDuNnrRMmUdQqvVcCWwWzZOoOYylLopjJTiItQgIatTtDdTKkAYyiNngUuGgLlLlMWlqLlcsSKmRGkAaQqKuQYyqpPuUXxNnQqHhvVlLuUOoFfMfRYJjAaHhyJjDVvNnxQqXGgdxIXxiLlWpCcvVKHjJhyYJjbqQNbBOXxoIinJjyYKkamMJjAIWwiGsSgUuKgyYGkBpPbBrRUVtTCcvzZuUDdzQqlpPXxySsIDdfFdiIaAOoWwdDDwWIiYybBmBlEeVzZvsSuUgGwWMMmAyYAdDFfatMmTKNnkamLPHhpdVvCcDaAaAlLnNuRrUNxXKkTtPpsDNneBmMPpSsblxfDIiscCSdWwXxcWwCFXaALEHhaRkAaRrKyYDHNqQnhVvUFfuTtVvgeEGTLCKkcluUrReEQmMqnNBMCxoDdOXiIUurvVReZzOoGgNnkKEcsDdlYyLkKSlLWjJwPQqpoadDAzZOjtTJdirRjJIDaAvVjuUJTtfctTRrCFOozAauUyYZPpzZeExXxwzZWDddDXVtTvfZziUuIFbGwBoOXxbWzZUlLSfRrFsuNcOoGnNgCcYNZfFZYyzoOznYyMTpPzYyOoKHhIiaAkZTTcCHhFlLVzZvfCJHvVvVSshWwjcPnCcNfFnNiIpoDdOtlLjOobBAknNKIZziVcUuxuUXEeSsUuAlvOoVDdTwhmMaAHINnSLlswWsSYrTtRyKkxXDdijJADnZzNdaWeExEeUuXoOguUrsSqQxUuXAaNndDabBSsAFfoOUuMFfIieEGgmRaIpPWwusSUiqvVpPrRGbiIxJjZzNnXBFSFfscCfMGDdnNgoOjToXxOMmfpbyYzPEqMIiDmmuUMttTCIcCihkoOKHdDcBVvjJYyzZeEYSaAeEsWwjJdDlLZTvzZVtnNTfhHJjFOoPpdhAaGgHtqQTHhiIsYnOoqRrGgXxXmBbEYyeUlLuBPpbnNGgMfOoFOodoHhbiWwIBSsUuOSsfGgFFfFlLfVvZSszDWwqWTtwljJFDhTtfFBboAaAlMmQqLkiqQunXxNUOobBIivQqQzZqOoIiyAaulLHjJhUJjlLlWHUucChwtTsgGSqXlLxHhQqQaASsgndDRlNnLrNGLZfFiIDQCpPciIcvVCXxVauUxXAvwWNEeoOcNZUpPnshHSNueVRbkKBrTtvcFZzXxBbSjXxJBShywWYruUReENncCfbBLTUOoOoLlkeCcEKucgKsSNVvnooOqBbWCcwWwDfFaFfAuUFfvwWVvVsSWJYytTjZzTtwxXxXqQqQtTdMnVJjbBGgItTiwAaCgaVvABbBGKkgbGGIJjiSswWBUuIiHianaAoYpPyjlLJZXxzdTtDYHMmUuhSdDsnNyueEsScfFeECUVvPuUwzZdtTDzdDygOoGhLlfIiFUUXxumMzTtsSZvVYyuJuUUyYvQqwqQWdKkDVbBoEeBpiIFfPoOFsSfLlVvaATxzZXBbtqmtkKTMOocClLkKdHTtWwqQhKuUFVvXxfTMmHhskAakKKSSstiZGgzoOYyIkDHKWmeEZzoOMgpPYDcCHaAjJOpJjsSdWHhZzTCiIRrKJjkAaefoWXxMHcChyYmOMmowEexXZzOtxLlyEeAaVvLFfYNJrRjnqQyoVvOIiyfFBqQdDphHUdDuQqxduEedVvDwWIiNnUUXmSsUuMTtkKxiIranNAgGESseRtDdUumMfFtOoTylMmLYMrRmRVvMmrEeQdDEdDeiIlLuUqJVpPRHhrvOqHhINnivVqvVQQKkSsdDohHcHxGgxXmMiIXhwowWOWWWLlwLRlEetTBimMIQXxqIibeRrEQiZTtzVvSNnjJmbvVBVvpnNPrsSaAiIJJiIcCrRkXYtKkWHhuUVvvVTpuUbuUyPauPzZpownNhyJjbdDBiIYAbBIoZzOaRvOoVYNmMFfJxXlLjCCcsGgbnyYRrNIdDGgihaEZygJpPjMmOPCcskKCcWwvcCVSpdcrRfwJjlLrRveEVHAaXxRrDkOoKlLCcshHIiByYdoODtBbzZTmkIJjiKPpMSBbPpIiSVdDuhdDDdHQtTqQIiJhHyhHrVvDdYeEepPEUZzuWwCcUWwLouUjJXCcxnTuAOoadhHztOolLXxIHhZzdDiWwQSsoymMYgAcgGCcaAmxAaKkXxFsSfWwGgLFFAXxaknNRrsSSsKkKFfeEpPoFlLfBbGgZzzZbBZzPHpPPpDdhpKkYySRrswOXxsNoOnMmZmMzkEeKRZUAgGajJeEavVAdDGRdHhmMUuUufmCcMzZFfDctxztTZuUXgGzJjZYlKkLOXGDdMHJjHpPHwmMeESODdossbBSCcWhcsXpPaFfMoOmCmLfqQFlZsSxZzlzZdDLxSspcCPmMLlmlLMyYRrCckKxrRXeGnzYyZjGgJvVHhUjJZFfWwzVvVAYyRrdJhttTfFTqQDvVdQPEepkKqUJjucCHKDrkKXxMgmMGmRAEOEPplLoSsHhoOUdyYDEeNnQmMqcCJjuDdXxrEeHGoOVNfFTtsSnNPAPpMyYmFfavVAapHWIiAEeeHpYybNeaAVvPpEQqSskArRXxEeYyoORDZzhizFfZtTIYyHQqeEtTcQqLlOoRrYiZpPBbzOeZzfFWwRrKkjNnJZgGrRYyzIxXrRKiIPpCckTtvZZzvVxXfRrRfZzFNDdtTIiVJhHwWwhHDeiIEKhBQqwWaAajNnbBmMHhYyUusSAaRrrbBIuURrbBFuUizzpYyXyDroOlLRNnYycoLlVvQqhHOkpPUufSsFUZzaAxoyYOYuiImMXxUBbylgGAPpRrzXhHvGgiMwxXgEeKkGpPuSsCcvuCcHhvVXxUaOoAalLgGXaAijJZzhHYyIyYiYYbBTtGgyVvrcCRyDdPpVvSshHMOomRsCPpPpSVBbBbXxvEeJjsckYySsCuUclMmLOoKdDqXoOyXxYJjQqPpxXlLpPwdIkKvVDdeEMmtTiDbPFfpbYyrRrRkKcCDVvAazHhIiyIAaifiIzYyZvVNYynaAvVyVvgGjJpGgjVFfRKmnHhRrNcCADwWdbBaOGPpgSRXxFfgGrsRHhKknNryYPUNnGtgrBdDbPpiIzZAmMdNnDWHhYvVGgyiILMmRkKlSsCYycYBnUulPqQPpCfFcOoSdDelRrLSgGKfxjYyJBbuMmVvsZlLsSXxwLxIDpPdiXIfFizyYZxVWwvtTjJPkKmMpXQqQqUkKuwLLllWqQGRmMrMmkQqiIPpXxHWXxwhKhGgzZHJQqdDjfFhTaNnAgJjdDWwlLNscCSnfFIINnPVoOyYvpxgGYykKlzdaAAsSacadqEdDRmMcEeCreEeyYbtQfZzsgGeXuUxEAaLljEecCSsCcyYxXLBblNqQcCnkKRrxyIigGsSYKOoxYyXkrRdYyDQlLFrWLrUVtcWwChyCxlLfFGlLzOoEeZgBbXcRrueEUMPbBhJjYyXxuUZtEedhMMmAaSCcssSmYaATIilLMLlvVmOotyHeEPpFfiIXxqQdlbBLDhHGTtEwWMmegFVTqQtBDdbyxtpPTbwWAagiIGjUYfFHYyhTtPpbByulKQqkKnbBAafFNAxXUlLuJSsDdoOuZzBmMbfFBbdkxyYiyYIzrenNSTtsVIiFftpPvoOvVpLlpeBtTkKkKbrjJQmIKkUhHcoOwuUngGgGnNdRrRrDPqjJSsQIQqimiIuRrdgxXgUxUvVuXYRiIwWyYBIiCczZrRRrAPHhpBbGgUIisHUuhQYyUFfuqyGggGfNnEwoOZPiIYyYHhypuljJrRQNnRrlLLdqKksSQbWwBSTlLfHhFDINnzLUuYylpCYhHmTJQvkKNnVAVNRTtrsSncoOCrrRBBbAQqanNbRKQqkvoOiIYyLPplyYYsSMevBFTtfbIGgjIiJOrRdDgkKOZzoWwMlLmGiuYyMoOeEAbBZvMvKkVjJmJZzjmMnwxXWpgWnNwGrHhIiwnvVixXanjJVsSFfYyzcIgRrGfaLlASsoOzKFfoOwWkpPuUZFqQiJjMmKDNndyDdYlLSsUPJjpcCuJzoOZQqSuUsjlJjZzWCcwoPZjJzBkMmYyaAcUuCqQdlLTYpyYPytDcmbUfXahjgGJHAxGgFPpQaUijJjJIKkFfuJjHjGgaAJJpPjwWhrRCcLlsrRTfMmYySHhtDdTNxXaTtptTlLfIilbBMmAkKesvVEeIioOSZDuUdtQqTgWlLlqqAMmaQURmlQqupKyYRrkPUvdakgGKADMKrRkxqUuQkKXmIiQqVkZzyHhYMmLlXxBbfFOUuMYsVvSYylLeLWBjJbLOoukKAOzZowWMmaFfUIilVUzZueEIiPoOIPpiptpPrRZzuUTJmUCcFoOwrRWaAfQqQYyqhnNhHBbHXlLxYyzZTpPpTtaAPpDMmiIBWCcuZzXJbBWwjybBYcejdZWwyYhVvbBNnJjyYftLmMyOnNPpopYkrRcdyYDKfFkxuUPVvqQpqNnQhnNpPHxsSXXCgGNntrRgOoEedDyYyWMmFEeqGZlLgGRrzAahJoVvUAaSsbBukphHPHhrRznNDdAadPpDHhzZdbBoOpPbPnNpwWBNXxnDaRrpPLlSstDdIUuiTVvtfhKkHFQHhRYyoOrnNSLltTgGkLnkKNOgDdZvVzGbZQqzBoOEPmMppxXPoDEemMsHhSEeMcHhCqWwQsMVGluUuhHgGUHhZzkcCdcrRZzxXCuUUrRzoEmMDHAajJSsyYOMmmMuUOKHNnhnvWbBwpPOobPefFeVLsSlvQGgqGiIiOlLoHwWhhrRHAaAYjJTtPwWYYyyFEekKfYcfXfFsDdnydDYNyuhxaAjvpPVCdDwOoWPTMfFmtOuJjUwWyPpSZzaWQqIilqQUutTSmMPpXxztIiTzNnJpPjIwWwWfHYkjJFfKBbymCcWIiHhjJwVmMJLljvjJOTSszZivdDVEeHfFLbpPxGgOoXBhzMbQqWwzZeFfvVrNnxXckKCemMEuVvvxbUWwuzZcCpPHRrHhpCrRStTtTDxXYdsSDkKIuUyYNnCczZKPpOokcKETtevvVVaADxfFXTxwWBHhHWwhcCQqbXPpiIRrTtkDzZdKQqhttTTHPJjbpcvVCcsbBSIiToOtVvHeoOEPphiPpoeEOAaQeqsMmaAbFbBmMLdDbBjJiItTGZJjuUzgwkRrkJFzZUufbPpYMTtmAaAmSsUuPmUuMUpoqRrQZzJjYyObBFxYyKkjJwWEeZHhzRrSHiWaaAYyAwdDBBoFfWweEvVSDwWAIiadsOIiFyYYykKrRkKQTtOtdwWDTGgrapqQHfFELlIyoWHhUuYyLWwUVviBrMmClRGguUWmxbBMHhmXmPpMPAaAapUuOokNnLqQloOfFbSsSsIfFiBeEoOOoqNNsSOonMmXgXckKSHhsCUAadAPpEeTtXxAXJjxSsSLlzqvVCcHPpyaAnNYFfYIqsSIiQtKkTTqQYyPmMeECcpIhHnNaBHOHCQfFlLjJqlYyzyYyYfFZCcJwWjLKkDdoOOoQCcqcqQvVejJfFEhyeEYaARrStTsSsgvPpOEeoVGPNnxXzbFfyYnFfDLldHhXxDQqwpPDSsmMMmdEecCTtHhIiHhkKCcUuPpnWCcCXxAqQaJjTmMYGgFgGfiiRrICcIyuLhYkKaAySRrjmBSPiqdDHhQDdTknxXXxNnJEepXxgGTfFnXxcmtxRrTtXsSavIiPpUYyuUTHhyOoYtdDHPKkpmyIUuiYOzZrRonxXNnoONTCctUrUGgJxXfFjaAXxkuUKdyptrkKRTnNnsSxmMIiXCcTvgGVkKIiGEekhHywrRWIdIXFwWkKOhHgXhTteuUHhEcCgGdFfDybyYBNnrNlOUVHhMmQqvdDAaNMmzguURNnrgGWGgwdACcpPavVkgdDZzuUGfFKYyHJzZjubwWKkwXoBhHVGgsFfEeiUKkfMmHhFiTtxXnJjNxKqQkXzJPfCBbcgeAaEjrRCDsSdnNcJHzZDzQKkKSsRXxjJIYMrIiPTZztMmCmMcGgSsCnDUudsSdDjqSskhHoOPNWBbrfrRWqQxXwFPpXxjJxXBzZGyYuUSsNnMmgbHhBbrRjJhHhHSJUHuQTtxYLlyXVqSslJzZyYtTjzZOXIiOnNrlLidgGLTaDFeEfdAfAiIaZCXxKkpPLuUlcvnIFempPKkBLlinsyYSAabTFzZfvHrqFPYyCcpWweEfIpPcUGrRgrRfjJOoFmMWiIGgWwTtwHhAahEOoeVuUAzHhdiraARIiIeumAaMuUKkZzmfXxeEXyYxHfFIEpPrVvIieEhHLldDYtZdfFfFoODhHGgUEeIicFfnNCbPytZzKZzkTYPpWwNPpEGgehDdqlLMmLtyYJUEgGewjJQqKoZAOnbdsFfPpyYRgGXbBDdEepIixmXLqgniiFfIqZHDHOlNnNnWSsDdJFfjPpVvAIiamMQkKoMmOdKkrRDcXebkKBpPrRNMmnJDdjOwSDcTDdtXsSYNnEVvCcoGgHJjDdhHhoOgdDfWwygGYFnRDMOFfoeEYymSiIZBIiIisSvfFVaAxXKkDnNhHxXpLlMCcuUmkVWwEfOxXtTjAbBVvfFNMfHusFqPpEsSeQCfgYyiIXbIiBbRsSYMmsaWdcCeECcJjyuUSsvVIgGuUcyWwYkKwWUuCMaAMmmzZVjfAaUuctTohPRrpbzZBKkpQXvuzbpHvLxYyfZzFvVYeEXxPpyUjOovVTvVxXiItMmbTtLljJfuiiIILYylUtzhrNnNnGwWrRtTPpYzVTuUtQYyJjqTxXtgXxXcGgESoOwWsmMmMnNwiIdDLeENJNUuiBbnNfFYgBbtHhcCrRNjwFfdDWUOZDdzFWwOonqQgGNSsflLExKkZDdmMzuVUSLyYpJBbjbBPlWpjJXlwWLxZzEeoOBwWDRmnrDCcNngLXxlAhSswMmWtnigGIXYXxSpPNbbnNBOoETteqsUqhHQNnAauTCLlSscucCpPNnmMWMdDmTtwUoOaAMeEyYItWwQSsqwBbSKGWwceQDdgGVvMMmvXrREexpOlLtToOoGgEWwezZoOquPYykKpeNOoxgrKkRNYyiIBGpyCchFFkKfBbJjcCYiIyczpdDSfGgwWFWFAapqgGigaRrMfFRyYhHHvVHoJjPpOoOzZDOokkKFftZuUnRreEwWZLALyYdDQqmnTtQqwBbWxXwWAaNipPxXIJBisDfFdgAazZHhdDGgGWqQwHUuGgoOowWOJjZpPAavgGVbuUhHAaBYsEIieMmVXxknClxtqQgSZzPuUpLVWsRrWwWDQOoAavEecEYyYyeOoCYboOfvnNVJYyjzjbqQnEeaANgGikKZzRrmhHMbcsOoSzZROocXxwWCrRQGgkXdlLHKYykhDZqQzMtTtDMXmMOlLaAlLIDdVpPHhLXtTPpwPpeEvpOzwruUfFRHtOfFoTXNnxhTRrtXbBTBdDmsSXTugFfIvvBdDlqfHhBsxXSbjjJJQJjqoOYytTQFNnHaASshSvVfFiXEeLlNnDdLbZzgeHhEAaVfJRifjJcuUkKWlThpntmMTIisScGgCAaavVAJjMmbhkjJifCLuMmzMAaYyehHYyEIiczZCPKpPEEeUuIierHzZvVTYytHvhHWwVUuxzZNnciIlTtAasInjJNOnNTcCcvVVvCdDwMZUuxXcCzwsSgGWhUuHOCcHhlxGRrfFaAPCpzZAfTtJfFgGVVNnvvzKgGkJDkNzZnKzaxAxXayYnNWpPSTSDjJJBbxWOowbnNyYXINniVvBbubBUHOfipAsSTiLenNRIirUfzZFuQqUYtpPWveEZzVWbOoCwWYyTBddDRtTDqQCAuUYfXxtTFDMmfhYyHOBZzOoOdjFSQqCcsfSsQgaARrNngGyYpPpPGQBEUdDuxXLpWKEDdyrRYrRdEeDeIifFxXHJuUjsaALlSCczkdGqQgxPDNnEeCczTttTeEZQqHZIixdDWmcCMQwWqhpPHvZzLqBvVvVVHhWaAFfwqTlLFfyBIYOoCcvzfFiYymYyRrBegGECzZcvVHYyYNnlLhbMbfVvFPpBrRJjOonSGgsMWXWsSzlLBbaARyYQqrRWptTYTtyPjXgGtDAaRSYyIiIkKiMmMmvIWwdDiKiIhmIiMJjEbBekZzuWwmMRQqwDdWqOoQQZzVvvevaAVzpIyYiJjUurnYyTaKxXkKyKkYVvkSKwBpPkKbNnWsbwQfFqJLPplcCZzXEMQqmFJheEjJNlLsynKkCcCZgGzGgcfVhHRRVvEeOopwJrpvZzeCFACdtTpPSsdoOtIiTdDrREFqMmUebWyYMmDCFWwZzdxqQqOoDduUhzRvzZsSVnIiNxXAaGgmGgnNMXosCcShcCHVgGGgWaAEQdDsCtTAacWwMdDAhHifFRrGgSsiVJBOoeECzXxLIimMrbEeKksBlWpinNniCcGeINniclLzZBCFjSQqsaHhLlKdDDyEeYdqPpQGPByzRmMWwEeCccCtTSswWsgOyQDsSQdivVDdIEeykhfFHpsSmuUuyyYYUMjJKkZyHXxFfmNALlpPauUjJVlLhWNyNnYnwMapPvTpBzzZZSsSfFiIskfIiFeFfLABbaLlhHiPpIfFMmIixiIcvuKkOOorQqVvyYjqQEUTPpIZidVvPpWHhXxYzZywIcCGGggGXxAhHaGgvVIGxXrIqwWITtmMDqWvcHhFklLKGrRSxpPXEwJjYymuqQaWOowXGSpPFHeeEmMjmLliDCUucdCBbVvcIXYylSsslcVMmvgXZKkdDpIGgijDdQIiqwqQWfFytTiCpRwWeYBmFjJLmoOtTKwXxXxpPaAZzNNNgGEeqQaGgItRRrrRrTStEeTxrRYwAJjasSVvGXyvdDKkxoOXVYiIeExpVvsQJjeXxJkdAyYZOooOTQqfFlLMerRRtwWpDdCZjNnNwSsRrwzZnSkKsSsNTavjJHhqVvWuWwCJjCcWFfWqEjmFfqHTcCHhIymMVvzJlLeELQZzzrRPpZwVvWScukKnwifbBOZzIizLlQyYCMTMmtmwWqVzIiZEevJfZQzZAwNDdTgDrRdIiGKyRrbBnZzNZzBfFjJQqbjJSxXsuFAafzIiZHhtTzgdzZKhHynwJVvjhHAaRrPpWNFfaAZzJjRHhFUuviHhdbXxHMmaAIXxWQqPoOrVvLnzZNiIlRVdDEepbXaAjJCtTdDcZXxlLPFxXrklQqAgGJCcMmCdDNnNSvXwWIixYTmMnNgCchHgGSdDsPDsSoEeOdZzAaOoGKFJjxpgFaAzygGuUYbBefwWYkwWwsoOSrvvqkMmKjJDrOgJjpeEUuWeEwPvREcRrComMuksZKBgtIiTkCeEPpKDdTtkKhHtTDdgpNnQVRrxDdJjpWOceKdqQtTAdDafKVscCSmCjJgFtTPxQqiIhCrRxXnQzmEhHYQNnWwWTtSFfljaWCcwvxJVvFFfnNZmMzZcCfuUHFtZdmMrRVvFbRrZQXxdDdDqTtNLVvtTSslVNnvOouUeEUhHKkhHCjiGgIJMmkNnFfKoOjfWtkKZzjJTnNFCmjFfVXxmnNMviwUuWsRnCccCjTtwhNpYXDdpPxDeXGfpcIiIuUgGseEjJvVZNuxkKXUhQkKTeECLlaVvfhldDXKLltTdlLDNzZIRrqRrfFQMwbBWkKZzmMmMOoQquBUubUJjmFiINTZhHHjJSAOMfFLlRpPCXxuUVvfFUubkPphHxXviguUxXpPOuUsQrhWSsWwtTrOfFQTtzzihHtfRryYOogGyhHuUYGwWtTgnUuziUuJYRsnEFfOELxXkKQLONnuUoeEiPpIBcCBbSEkKeSsrRvVMOoTtTeaAFeECRxpEehCcCvVceEwWbBAaUrkhHalvarONnoPpdDtTvHhVUuiIUlMRryUGnOoNEePppbQLlFJRrbDrMniIEeCcuUfsUXMmOoQquZzUNnxaQqywWEeYjNnJlAaBbiFfPpulfFValAkOoTtqfrRMFfmFCclbBJezYoOkKRrpPAaZOgGdsBbRrNHgGGnxXXVvdarRRqQqxXRkfedTtBbDEsSSsPiIpZOoTtshHfHhFjDExXYyoOSsHhYutTFhvVpaApOoAaPnNwWyYPwsSbBhfFHWUplLTtOoksuUEoOsGgSeVvhWgGpvVNlLqEeSshLDdxtZzTXZzuUyXxwEGgekKpznNZelfrDZGoOgyNAQzWwZqKksWwILgGeCmMqQlqLlQRrLDxgXxGTtSsQqWMbBDdmXxQqNnwlicgGCIustTlLpDdZzPtimMQeEnNkxXKoOCcwFfWbBsEhHDPpdOohHRrpeYyhLOeLoNnOWiIINnFfxAROjVvoRpPXoPpFdoGzgGXqvzZuxzLlZhUSsIicGhqQRrhrmMLlzZuUwWAaAamRrpPVGggcgzXxHlLGghaAtThQqwWHYyjJZzZzeEbsvOoVxPAfXfFtTOoxlLNoOgtTUbkKrlLAaGJjPSsgGaAJjJKsRvVbtkpPJjnmMlLNinNmtmNIiZzwWnfFtiAaIbwWajJvVhHNkOMWddzZGiIoeZYEeMaTQqIOzocfTfOhEnGgNjJevnNVOooLlHhEDPpwWlIwKGnNgOWkKlrRZlLsvVGgBBbDQgAcazQiIWzoOLHgxbBIZrxXsQqcCAHhaPLyiioOgDHhdsMmnwYKkyEBbeIiWDdjJSeZzzToBtTxqxhtvVwWexXqoOenNasCUTtDfFHhvMsQoPpGIJjigLNuSsFfXxXxUDdWwogGIZvVCrWKTtnQqJjyvmMojFcLlCUgsSGoOfFHmWMZuUlLvVDdBWAXxVvwdBbqSsQnNCczvVZqFfRrPpQOozJgSxQLhsSrRMmEahfGYCcmFfMLrRQpEgVcctTCQhXgrRlLGYydDfJwJKQGzEeZdCcXyaMnNMmmhHeEwWGxDzZYgwWGyBpSlLkKsmaATPZudDvbupPcjJCfrDdCXxgLrxXxXmMhFfHrAaVCcvAbBquqQhHUiImMjQtPpFZwWdDmIlLkKJkqjJfkKdDRrMLlXxefkKTyOTtqnNqqQquLlzZUQPpnKkRruUNeuXWdyKkvwqQZizZITmMKzfEXgGNRlitXQLlaAbuUKeENnfFogiINJjScoHhcCIiRqQpPvgvVDlDdjfRuUKkrDdfFFJLdBbGVpKrewIiYlLskKrznNahHQxdDfPxGgXFUbBqgvVGRrMXeAAaWwZcagYYyugUudpSsoOPpjfYFYGBjkgGrRMmCcBbIHgKkRrGrZjPgGgvkhOoHhRjJXxTZcuPpUbtTeEKkBTtXfFlLcClPuKdzQqZGZzDcSsRrvVjdqtsSSsTNngGjrRLlorROJcCxLlzVTfFzwWZvVtTdrRGgaTUutHjvVYnwWNUumpGgSxXsjJsnvVNhOoeBbGCLlcgWwpZzKhVuNbWBHoOOhYVcCviQVrRKkCcuwWUWwTgtTGtlLuqkJNnCpPcHBbocYKpPYXDeJtyYSHjugsUFfusSckKmMzZnuUpPkKkgpYLvmMazLlrtmMDUHuUMjQTtqxTSTtcxwsEshWwHpPUrCfqzRkKrXTtiINeDdLyYcYyYyoPNnlQleEyEJsSsxpPPpnIXQyzNnZSsUuYGgFfqjJAJjBENnebvbMOdDfFuBwWbQpPfdBbTtsOlUuLoXwAHkdPplLUuNnrRGNDdBbnATMNniIoAanNKIikKefFpPEQwxHhLlKUudDZlLRrtlfFsSMIqQuUoOimrRRYyswWYLFfloOwfrRFWjJwWyJfxeEtpBboOguxTtXenNmMAHJTlpYPlLXxpgGXxsaCbBeJjWwENRfCzZcFbbIiLHAaDcCCcxzZkMgGKctEeThHCQDdPOoVZZXbBKkpPDQqdhXxBxXbHeoixXrRjuMmPpTlrWgnNGwNfFeEXxnAFVvnNXxrpjJOLloPsSSxvfvVgQqGBgGbkRrKEetLbBLlFvekbQWVvmslLvZWnsSaOoqQAbQqXxWxqOicCZBbFHhfMmGgYWnxythHqwEtTUuyqQRrYUHHtTaxeVYGgzZAazZysSSsBbGgZzqOSstEetTwWwOolLbzZfglLNyYnDdGKkdrQtTHXrRxkzqQqKkpmQzqQAIiyYaXxIQlpFfHWBbPpDDddDYvUuMuUENNRrrRnnfFbBNPGMmqZMziOoIJGgLlbzZkKBqcmouUmgGMXxOkuVqQQJmMjFCcCRCJPQquNoHhfFaHhYbBBbNEzZLbaAWGgvxOLlzZueGgjJEURryIuajSsKYykJAUpPsSOoieTdrFhAlWwASzZsgGUbHhMtTucBAaBFmtPjJxznNlLOCesJjfyYrNpGTfdzZznhSwBbzZKGgsLGglhHScpetTzhQqkLloObJjBoOzJpNniwWSxWwYbuVfgGFfxXYlLykAXtAxGXUXxhhHHOfFmjJLWDSsdtTuerRLlFLlovVBUzZdGgBbdDSyXcCiLlOoBAEnOSslBbToOoOXxfFkTcwmDyYpPUudrXxGkKpVvfVvclyYLTzZdBbJVvLBbkKGFIorzQXxskKSRrQqGVvaUrRUzhHZNKspHhRzVEeSsvzZVvNARLlkKuoOUZXxFNnVkKgGvyTZztUPpoONSjwIgpoOpHhjJxcCJIwGggipPJmsSMjbGgBWnAEejqQXpPOGoOmMgoOGgoKkLsSlsYYywWAPpaAHlFCQqhBPJjJYYXGgbeEBGRrowWjJPpyGrRxAapPrrGlLkwWDNyYLeEtwWiITEJixXIzGPTkKCroOaoUYyuPpqQGgLllLlBeUuDIidrqQkFcXlLxxXCrUMmGbGgNwvVojtRrTJWwEeOsSWfFaHNniIeExHLxXsSqtpWwPTQvQLKGHYSqNnqQgGRRAJzZtTvVjIfNaZMTEeVvLWwtgGXmbEeWwuTtUAkUuKSATIiUQdsLuFlJjLrAafFwhHGPkKHDdkKMXxMmmpPpksSRrXVRWaAyhHuhNgUOoHfWybtTgGHJSsIiEXxAfFakoFVlXxvvoVqQvLSEeCcQkspPSujNnCcJIOVpPpcgkfFNoOVwxXhoOlLpuUMmUUuXMNnTzyKuUkYdqBblLyYwfjEeIkBfFaiISRNdDZEeUutTzsSqOFUmYtiBFRhHrfrjXHnNUuheExYyAaDotuUTaAOCccqWwmtTMMmTtqeDDMcvlLYyAvQqqWiIeEOpPDdmMnNovVlLYySsVCcmAZzeEuYKkyIiCcRCcPpEcAGJhHXYfsxBjJkxVvWwXrRieEsXwrCfBbYEjyLlXvjJBbzrGgaAnIrdXyCQOgGhHozcuLlUsPpETzHhqIbBbBcdSsYBQZEVveBbEezRKQnDrbkCcDdrAaRByyYYblLClDAadLgGCKTtoqjJiwiIubBNnnnlnkKIGgiIilyYLNoOVvcwuUgyYrIicCBbsYySNrqLlNwWwVEFiEUvVWwkLlEebPAapfFBjzreLwFZIkKDdJiEkKeOotSsKybBYkAFqQfaOIilcXhmLDcCdeIDdRBbtTmiIEeYVCTflBbZyYlTtzKwvVZGgcFEnToOGafqQQqYyfTtFrkkYwkFcTtCiusSkKInNgGWwihKQWwkgGKaAKksSReEyYjydHhUYJjpPyuJBYrLRrKkXNzZKkHTEgkbQfFqHgJwPMAOTzZvseExJjwjYdDOkKwFfWVqXbzZDeEdboCVvcDnNWwdmMfjnNJrRzjhJcSxnNHhkKoOztefvYdHTtoXxVCaRhHIiAiIagLOobBavFHhBTkKiMmAalKYykdfaATxXLIAaigohAuHpFfHhwIMmHhQUuDdqigGoOTUkxXTTvhCtTcHIjuYyTArgGbBYhHbIxQqRMKaAkvVeRrDuSXZFfHzZhNXxhkTNnodDXxUuPNnMXvJAOBbBbPLvAcCazduEeeEyZlbPpBKHhGpPoQyxqQcHAahCfKfFNkKFgsRpPqMGgJLlWzIiSQDJjJttMYjJytbNdSRwWDFlDdZhNrLlqhywWuUHysSrUuRlGgkKLYKXQoOFvVyvVYNnIMmiAwPpXIhHinNbOoXxEeBVvIaAFfsZanhHNfKOofFxXMmwkLYuxKKkyubTtvtTJZYFTtfTtgGAaYybByKZzkTMVOwQBbDjluFDfFdfRGoYdiKiYCcEenNgGspMlLmzTsSNnUBbOoEeERncqQFRCcrjJfyZgSsLltmfIiFMsUuhHQJiYaeWxYyCcIXPppFULWwHKRrxqefFZzmuqQkDPebqQWwNnpPvxnhHCGgvVuGgXKbBOsSDSnNsokKQTtVRrvNHkKaAhBVvoRzZrOxXLcuNoOquUQnUdudkBbvVBafECcQyGtTgYUuDdyLnPpIjJjJdDiexXWZzbOTtoBVvimktDrrrrRCbmmqZtwJXxjjJXxpaAPLlpUuWwWwCcxGIwLldqvMlyYLKkdSIilbDwMmgGjTyYgGtQVAMfyTtQUuyebGqcCchHNnChHIgGsSPpHBcCkTnbZRBtjNnRrJTaFfrRAaaFKkHGgmMrfICclLEmMXxeDdssdDjKkJUulXwiIkKZOoUNCbHWwbIFfibtRHiwYpkvVrRYXxVvyrpPRrkWGAyVvCaIMfyipmMZfbBQQRDdiHhImMxcyYCXfUuFEVwWPkKpvrJyGomSsnuCWHhHJjFfshpWTOFsKkSPpYJRyzZZgfFgnqQPXsEeSFfDsSiaACcVKlMNnOPLlFGoPggZilLIkbOokcDdzYyHhZHrRiIeqQNOoEdEeGgwWYerRCcEEeWueQqnlDnGzBVJlLpPfNIinFjTRrBbSLpPBdvVtCvAOoWsMIOVaLUulnNlxwnNWXkdRlWLPpMyxznNdDXxCcsfUjOONoOiWwbBdRrTtMmfPMIiCrkKToOfFKtTUuaQQqIAXhyYHBeIAaiaAzffybYtTFiqJcNiCcOikppmMxnNnNahHNQGPCOvVoOBboSkKsBYyfFpWwbKkRDqaGPpqVvOoUuzZxUtTJjRreEVlNpPUuSsqRrvNDeEdnrafVvvFenNrRgQqDrJxXKkoruURKfFbWXzZtzZpsVvSEeGgMfZzFiOoLlgxSsLJCGflLJjgQDPyYLasnfWPyQqYeSsQlLkxhHXFfKrRsrPSdDsePbkNXxedYyNncCVNrRFDdfoOEoLlJiIKNaAaAQqszZLlSnNiAaYdBbDyIHRJjlLsQlpPuULdDEbNTTUugIiNLlpPYIzZzZDPpGgvNnVKyIiYQmMqEEePpwWVsAIGMmtTaYyKeEMeIsVSsckKRdugOoGKMMKkEdDTtAtBfFKucMYmMtrRKxYuJFXEeumMUiuAireEKkdDycRrzZBtmNnFfwWXRVzZxXvyYZzqIiTtfIvJZzouVOoSNRrZpMAxcCqmMaFfhHWibhKxXkeEHBYyIwyVlXxeECctmvYPbglTpFfNnvlIcpPCEBvVbUfFUxlRrJjUuFJtTjgHVfFvvfaukKVmAeEslLrTSCIicHNZzhHMmHhCAaMmIfFivbBJewfcCFWIcrRRWoOwtTwXxoQqkKOIskKSdNnGeEgDgCcLnCgSiIhHUpCeWcCFfQFdDSgGTZeLldDEJzMoLzZlNnOamyEBbTPpaRKhWFfUTyVvrGLAPHUuqQJoOHhRrjexuNPpUmMHpRVvBbrOoPhAnVEeMqYyEDkDdhUWwlLQxhTQFzQqCFPpiIfcZAafxkKsqkKuCRjJupLMmlMYEgGeHtpFlLONGjmkdGgDlLskKykPqRRzxXxXDSsxrIirJbBwKtlqAkKaPpQLVYyeSsuRCxCccmSYchsIzZekIkKgGrRyxXHIihTovHhDGgZJQjJQZWwzSvVbrxlgGrMYyjcImUJJTDoOdJfFUujqXxFmdDlmxvVqnNweEEeLLTtppPPlAxNnrRqtTTsTPpeEctTIikMaOoAWXxypyeEafKHkKhzojJdWwbBfEehHFjaqQkKAkWwUuURtbSSssNmZJagGoOAjZPpYzZKsdDmSsZSsTtcwWeNnZzbBkyFgMwAjXCcxBbQqCaCmCLlcMhHGgCnNAwhZinBbNyhBeIiVvyYNQqSsnsSjYqVvlLQuWwInTtEQOlPdsrRSjCcAdaUzkQbBhybBYsTtHKgnggDuUpPkfFScCstTDvlodDLlAaPhlakKgOobiIBLpPwWFVLldDmrRYiBbiwWIECYQBUiIslLRWwwGxXtTdZzOoDtLmPXmEGpPwWgtThHcwfxYxxFoOwLoSpCcPRTCcULrRlOjTtAtAyYiVvrRdshUugwWGzZjJGSjgGXVmMjyYvCcmMVSsppNnciIltNqQjWMotTEhBzFfqQZOKexxMmZzIyWcxXCxXCyZjvWUukSsMmUhxXHuKyTmjWnORaAcwWbPJjpTSPVMQqNLlgPBbQqahlaMIHbBhrhHsSyuyYUdmzJVvNGraAiIRWEgeEyGnNCcpPlzmMXxSsCKCDTDdvAvVaCWMmxMZzuHhuwWEeBBBSlLclLAaCLEezgwWDDrGbvblLBbSHTLlsvheElQqqlpPLtTkiIkKKkRrZKkUxXuzvuGsgvHYYosSwIxJjWwllLfFOoxdDBgucWwWOdDucArylBALlUufAiskKZUlYnADhKUuACkVkwWwDnAVvavlZzGgMzZcFyhHdWwnOoNFfDpPKksSvVWwaCcSFqnNLlLlMLbSPpcCgDYevVEhHMADpArouUZFmVvMgGfQqwoOIiPIMrRtQFYsqESseEuMlLmAtTSOiIwYxEjsEFfiIenGgNDyYlkdwFhjJOgGoBnHhukFfzhaxJGCzZTWGgHhckXxdLlJMvwYybAHjSxMOolLRuUhlLFfbMMmDZrRahHAzSkKssScLlMmCdmmMOIiBFfHAfjORUuruQICdRfpbYSxyWvfFVmMqkWgGgGgPpliILezhZrRBBvFkBXxkKShGgkKdhMKrEWxHBbVzZvowWPCcplQIqxXCcImWJSsbBjqgGeIAdHJjFiyYIfWWDgpPGudpPDdifFBbYyINcCdOocyYCDbtiITlLBzZnjhwOrRVvyYdzXinNxRzgBJSIqUuTNsuUAYksSkiPOoDAaLHygQqGdovUWwcTtCTtGgcEDMmjJvOOMmBYBbywWNnkEAdDEJPMyUskKlLSGnNghsRPHzMQqcUChSsHyRGhmUkNnlXuVwWjJvUxdDiHAaOVztFyeYwkrKkRmwuUsaZeHeZytvfKOoPgthHTHhhHWKQqIAGgyYaiQqkwydDDYyeERlLSsRWsSXJuEerJiIhIiVvpPNRjzoBXXxxNnrlmgmMJjDdGoOJjZPJszOUuBzZVXmVvMnMmGgIqQWmLTjOooOJPvoxCclhOJzZcIIiiskKSCcClLTTtPptlHmJjLlPpQqMhpPKImnNMhHhEetieEVvaAwhHWtUuUAAGQmUUEgYHZiUCDdciIsDaipIxxXYyKRfFAIPzWpPHJdDaKDAnPIuBjJbYSMwWAlyYMOPEaAuRrFkJepJprNSVvgKMmYuUMmvZzbnHhmvVAaPpnNCOgGIWwJERQlLXxDvVVviIdcCqrwWYCBHvTthYMmyIinNOoZxCcZFfdDjJlkEdCcppPPcCDJjGOulzeEkKZFpbBgUxytTXxxXNlLcsSHGGpPmXxJBbTBbQqDPgGtgGdLBblAMXgLHMyYBeEbBgWchHXxoOZbvpFCuUFfuEuRLlzPcCpZpPnNBbpXCckPUTtYXWDDARrcwMmWCgNofegxGBlduUTwWtDLdDWMmBWOyYflbYZbkxHhXwJMmqXxQNhHqlLYyRPDeZueEUtkQqeEFfKjJKhSHINnQwWJgGWzPkmWwMKyjZdAkPdDBbzrwWqifFImPRreOovVXqPgNQlXuUSsoOZziIIbRrFFfyYbBrgGouYFLVvjJevPXwvVXDgGgGZzXVCKhDdqgQTtuUuPpSQdqZzGrRFzJjSPFlaAAarAzxNUeEvGbBrfmlLpWhVlzZBaACcgMhHSfUGgiGwMTlOvbYnDkKVHQYQqoxiIOoqRqMnNbrsSckVvnYgGwejiHkDPHDuDdJjpQvVlLqQBbqQpvVPQEtuoxduTtrOAaBaxhSjJZWzZFfjJsqffFfFxhadXzZtoGrQyYkKUucCxhWxNrRSsKkeEBkFfTuUDaAQWoJcUuuvVyYAaRfFvdUAaBzqQZZdCNFDaAdaASzRdDrYyzZzZEeDfdDFQqgJjGftTQqFdodvWeKcCzdFjJNVbRBHkKKKkbMhHmBkvVzKGSffsVQqqxoOxYyScCsuGtBiReEeEeEffrrRMmkKAaDuUQKkjyYmBbMJxPmpPfgGRxsmiSOodDsShHgOTwZzWtqQHpVvXxPboSsKkOMDdDPpxDfMdeEQqTLoYmaGgtTAinNOoFfIpwWSPQEfaDdceEmxXMdKaAhpTEeDMwWOqDhIbGWHfFdDmMeJuUjexOjFyykMmiIKQIRYrxdorRfGkAaJsEajEVzBOWvSKksVJvVKkjwoMgQbWZKkrSdPlWwLflwWFfuCconSiPpRrtTwbhHlLBdDaBDYGDoOlLzucaotTgtbrKVKwyBZQqwIPGgwbIiBWxmgmMtUvVuLlUzHEFTtfoXxOlLTKnlyYECcmllLMYTtlLZznxwkMtANlGgddzBCSTGUoOsQZzPpgFnGSgxXGsEZWwCcbIiiEYvlMrqZiTPpcittBTkKtbroFfOpPRfuUFsSIiLQqeElVSsbXdPNIlLpPlwFfSQoQYSkKsywWlphWkhtyYiytyDXllfFMmHJjuZqGCVDYydmMAoojQSjTiICcvOaAdcUucDavVssxBIioodDEzzZrRlAarVvRzpKQqZRkKTHhqFGgNvxGqsFfSsLYylSAuUaHJyCvvVPOYyDwWdvPtZnuXxvwkQqKyViIijJqcqQNWNdFIXJjxXwcChcPpxXCGglEHfqQonzZAyHzdRkReCRCgqQGcFvwQqHhdjevHhVkKgGtchAEtlLxqwWmMQSaAYotOeEhjPpPIfeNAanEpWvfezZZzWBbNawXoOxYyvMmGqQOzZeEogjjXXEerRYbWDdiITJjWHhwpOfFOfQAgGhUjJHnzUuUZKreZzEbZNSsSsghHpLBFxxXHhPQqkGgIirEVDUSgvpPVQqVwUuBMaOeTYeLlRrSToWwESsEaBeEWwTmyDdNsngGkaALncrYZsAEFqQnNomcyHmEfzZFeykKmSpUyYOouPsGkHkjJIiGglrYFgaAGLjJPtMmxXUBDNvwJjWnbBNSQqwjJbmDEeseaeEnNTtIiGaHhWwpvNgGVtTzZfinRrBRLlsSrbRbWdMiIJfibeWBxutTpgGZzlmZzjJODvVJJMsqAJJjBHiIgGIiOzFajzSVCcOoOovDdXxuUJkKoOhCcQqTtRBkshHqQBIJjwSTJwDdWOAaqmkKMjJQkIiWwQqKorRbBQqizMlNnpKzcpjIiMRrmPmMZzpJWAafYyDkJjQlLqAbBadDKdtkKTblgGXVhHRusqrovCHVRJYgGsHaANlBbLnNnYyEyWuoOkTIifEHeEpSfFZzsBlXeXKtTTtEFAafmyRRnOozZAnKAftdDjqcGYnNRYbGXzZVuTsJJjjkZzLEhVvBbAQqRbGvvqOpvcGJieyEakxdGLdaVIMPpmiWtTYuUpQmMqAaZzrReEgZoXGqFsVvGgchaToEeuUyibPpBWwIQSsqCcEHVAFgSfbHBbhBbUIiLZoQtTfFqtBbueHYsmMFPABbaCAhHagyUUuLNUVvcyYujFoYtqQqaGgZFHzZlcCcCNOoMmnJasODdFfFcsiISnOrRoNFOoaAhHftCmJnQqlWEiIDxWfPVlLDPuYTUSOWeEuUdAffpIekDnKcDdHjJhCaXxFjJMGgNvyYHMzgoOUiCNOmMEejdxXDrqxXQFSsVCEejJctpnNpPWLpoAaCcOFfVHAjezYQkdgGhHTXMCBvBMfcCNgZUuzaAhHdIbBiiIAEYiuzGkrwWFvVfEeTtxlGIubqQEtOogGyhafFANnjRGNhhHSsBeRFfFKtznUHrRTsCJssXlLPkKRrpxSSqQjcStRrhuNZTkfrEbXxHngGgrJHYTOoeqQBYyUigLXRrRKKkgZUjJIyAaeaDBbnXaAxNGnoVvnNBbOcaACHhKPpkFmbVbcmxUutgGDsSWwKqyiIZAaEJahvFfPlwhHPTvgGfRJhRrHKkpPoncIuFfGgGAaZmcChVMmnGgmoOjJfAkNlLyYdKEiPFFUuaDeEwoaAsutyxXUpdeEvpZzFwXdewLNjMdDcTFfhgGHCxXfoIiSATtaAjNNnvVnLYUucoKeRrEkOCysShfLlzAQTyOfJUONnFfoLULlulCunPplzZhHuYGcUjJupfSyhEUTOzZzluBFZzsGfavhRrepPYOtAHCSfQgxOzGVvWwPeEjBbJymZzMwvADlgDIiXTtKAeYEIjgCVPTtoXxQUueEVDdVgLluUXxBraHoOelKpPStUvxgbBByrCcygyfFYCBbQJTPpFaJwWjkNaqQNrrYMekxExLbPBbhewBbWkKTtJjtTFkKsStKoOxXUKkwYeyYaRrAuUhSfFGgyYyjrvhcgIiGUuVORQzZGgSUrvHhLBPpFfFwPCuqQUZKIiGgkkPLmZIPpUuIisSSsqKkQjtJdSsZgGzDjsgGWibSKbpPrZJjzHVvjnNsZrFfRJSKksAfZoeEWUuzZxiITAatXdDDdEewhbjaQSOwWokKmjjIiKsSYykdomwWMokKOMLPUXbwExXBIVvFjmDwBrNIoWjPpWwPpMmJwOFvpPnVPCcAgtTAESEeAadvVMuUBWsVndbzkKZuTpvVlnNnQqxXNfyRLSsKhKgYoOyMYAZzaMhYCMWwOlLfeaSiLlIvhHVzyRCNlaAKNSnYMtYyxXbAeeuUmMjJOtslLEytEmMoXxTwWtWRzZaArwAmbaAEeuUWvGsuFfdveliILRKMmpHhKkXfEeblPAaGAByYbasSSskKnzBRkzuZNkKhxXuHaqcCFooPXxQqwWtwNnByxJjxJUuZzJSsVuUWADKkyYdnyYyYwWwEFVlLnNwPFizZcCpJHSsoTOycnNCsqmMQXRYyrlLTeaYyHCTsSEJFfxXDRrWqQVfrcECcMZznNWwmWwIirKBbrDKkZtTwWrRhYaNOFheLHWxifDfFxXnZlLkRrKzwnCQIvYWVUNzTpVbBlLMdDmopvVVcYPpjKkhQgaAXVhHnfQtkKrzVvwWkPZQqLZeTvVDdtOObXSSXxAeEdVvCCDoVtJsqJOOafpPFvvVAacgQzUPphLVvLxdYTYITHKQqwHPLqOqsVvWiMmILieWwEnDdpPpDxBvTtTYVvyTtTICmMtIzQRrRmLVyeZzIzZBjJzegIiNfGAaqSugtscbZDDLnaWwlMmLTEemKWpPXAaNiyYMmIymLMeLNktehZuBvVbTkKGHhMXwWDdZzpDdiWzLlXxbYWkvkKkRjJBTGOACYyUZdgydOoiIbAWIsNOULFpDsRzjSsJwEeDvVLlhqQiIpPHdpPBVvPVvpqQqGmjJbZveJzZlpPLqQAeSFfjKgUuFOQqGgDoOrRXSsRyrCciqYYXfFNnFfxqQfLlJoXxaAXpFfPEEhpPwgwWBjJiHdQWwomeElLdtnNtTZzPHcCTtMmkDaACxtTXAFXxeqEepsEehHPaGgXxAMyCcFfOeEltDmFdXiIdmBfMmFhTtouSsUuCcUGEesIMSXrFfFMpkKBbXGgqdgGRQqFFOojJgGrIbuVYPcCpyvUTgUdCcDXDdXQvcCSFFsgkZkKnoONhdDbWwrBvuXxUPpnfDZQqKkkEwVDPpOTtDwIiWdEewWZsyYfxXncDzbyYutHhTqQDVuUfFEerUdDJOojCjRrOwqdDGgdmMUvVufFmMuUtKbnXwHXGgbBMmbBqRgOrRDdTxDAPpLlHXFHheEQSwxpBbPXcRXxrCzsHQqXAdDboRUDwjJWXORrUTlLeqqauUAPXxUdwWhpyYdKPphIJEWyNQqKCRBmQIiQqrfTtFjIiJVvQXOyqhvdJjNyVqQvBVoLtmWwWgIcCuvVFsBbmqQuHhUGbLvHwjJwWPjJMuUFRgVezZEuhHnXZaqQRLfBbpsgGZfgQPbBpDqsnSsNUPpqGQHkqQcvxAVvaBcCbENnedxvVWxpVEbBsSlfyUOMmRVvqQoOLgGlfjJHWwhBdDixLqnGpBOovVbQxqSsOoWYywQdDIieEEpPpMQUKkuSssSRZpElLeFNngBbCciIGfxXnNKadDMJjmDzdDJYqQpZKtTkwjwWqihsbAaBpPHXxgGJkKjkTMmzlLEdpaAiICFfHWPXxpwEARraecdBbDChcAarQnPpjWKBzyBAAaaLFonNwbwYyOoCHhcbgXGEFOnoOGaddDdwNnxyTtupKxPPsJjSpreBbEUyYXxeUcfpPPIvViVbBBnNzCwGNnAabmhlGJjxmUjJuahHDTpdEaAeteEuUjMWtTwpPgghCyYnYWaAwRaEeArXRMmKkruGPfLUiIogAawuUuoOUWeKLqXxQeENnQqzGgXzaALbBlwWHVvRrVhbcyejiodqQDcyNnYMnNEeNBZlQyYqFfLzVykGsnRPjPuUEjKkKeEfLleEUepomLAaaHCchwWmsyUiyYOolLlLpNadkAjEbBehwAaZpiabBbBVvEedDrkXiMmCMEqQefFmcvVSsPIAbBXxqQdTtDdSiIuIzhyGeuuAeEaMqgaaEeuTEeITHqQikLQqjJRrGgjoRrHLzZvVtTXOVplLtTtlMwiNKrlLRkxvboZSjpzMLlLRbOMmZEeJrnvVJjHqwoOWQjRrRUjxwpPrgGZFfzlLrdYkKGpAakFVTYzEhEzAWwCxXcxhHXSWMAaKWvQqKkVyEYqkKQZzfTZvohILKlLuzZMHlfFnNWwLgrYhEeHcuCmZhprSHurRYPpmpWjJwcCjGgeGgMmaeOoKbmMidTtDIooVdsSeaACFfueEVODWwmAUuaQqLlXxmMMjzZJnrDdRNYhltTdpIKKyNnXxaSntWwjJQisjbGZrXIxZgGDcCrRoWuUHJrRGgDUgGdwwsCcSHhhkKDaiEQwfFMdDijJQinNqcCGgLjJWwYyOZzhXpPwewnNKkWAaRkmHDHBbsbKdeEDfVbIipPbzVvHZEPzdDqBbQZpqtTQKkGwKZzQfFwYXsuUVvyBPFrDdDvVcyYiIFfiqUsSoJFahbVvoOoBHrmXsJhauUkPpiGgsSIKaABvIiVyYWVmdDjDKaJjACQqiQqIrRwtcHhgjXAHZkKkKfFKUUuNjOoJbHfWDKxXnKkNQqEeLUutTcCtaATdSJeXyWobBUusarRGUugGxXuUgUeOoQSypPfGTtgqrRTKkmipEAaeWaAIizORajJPdzZamydOoGsEeBlmQfsAcnNCoeEOlLkhHKAaYVvfCmrRLVNdWKvKcsSaKkkaAHdnLlFftTBbNaNyLbBuzSkKdDImMmMaFiIabUuGgLYyZhXxHzYRCcaaACUowCUGEeaAbXKkLXwSsWiWOySsyhVGcCSGggUVKQLHVIiSHlLhtRJjrhsBbkBbKBVBgRduUmMkKdKQzZzZlLuhHUqkSDdsGZEGgajUDEeduJAelmRrMsbtTbIibUDdUlLmXwcVdDtoOdGgKkckmMcumMUZLgYGNQqmMnewgnjeNnEYyNnNhHSsPVvpnVjJvZMmMUuDYRimAZzLHAuUBbpGndDQqmvpnNstBPpCroNwJGgMtYJjGgAarRweEPpVicCLlIJzQqeEYcHhwOoYiXXEkOoobHeOmNnwxXJnXRrxTfFLCPPiIaAJvxJsgHSwWkKDIDdaTiIaJoutuUrsOlRrWgGfXXyFfXFWCwWdDeGgSsMxpMlTTtgWKkEVJjverSubqQqycxXeIiIDdsSyGgbBMvfWeEwlGALHpOLVdsSKdGGNGGgkhSjJHqWwKTtZuADaQIiqJycCTtYDJEejpLoqeuUBbnNfFNiUyJBxXbNWwnEbHYIzZzHjqQJWacAauUcAcJaWmGfykKgGYYKrREmkKMfFCvVzwWMSkBbyzjJzMnDdlLeEfFBCcTruKkaAKIiJqQKkWwDOZmMkFAYPYwmKjkWlLwKJCeEtcBbHhCSWwtQfFXmMaKklWeEMlLkKmQXDdMLMCczZfQcCtfFXxjjuMifFOoCJmRLnNPpXRBAasqqjrVvRzdVhHOtlPpLYiKEBYybiSHCscCSXxysMCXcnNrUEvleJjELTkWRrjRuyYUXuUxRXMmGqQJjgcCMmdaAVvDdWuUwZrrsSnNzZBbQpKYSKMPpJgnofPUuTLlhZzuUlLZiIzymnNFfkKPUrSsKkcTtbBVvTtUQSXqQqtHXquIiHpPKdeQmvNrRasaASunUMmXEdDqQhpqQalUnNugRRrYtuwAaHkrrRAteqrRQYMkKAgGIimMQqmZjRrsSztsftTlYyLoOpPpyYPqFfQVvqwEcPusGcNldLlDGiWrCiEjVcTteEnhstRSzZaMvSswWULlAqQFEvVeVhGfLCcXuhHuyYWLldDweiLVWwPtLiIGBpyVMTqQLvPpYWiIwAVvQNpsSPBbvVBJzZjbnlLXsSamPznsvUXxOjLlViFQlLzZCpPcrxMTiIbCYCcGgRIppPPaUIxfjUyhHXsSkyqmMQYTrRytTmCUkXxXxbTOoaemmkkKXZEeIOyYXxolLizJjxoOUDrzZCvSiEmTtUukALlcwIiWCAaYyOogiaSvWwekaAxXyYQqBbuBbUdiynliILaAOoGttsSnBeZcCWwzEoOeXxqCcvVShQVvqWbBlLwdDHrhHhcCnVvkjUuOcClLeNnnrcCTtRvqQZzgGDEnKBwWpEpZzxDdIiOoXRSdDMmzZoOkLTtMmPplKHhIiPpqEpwFNojJiXxIBjQqJbyYtTOSLlYyAlpdqGtTHhzZCcTtFgcjleEIiXxkKXGdDIZzmPTxMmZzwBkvCiIcVObBjRdGExXfVlLFFfARoOVQDxXPpdnLvdDlLjdDJYyuwWXuUGLlEegFfXxOoQCcgzZAQdrBPbjJcpgZzqnAXlFfLPPKIOoqQoInsSeECjMgGmQIfyBYFFMmZQqEbhOoHxoOaiTlLlLtPpqAktrRhHRCccDqQdmpFDSOosIVvqQvVnooIiTtJuFSZXYmlwUrRWwYyuvVLQJjqsxeXxENnXSrPpDKxuUXnNLnzZNLXxlkKAvoirRsSFfMmRrmSwaVzZcTeEkKDbBbAalYysXxuUmOoMmMtjJvjKkJHhxXbZzZSsgNzMmMmZdiILNEyYUwwWyPpDHJgGjhkKekKkmdDMnznNZNKnEBbCchDKkdEezYyZCKBnNKhHzGGpOYyRrgfpomLvVkycCYvAaOoIdxpNGGOozwXxRrCcIiWfFFfYlDdLrjyfokKtwPlLHRrSZzvVFfuUvVZzhwcURDmMhHdrupPOouUUNMxXOgYxXjWOowSsYyRWwiIsyYgGmLlMSzZNJjnNneMmDdrqqFzPIYFminNnNAMmcXxYagwKRKPyVZzvWSssSIeLlEhiIrJDdHDdhOuUojTBBhBcnbBuzkKOoWxLSSfpPFcCiFRVvhfAAbrnNRrzBNbBtTtKeEzmGgBbMiIZbhweEIizZWiQAavVgBEBJjbYQqqFeElLfYFmavVvkAaFLlfKqJWwvVdDWtTBbdZhHzBLsfFDSsYrRyGgmNnGBjJAabgVHhQRrDqQWigXuZzUBrRbPlLIiXSsxOoyYwWNnWTzQMMsnNSBcRRfFRIUuiyYuUqQddDbBSswpPWTKMtkEHhetTKTIwERrlLNlDdKkKxXkYqeEeKeEeEVlLvkFAbKWwDTtUpiIPuOojHnNhJUDHhClsSoOcfFCbuXcCemMExUnleELqQiIqOjJdoKkkBbxUcHJjhLlNJjWwXVhHDdSsBAapPEFfpdVvKUVvulLUyXxYJbBjMEQXkVvKkrRhluflLSsprRPPxibBvVmMXNnQqVvwIfLlFiEApPyIjDdqSToOwWGTMmthHQqTtHhzYSsUuBbmvVMCNrehHutZEePSaApPrQjJwWqRHKkhyIkqQIeESTtswWDyOszZSgrnNULJdpPIDdYyiqWNnovmDdttTmMiIzjVBUXxYzZSDdskXQqUylnNesSEgGIiPpKWDdkFQqWwAzSixWaEZzeaAEUXxqYyQQMmqVvuAaHhaAPHhpgvVlLgUuqQgGGGebBfLgFfGlqxkFfhYHZzQHhRKknBbHhHhHzLftTdrPpTtsqQDKcCknBTmTkKTjdqsHhEeqyYQaAZwIidDjmQrSGLPplVGgZzvfnkFnNXxXYqrROgeEYyiIkLzYJjXxUDCGgcpPZVEekKlpoEekKaZzjVhHxXxKuUxXkBbmtTpOtKHnrRgGzSshHSvVsEexscpPCrRpPFfUdEeRrETUKjJkXxsSutAsSavTtVmrXiKkBodDOGzZkcCKMmgsDdLlSyROurlLPpIiRlLUDdDdomMatrRUJJjiVtwWtKcCuCmnNMctWPpPhUaUuHdLlDOGeEltbBFDLDdInNtBbbfVArRKklzZGfFMfFmrAKkcvAaOhDzZyVFETpPZXsNnMmCjxXrKkRDdJjHJXxZFOBASsaBxQvoLUubKkBlyJWXKkSVtoampWjGBbUuhXxBrRKGethnHhxlRybjDhHYCcJrsSIiqFPpfkHGgUIhHfKWyKKRIiFAgtcCNefxXCzWNnhHrRkZLzLFtDdcvyMMmriElMHxCLoPpTIirRUuIjfFxXizfWlERUyYubaABZJbBQpPvVOojJqKuTteHhaAMmIfePpvWnQRnmMRGeDdNnEWWGgwCTsSbhHBtLNzCTtcZNUHhWILlQOQqkgXxGcyYISsiUucOoVvCcLlSYDdydDsfCcFKDdBRdNqkrZztTqbyaAJjDCiQZteOoSCZqzZwWdDdDJjcdDYxbBDRiNcCFfRZsSVxYJFferRJjyFcREeWxSJjIeEKQqkKbeEXbBSFyTtxuGgUjgapPCOoNnerBoOjJbhHjJMmUyYaMVvvFfwQVaYyXxVCmEhHrRedAadEpPQQCFfdyCcYwWvVwWJRbITyMufoQSsnRrreEsAKkbKiPpBbEeJFWyYRrQDKSsFfkKDdktTHhAaZtAamxhHuPHWSsvnKmMMXPpfFpPxmfFGCPvoiMmjSsEeJaAUsCwZzCcEeWcgGowWHGghuiIUOqQwWSKqsRPprljJVnNIiuUyhHYvOwWVnNkKlLXmMqQxVGgLvXxfOKeoOjhiIBaAYwFhwWIiuGnHUhHYIiwrvxKPhQqpgWRfIiUHhRrlZVvzeEXxsSSSsDqusSsStassSXxOoaBMxXxTlthHmKkzAniIFiqQZzarrQsyhgzZdDklqVKklhXogGOiIhAnZzGTtgUuBgueERfKREbWIiwLOAoOREwWectpFfgZjAaelRrnduUtTKgRRpjJPeEXgYOgxyyjpbHceEEefLhIicCVvAahnNHsSaygGhHIiaASeExAaJaNwJBbOoPpQxXMmjQmMqJyYXxqzZjqQIlLGwbvVBWWijXwWPPIiGtQqbKkBRrTinNIiWJsncbBCJjuYfzCcranZrOHhoxXFfPSwWqsSkKQknaAuWwKkjJKkuAgyYqZROlLcCiHhfgljmkqjJQKMVvKkAaJjDtCcmMWwCQqFPgRMWCtMmKSstLoqQNIiIdDieahyYVvHhfIiFHKkbIYytTxYfFszZDubOyYfEUwlmMMMmouyLlYxlLeEgYyXrRvVatTTHhxKPpghHeExXGfFkabBqQKFvUByhHGgXsIPSsTkKtJjjZKGgiXxItTHZREHherEPCsRrxXsSSuUkWwZNnaAzMmtrdDReEiIQqTWPSkKspNnsHNZDFtgPXxnZzRFOxiIXLlpPbBoSCcECccoZyYHhXpTMfbbjlLJCbBUFfmBQquEeUuvVyYaLayYHfweEWRQUuqDtgGEYqvVQoDdXVwYyBnIiUuMmNMmxYyCcXlPpenyAOnUrRpjwWcEercfqvUHhuRrUKMCoOfFQjjJZESsiIgGemxCcXzgGQLlgFfXxpgGnemUSsumMVydwlLeEhzZPLqiZqMPQZdDxXBRrbKhvVqzZRDBwWxXbFBWTeEeEoQSsvEXJYyBbjAhdDhuDsNnSdeWQTYXNwyNnOoOoUueEzIRrUuosYySQXwBKEekPJjXxpNwzVSMRrHhwqBKEVflcVvCWwTFVXsKqnNRrQkRHWwhPpfaRrrRRLvVtJjKkUJIOExzzvIXxiHhpqLlUuFpPzZfBhHbkpPmFfKXnNvVduUhMfFmdDlRrBBkKrnFfcASyPfFMXdDWwxmLtJaAJjjAajhnwWPYyowWOpUuNaWwnNETtUEexXUuzZGPHhhHlLTXSshHFwWrRjSrfFLTbBAaWwzUuJJjjkkdDKXWpGgGgPqcCOwWoeEkZzOmxXGgpPtAaNnaKkGgglLDKhaWxSHEehDFcCqUmMVvLlvVomEeBAayYVYqQySZzUuuUsfFaxiNXSjeYLqLpOtmRrMTpPIxXicCCDdlSsuUEnEexKkgGhHZQFLlcRuSjJeSWXCsLlthHXJmyYhudTZxXzJyYjRTtsSZLlAVCcCccvVlLClRryTMmBbtPuUGwWKNYyhHCSxXVvGUucCUJzZhhHOosyYMmTjEdxykyCOJjhDdLgGcCluUHVvhnNjKQAaUvaAqIjJyjJDdUmMvVEeuHoOohSzZsQsSqgEeLlGcCbwvVURnNXxruhaAHBnUvYyTtsSQqHkZzPqQVvLlEHstTSGgTsStSPpSmMsEenNPgSsSAasGCcMDdgTIioOtGycCJhdhHDjWwJAGgjJHhoODtGgvZQoODrRJrHhRppPPkKdDNnCSsdSsmMmMglyWAawYLjJDkIQqiUpLiIxtsSlLTCztReuUxXErrHKVGpKkJzTtRrRhuaAUirRKJUutTbgyfyWwxXnNFJPDHoOhGhHUyGexsSXEACSszAaarRExmQbBSHhsDdSsxXufpYyFXkKqAZRSyWERkQqRxXrPrONnCuUsnGOkBnNTtqJjQqxHhTBhHHhbMmILwWrnGgxGgeFqQZklLmMQvVqtzWVYbBaAaADwXxxjJUFfEQQdDbBoYtFHhEmRrFQKVvjiMeEwoOWzfTqJjJvVQaRRMmLllnNGcfFRFqQULPpzZlqQQYyXeElLxjJqXxwOoWBmMVUtTzptMPbdQqlLXQqgAYuUxDAdDzZVvagqPpkjWjnNFxpPHjJeEqCvGeTORroYyOobBtbBACFfcaPXxqWwEelaAcCywWgpPFHbBAeHliIqQqXgjJGsGjZvNnVdDYyjyKkYrRJEeEedDbBdDPwWNnpTtZzDcCWawbGgzmKkwYyMhYyCcufJjpPJORrVYGgNkwRczkKRrijYyJOjJckZzKCmMSshOAaonNHnlUrREeuHhOqSmVdyYucSAEQEIiTHSsXQqLlQXbOtZyYEBbsSPIimMpsfFNSGIkKIYlpSRzHhGRrgXxiXGhlZwvOoVzZiFfIqZACaGqVvdGgbSFfzLwVvokWiLdiIfLlNWwxXnYyUuDdFewWIiOHorRFtFCOZYyoGgitAmyzEOXxpPgSsFfJhHjxXuUDSUusDwmoKtTnABDDddTMIiTMKkxXIyYVGgvKTevVEBkLlKrSkhdDHjpZzgMmyBbWwYRzZMmBuGNnnHhFavVpCcNgGnkKXSBZZzGCGWwvMRHHgRrrwNnWRJjCuHhHbBuUVvXUTtVQxZgsSHhODfMmOxtTrOJoZhHyYzrpWwPPpaXiwNqQZzMhHrRUHhumnoOmMlVvaABbEEeeEolohHOmpPTtMdDmYyMHEPtTeSqITyYpPpCcHhXxPSULMUuDdGgmXxQqvqQVlgOoGqQVvjJLNnxXXdDdzZkDdKgGmMVvUucElmMBbiSanYmMbPpBzdKkRLlFMoOmZCcCczpPLEPWYlkKHhPpPzIiZqQHUuQnEsShHeBbPwHAfFajJSKvVOoSsPuRYyJjrjJHHQVPpvjuEeVvUJqhfUqQydDxXeFfqFfdCcDQdJzZSdDzPptTFKyYQqrRBbpPrQrADxJjHSshuqQUNghnxXfFBaAJjSsFfbSDozlLyvVZEMmjLHhaAuUQSsSspPKaLcYyaACAVvvLfFUWwoOIFfhHNnyLlnNYnNLuUfFXxAtTuSBbFNAamltTvVSsLRdvkqQKPIMCcmPpifFKkpVIiBxvVXaAjfqsSfFBPLlPEetuUTpguYmpPIiLXxpPpPulLwWRAaAKkaAdDVPYypLAKRwzZmMWuHVvPXAarccCfjJgGXxEmMzrRZtTtGgmstTbVvfFlMmqgGplLPjJOoleoeBbNOoSTtrEeyjkKKBbkIuUZNaATtweEpPWFTLlIZZdDkKiIlLDdqjJUuKtTkiTtSsIoRSswHHhRqAaUwWjJueESoGIMmVKbBkoRPprOKBDdvDdVcrmkVvqgEeyYGrRzZLlQKoawWszGgRrZjJMmhVveElLztnfzZLYyUusScClMNHhdeEDpPnTtiIminvVkbBxLyYHFActmeEMqJjHQqnNnmMnNFfdDgGzSuMmUHheYyEiCvIiZzVPFvpTtPrRaAVgxHhiINRrngGEGgSsdyPUunHWIiJNrSIIiAPRhHrNnpahHNCUxXwWucnJMsSmMccCfwFJcunyvVYjJBeEbyYQqzNnBfmMDzTfhxXqQFjJzfjKkXhHCUucVAxXmMgGJvyYJjVLPpsiIEewwWUuGgnNqyeMZeEqzBbQqZNImMicXxHXphHfGcpPMviKRrknZzNIkWwFDIiaAfFvVkECokKPpwBlLbPEmMeXvVvEeqPgGGkVvVZzvcfgLlHhGFKUwWuGbkzSCcKUiIDdOOofFePpVvEewWQqrVGoRHfXxxXhHJEejFhdQVViIRWFfKyFnNdDpPrRXxJfFjXxjcCpPJEBbVvyYxXZIifbBGPXfUnNuJRuUrjkgptTGOolLtbByBaAbVshHncjqEeQEefFaLKRfpnFfCcNzCcalLOoEeAxBPvnsSNreERpLndDkKNkKCcXxUuAaZzleEwihuUBDKkeEIyYOosSVGgfrYkDGgGjpPJZUgGhHXSsxuGgUwWYksStTtfiIFnWIiRrfFXxaMmiIqzHhFgGjQcmMqxXoOHhmMtTZpZzPhHoAaFIWNkKUCsdDKkqljmMaAkKZYithYyEeQMJJgGjEeeSsQwNnWwJJjUHzZBbhbBufFjBbHyBbYhwcuaAUUfFwmwWnNMQmMSKiILlkHZzhsuUVAKktFfjJWWnJvVSsBwWfFbhHzlOoLcPgGPpTrEmtzaDKjxaAXEqxSsXJjeESPgWMmpVvPyXXxgGMAamsZzmMiAGgEeMmIqQvVlPpLiSsbNnBnnpPnSsWpgCckKGPkMlfMiDdIiUlLuGOofFeEgCcIbgGJjyErRrPcJjIJjYJPzxGCLSLlVvLxMJEhqQfcCsTtgAWwtTavVxAUMrxXRpoJjgGaAOPWCcemMtXxTsgfCVWwEdDenNwQgGWwDdCBbNneErRcdjBOobtTJVviRreEQiOoRlLgoOigiyYDIGgziZzVvtueJCcRoEeRiIrYaAyfFUVCjQqXQqqQxJgGXaOoAltThTlLtMrMmPpsqQSPpRwaAWHhmHzZEMmMmKeEsSbHhlLPtVAuUmqQHvnMVvhYGlLgzJjjlLJPpBbNnVvmMOoQqWwPKYDqdaATtqKkYoGSEeLRGnNgGgrOoJjlccvVjJCVvCrZYbpgBbkAaAqQPpJfcbCEEeIigINIPvMmFfdDUuvVrRQqBbZzuUVtTwLbSBzZRMmlZcbjLlvISsfFTtIamPpSqJDdjeoOGgwrRGgdmzZVvMDvYyqQsSMmOawKkWlLAxFfrZHHhQAxXqQaeEXGgLlxXDfcRrdwdUKkuDbBjJxXBEYyuQfeqRrQAaDtTPcCpDXxchHaAafcJjELeElNnVPRyYjBbZzWyYPwWrrvJjFNWIiwYJjSnhHtTHoOjfeKEekTJjtxaAjWwEeWfFVvnNBEeSsSksLlcCAtbBNRPZEGgVDdqOorlkKLUcCkdDPpaAKKlLxjJXhHHkMmVsrDdrRdTxJpPwrZAawjkaAOzZoLlKVvJxwqCcQAamheEPhHoOwWfFnWwhHTyZzYxXtzZdDNNIinpHnNxHmMhIgGipPXNzSsZmpPqQBZoOzHyhocqQCDRrAadQqObIKkiwGgUuSsWMIaiIAZVMmcCyBbxXisfFyYSbbKkBXxrRYOotQvaASBbsbjJQqQLzZllcfdDDdFCoOVAawXzGghvVUucCdprcCbBRdcCwmMWDTtXVCcvlLDKaABbGgsSRrFffFZcCIifFhkwPlhBWwbtuUTHgGbPpBDdebBLlbqqJDobpDdhcCiIHPoBbFdymMakKcYyUutTdrOuUohHDpPbtcBwlLwTSsyuUuQCcqQDdEepPmMqTXxtfVvFxXElIpPtaPYyIhHFoOoyYdDOoZxXGgpPVvEezhjJxBXBbjeEjiIrRJdsbBtswrRrXlLxRwWykKZzRmMrYSeEmMszZHBbHhxXhGgXAZoOdjZqQuvVUcCQqjFaPhHcSsvVcCpgXLmMMKkmoxXsAaSPpQqmWTqQttyYqOoFfQoJRXxOosSFfTtpBbCVvcPruURrjmkKMiSLCXhhRkpnNeEmEeZmDdTtxXqQRoOrMUfhHCcFlcFbkKBInNKHbBbrRBBvVZfFYyzNPHRgGroOaAtLwCFInNrjFvaAGVvBIiaAtTdDlaAxIsSsfqFBbeEQLMmbVViGaApPUtWwxoOMbtfRPprtjJTFxdDUuHrRoOhWVvZIizLlZrRoPVWxmMlQqRrGgviZEGgezDdoxmuUPpMmnNNnJjVvxIizZXdTmJjdxtTXeYyEDxxXpPsSKbBqrmMPvVpCUhHuBCcIBJZnNzHhuUZFLlBQqeEyUuVqdwSwvTtembBEedDtNnTMjxxGOogXEeCBbVvcXmMcCvVJNnKkqQEUuaAlvVsGTXLcNKvSpaAPTvVdDtyoOvVzrRsSEeCchSIiIbDKkdjMfJjFqQlOIioaSsltTlLeEDdXxzRNkGgKnrNzTLlibBTtSsIKMmMmdhLlhhHrSfFsmFoOZBbzKNnZBbzkKkcCjJjJPMmpfqJjQsSAjJRrnNSsGarRuUAnNJjmMILlQPFfKPpxXkICuUciCcfwBbsgGPoOLHhlnNZiICYyfuUHYPWBbwgbnGPQqzZpXnorRtTOEUQPAatTguUGgGgGVmVvZzqeEyYXuUJjxPppPrvVuUusSxXURECgkDdGgsWnAaNHhTimBbuWwUtdDSjJaAmMQZzfFhHBrRnsyWcCwNncVvNlLTtnDdHhCSsxNTBbHFfadDxXJjGgGMmdRNMoXxOoOoOrdhHYybBgGbTtPFfrRTtwlLBbcCfBbWDdwwrRvVWFsuvKkURuUmMNYyMCcmnJjrnNtrRWwTtTOlLozHhZEeZzqQSsXewNnWXxFAaVvmeErRMfuUmMouJnTGAaoOtSsTykKdDInGgjnNOonNnDdIilYyWehDdHCxGYyYyvrRZDdhHyuUAagNnRHMmKkmCcMZTWwegGEzZfDdFFsSkKBlLhMmHLlKkJuXTtlVWwVvNnhPBZZVvzUVxqlLPYyHsiIEeSOwWvVCfFshZOYyozXGhyYHgMmxHfFSOoUuSuUsjrhHSsXxRJPpFJvOYnNyoioOZzIcxXCZziYzQqpPdDZDwpPRrSsAoOSyrYoOEeyBxGFYyGfFeEgwWXxaAcfSUhkcCHaAhKpPeXxEHcCHhhIiFmeEnvVvVJXxjabBXxaAJPWwpoAxXaFeYyTgTtEtTUueGGyTSssvVvVStrRShHsvWwDdVuUYgtviIeEBbEJjeMjdRdDrDFfJmKPdPFZzfpPpJjbzFfLlXxsdrtNnTNEmPpFfMWwmMPcCpaAeJbBjGsSOOUuHhoeYUZzuNnnNyywWxCdMSsvRrkIiKuUVmsWDdofFYEeyoOExCWiIwtZzFHhqQPQqpDdfBbTaAwWEeqwLctOoTXDdxUaAuBvVbxXeEciIUSsuChHCohdhzQFdDfINGNnQPUuplxyYMvVFfXkwWCVvcbBjJSsKPxYypPrShZzHDINnLlYySsHhiSsbBbcCaABafFAyIiYIibmMMmBBrRlGgLNoEeJjTtazOkYyWDduKkHhZzbBKkjCcTCclEeQHQqnpBuTtzpPojeEJjJOTDdypbBaAPRcEeCezLlZihFmMMUKkKklLyYFfQqEDVvZXhHxaQqvaLlzZcCcCAeEgDpPEedsSSsGYynNNngGsSKkkKpOoPnNmMNZznLlvVHAalLLluCfFrRihHQcCRhVqQtBaANIbMiImMEMmfiNTtPpFfVzFtTzZBbbBtzKkZwWNnZzlJjRrSsOoPpDIRLlVvoxoLjJQtTbBvgGCcgGjJqUmMhUPsSZzpuuvVjsibbBzZaABIlLkKyYkKHYyhTOotOoIJjiIigGcgGDbBoOdXEexCNBbnYyjJRzZTtDdwnpRvVrcCEefFKQvrRuEVveUvVVJNchHOooObByYpRQqIimyDGIigdirkKOokOoqZdhGFpjZIuISvQqQqqQbOxHpPpPyYYyiIhWBOowEeWUhDGZVvTtRryQqYtTbBnQAaqurRcCUBfFbuPvVfFpoLfFDFfkKjqQJdHhnbyYyYBQqyYmMRYiIGgfFWwHxeEGfFHhofxiDTCctTCctJjvViYKaIiAgtNvMmVPNnoOBVvbYIiyYDyYurliOoIHhLrRRUuRuhHMetTEhqBbQqQyQqYPnNprRQquaAVATMBbPpNnCjJeENaAsVFfvShHtPjsSNKIitZPpzqSstTxBbXQIPppJjoPpOsdDbbBoyYDdvVpPODdMpPXxJsHFbBGGggfEHhelWQqWwzZwzZAaUtuUwWctTwNbBnNAqnNQaWdgGNluULNvVnBZwWiIfgGvVFpPpBbvVbBosShSsbkKAmWwMiZtTWFKkfwqfFQzpPkKEbBeuUtiyMnjJNmhQZsNQTtPpqjlLhHJeRrEnIwWiIiBZEezZzsjJOrREYyeoQqSbaaDubBnpPDdNxGhHxnWwQhHEeKMYywrLcRbOxHhXoOoSsIVvuBblwOYiecCUuhmMPARkHMmhKsSoaAasSizZIyYAYyqkWwKXxfDdQpxXPtVLlvTqkSsKbbRrXxryYRIhUuDUudEeOKkFRBbrsSfuUuUorRRhHrsXCOoVJjvcfPupBbMaxXfFWwyPFfpBjKfFKSsLlSsWRrTeEtlfBSmMsLlSMmMmQEnNqICPnNSsBLDdlpJWwjtUudzZnNRrkCXxiMsSZzXxmYyylLdsRrcdbBDPhtTTmMtBjtTJsSXVURoxXOJjEBnNfFmsnNSZHlAahHhgGiIhJjHbBItobJjNnBoxXOMkgGKYyhHhzjJZMPpmiIFyYOofRrHhsSFVwWTtnUuNvikKZAsSaZpPsjJLwLyYlAsYoQqppPTgGpxXPRrUVvBGgbrxXRuCcnNLltcYZwWfFzyJFeEXxeqQEfCcwWXZzZzHUuUAbBaHhWeEVvwYSnNhGgncCNnNHxFSsCyBHhbUuygGrRyYoHhOYpyxiIXfFaIJjgEEegGEKkpqQBrRVNvVkvVgeEGodDonNAvDAaAadVavQqVZzhnNdiIQqtTeOZuDKLgvVLLllvmOoSmgGdNnOyYCMmcdoODhYyYyHeomMPpmkCcKfFMfFlZzyYKsHhVvMmcCiIqQhHHhGgkuUKMmqaVuUvAOodDTpzZPgYyJjlLXxROoLllLrGEvVeAsSiIqQlLxXRrZKvVOxXjHQvVbBqZqQzmKkMgtThHQfrRGgqQSaApPJjswOoGgYGThHBbPpIiVvRrKuUjJyPYSsleUuGgiYyHhFfHYygGmXxMuUhHYyhIEPtTZzIipQqyYzJzZjZMfFmpPgGTFpPHXxYyzDJjJHhCrRcAarRUuVvvHhmMPpVECxUwjEeJpPbdPJbBAaBbaAjDeJjEFfdAahHZzLIioOYwfFWyltuMpPeEjbUuBvxXoOEeYTtyYyuUTtwNnjJjJlnNoOgGjJEzZymoKpPzZxXQqLMlLruQmMwWAaLwFfGzFfEJjauuUULFPAKjJxXQdDqRrqQqQTtdJXxjZzYwyfFYRroOGNXxKkbBnoOgWyjJDpdWwDlLHhPkuUTtdDdDnGTtgzfxXFuuUlLvVRrUoOZzZGgNnsdDYyMmyYFHhBbCcQqqQtSrRxDqQdOVvYyoVviIXjvVRqQrJtTrRokKOMmyYjWwJAqNnukfFdDKXxBJjBbMnNjJCjkKJtTOoqQKkKCcbpOLlLKsMmSHhrRLlkkCZzZvNAbBTtINsFfSWHFGgsrRSrRfhRzZPNXxVzayKkxEeXZzYmgGUIoiKkVESJjsMmtGgPpTQqYymyMFfeEXxmJjhKkHvVEeaLloEeOfFrRZzTAalIiLmfFMtqyYjfFtAauUYFfyMmfBhHbPpnNZzhHFMyvVmMxXcJjqQzZLltjJTPZMmidIXxitRrshHDSsdcCHhDwWXgGxmxXxTtXMluUqLdDbYDdyBUzVvdDWbBTOoPptMmnNZzeRrcCdhHDFHhYIiMUuYyUubBhHmSuuUaPpMUumixXeEaAIbwxJjXhHnNCUucstTSWwWKkrXxsUuSyoNnOQEEeequnNnNQqGGDgGoOLlUwWMphtfFTHNWCuBbiCcJFftTRrjEeMqWwXxQqKkREiIPPUaAuVgGTvRrEMmRZvVXKTtDUjwWazZuUYIiGgykGgEeLOoJBbBXaAEQqkKeifFIZoOzTtDdjJYIivfmMDTqFfQzNnHpmwlLWYHTFCcSdDsfFcCfvZzKGgQqiIkelLEqQueERlwJjDdvgGgGVmhxHhXHpTtoOPMTtRQqfqQDoOdqqQXRrXxiImMfnyYNFJcCSzZFyYqdRrDTEeBCcJjcCMmdTtDOoQDAiIMmcCCKkDZJjdDdDLiIXPcCpwWcCiiGNntHyYHhKkrRgjJpOnNoPrRufFUlWzCcHhVTthHvSsSlLuUbBgGUrbBRAaTtXSmAaMJjsoOFMmFLlfkQqXxsEIirRBbPpEeJjbBsqQpLcCNeAaEaAaAbyLlnNwWRlLrCcVvkwxXWKRrFXxbBpPfLUurlwzZcCaRGEeTLlgKkuNnOoqQNnYycCpfVvDtTdFfFRDdbBPpcCLlRrroMmjLlvVJMJjyYHhYyspSJwWaZkKIixXzAjJjkrvJZzPeHVvAadDlLhERrYFcytTYCYZBbLldBsShHAUvVuaBwWSsWyYxQOooOPpoOSrIcCiIxJjoCcOAVYyVvUBQqbWmIVxaAWkKwqQZaLUuwQqhHWXXxiIMmuJjKgGCcaACdYeExPzZMmZZIfvOoVXxkKiInNiBbELleRrRZPpWwzIiaxXAeExfFXvSGgsshHShuUMmHqQVcPpCJAbrqQwWgGBbzZTtXbBBbtTxytTgGYRwWHuUkdpPWjvaNAanxXAnrFkKzVSRcNniDdIhgGzZvVhHpPXxAaHCZzrsEeuUOoTfbBFtRtTmMbxXBriWwEkuUKNnQqEvVebBomMqBbQILGglyCPpMmSFfsdRrNnSzZwZzHhfFWfSsbBFIiLlsrayYKnBhHHhPzIiEewDDddWZCcTcCtVvMmgGtTlLhEaSzZNnYyNnsJjdDwVvCchZznvvVQuUqdDgXyYvDdVwODdoLlWxhHvVhiIPpNndcCDjJMmNaAnHheaAERsSOLlHhkKfFeoeaPpdRrEekdDjuUDavbBRrIiuuUIiMmNybBzZYgUukxXXxKCoOJjcEYyXXzMtTbUuBZVvmMKkTtzcczZCAxvVSAaCMmaAhaGgJjAEKOokehOoIiXxjJrRMlLlLmmgxKkMmxRrXiIJjIDdioTtyTpPCgQqGdFMmkwWIijJytTYKjTtJumbBZzMCcgGiyYBfkKFbIUDGMZzcCmuUgFfMmbBrdDtTPpTtbBgrJjBbLlaARdGgDtTuJjzHxXhYMmybjJBcCcQqeEYWWwwtTrRyyYmMhHCAarPpSoOSsoWOBbuUqQffljJXYyCcMAUuabBfFCzzZIQqijJMmZaIiGyIiYoOnNOqTbBHhXxwWgGmMZyYFfMPpBbZzmLsSeEnNlkKDjJUJVvjfFUutAaLzZlsJGwWgjQqKLlkkKcCZKkztTSwWUOouuUQqPpbBOoKkNqQhHOtTXxjJlKkuxXyDdjJOolLPuUpRYbBjqUvsCcxXsbBEeYykKBbIiWwvVZzFHgGhfbSdROorhWpPFIdDilSdDsDdLUzZOouFfCeESsDjJdjJpPXBbxDLlEeiIpPozZgGDdNqQnRrGQqYzTtukKMmdWwDGgWGgwUBbeAHBHEehSaAeEPpcnyayAaEeHhYArHRrhHhAzZiaHmMizZKkHKuUkBZqQzqQkRYyLlrKLEelbhHhYyhHdfFDIkKHhWTtPFfpEeOUMmARrKkpYEiCcXSsxITtXxeBPkJtBcCbTjnNqQKyzZFfbBxzyYZGuUuiIDuUdWQqwumNnMUVkvnNVLGglKvEAarRenNjlLJUvVaAgWPpwKjYvVyjetTEPpamMjJPpARMOKkozZsIqrqQzreEReQqEZNWwDdngGCcRLGgrEelwwWZzyYCgGjPpeETzZbBLlOiIouDXFfPRRrrLlitTIbrRrRYCclYpCcPXTFEcbumMkKwWaAUuUBtwDPohFiIwTtWUuAafSseQBbqELxXlsSIiBbqQGgpyYgGGhHgfmtTHGghFfMrRfFFPnNrRFfRbBrdVvKSRrskHhKnNkNnTtyOocswWlLTtzZStTCGwkFfgGSshbfwEeWFBuUnNQyfFUuiIrRsSVvZzBbrRwWBWwCcbBVvaAqQGmMgQrdDdDaARoOqUucCcZziIPpCWwbKkYTtVvjJjJLlbNnOHhPTtpRrqAaYyQLluSsHJjhhTtHjkKLFflHYZuUEeTtjEeJjJQqWOoXxpUuKkgYycOoCGONQhHChHcsSYyqkqQuoOaAULAaOolKHhIiAaAgGQqIhbKkzbBFftwWTCcwWZgQsShHFfbBkKYydDiIqcKkWJMmTtjQqeEvDdFfHhUuNxXSsmQqQOkGCjJPptlFDdzZHTtCLlcsevVJjEIiqQMmdDSsCFLlfvVWOowcnNkKKsSLlkbmMsaATtzZfaNnFfxXACyFfLlYEdDSsznbrRBmMWwCRrnkKOoczZlOoxXAOoQOoqoOasShDdMmHcCBbBfFbEsSetTnNbBAaAaxyYXSsABbapSvVsiIPLCQqhfFfFIoOiHjJqdyNEeyZzYpPnMdDNnAanNmYfFtTzwWZVjJLlvzYVHhoOmJEejMEexXBbIibBIKfFaWawWAwtTOryYzZRrCchHqUuWwQRfFHdzZZzfSsKkLWwAajjJqAaQJQJjzZlLQqmDfFdBndDlLNbCcuUpPfbBzZFcFfMmsxXqQSEeMmCMSsGgEexEeSsWkVvKlyYgGLwQQqJzWwZiKkIEVvxXejbjJBhHOoqQMmNySgGlLfFfFDYyLltbBXQyqQYqvVCcjJMmpPxWxXwwtTNnWaAPpzEeUuVvtUuqQsSTflMmLbBFVveEfFybUuzZDdIiIGgiTMdwcCWIilbBLmQAVvnDdcCNDdaOoepaAzjJZGgVbZzBvrRZXxBPQwWqXxAaqQBbGgmMFtKkJmgQerDdRZOozNlLyYZCcVvzJjsSnECcGgcCqQAGOodXxQqnqQNkKDtLAaiIaNfFnqQucCUCDdvHhahHJPplLzdDZtfEefFWwFzZXxtTMagGhmMHASCcsiIVvwuUWmTtHhjJtmyoFfOCngyYBmbkIiKKfsrRuUSFBbkoOUuJjlHgGPphLuUvVpPtdYynLHhTtoOlNrWwDtTdwWvVAdKkJfFfKkFjAaShHFfnLiIlegGTtEbcCxXuUSsOoMlHhLiYhHLOooOZuQqUMmnNuRrRrHfFUupPhGgkQqPCcEejTtJDPpdwXrXxkKFzZqLlKkZzQmUgrMvZsSCcIiwWzVgGBbRuUyYrkZzXbBxUDdugGyYfFGgCQXkKxLwJrRGBbgWwjlLCLlcmxXWwGeEGqjhEeDdNfeIiAartTRBbcCNnBbEoOFPpVvtAaLlTnEeuUWrSsSbBTGgtyYYwWfPpFBbeEyHKkgqLlQUuBbEeGVWwmMaAveEBUulLGgbmMHdDhkKLlXxQqWwZWwbBznNQqEedXjnNpJxXjBbPLyzZYlryYxjJYYyyXZhHMHhSsmjALKkuUlapPDddDFSsIiwcClhcCWwHdeEDehdDHpPyYCYyceNnZzdDaATtEoOgGnNBZzbNDZzdnOobBBZzChHcGgbKdDAakELeEWsRHhCMmOVvoFvVZzPpfFYyZznjJQqtDdTscHwWhCzuUuUZGZHhwjJqQRrOUuOPbBsSZzpZbBuGgUzrRfoSsOoQqxXOMxaAXCcmNnfdDFFGgPUupzZzyYsdnNoOHZzTthawZzWourRUKSdBbDxXjJBbeQqUrRmMOKkZEezoUTtMEemSsMzcYyIerZzRZznpuUvoHoOhLldDtTHhDdbtbBTMGVjJvcCwWgzCcEUueklLRTtWwXkLlKyYxVvoOQqoObBUuMmtbBAaTNasSAdDWpPwnSsMmLweRrwWEnNWnNpPlhHWwdWmMBbLtAaTNnMmnNdDtkKudDIlLLliPsKkslLDdSywWYjJYEdICPpnNHNnhMfFtblLBTbbBGghLlHBmFfaoOWwArcCAawWeEEGgedbBUuGHRrhYyCcpvjJERcCNnsmOomMAafFnNpzAaEeZcBbCKkyjuUrRbkKJYyjBkZzKpGgPpPixSsNHhnanxXNQqOorrfFRvVRhHAxXqmcEeCMQrRIpxxXXTVvFdNnVvcCDzkKEeiIixbBoOXiqQIwDqUMmuLGyWwbBTtyYYZzljkKJLDdfuyYUyYFFsSyYUmMiIxHqQfFYrRyauUnNqQbUutTdBCcbDNnGPpHhgUuEiILlYyOhHTtoAafFMFVvyYfeFflLlAabZsSAMmafqIijJiAPpEeadDIXnSsNkKQrmNLlMmtTBbhHEePMjmMBbKhHkxiIXJqQoEezZBbfFmUueyYcpPCuKkRrUVIcCiHhcoORDdrhTapPFiIfThyYHTtpDEeTKkQqvQqVOoSsGORHhxaAXUurziccCCAaxaAWiIwspPxXQqnhLlHNOoZzSlLsGgSDdcJqQQABbakKqNnMmFxXfjCSeESsbBsyYpPtFbBfTjJtfFmMTtjJIisSSSssCYGuUaAgoOyWCcwcwBbWuUJHhOoEewTtouUOrhQqpuUPHwEeBSsZzvVKkQolLOsDEedsSTdDtNnhkKHEsSMmeEeoMmbBObeENnBuUcYyEeJjEtTeHhEyYsSxXUuoOeKwdDMrRvVmOooyYIigGbBnnSsNncFfCNmMHcChPpzZNyKMXxmkGnNgxsqQSJjiIXRJjlhHXxrLGXxlLlRUrRuiILlrMmLmrRMlSsdDrRQqfPpFXxjJuUrRkKOoWwNnuFfWweEMmvsSVkKGMmgfFfFLlnNmMCgWwbIiSsBnNGWwAacOoFZPpzzlLZMmhXVhojJOHvSjJsSaAXxaAskKUuzDIiXLlxcFNnfpYyZzPjjJGgwWKZYymMzXEexkSreERsHKkEeGgKkYPpjZGgzJjvVJoEwzZWePpWrRwWBbgTjJtFfyYkKpPGwppPeEpPdDwWwWLmUVhNnHRrpPcCvQqTtFfQnVsSvrROTtTgGtJWwjxXQqCZzcePpWwENnoiIErRAaPbEFfeBVvRuxXlLUqQuXxvVCqQcxDdIiPpXCBJjbVYJkKjQyYqXxoOFBbfODyYdavVVvIiAoIBbjJiMdDTtxsSXPRrmMPpfFHGpPgRrPiIITLlvVjiIJOqQpPidDIYyxGgXCcoAabBCcKkQsSbBqTeFfEqQBbDvlLVdUCcuUuSstWzIiuUZBvhHVAahpPQqHvVPXxpfJjFrTtRoTthHOEMmRZzrmVvHhUupsSLlVrjJRyLFfxPgGjRrJpNRrnHhIiLnvVaANldDPzZzZpOaAbcCBohHXllQqLfFGgjJBwWbIigZzlYyLlLORBJjvVbWwrJoOZzjsStTeEiICJjvVuUcNndDAxXuUEhZzzZHhHeQqqMmDUudQeEZzZShHhHcCxMmMYnNyfFAaEezBbBbZAnuKkUNGvVgSmMbBsMqOomMQmaKJjZZzzYyndDhSGjJIigsvVmMPpHNkKKkVuULWwIilvmmMOWwoqQzyYCcKrRkPpoLeElOZnNxXbLlZzBIiayYAtTjgGRriIGmiIMgJbxXBvfFOobBMmVuUsbBOoOortTNnRdjJDwszZScCWSIiXxZpIiPXxOoKkzswnNWSkKMmMgGYyNXxOouUxXnNEeVvBbnKkNNqQnNnnNmMUuyYUuzZDEpPfFQPpqIXSsGgyYLluUxjyYJBbiHhpPsSqQbBwWXaAxBwaWwAeEDdWTFDdffFmMIEebBLliIiNntpSsPeGdDgTYytEoOZzPpztTOowWEgGPpIpHhPOoaqmMgGnNQYyxXNlLHhaAnfFpPhHIfcCQqFbmMOFrRuUVGgvfEefFoZzsSeHhEBVQqcCGgxXFbsSIiBaAHhHDdXxhlsSLvVZzkKXXHhxNnnNxfvYyiaAiIVZzTtIivAgGGUiISszZXxCeEcYyuFfFfnykKEeYKkQtTExXxXeqewWwWvgGEeViIEAaeElLNLlFfgijLlJwGgWNxXnxXUmwAETteaWMBbuubwWBiIPdrRiwWIkKCcDpUuKkUOoSsOoDtTsSQVjJvmMZsScPpCzQuxXnNWwUHhPpJjRrRrNLltTDhHvVBbpPdnqSCSIdDkKiscMmqQlKkIimkRrKMDdXxzZsSftTFgBYyZzbGLSIiPZzkKjnNJpszOoZqRjJrQzPzZpTtZrRBbCPpMTtFfqtTvECcYaAyeVbBQDZdDzPpRrdzZGmMmXxxXMlnNzZLlphHPVdUujJtRPpCczzqQZHfFoFfOWwAahXxVJOojXxTtvZZzJNncCccCCzZNnyYQTtqlLXxjFvVYyCEeJjlLcjcCJfyYbwWBYXxZzMmAafdDkXQqxMmKCwKkWmnNaAKUuaAqKvVkQkzgGZJsBpBbBbYRreEygZWwYIiyzGlLygfDdFBPYypGgaNnnlLNAVaKaAnNkUIiYTteEmMyuPpXXxnNxJPpzrMNnmRhHdumMKkUjXxJtTDwWHBbdDhIuUBIitTVzZBbQqvIilqkUuKQmMLbWwjJZzkWsSVFfDKhHkdTteEPAapVOovvZzwvMmqQVxHnNhwfFWKkXdDzcCZhHCbBEeEwWmMEeezZNqBTtbRCcFfoZBbsSaAmjJMVvJjlLzAaVvUuKZzViIoOOovhHkdDdFwWpIiUuPaAffonDdNgGtWyrRYyQqYwVvBYlLdDyiITpAQqcCuUadDkKPRruUReVAavEGgkKGgrEXxetTNnrRshHBMmwGgrRSpjJeExXdDdDvVPKZzktTZMmzkKRBbrcCPpDdpuUPifFOosSgGzhHZsMmSUuIoCMmcORuOxXOoqQiIJyYyFfYWwOoDdAacCkJjRrGgcgDdGgGCWpyYPwjJKZfTtFzeEjqQLlWwuYyrRnLlmDUQqudmMMAaXgGxYpPViYyzZIfsSOovVFSsIiyKTtkRrYbBJjkUuKiIWOowvIiPpIWwitrRvVmMTkKCcntTNEeQqcOGgoIiOoOoCrEegGxhHXRkKFfsMGgmLlSDdwLQqCMmdDYZzycEeXxCcJjtRrYykKpPTNnlyYbBRrnpPZzeEhHNehLhHSsljJHoOJlpPBbtIiMwAaWmTzGXxgDYydZLMmMmjPpRrwWvVvVNMvaAVmeExXzZkKnNniIksSKNHlLEuEeUuUevFfVFfSshbnNBRrHhnaAVvEeYyEKbBksSWDmMduUQvYyPpVqLTtdVFYylLKkfvzZIiDRjJrlEesSyoAaVJaAjaAoiTdDtOogGPpdDpIiPNnOwWzaAZlLTtoIwxiICLlcXWOIiRrcTeEtCsSoOGsSXxeEgYeEiIjdDJEeyHhrRrUuRHhfgBbyYGbnXxeEuzYyBbZmMJkdDKjFUuflLTeEtkKoOkKrRZzRIiCcGgGVvCcVvYaWwBBbNnbBmMXxbeEXxWwlZaAtTzLAyRrSBoOqiIuUQwxXWCcMgQqeEKkPWwpGmyYkmCcRrMKaTyYSsBbtMPQqpcbBCmdDzZwWOWwoKOoXxklLAIUuCcGgiNnUBwWcCrRrRbuBPDdrRRrpiaAIGgrOoRbWwvVxxXXbyxXYaUGgLllLuHzZKkWwhAhZcCJoOjXxxwWCwWBbcuUeEzPpZJjsCcSCcXRFRiIruUiIEeUBbSsQquZLUuUulHVvhwWHhVvPSspZBxXbbBzzMxDdXmZlLyYXAaIiTtKkxWJqQjcCwOoOjJdDlLSsNYQqyqUQquQhHJlLjnrRJBWjkKqQJwbNnhHlQqLiIYyOojbBTzZtwWoOLqQlTkKRrWwDMUSsumrRdtTtISszZJAOoHhaKkjitTJjZaeEAPaXxFfAfFhHUEethHTuKkLuxXUHBbhwWDtThHdJjAaJjhfFnNnNXxHaAAalUuZzeCcvVxXEhTtHQqCsSIEePpizKkuUGgnWwTtCcNWwzjJFfydDYtOogGTtmaAMTUuIiZZcinhHNiIJjTfFFfFftTtbBfSsFImbjJsnNRrSOovbBVQYUusSysQqSPpqPpHBnNblLyJjYyIiDdYTtgGhOoazZAsrRSdoODBDedDEdYnmMNUkKIiVQqrRrMmRvDduYyTVvtfFBbwrREeZzdDhHviIVbBfFQmMoOLlAayCcyYyYYqQNMRrmirRTtTtInwWySeEsYNuUpPnCWwGLlgcZAazoOALlWwanYyNloOLZzoOhFfgGHhtBnNbTqQHiqoOQCcInNFAoFfdAayVvYKCcaKkVvAOoRrkxyYXTzsSZcmMCtDyYpPOPpZvbBKkVzGDwGgPpoOJjLlWtTfFM
diff --git a/src/5/solve.py b/src/5/solve.py deleted file mode 100644 index b9e2154..0000000 --- a/src/5/solve.py +++ /dev/null @@ -1,46 +0,0 @@ -from sys import argv as args
-
-file = open("input.txt")
-input = file.read().strip()
-file.close()
-
-#s = list("dabAcCaCBAcCcaDA")
-
-
-def reactPol(s):
- i = 0
- while i < len(s)-1:
- cs = "".join(s[i:i+2])
- csl = cs.lower()
- if csl[0] == csl[1] and cs[0] != cs[1]: # builds pair with next letter
- s.pop(i)
- s.pop(i) # pop both letters
- if i > 0:
- i -= 1 # check prev
- else:
- i += 1
-
- return len(s)
-
-def solve1():
- print(reactPol(list(input)))
-
-def solve2():
- min = None
- for i in range(26):
- ls = str(chr(i+97))
- print(f"\rTesting: {ls}", end="")
- cs = list(input.replace(ls, "").replace(ls.upper(), ""))
- len = reactPol(cs)
- if min == None or len < min:
- min = len
- print(f"\r \r{min}")
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/6/input.txt b/src/6/input.txt deleted file mode 100644 index 233e279..0000000 --- a/src/6/input.txt +++ /dev/null @@ -1,50 +0,0 @@ -69, 102
-118, 274
-150, 269
-331, 284
-128, 302
-307, 192
-238, 52
-240, 339
-111, 127
-180, 156
-248, 265
-160, 69
-58, 136
-43, 235
-154, 202
-262, 189
-309, 53
-292, 67
-335, 198
-99, 199
-224, 120
-206, 313
-359, 352
-101, 147
-301, 47
-255, 347
-121, 153
-264, 343
-252, 225
-48, 90
-312, 139
-90, 277
-203, 227
-315, 328
-330, 81
-190, 191
-89, 296
-312, 255
-218, 181
-299, 149
-151, 254
-209, 212
-42, 76
-348, 183
-333, 227
-44, 210
-293, 356
-44, 132
-175, 77
-215, 109
\ No newline at end of file diff --git a/src/6/solve.py b/src/6/solve.py deleted file mode 100644 index 90383c5..0000000 --- a/src/6/solve.py +++ /dev/null @@ -1,103 +0,0 @@ -from sys import argv as args
-
-f = open("input.txt")
-data = f.readlines()
-f.close()
-
-def parseEntry(l):
- split = l.split(",")
- return int(split[0]), int(split[1])
-
-data = [parseEntry(l) for l in data if len(l) != 0]
-
-minx = None
-miny = None
-maxx = None
-maxy = None
-for c in data:
- if minx == None or c[0] < minx:
- minx = c[0]
- elif maxx == None or c[0] > maxx:
- maxx = c[0]
- if miny == None or c[1] < miny:
- miny = c[1]
- elif maxy == None or c[1] > maxy:
- maxy = c[1]
-
-def getClosest(x,y):
- mc = None
- md = None
- ad = None
- for i in range(len(data)):
- c = data[i]
- dist = abs(c[0] - x) + abs(c[1] - y) # manhattan distance
- if md == None or dist < md:
- md = dist
- mc = i
- ad = None
- elif dist == md:
- ad = dist
- return mc, ad
-
-def getCombinedDist(x,y):
- dist = 0
- for i in range(len(data)):
- c = data[i]
- dist += abs(c[0] - x) + abs(c[1] - y)
- return dist
-
-def solve1():
- areas = dict()
- for x in range(minx, maxx):
- for y in range(miny, maxy):
- mc, ad = getClosest(x, y)
-
- if ad == None:
- if mc not in areas:
- areas[mc] = 1
- else:
- areas[mc] += 1
-
- # remove outside points
-
- for i in range(len(data)):
- c = data[i]
- mc, ac = getClosest(minx, c[1])
- if (mc == i):
- areas.pop(i)
- continue
- mc, ac = getClosest(maxx, c[1])
- if (mc == i):
- areas.pop(i)
- continue
- mc, ac = getClosest(c[0], miny)
- if (mc == i):
- areas.pop(i)
- continue
- mc, ac = getClosest(c[0], maxy)
- if (mc == i):
- areas.pop(i)
- continue
-
- print(max(areas.values()))
-
-def solve2():
- safezone = 0
- for x in range(minx, maxx):
- for y in range(miny, maxy):
- dist = getCombinedDist(x,y)
- if (dist < 10000):
- safezone += 1
- print(safezone)
-
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
-
-
diff --git a/src/7/input.txt b/src/7/input.txt deleted file mode 100644 index 77b5f0c..0000000 --- a/src/7/input.txt +++ /dev/null @@ -1,101 +0,0 @@ -Step S must be finished before step V can begin.
-Step J must be finished before step T can begin.
-Step N must be finished before step Q can begin.
-Step O must be finished before step H can begin.
-Step I must be finished before step C can begin.
-Step Y must be finished before step R can begin.
-Step K must be finished before step B can begin.
-Step A must be finished before step C can begin.
-Step B must be finished before step D can begin.
-Step W must be finished before step T can begin.
-Step E must be finished before step V can begin.
-Step Q must be finished before step L can begin.
-Step U must be finished before step P can begin.
-Step R must be finished before step C can begin.
-Step V must be finished before step M can begin.
-Step X must be finished before step P can begin.
-Step G must be finished before step T can begin.
-Step T must be finished before step Z can begin.
-Step Z must be finished before step M can begin.
-Step F must be finished before step C can begin.
-Step M must be finished before step L can begin.
-Step D must be finished before step C can begin.
-Step H must be finished before step L can begin.
-Step L must be finished before step P can begin.
-Step P must be finished before step C can begin.
-Step S must be finished before step Q can begin.
-Step M must be finished before step P can begin.
-Step S must be finished before step T can begin.
-Step U must be finished before step T can begin.
-Step X must be finished before step H can begin.
-Step Q must be finished before step G can begin.
-Step Y must be finished before step U can begin.
-Step H must be finished before step C can begin.
-Step O must be finished before step F can begin.
-Step S must be finished before step P can begin.
-Step B must be finished before step E can begin.
-Step S must be finished before step D can begin.
-Step R must be finished before step X can begin.
-Step Z must be finished before step D can begin.
-Step J must be finished before step C can begin.
-Step Z must be finished before step F can begin.
-Step K must be finished before step T can begin.
-Step T must be finished before step H can begin.
-Step E must be finished before step H can begin.
-Step D must be finished before step L can begin.
-Step O must be finished before step A can begin.
-Step V must be finished before step T can begin.
-Step V must be finished before step X can begin.
-Step Q must be finished before step X can begin.
-Step O must be finished before step K can begin.
-Step L must be finished before step C can begin.
-Step W must be finished before step H can begin.
-Step I must be finished before step T can begin.
-Step M must be finished before step H can begin.
-Step V must be finished before step G can begin.
-Step K must be finished before step P can begin.
-Step E must be finished before step X can begin.
-Step V must be finished before step C can begin.
-Step Y must be finished before step W can begin.
-Step J must be finished before step G can begin.
-Step B must be finished before step C can begin.
-Step B must be finished before step Z can begin.
-Step K must be finished before step R can begin.
-Step Y must be finished before step V can begin.
-Step X must be finished before step G can begin.
-Step J must be finished before step K can begin.
-Step A must be finished before step M can begin.
-Step T must be finished before step M can begin.
-Step W must be finished before step D can begin.
-Step G must be finished before step F can begin.
-Step A must be finished before step B can begin.
-Step W must be finished before step F can begin.
-Step Y must be finished before step P can begin.
-Step B must be finished before step V can begin.
-Step N must be finished before step G can begin.
-Step J must be finished before step H can begin.
-Step S must be finished before step L can begin.
-Step A must be finished before step R can begin.
-Step X must be finished before step D can begin.
-Step Y must be finished before step M can begin.
-Step H must be finished before step P can begin.
-Step F must be finished before step D can begin.
-Step S must be finished before step G can begin.
-Step K must be finished before step C can begin.
-Step W must be finished before step Z can begin.
-Step A must be finished before step Z can begin.
-Step O must be finished before step Y can begin.
-Step U must be finished before step C can begin.
-Step X must be finished before step M can begin.
-Step Y must be finished before step A can begin.
-Step F must be finished before step P can begin.
-Step J must be finished before step Y can begin.
-Step R must be finished before step G can begin.
-Step Y must be finished before step Q can begin.
-Step D must be finished before step P can begin.
-Step O must be finished before step U can begin.
-Step O must be finished before step I can begin.
-Step E must be finished before step L can begin.
-Step G must be finished before step Z can begin.
-Step T must be finished before step F can begin.
-Step Q must be finished before step F can begin.
diff --git a/src/7/solve.py b/src/7/solve.py deleted file mode 100644 index b448f38..0000000 --- a/src/7/solve.py +++ /dev/null @@ -1,131 +0,0 @@ -from sys import argv as args
-
-file = open("input.txt")
-data = [x for x in file.readlines()]
-file.close()
-
-"""
-data =
-Step C must be finished before step A can begin.
-Step C must be finished before step F can begin.
-Step A must be finished before step B can begin.
-Step A must be finished before step D can begin.
-Step B must be finished before step E can begin.
-Step D must be finished before step E can begin.
-Step F must be finished before step E can begin.
-"""
-#data = data.split("\n")
-
-def removeReq(req, instructs): # remove requirements
- for res in instructs:
- if req in instructs[res]:
- instructs[res].remove(req)
-
-def parseEntry(l):
- split = l.split(" ")
- firstl = split[1]
- nextl = split[-3]
- return firstl, nextl
-
-
-def genInstructs():
- global data
- data = [parseEntry(l) for l in data if len(l) != 0]
-
- instructs = dict()
-
- for ins in data:
- req = ins[0]
- res = ins[1]
- if res not in instructs:
- instructs[res] = [ req ]
- else:
- instructs[res].append(req)
-
- values = list(instructs.values())[:]
- for reslist in values:
- for res in reslist:
- if res not in instructs:
- instructs[res] = []
-
- return instructs
-
-def solve1():
- instructs = genInstructs()
- i = 0
- plan = list()
- while i < len(instructs):
- res = sorted(instructs.keys())[i] # alphabetically
- if len(instructs[res]) == 0:
- plan.append(res)
- instructs.pop(res, None)
- removeReq(res, instructs)
- i = 0
- else:
- i += 1
-
- print("".join(plan))
-
- return
-
-def overlap(arr1, arr2):
- for a1 in arr1:
- if a1 in arr2:
- return True
- return False
-
-def checkfail(workers):
- done = True
- for w in workers:
- if w[2]:
- done = False
- break
- return done
-
-def solve2():
- instructs = genInstructs()
- # (5) worker: (task, time, done)
- workers = [["", 0, False] for x in range(5)]
-
- time = -1
- stop = False
- while not stop:
- time += 1
- for i in range(len(workers)):
- w = workers[i]
- if time >= w[1]:
- if w[2]:
- removeReq(w[0], instructs)
- #print("end : " + str(i) + " - " + str((w[0], w[1])))
- w[2] = False
- #i = 0
- if len(instructs) == 0 and checkfail(workers):
- stop = True
- break
-
- for i in range(len(workers)):
- w = workers[i]
- if time >= w[1]:
- for res in sorted(instructs.keys()):
- if len(instructs[res]) == 0:
- w[0] = res
- #print(instructs)
- #print("start : " + str(i) + " - " + str((res, time)))
- w[1] = time + ord(res)-65+1 + 60
- w[2] = True
- instructs.pop(res, None)
- break
-
- #print()
- print(time)
-
- return
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/8/input.txt b/src/8/input.txt deleted file mode 100644 index bbf272c..0000000 --- a/src/8/input.txt +++ /dev/null @@ -1 +0,0 @@ -7 11 6 3 5 5 3 6 1 7 0 10 1 7 4 5 1 3 1 5 9 1 1 3 2 1 3 1 2 1 6 0 9 2 5 9 4 1 1 2 7 2 3 1 3 3 1 3 1 9 0 9 1 7 9 9 1 7 9 5 8 2 1 3 3 3 2 1 2 2 5 2 1 3 2 1 3 6 1 6 0 7 1 2 6 4 4 3 4 1 2 2 1 2 3 1 9 0 11 9 2 3 2 6 7 1 4 5 3 4 1 1 3 1 3 3 2 3 1 1 8 0 7 1 3 6 8 8 3 8 1 3 1 1 2 2 3 3 3 1 5 2 2 1 3 6 1 8 0 10 7 3 1 4 9 5 4 4 8 6 2 1 1 1 1 3 3 3 1 9 0 10 7 9 1 2 2 1 3 9 2 3 2 1 3 2 2 1 1 2 1 1 9 0 8 1 6 1 8 5 1 1 1 1 1 3 1 3 3 3 1 1 2 4 4 4 2 1 3 5 1 6 0 6 1 8 5 2 1 9 3 3 1 1 1 3 1 7 0 10 2 6 9 7 8 1 1 3 2 1 3 1 2 2 1 2 3 1 8 0 6 1 9 6 1 9 5 1 2 1 1 3 3 1 2 4 2 2 2 5 3 7 1 9 0 8 5 9 3 1 4 3 1 5 1 2 1 1 3 1 2 1 2 1 5 0 8 5 1 3 6 3 1 3 9 3 1 3 3 2 1 7 0 11 7 8 5 4 9 6 2 8 7 1 9 3 1 2 2 1 3 1 5 5 5 5 5 1 4 1 3 5 5 2 5 3 3 7 1 7 0 11 3 1 4 9 2 7 7 9 5 5 9 2 3 1 2 3 3 3 1 9 0 10 9 5 1 6 9 4 1 6 1 1 3 3 2 3 3 1 3 3 3 1 6 0 8 7 4 4 1 1 1 8 3 3 1 1 1 2 2 5 4 4 3 2 3 3 3 7 1 7 0 9 1 9 3 5 5 4 3 3 1 1 3 1 3 1 2 2 1 6 0 6 1 8 1 4 1 5 3 1 2 1 1 1 1 5 0 8 2 4 3 4 4 4 3 1 1 1 1 3 3 5 5 3 5 2 5 2 3 6 1 8 0 7 7 9 1 1 8 1 2 3 2 2 1 2 1 1 1 1 7 0 7 7 6 3 5 1 8 8 1 3 3 1 2 3 3 1 6 0 10 9 4 6 1 9 4 2 1 1 4 1 1 3 1 2 2 4 4 1 3 2 2 3 4 1 8 0 10 9 2 2 9 5 5 6 3 3 1 1 3 2 2 3 1 1 3 1 6 0 10 1 5 1 6 2 1 8 8 3 8 1 1 1 1 2 1 1 9 0 7 8 4 2 5 1 1 7 1 2 2 2 1 1 3 3 1 1 1 4 2 3 6 1 7 0 9 9 2 9 2 9 5 7 1 6 2 1 1 2 3 3 1 1 9 0 10 1 5 8 3 4 4 1 2 3 1 2 2 3 1 3 2 2 1 1 1 8 0 9 1 8 1 6 1 7 3 1 2 2 1 1 2 1 1 2 2 4 4 3 5 1 3 4 2 7 4 3 3 4 1 5 0 8 9 1 5 9 2 1 3 7 1 3 2 1 1 1 6 0 11 2 9 1 4 9 1 1 1 6 7 7 1 1 1 3 1 1 1 8 0 9 9 9 7 9 9 8 6 6 1 1 3 1 2 1 2 1 1 3 5 2 3 3 4 1 6 0 11 6 2 8 1 7 5 7 2 6 4 1 2 2 1 1 2 3 1 7 0 6 7 2 5 1 5 6 2 1 3 3 2 1 3 1 6 0 6 1 8 3 6 9 5 3 2 1 2 2 1 3 1 4 2 3 5 1 5 0 7 8 1 3 6 1 9 3 2 3 2 1 2 1 6 0 8 8 2 1 7 4 2 5 9 1 3 3 1 1 2 1 5 0 9 1 8 2 8 1 4 8 9 3 1 2 1 3 3 5 4 2 4 3 3 5 1 9 0 10 1 5 7 1 1 3 6 1 5 6 1 3 1 1 2 1 2 1 2 1 7 0 10 1 4 3 1 9 1 7 9 1 1 1 1 3 1 3 1 3 1 9 0 8 8 4 8 3 1 8 3 5 2 1 3 1 1 1 1 1 3 5 5 4 2 3 4 6 4 5 4 3 7 1 9 0 10 7 1 1 6 3 7 8 1 6 6 3 1 1 1 3 1 1 2 2 1 6 0 9 2 2 5 2 1 4 9 9 1 1 3 2 1 1 1 1 7 0 7 6 4 8 5 7 1 1 3 3 1 1 2 1 1 5 2 3 1 2 5 1 3 4 1 9 0 8 2 9 3 1 4 8 8 9 3 2 3 1 1 1 1 3 2 1 5 0 7 8 2 4 2 1 1 3 3 1 2 3 1 1 7 0 11 7 8 7 5 5 4 6 7 3 1 1 3 1 2 1 3 1 3 3 1 4 3 3 5 1 8 0 9 1 1 2 9 8 1 6 9 5 2 2 3 1 3 2 1 1 1 9 0 6 8 7 2 7 1 3 2 1 1 1 2 1 3 1 3 1 9 0 6 5 5 1 8 6 4 1 1 1 2 1 1 1 1 1 2 4 1 4 5 3 4 1 8 0 6 5 4 1 3 1 4 3 2 2 1 3 2 3 1 1 9 0 9 2 1 4 1 3 6 4 8 8 2 3 1 1 1 2 3 2 1 1 9 0 8 2 8 5 1 9 8 2 5 1 2 1 1 3 3 3 1 3 3 5 1 2 3 6 1 8 0 11 7 2 9 2 8 4 9 1 3 1 2 1 2 1 2 3 1 1 1 1 5 0 11 6 8 1 4 7 4 1 1 8 5 7 2 1 1 1 2 1 9 0 8 1 6 1 5 1 8 5 5 3 1 2 3 2 3 1 1 1 1 4 3 5 1 1 6 5 1 1 5 3 3 5 1 8 0 8 1 2 5 4 2 7 9 6 1 1 2 1 2 2 3 2 1 8 0 9 4 5 8 1 7 7 1 1 6 3 3 2 3 2 2 1 3 1 5 0 8 6 7 5 3 1 4 5 2 1 1 2 1 2 5 5 1 5 3 3 5 1 9 0 7 6 9 8 1 1 7 6 3 1 2 1 1 2 2 2 3 1 7 0 6 2 1 2 5 4 8 2 3 3 1 1 3 1 1 5 0 9 1 8 4 7 9 4 2 7 8 1 3 2 1 2 2 2 4 3 3 3 5 1 7 0 11 3 2 9 5 7 1 4 7 7 1 9 1 3 3 1 2 1 1 1 7 0 10 2 1 9 8 9 1 6 4 1 3 2 3 3 1 1 3 1 1 9 0 10 8 9 5 9 2 1 5 1 9 6 1 3 2 1 1 2 1 1 2 1 3 4 1 1 3 7 1 9 0 7 2 8 1 6 1 6 6 2 3 1 1 3 3 2 1 2 1 9 0 10 1 6 5 4 1 9 4 7 4 9 1 3 1 3 1 2 1 1 3 1 8 0 9 4 7 1 2 2 7 2 6 3 1 3 2 3 2 2 1 2 4 2 3 1 1 5 1 3 6 1 6 0 9 3 1 4 6 3 5 3 6 5 2 1 1 2 1 1 1 5 0 6 5 1 2 3 3 3 1 2 1 3 1 1 7 0 7 3 7 1 7 4 3 7 1 3 1 3 3 1 1 5 4 2 4 2 4 4 4 4 4 4 3 4 1 7 0 10 1 3 7 5 1 1 7 8 6 8 3 3 1 2 1 1 3 1 6 0 8 9 1 5 4 4 3 4 7 1 1 2 1 1 3 1 7 0 10 7 1 1 1 1 3 2 3 8 7 1 2 3 1 1 3 3 3 4 1 2 3 7 1 8 0 8 3 4 2 6 1 1 6 9 3 1 2 2 3 1 2 1 1 6 0 10 4 8 9 6 9 2 2 9 1 4 1 2 1 2 2 2 1 8 0 10 6 4 4 9 4 1 5 8 4 2 2 2 1 2 2 1 1 1 1 4 2 1 3 5 5 3 7 1 8 0 10 5 2 6 8 1 2 7 6 2 1 2 2 2 1 3 1 2 3 1 6 0 9 4 1 6 1 1 8 1 4 6 1 1 2 1 2 1 1 7 0 7 1 9 4 1 7 5 1 1 3 2 2 3 1 3 2 2 1 1 3 4 3 3 4 1 7 0 6 7 1 6 3 8 7 2 1 1 2 1 2 2 1 5 0 8 8 4 9 9 7 5 2 1 1 3 1 1 1 1 6 0 9 7 1 6 8 1 2 7 1 6 1 3 3 2 3 2 2 2 2 2 2 2 2 1 7 5 5 7 2 5 3 3 7 1 5 0 7 2 3 7 9 7 9 1 1 1 1 2 3 1 5 0 9 5 5 7 9 2 3 2 9 1 1 1 2 2 2 1 6 0 6 1 2 7 1 1 6 1 1 1 1 1 3 3 5 5 1 3 1 3 3 6 1 8 0 9 1 1 6 8 8 7 7 5 8 1 1 1 3 2 1 1 2 1 5 0 6 1 6 3 9 7 1 3 2 1 3 1 1 9 0 11 3 2 2 2 1 7 5 6 6 1 7 1 1 2 1 1 1 2 1 3 1 3 3 1 5 4 3 5 1 7 0 7 1 7 1 1 4 8 2 3 2 3 1 1 1 3 1 8 0 7 4 6 8 7 1 5 5 1 1 3 1 1 3 3 3 1 5 0 9 8 5 9 9 1 2 5 6 9 2 1 1 3 1 4 1 2 2 1 3 6 1 5 0 10 6 9 5 3 3 7 5 5 1 2 3 1 1 3 3 1 7 0 9 1 1 3 4 5 1 3 6 7 2 1 1 3 3 1 1 1 7 0 8 5 1 4 4 4 8 9 8 1 2 2 3 1 3 2 1 4 3 5 4 5 3 5 1 5 0 6 5 2 5 1 5 4 3 1 1 1 2 1 8 0 7 7 3 8 5 1 7 9 2 2 2 2 2 3 1 1 1 6 0 7 7 9 3 9 1 2 6 2 3 1 2 2 1 4 4 5 1 3 3 2 5 5 4 3 6 1 7 0 11 8 1 6 6 1 6 8 4 4 1 6 1 3 1 1 3 2 2 1 6 0 9 6 4 3 1 5 2 1 1 2 1 1 1 2 2 1 1 6 0 7 4 6 3 3 1 6 8 1 1 1 2 2 3 3 4 3 5 4 2 3 4 1 8 0 8 1 1 4 1 5 9 5 2 3 1 3 1 1 2 3 2 1 5 0 10 3 5 1 5 4 4 4 9 3 2 1 2 1 1 2 1 6 0 9 1 9 1 3 4 4 7 4 1 2 1 3 3 1 1 3 2 2 2 3 7 1 5 0 10 7 4 6 9 3 1 3 2 4 5 1 2 1 3 3 1 8 0 9 5 6 1 7 7 6 5 5 1 2 1 2 3 3 2 2 1 1 8 0 11 1 2 4 1 8 7 9 2 6 7 6 1 2 3 1 2 1 1 2 2 3 3 2 5 4 4 3 4 1 6 0 11 6 9 9 4 8 9 3 5 1 7 6 2 3 1 2 3 3 1 9 0 7 5 4 9 1 1 5 1 2 1 1 2 3 1 1 2 3 1 5 0 7 1 5 8 1 7 4 5 2 1 3 1 1 3 5 5 1 3 4 1 6 0 6 6 1 5 1 4 7 3 2 3 1 1 1 1 6 0 11 5 3 8 6 2 8 7 4 1 7 5 2 3 2 1 3 1 1 9 0 10 6 2 1 1 2 5 9 4 1 4 3 1 3 1 3 3 1 2 2 2 3 5 2 3 7 2 3 4 5 3 4 1 8 0 9 7 1 9 1 2 9 4 8 2 2 3 1 2 1 2 2 1 1 6 0 9 4 1 8 9 6 1 7 6 8 1 3 3 3 1 1 1 5 0 8 1 1 7 8 6 4 1 7 1 2 1 3 1 5 4 1 5 3 6 1 5 0 8 9 8 4 1 5 4 2 9 1 1 2 3 3 1 6 0 7 1 7 7 6 2 1 8 2 2 2 1 1 2 1 8 0 9 9 7 7 1 4 8 3 5 5 3 1 2 1 1 1 2 2 3 1 3 5 1 2 3 7 1 5 0 11 7 1 3 1 6 9 3 2 3 3 3 1 1 3 2 2 1 8 0 10 1 6 9 5 5 3 8 5 6 3 1 3 1 3 3 1 3 2 1 6 0 11 8 7 3 4 6 1 2 6 7 4 4 1 2 1 1 3 1 5 5 3 3 1 1 4 3 7 1 9 0 9 3 8 5 8 9 1 1 5 5 2 2 2 2 1 1 3 1 2 1 9 0 11 5 6 1 1 4 6 7 9 8 5 8 1 1 2 3 3 1 2 2 3 1 8 0 9 5 1 4 9 8 1 1 8 9 1 3 1 1 2 1 2 1 1 1 1 2 2 1 5 2 6 2 3 5 5 4 3 6 1 7 0 8 3 6 2 7 6 1 8 6 1 3 3 1 2 1 1 1 7 0 10 8 7 5 4 3 3 1 1 7 1 3 1 2 1 2 2 1 1 8 0 10 1 9 9 1 4 9 5 2 8 6 1 2 1 3 3 2 2 2 3 2 1 2 2 3 3 6 1 6 0 10 1 2 3 7 5 4 3 3 1 6 3 1 1 1 1 2 1 5 0 9 9 7 7 4 1 4 6 7 7 3 1 2 2 1 1 6 0 9 8 4 3 1 4 1 2 9 1 1 1 1 2 2 3 1 1 3 1 3 1 3 4 1 5 0 10 3 7 4 2 4 1 5 6 8 7 1 2 2 3 2 1 5 0 8 5 7 9 8 3 5 1 2 2 1 1 1 1 1 9 0 9 7 7 9 7 1 3 7 1 9 2 1 3 2 1 1 2 1 2 1 3 4 4 3 5 1 7 0 10 9 1 6 6 7 2 6 4 5 9 1 3 1 3 1 2 2 1 8 0 8 7 1 2 8 6 4 7 9 1 2 2 3 2 1 3 1 1 5 0 8 7 1 2 1 9 6 2 9 1 3 3 1 1 2 1 2 3 3 3 6 1 5 0 7 2 5 8 5 1 2 5 2 3 3 1 3 1 7 0 7 1 9 5 5 8 6 4 2 3 1 1 1 1 1 1 8 0 7 8 8 3 1 2 7 2 1 3 3 3 1 3 1 2 5 4 2 3 2 3 5 3 5 7 4 5 3 4 1 6 0 8 1 2 7 7 1 1 3 8 2 3 2 3 1 1 1 9 0 10 1 7 3 9 8 6 1 3 1 7 1 1 3 3 3 2 1 1 3 1 9 0 6 5 6 9 2 1 8 1 3 2 2 3 1 1 3 2 2 1 3 2 3 4 1 9 0 7 8 7 1 6 7 2 1 3 1 2 2 2 1 1 2 2 1 8 0 11 1 6 5 1 6 1 6 6 8 5 3 3 1 1 3 2 2 2 2 1 6 0 9 4 3 9 6 6 1 2 8 6 1 3 1 1 1 3 2 2 1 2 3 7 1 6 0 10 1 6 5 7 1 6 1 1 8 7 3 3 3 2 1 1 1 5 0 8 7 1 7 3 4 5 9 8 1 2 1 1 2 1 8 0 8 1 4 6 5 1 1 7 1 1 3 3 1 3 1 1 1 5 5 3 5 1 3 5 3 5 1 7 0 11 2 2 6 8 4 7 2 7 8 1 9 3 3 3 2 1 2 3 1 9 0 6 4 6 1 1 1 7 3 3 2 1 2 1 1 3 1 1 5 0 8 5 3 7 7 4 5 1 8 3 3 3 1 1 2 3 1 5 3 1 2 4 3 1 5 4 3 5 1 9 0 6 7 4 4 4 1 5 1 2 1 3 1 3 1 2 3 1 8 0 10 4 6 2 8 1 9 9 4 5 4 1 3 1 2 2 3 2 2 1 5 0 7 5 1 1 6 6 6 1 2 2 1 1 2 2 5 3 5 5 3 5 1 9 0 7 6 1 8 7 1 3 7 1 2 3 3 3 2 2 1 1 1 5 0 11 3 2 3 2 1 4 5 1 2 8 3 3 2 3 1 3 1 8 0 10 8 1 3 9 2 1 6 9 6 3 2 1 1 3 3 3 2 1 1 1 3 3 5 3 7 1 6 0 8 8 1 9 6 4 9 8 1 2 2 1 2 3 2 1 9 0 11 3 5 4 7 2 7 1 6 6 9 4 2 3 1 1 1 1 2 3 1 1 5 0 11 2 1 4 2 1 7 3 9 3 5 1 2 1 3 3 3 4 5 2 5 2 3 2 3 4 1 5 0 8 9 1 5 6 1 6 4 5 2 1 1 1 2 1 7 0 9 6 1 4 8 8 7 4 1 1 2 2 1 3 1 1 1 1 7 0 8 1 8 8 3 5 6 7 2 3 1 3 3 2 1 2 1 2 1 1 3 5 1 9 0 6 7 1 7 7 7 8 3 2 1 3 1 1 1 1 1 1 6 0 8 6 2 1 8 8 8 1 4 2 1 2 3 1 1 1 6 0 7 9 1 6 6 7 3 5 2 2 1 1 1 2 4 4 4 2 4 1 5 7 7 4 3 3 6 1 7 0 7 2 6 7 1 8 1 9 1 2 2 3 1 2 1 1 7 0 7 2 9 9 1 8 4 8 1 3 1 1 2 2 2 1 5 0 7 7 1 6 1 9 3 8 2 1 1 1 1 3 1 4 4 4 4 3 5 1 7 0 8 6 1 1 7 5 3 5 8 2 2 1 3 1 1 3 1 9 0 9 4 9 3 3 1 3 9 3 1 3 1 3 1 3 1 1 3 2 1 8 0 11 6 3 2 7 7 1 6 1 1 7 6 1 3 2 1 1 3 2 2 1 3 2 3 2 3 5 1 6 0 11 1 1 7 7 8 1 2 3 7 1 5 1 2 3 3 2 1 1 6 0 7 4 1 1 5 9 7 3 2 2 1 1 3 3 1 6 0 10 8 7 1 2 9 6 6 1 8 5 3 3 1 3 1 2 5 2 5 4 3 3 7 1 7 0 11 5 9 1 3 1 5 4 5 4 9 7 2 1 3 3 1 1 3 1 6 0 8 1 2 4 7 1 8 4 6 2 1 1 1 3 1 1 8 0 9 1 6 4 3 1 3 2 6 3 1 2 1 1 1 3 1 1 4 3 5 4 1 4 3 4 5 2 6 5 7 3 5 3 3 5 1 5 0 7 7 1 8 3 1 9 1 1 1 2 2 1 1 9 0 8 1 8 1 2 6 1 2 6 2 3 3 3 1 2 3 1 3 1 8 0 9 2 1 1 9 9 5 5 2 4 1 3 3 3 1 2 3 2 3 5 5 4 3 3 5 1 7 0 7 5 7 1 7 8 6 6 2 1 3 2 3 2 2 1 7 0 7 6 3 6 9 4 1 1 3 1 2 3 2 3 2 1 9 0 7 4 7 1 2 4 5 8 3 3 3 1 1 1 1 1 1 4 4 3 5 1 3 4 1 6 0 7 8 3 8 9 1 6 2 3 1 2 1 2 2 1 9 0 9 3 9 1 7 1 3 1 3 7 1 1 1 1 2 1 2 3 2 1 5 0 9 8 6 2 1 2 6 2 7 1 2 1 2 1 2 3 5 2 2 3 6 1 5 0 6 8 1 6 8 7 4 2 1 2 2 1 1 7 0 9 5 3 4 6 2 4 3 1 1 1 2 1 1 3 1 1 1 7 0 11 2 7 1 1 9 9 7 6 5 5 8 2 3 3 1 1 2 3 3 1 3 5 2 4 3 6 1 6 0 9 9 8 2 6 9 8 1 4 4 1 3 2 1 3 1 1 9 0 6 8 2 1 2 5 9 1 2 1 2 1 3 2 1 2 1 5 0 9 3 3 8 4 9 1 5 5 7 2 1 3 1 2 3 5 1 2 2 3 2 4 5 4 5 3 6 1 7 0 10 6 9 9 9 3 4 8 9 9 1 3 1 2 1 1 1 2 1 9 0 6 1 1 2 3 6 1 1 3 1 1 2 3 3 2 3 1 8 0 7 5 6 2 9 6 1 4 1 3 1 1 1 1 2 3 3 3 2 1 5 3 3 4 1 6 0 9 1 1 1 9 1 5 2 2 5 3 3 2 3 1 2 1 6 0 11 4 1 4 1 4 1 2 5 8 6 6 3 2 3 1 2 3 1 9 0 8 6 9 1 6 4 7 2 9 1 2 1 1 1 1 1 2 3 3 2 2 1 3 5 1 7 0 7 3 8 1 8 1 7 5 2 2 2 1 1 1 3 1 8 0 7 5 1 3 1 6 4 9 1 3 3 1 3 1 2 2 1 8 0 9 9 9 7 4 2 1 9 8 1 3 1 1 1 3 3 3 1 1 4 2 2 1 3 5 1 9 0 8 1 3 3 2 1 4 9 3 3 2 1 1 2 2 3 1 3 1 5 0 8 1 8 4 6 2 9 3 2 2 1 1 3 2 1 6 0 9 1 1 4 7 1 2 9 7 8 1 1 1 2 1 3 2 5 5 2 4 6 1 3 4 1 5 3 3 5 1 7 0 10 2 1 4 1 3 3 9 3 6 9 1 1 1 2 3 2 2 1 9 0 6 6 7 1 4 8 1 1 3 3 1 1 3 1 1 2 1 7 0 9 2 9 5 7 7 3 1 5 8 1 2 3 1 3 3 2 1 5 5 5 1 3 4 1 5 0 6 4 7 7 1 2 5 2 2 3 2 1 1 6 0 9 7 5 6 1 1 4 4 8 3 2 2 2 1 3 2 1 5 0 9 1 1 7 9 7 8 1 5 9 2 1 1 2 3 3 4 5 3 3 6 1 6 0 10 1 6 2 6 9 3 2 5 7 3 2 1 2 3 1 1 1 5 0 9 6 4 2 7 1 2 7 2 1 1 2 1 1 3 1 5 0 7 1 1 6 3 9 5 5 3 1 3 1 3 5 1 4 2 3 1 3 7 1 5 0 11 8 1 6 8 4 9 7 6 5 1 1 1 3 2 1 1 1 7 0 10 7 7 4 4 7 4 3 1 1 1 1 3 3 1 2 1 1 1 5 0 10 4 4 1 1 3 2 8 6 1 3 1 1 1 1 2 2 1 1 3 5 1 3 3 6 1 9 0 7 6 1 6 5 5 3 6 1 3 1 2 1 3 1 1 2 1 9 0 6 1 3 9 3 9 3 3 3 2 1 1 1 1 1 1 1 9 0 11 7 5 5 1 8 9 2 1 8 4 1 2 2 2 1 2 2 2 1 1 3 5 4 5 1 5 4 2 7 5 5 3 7 1 5 0 10 7 3 6 3 1 4 5 1 2 8 2 1 1 2 2 1 8 0 11 5 2 1 9 4 8 2 1 2 3 5 3 3 1 3 2 3 2 1 1 5 0 10 6 1 5 2 5 8 8 4 1 6 2 2 2 1 3 2 1 3 5 3 3 1 3 7 1 8 0 11 8 5 9 9 9 3 1 5 2 6 4 3 1 2 2 2 1 3 1 1 7 0 7 9 4 1 5 1 7 3 1 1 1 3 2 1 1 1 6 0 8 8 5 2 5 8 1 7 5 3 1 1 1 1 3 5 2 3 1 1 1 2 3 4 1 9 0 7 6 3 4 1 7 6 7 2 2 3 1 1 1 1 1 3 1 6 0 6 8 3 7 1 6 2 3 1 1 3 1 1 1 9 0 9 1 4 6 9 8 3 6 5 6 1 1 2 3 2 2 1 2 2 3 1 1 2 3 6 1 6 0 8 3 4 2 1 2 9 7 1 2 2 1 1 1 2 1 6 0 10 3 3 5 7 6 7 1 1 7 3 3 2 3 2 1 3 1 5 0 9 1 4 8 5 7 3 1 9 1 1 1 2 1 3 5 1 2 1 2 3 3 6 1 6 0 10 1 8 1 8 6 7 6 2 9 2 2 1 1 1 3 1 1 9 0 10 5 2 6 7 3 1 6 2 7 9 3 3 2 1 1 3 2 2 3 1 5 0 10 2 8 3 6 5 3 3 3 1 4 1 3 3 1 2 3 2 2 2 4 1 4 2 4 4 6 4 4 3 4 1 8 0 9 9 4 7 4 2 9 3 1 4 2 1 1 3 3 1 2 2 1 5 0 10 6 8 3 2 2 1 1 2 4 2 1 3 3 1 3 1 7 0 9 1 8 4 9 9 5 5 1 8 3 1 2 2 3 1 3 4 2 1 2 3 5 1 9 0 6 4 2 7 5 7 1 2 3 1 1 2 2 3 2 3 1 9 0 7 3 1 9 6 9 1 9 2 3 3 1 1 2 2 1 3 1 6 0 9 1 3 4 4 4 2 6 6 7 2 2 3 1 1 2 4 3 4 1 5 3 4 1 5 0 11 6 2 1 8 9 1 4 2 9 2 8 2 1 2 1 1 1 8 0 6 4 5 5 7 9 1 2 2 2 3 1 2 2 2 1 5 0 8 7 2 7 6 4 9 1 3 3 1 3 1 2 1 5 4 3 3 7 1 6 0 7 9 8 4 5 3 1 3 3 1 1 1 1 3 1 5 0 11 1 1 3 8 5 5 5 8 1 4 4 3 1 1 2 3 1 5 0 6 1 6 8 6 8 9 1 1 1 1 2 5 1 4 3 3 3 4 4 2 1 4 5 5 3 5 1 8 0 6 4 1 7 1 8 5 3 1 1 3 2 3 2 1 1 8 0 11 3 7 2 9 1 1 7 6 2 8 9 3 1 3 3 1 1 2 1 1 9 0 8 6 4 3 2 2 2 1 7 2 3 3 1 1 3 3 1 3 5 1 2 1 2 3 4 1 9 0 7 6 9 9 2 2 1 8 1 3 3 1 3 3 1 2 1 1 7 0 10 7 8 1 6 6 9 5 5 1 8 3 2 1 2 2 1 3 1 9 0 10 3 5 9 5 5 1 5 2 7 1 3 1 1 3 3 1 1 3 1 1 3 1 5 3 6 1 6 0 9 4 7 8 1 7 3 1 9 6 1 2 1 2 2 1 1 9 0 6 2 1 2 3 2 7 3 1 1 1 3 3 3 3 2 1 9 0 10 9 3 8 8 4 1 5 3 3 1 1 2 3 1 2 3 3 1 1 3 3 2 4 1 5 3 5 1 5 0 10 6 7 3 1 9 8 9 5 7 9 2 3 3 3 1 1 6 0 8 2 7 4 4 6 5 7 1 2 2 1 1 1 1 1 9 0 9 1 9 9 9 7 8 1 3 6 2 1 1 1 1 3 2 1 3 3 4 4 1 2 3 6 1 6 0 8 9 1 2 4 7 4 1 6 1 3 1 2 3 3 1 6 0 11 1 3 9 2 6 1 4 2 5 4 4 3 3 1 2 3 3 1 7 0 7 2 6 1 2 1 6 1 3 1 1 1 2 1 2 1 2 2 2 1 5 5 3 5 7 1 5 4 3 7 1 7 0 11 1 3 5 5 2 7 6 4 8 8 9 1 1 1 3 1 1 3 1 8 0 8 9 6 1 7 1 1 7 8 3 2 2 2 2 1 2 1 1 5 0 7 8 4 1 1 3 8 4 3 2 1 2 1 5 3 2 1 2 4 3 3 4 1 9 0 9 6 8 6 9 1 4 5 3 1 1 3 1 3 3 1 2 3 2 1 9 0 6 5 1 2 1 8 2 2 2 1 3 3 1 2 3 1 1 7 0 6 5 1 8 1 6 2 1 3 2 3 2 3 3 3 1 4 3 3 7 1 6 0 9 2 1 1 5 8 1 9 5 5 1 1 1 2 1 1 1 6 0 11 8 4 6 4 2 7 4 3 1 7 1 1 3 1 3 1 1 1 7 0 6 5 9 4 2 1 1 1 3 2 2 2 3 1 4 4 4 4 5 3 2 3 6 1 9 0 8 1 7 4 5 7 1 2 1 3 1 1 3 3 2 1 1 2 1 9 0 11 2 8 8 1 2 7 5 5 6 1 4 3 2 2 1 1 1 2 2 1 1 6 0 9 4 7 8 1 7 1 8 7 2 3 3 1 3 2 1 2 3 5 1 4 5 3 5 1 9 0 11 9 7 2 9 9 8 1 1 2 9 1 1 2 2 1 2 2 3 3 3 1 8 0 9 4 5 7 1 7 1 9 5 2 1 2 1 3 2 1 3 1 1 9 0 8 7 1 5 2 5 5 8 9 3 3 3 2 3 2 1 2 3 3 2 2 3 3 3 5 1 1 5 4 2 6 3 4 3 3 7 1 6 0 8 1 2 7 9 8 9 5 3 1 2 1 2 3 1 1 5 0 8 2 7 6 9 1 7 1 3 3 3 2 2 1 1 7 0 6 8 1 1 4 6 2 1 3 1 1 2 3 1 3 1 2 2 5 5 1 3 7 1 5 0 11 4 6 8 1 7 1 9 3 8 3 3 2 3 1 2 3 1 5 0 7 2 4 1 5 4 8 1 1 1 3 2 2 1 8 0 7 8 6 7 8 1 1 8 1 3 3 2 3 2 2 3 5 3 4 1 2 3 5 3 6 1 7 0 10 4 5 4 8 1 7 6 2 5 9 1 3 3 2 3 1 1 1 6 0 11 3 4 6 8 6 9 1 9 3 3 2 3 2 2 2 1 1 1 8 0 6 7 4 1 4 2 5 1 1 3 2 1 2 3 1 3 4 4 5 1 2 3 5 1 5 0 10 8 1 4 3 3 1 3 8 5 1 1 1 1 1 2 1 8 0 9 1 5 7 5 6 8 8 1 3 3 1 2 1 1 3 2 3 1 9 0 9 9 2 4 2 9 7 9 1 3 3 1 2 2 2 2 1 1 1 4 3 5 3 1 5 1 5 5 5 3 6 1 6 0 8 6 9 4 3 5 4 1 1 2 1 1 2 3 1 1 5 0 11 8 2 3 9 3 7 9 7 5 1 8 1 3 1 1 1 1 9 0 9 7 8 1 3 1 6 4 7 3 3 1 2 2 2 1 3 3 1 5 1 2 1 1 2 3 6 1 8 0 8 4 1 4 5 8 2 8 6 1 2 1 1 3 1 3 2 1 7 0 9 1 3 9 1 8 2 1 1 9 3 1 3 3 3 2 2 1 8 0 7 5 1 2 9 2 2 5 1 2 3 3 2 3 1 2 2 3 2 3 5 4 3 5 1 6 0 6 1 4 1 6 4 4 1 2 1 1 1 1 1 9 0 8 7 9 8 2 6 1 8 3 3 1 3 1 3 1 1 1 3 1 8 0 9 6 1 8 9 5 1 7 2 8 3 3 1 1 3 3 3 2 3 4 3 1 5 3 7 1 6 0 8 8 2 7 1 4 7 2 3 1 3 1 1 3 2 1 7 0 7 4 1 2 1 1 3 9 1 3 3 2 3 3 1 1 6 0 10 1 6 1 4 3 1 9 3 7 4 3 1 2 3 3 1 1 3 3 2 2 5 1 3 6 1 9 0 11 9 5 1 4 7 6 2 4 1 2 2 2 1 1 1 2 2 2 1 3 1 5 0 7 2 1 7 7 1 2 1 1 1 3 1 3 1 9 0 9 7 9 4 7 6 6 6 1 9 1 1 3 2 2 1 1 2 3 1 2 5 2 5 2 1 1 1 7 2 4 4 3 5 1 9 0 6 5 1 3 8 2 1 2 1 1 2 2 1 2 2 2 1 6 0 8 9 9 7 1 3 8 1 2 2 3 1 2 2 1 1 5 0 9 1 4 7 9 5 3 7 1 7 2 2 2 1 1 1 2 1 1 2 3 7 1 5 0 10 4 9 6 2 4 1 6 6 3 5 2 1 1 2 3 1 6 0 7 1 4 9 7 5 5 1 2 1 1 2 1 3 1 6 0 10 5 3 2 3 2 5 9 6 1 2 1 3 1 1 2 1 2 4 4 5 4 3 1 3 6 1 5 0 9 1 1 2 4 7 8 4 7 3 1 2 3 1 1 1 7 0 11 6 4 2 6 7 4 1 2 2 3 1 1 2 3 2 2 2 3 1 7 0 8 9 1 7 8 8 2 3 1 1 3 3 2 1 1 2 3 1 2 2 2 5 3 6 1 6 0 9 8 6 5 9 7 1 1 2 7 1 3 2 3 1 1 1 8 0 7 6 1 8 5 7 7 1 1 1 1 1 2 1 3 2 1 8 0 11 9 1 6 6 1 9 1 7 2 8 1 1 1 2 3 3 3 3 1 1 5 1 2 3 2 2 3 2 2 5 4 3 6 1 8 0 6 8 8 1 9 4 1 1 1 2 2 3 3 3 3 1 9 0 10 5 5 6 3 5 1 3 6 3 4 2 2 2 3 2 1 3 2 1 1 7 0 8 4 1 1 8 4 6 6 7 3 1 1 3 2 1 1 3 1 2 3 3 2 3 6 1 6 0 6 8 1 2 6 3 9 1 3 3 3 1 3 1 5 0 8 2 1 2 4 4 9 3 1 1 1 1 1 1 1 7 0 7 1 5 1 5 3 2 1 1 1 1 1 2 1 3 5 2 1 2 3 2 3 5 1 5 0 9 9 2 5 4 4 1 3 1 9 3 1 3 1 3 1 5 0 8 6 2 1 8 3 5 5 4 1 2 2 1 1 1 8 0 6 8 4 2 1 3 7 1 1 3 3 1 2 2 1 3 3 3 1 1 3 7 1 6 0 11 4 6 6 6 7 7 8 9 1 8 4 2 1 3 1 1 2 1 6 0 9 3 4 5 4 1 6 2 7 3 1 1 1 2 1 1 1 9 0 6 6 7 1 1 8 1 3 1 3 2 2 1 1 1 1 4 4 1 3 3 5 3 3 6 1 8 0 7 1 1 6 5 8 2 4 1 3 3 3 3 3 1 3 1 8 0 7 8 9 1 6 7 1 9 2 2 3 2 1 2 2 1 1 5 0 7 1 9 1 9 2 5 2 3 3 2 1 1 4 5 4 1 4 1 5 4 5 6 5 3 3 6 1 6 0 6 3 8 2 6 1 6 2 3 1 2 2 3 1 8 0 9 9 5 4 5 9 7 1 3 9 2 3 1 3 1 2 1 1 1 7 0 10 3 5 3 8 5 5 1 7 2 6 1 2 1 3 3 2 2 4 4 1 2 4 3 3 7 1 8 0 6 8 5 4 1 1 5 1 1 2 2 3 3 1 1 1 6 0 10 7 3 3 1 9 9 5 1 1 2 1 3 1 3 3 1 1 5 0 9 1 1 1 8 9 3 1 7 2 1 2 1 3 1 4 2 5 5 1 2 4 3 4 1 7 0 11 7 6 1 3 4 1 4 4 3 5 8 1 2 3 1 1 1 1 1 5 0 7 1 1 9 5 1 4 9 1 2 3 1 3 1 9 0 10 1 4 9 1 2 1 3 2 1 4 1 1 1 1 2 2 1 3 2 3 1 2 3 3 4 1 8 0 6 3 8 1 1 5 2 2 1 1 3 1 3 1 3 1 9 0 7 1 2 5 6 7 3 1 2 3 1 2 3 3 2 2 1 1 9 0 9 1 1 1 3 9 6 1 9 4 3 2 1 2 3 2 3 3 1 2 4 4 5 3 5 1 8 0 10 8 9 1 6 4 5 8 5 8 3 1 2 1 2 1 1 1 3 1 9 0 10 4 1 7 8 3 7 1 7 5 6 1 1 2 3 3 3 3 1 1 1 7 0 9 2 1 4 2 6 3 1 9 4 1 3 1 1 3 2 3 5 3 1 1 2 5 6 3 5 4 3 6 1 5 0 9 5 7 6 2 5 2 8 2 1 1 3 3 3 1 1 9 0 8 1 1 2 1 1 4 1 5 2 2 1 1 3 1 3 1 1 1 9 0 6 9 7 6 5 1 8 3 1 3 2 1 1 2 3 1 1 4 2 4 3 3 3 6 1 5 0 9 3 4 1 6 6 5 4 4 4 1 1 2 3 1 1 9 0 6 9 1 1 7 7 8 2 1 1 2 1 3 1 1 1 1 5 0 6 3 6 1 7 7 9 2 2 1 1 1 1 4 4 2 4 2 3 4 1 8 0 7 1 3 1 9 6 3 1 1 2 1 2 2 3 3 3 1 8 0 9 3 2 5 1 1 2 1 9 8 3 3 1 3 1 1 3 2 1 5 0 8 1 4 3 8 9 3 5 5 3 2 3 1 1 1 3 3 2 3 5 1 7 0 10 8 9 7 4 7 8 2 5 1 1 3 2 2 2 2 1 2 1 5 0 6 3 4 1 1 2 6 1 1 2 3 1 1 5 0 11 1 5 9 9 5 1 1 7 2 4 6 1 3 1 3 3 2 5 5 5 1 3 5 1 6 0 8 8 1 7 9 8 4 1 1 1 3 3 2 1 3 1 7 0 7 8 1 8 3 8 7 8 2 2 2 1 2 3 3 1 5 0 6 4 1 2 5 5 1 1 1 2 1 1 1 4 4 1 5 4 4 5 1 7 5 5 6 3 5 5 3 4 1 6 0 11 5 8 5 5 2 1 4 2 6 2 1 1 1 2 1 1 1 1 7 0 11 1 5 3 4 8 6 6 8 5 1 6 2 1 3 3 2 1 1 1 6 0 8 8 1 1 4 4 6 4 6 2 1 1 1 3 1 1 4 2 1 3 5 1 5 0 10 4 7 2 5 1 3 9 5 7 4 1 1 2 3 1 1 6 0 11 2 4 3 2 7 7 9 1 1 2 6 1 1 3 3 2 1 1 8 0 10 5 5 2 3 8 6 3 1 6 7 2 1 3 2 1 3 3 2 1 2 5 3 4 3 4 1 9 0 11 1 1 5 9 9 3 4 1 9 8 3 3 2 2 3 1 1 3 1 2 1 6 0 10 9 8 2 5 4 6 1 1 9 5 1 3 2 1 3 2 1 5 0 11 4 9 3 9 4 9 4 4 2 1 4 1 1 2 3 2 1 3 3 2 3 5 1 7 0 7 3 1 5 2 6 3 2 2 3 1 2 3 3 1 1 9 0 7 7 6 1 3 9 4 1 2 1 1 1 1 1 1 2 3 1 6 0 11 8 1 6 5 1 4 9 3 5 7 8 3 1 1 3 3 1 2 3 2 5 1 3 4 1 7 0 10 7 6 1 8 3 8 1 9 1 1 1 2 1 1 3 3 3 1 9 0 8 2 4 4 7 1 5 6 1 3 3 2 3 2 1 1 2 2 1 8 0 11 6 1 4 6 6 9 9 6 5 6 4 3 3 1 3 3 1 1 3 1 4 4 5 2 4 4 7 3 5 3 3 4 1 6 0 7 5 9 4 7 4 1 6 3 1 2 3 1 1 1 8 0 6 2 1 6 9 1 8 1 1 1 2 2 1 2 2 1 9 0 9 7 5 2 8 1 1 2 3 9 3 3 1 1 1 3 3 1 1 2 1 2 4 3 6 1 6 0 8 5 1 6 6 1 7 3 5 2 1 2 2 1 3 1 8 0 8 9 8 5 3 8 5 1 7 1 3 1 1 3 2 2 3 1 5 0 6 9 3 8 1 2 6 2 1 3 1 3 2 5 1 5 2 4 3 7 1 8 0 6 9 7 3 6 1 2 3 3 3 2 3 1 1 1 1 7 0 8 4 2 8 3 1 9 1 3 1 3 1 2 1 1 2 1 5 0 8 4 4 1 4 3 2 4 8 1 1 3 1 2 2 2 3 2 5 2 1 3 4 1 7 0 10 7 6 8 5 5 7 1 4 1 3 2 2 3 3 3 1 1 1 8 0 9 4 4 5 2 3 7 8 1 7 3 1 1 1 1 1 3 2 1 6 0 9 4 8 5 4 8 7 1 4 5 3 3 2 3 1 3 1 2 4 1 3 4 1 7 0 8 8 8 6 2 5 4 1 5 3 3 3 2 1 3 1 1 8 0 8 1 1 1 4 9 7 2 6 3 2 2 3 3 1 1 1 1 5 0 10 1 1 8 4 1 8 9 8 5 6 1 1 2 2 3 3 2 1 1 5 4 3 5 4 3 7 1 5 0 11 9 4 9 2 8 1 3 2 7 3 7 2 1 2 3 1 1 8 0 9 3 3 1 2 3 6 1 4 6 3 1 3 3 1 1 1 1 1 9 0 6 1 9 6 4 2 9 1 3 1 1 1 1 2 2 3 4 4 1 5 1 4 2 3 6 1 9 0 10 2 1 4 5 5 9 9 7 6 1 1 3 1 1 2 2 1 3 3 1 5 0 9 6 1 2 1 1 8 6 3 9 2 3 3 1 3 1 7 0 8 7 8 9 8 3 3 1 8 2 2 1 1 2 1 2 3 1 1 1 2 5 3 6 1 7 0 7 2 7 4 3 2 7 1 1 2 2 3 2 2 2 1 7 0 6 6 9 9 1 5 2 1 3 2 3 2 2 3 1 8 0 11 5 4 9 1 6 4 9 7 5 7 6 3 3 1 2 3 2 1 1 3 4 1 4 5 2 3 6 1 6 0 8 4 5 9 1 4 5 5 4 1 2 3 1 3 3 1 8 0 10 7 1 1 8 9 7 3 9 3 6 2 1 1 3 3 1 1 2 1 7 0 10 3 6 3 9 8 4 7 1 3 1 3 1 1 1 1 1 1 3 2 2 4 2 2 3 5 1 9 0 6 5 5 5 1 1 1 2 3 1 3 1 3 3 1 1 1 8 0 10 2 4 3 7 1 6 3 1 1 6 2 3 2 1 2 2 1 2 1 8 0 7 2 7 1 1 2 1 5 2 3 1 2 1 3 3 2 4 5 2 4 1 6 5 4 6 5 4 3 5 1 8 0 7 3 1 2 4 1 7 1 2 1 1 1 2 2 1 1 1 6 0 11 1 8 9 2 7 1 4 1 9 1 9 2 2 1 3 1 3 1 9 0 11 2 1 6 9 1 4 3 3 1 9 1 2 1 3 2 3 3 1 3 1 5 3 5 3 4 3 5 1 9 0 6 1 2 7 1 7 9 3 3 3 1 2 3 3 3 3 1 7 0 8 2 9 6 1 1 9 2 7 3 2 3 1 1 1 1 1 8 0 10 7 6 1 1 4 7 4 3 2 5 1 2 2 2 2 1 3 2 1 2 5 1 2 3 7 1 7 0 8 4 6 9 1 5 8 9 2 1 2 1 2 2 1 1 1 9 0 8 6 8 1 1 5 5 4 2 1 2 3 1 3 3 1 1 1 1 8 0 9 1 7 1 1 9 2 2 4 9 2 1 3 3 1 3 2 2 4 3 2 2 2 2 1 3 6 1 7 0 9 5 9 7 1 5 7 7 1 2 1 2 2 2 2 1 3 1 7 0 7 4 5 4 6 1 5 1 3 1 1 2 1 3 1 1 8 0 9 9 2 9 1 6 8 9 3 1 1 2 3 1 1 2 3 2 5 2 2 3 4 2 3 5 1 5 0 6 1 5 1 7 7 9 1 1 3 1 3 1 6 0 6 7 4 6 1 7 4 2 1 1 1 2 2 1 5 0 9 5 9 7 3 6 4 1 9 4 1 2 1 1 1 4 3 4 2 5 2 5 5 3 5 4 3 6 1 8 0 9 7 3 5 2 1 4 9 9 3 2 2 2 1 2 1 1 2 1 8 0 7 3 3 7 5 5 6 1 1 2 3 1 2 1 3 2 1 8 0 10 1 1 5 5 3 7 4 6 9 1 3 1 2 1 1 3 2 2 4 5 2 3 4 4 3 4 1 5 0 9 1 4 1 8 1 9 8 5 6 2 3 3 1 1 1 9 0 9 2 1 4 7 3 1 3 2 3 2 1 1 2 3 2 1 2 1 1 6 0 7 2 4 7 5 1 6 9 1 3 3 2 1 2 2 1 2 3 3 7 1 5 0 10 4 1 9 4 6 7 1 1 2 7 2 3 1 2 3 1 9 0 10 9 9 5 5 1 3 1 1 2 2 3 3 2 2 2 2 1 3 3 1 7 0 9 8 1 4 6 7 8 3 7 6 1 2 2 1 3 3 2 1 4 1 5 5 5 4 3 4 1 9 0 11 4 5 2 7 9 1 4 7 3 7 8 3 1 2 1 3 1 1 2 1 1 9 0 9 1 3 1 7 6 6 2 4 8 2 1 3 2 1 3 3 3 1 1 9 0 11 5 6 8 4 1 3 6 4 6 5 4 3 2 3 1 1 2 3 2 2 3 3 1 3 3 7 1 8 0 9 1 4 9 6 3 4 8 3 1 2 3 3 2 1 3 3 1 1 5 0 10 5 5 1 6 1 8 4 3 4 6 3 2 2 1 2 1 7 0 6 7 4 9 6 1 6 3 2 1 1 1 2 1 5 1 2 4 5 1 4 5 4 2 5 5 4 3 7 1 6 0 8 2 5 4 6 2 1 9 8 2 2 1 3 3 2 1 8 0 11 2 1 4 6 6 9 8 6 6 2 5 1 1 1 2 1 2 2 1 1 8 0 8 7 4 4 8 4 1 3 4 1 3 1 1 2 1 2 1 2 5 1 3 3 1 3 3 5 1 8 0 8 1 8 1 1 3 6 1 8 1 1 3 3 2 2 3 1 1 7 0 9 7 8 6 4 8 1 1 8 4 1 3 2 1 2 3 1 1 5 0 11 4 8 2 5 1 4 7 7 9 1 1 1 3 1 1 3 2 5 2 2 2 3 6 1 6 0 7 3 1 5 8 1 8 2 2 1 1 3 2 1 1 8 0 10 2 2 4 9 1 7 2 8 3 3 1 2 3 1 2 3 2 2 1 5 0 6 1 7 8 3 4 5 3 3 2 1 2 2 1 5 1 4 5 3 4 1 6 0 7 5 3 1 9 5 6 3 3 2 2 1 1 3 1 9 0 10 1 1 1 1 6 3 5 1 6 2 1 1 3 2 2 2 1 1 3 1 7 0 10 1 3 6 7 1 2 5 1 7 4 3 1 3 2 3 2 1 5 1 3 2 3 6 1 7 0 8 6 1 7 3 1 5 1 3 1 1 2 1 3 1 2 1 6 0 9 9 7 8 6 2 4 1 7 6 1 1 2 3 2 3 1 9 0 11 4 1 4 8 6 7 6 4 9 4 4 2 1 3 1 2 3 1 1 1 2 3 1 1 2 3 3 2 5 4 7 3 8 6 3 5 4 3 4 1 9 0 10 6 1 6 1 2 2 6 2 7 5 2 1 3 1 3 3 2 2 1 1 7 0 8 3 3 4 1 9 8 1 1 2 3 3 3 3 1 1 1 8 0 8 7 4 7 5 2 6 1 8 3 3 1 1 2 3 3 2 3 4 3 5 3 4 1 7 0 6 8 6 6 1 6 9 2 1 1 2 1 1 1 1 8 0 7 9 6 3 8 1 4 2 3 1 2 2 1 1 3 3 1 6 0 10 9 4 1 9 1 9 3 9 6 3 3 1 2 3 2 1 3 3 2 2 3 5 1 9 0 11 6 8 8 3 8 1 6 4 1 4 7 3 2 2 3 1 2 2 3 2 1 5 0 6 1 6 1 4 7 7 2 2 3 1 1 1 9 0 9 5 7 1 7 3 2 5 2 1 3 2 1 2 3 3 1 2 1 2 1 5 4 2 3 7 1 5 0 9 9 1 7 1 8 3 5 3 2 1 3 2 2 2 1 5 0 10 8 3 4 8 8 2 4 3 1 8 2 1 3 1 1 1 5 0 6 1 1 9 3 9 5 2 1 3 1 3 3 3 3 1 1 2 3 3 7 1 9 0 6 7 6 4 9 1 9 1 3 3 2 1 3 3 2 1 1 8 0 10 6 3 2 1 7 2 7 6 4 1 1 2 1 1 1 2 2 1 1 9 0 9 2 5 7 4 7 3 1 1 3 3 3 2 3 1 2 1 2 1 5 3 5 2 1 2 3 6 2 5 1 5 4 3 7 1 9 0 7 7 7 1 8 5 1 7 2 3 3 1 1 3 2 1 2 1 8 0 7 4 4 1 6 6 8 9 3 1 1 2 1 1 3 2 1 9 0 10 9 3 2 3 4 1 6 5 4 4 3 1 1 2 2 3 3 1 2 1 5 4 3 4 2 3 3 5 1 5 0 7 1 1 3 5 8 4 3 1 3 2 3 2 1 5 0 10 6 5 5 1 9 9 4 8 4 4 1 3 2 1 1 1 5 0 8 8 8 3 8 1 2 5 3 1 1 2 3 2 3 5 3 3 4 3 7 1 8 0 9 6 3 9 2 7 1 9 2 7 3 3 1 1 2 3 1 3 1 8 0 9 9 7 1 9 2 9 1 9 6 1 1 2 1 3 2 3 1 1 5 0 6 9 5 1 7 8 9 1 3 2 1 1 3 2 3 4 4 3 5 3 6 1 6 0 6 7 1 4 5 3 8 1 3 3 3 2 3 1 8 0 6 1 7 1 2 9 1 1 1 1 1 2 2 1 2 1 8 0 9 6 3 2 3 1 9 3 2 2 2 3 1 1 2 1 2 1 3 5 3 5 3 4 3 5 1 6 0 9 5 5 2 1 4 8 9 4 1 1 2 2 1 2 2 1 8 0 9 1 3 4 3 6 4 3 2 1 2 1 2 3 3 3 1 2 1 9 0 11 5 3 3 3 9 7 4 8 6 1 3 3 3 1 1 1 1 2 1 2 3 4 2 3 3 2 2 2 2 5 4 3 6 1 9 0 8 8 7 7 1 1 5 3 9 3 1 2 2 2 2 2 1 1 1 7 0 6 9 8 1 2 1 2 1 2 2 3 2 3 1 1 6 0 6 3 1 8 6 8 6 3 2 1 2 2 1 4 5 3 1 3 4 3 4 1 9 0 8 2 1 9 8 5 9 2 9 2 1 1 3 3 1 2 3 1 1 6 0 9 7 5 7 1 7 5 7 4 4 1 1 1 1 2 1 1 9 0 8 1 8 9 9 3 8 6 4 3 2 2 3 1 1 1 3 2 3 2 1 4 3 7 1 8 0 10 9 7 1 1 6 5 8 3 1 3 3 2 2 1 2 1 1 3 1 7 0 7 4 6 9 1 1 8 2 3 3 1 2 1 1 1 1 6 0 7 7 6 2 7 1 8 4 3 1 1 2 3 3 4 5 4 5 3 1 2 3 5 1 9 0 8 8 8 9 4 6 1 4 9 3 1 3 1 1 2 1 3 3 1 7 0 10 5 3 7 9 2 6 6 2 1 3 3 1 2 3 1 2 1 1 5 0 10 6 1 5 2 9 1 9 3 1 8 3 1 1 1 3 4 1 5 3 5 3 5 1 8 0 10 2 9 5 7 1 9 3 5 5 1 3 2 2 1 1 1 3 2 1 8 0 7 3 8 1 6 6 8 9 3 1 1 3 1 1 3 2 1 5 0 7 2 5 1 9 9 8 9 3 1 1 3 3 5 3 3 3 3 3 4 3 1 5 3 3 7 1 7 0 9 7 1 9 9 2 4 3 3 2 3 1 1 1 1 2 2 1 6 0 9 1 4 3 7 7 1 9 8 7 3 3 1 3 1 1 1 5 0 6 8 9 4 1 4 5 3 3 1 1 2 3 1 5 4 5 3 2 3 6 1 7 0 10 1 5 6 5 1 1 9 2 1 7 2 1 1 3 1 1 2 1 9 0 8 7 4 8 6 8 1 1 7 1 2 2 1 3 1 2 1 3 1 8 0 8 1 5 9 1 2 2 2 5 1 3 2 3 1 1 3 3 3 1 3 2 5 4 3 7 1 8 0 10 1 5 1 5 6 5 1 3 8 5 1 3 1 2 3 3 3 3 1 7 0 11 7 9 7 8 9 7 1 1 5 1 1 2 2 1 1 3 3 2 1 5 0 10 1 9 3 9 5 1 3 6 8 6 3 2 1 3 1 1 2 5 5 5 5 4 3 7 1 7 0 6 1 9 5 9 3 4 1 1 3 3 3 3 1 1 7 0 11 4 1 1 1 1 6 5 8 4 3 1 1 2 3 1 1 1 1 1 9 0 10 8 6 6 4 2 1 4 2 4 4 1 1 1 3 1 2 1 2 1 3 5 3 3 1 2 3 3 5 1 8 0 8 7 6 8 5 1 1 5 8 2 1 2 3 1 2 1 2 1 5 0 11 6 2 7 3 5 4 1 6 6 6 1 2 1 1 3 1 1 5 0 11 5 1 5 6 1 6 5 4 8 1 2 1 1 2 2 1 5 3 3 4 3 4 6 5 5 3 3 6 1 5 0 7 6 1 3 4 5 4 6 1 2 1 1 1 1 8 0 8 1 5 5 7 8 1 1 7 3 3 2 1 3 2 3 1 1 8 0 8 8 7 1 4 8 7 2 3 2 1 2 3 3 3 2 3 3 5 5 4 1 4 3 6 1 6 0 11 7 8 7 1 1 8 2 7 2 2 9 1 2 1 2 1 1 1 7 0 6 3 8 2 8 1 5 1 1 1 2 2 3 1 1 7 0 9 4 1 9 6 3 8 2 9 2 2 3 1 1 3 1 1 4 2 2 4 3 3 3 4 1 6 0 10 1 5 9 2 3 7 9 4 7 6 3 1 3 3 3 1 1 9 0 6 1 1 2 1 7 1 1 3 3 1 3 1 1 2 2 1 8 0 9 7 5 3 1 5 5 9 6 4 3 3 1 1 3 1 1 1 2 2 4 2 3 5 1 7 0 11 4 3 4 8 4 7 6 9 7 6 1 2 1 3 1 1 2 2 1 6 0 8 3 1 4 1 4 7 3 3 3 1 1 3 2 1 1 5 0 8 2 2 1 4 1 8 1 6 3 1 3 2 2 1 2 2 5 5 3 5 1 9 0 11 1 9 6 8 8 6 4 1 4 8 1 3 1 1 1 1 1 1 3 1 1 8 0 6 4 3 3 1 6 2 2 1 2 1 2 2 3 1 1 6 0 11 2 1 4 2 8 8 6 1 8 4 2 1 2 1 1 1 2 5 5 1 1 3 3 1 5 5 4 3 6 1 7 0 9 9 7 4 1 4 6 3 5 7 2 3 1 3 1 1 2 1 9 0 6 8 9 1 1 4 1 1 3 3 1 1 3 1 1 1 1 6 0 7 4 1 4 6 3 1 8 3 1 1 1 2 2 2 1 5 4 3 5 3 6 1 8 0 9 1 2 8 1 6 8 7 5 9 1 3 3 3 2 1 1 2 1 9 0 6 6 1 2 6 9 9 3 3 1 2 3 3 1 1 2 1 8 0 6 5 7 2 1 5 1 3 1 1 3 1 1 2 3 1 4 3 1 3 4 3 5 1 5 0 8 4 1 5 9 8 8 1 5 1 3 2 1 3 1 9 0 10 1 7 6 1 8 8 8 8 5 9 1 1 3 2 3 3 2 1 1 1 5 0 7 4 6 9 1 7 3 5 2 2 1 2 1 1 2 3 1 4 3 7 1 8 0 6 8 1 2 9 2 4 1 1 2 2 2 1 2 1 1 5 0 8 5 4 1 8 4 8 1 9 3 2 1 3 1 1 5 0 9 1 6 6 9 1 6 1 1 1 1 1 1 1 3 2 2 1 3 1 2 1 3 6 1 8 0 6 3 1 9 2 8 3 1 2 1 2 2 1 2 1 1 6 0 6 5 7 3 1 2 1 2 3 1 2 1 1 1 7 0 8 8 3 1 6 5 9 9 9 1 1 3 2 1 1 2 4 1 1 2 3 1 2 5 3 2 4 5 2 6 3 4 5 3 7 1 8 0 11 4 8 9 4 1 4 8 8 9 3 2 1 1 2 2 1 1 2 3 1 6 0 8 1 3 9 1 7 2 8 3 3 1 1 3 2 1 1 7 0 9 7 2 9 9 7 2 8 1 1 1 1 3 1 1 3 3 3 1 3 1 2 4 4 3 7 1 5 0 7 9 2 7 4 1 6 4 3 1 1 3 2 1 5 0 6 7 5 1 8 7 1 2 2 2 2 1 1 6 0 11 6 6 2 7 1 1 4 7 3 4 1 1 3 3 1 2 2 2 2 3 2 2 2 3 3 4 1 6 0 11 1 1 5 4 7 8 7 3 9 1 7 2 2 3 2 1 3 1 9 0 11 9 8 1 8 4 3 8 5 1 9 1 2 1 1 2 2 3 2 2 1 1 7 0 7 1 7 9 1 3 5 6 1 2 1 3 3 1 3 2 1 2 5 3 5 1 8 0 11 1 7 9 6 7 1 3 3 3 5 3 1 1 3 2 3 1 3 3 1 9 0 6 1 2 1 1 3 6 2 2 2 3 3 1 2 2 3 1 8 0 11 9 9 9 6 1 6 4 9 1 3 9 3 3 1 2 1 2 2 2 2 4 3 4 1 2 4 6 4 5 5 5 3 7 1 5 0 8 4 1 3 9 7 6 8 7 1 1 1 1 1 1 9 0 10 4 5 5 2 3 3 7 5 1 4 1 2 3 3 1 1 1 3 3 1 5 0 8 8 1 4 4 1 5 9 8 3 1 3 1 2 2 3 1 4 2 1 4 3 6 1 8 0 10 4 6 4 1 3 9 4 1 3 7 1 1 1 1 1 1 1 1 1 7 0 7 6 9 1 2 9 9 4 2 1 3 2 1 1 1 1 8 0 10 9 5 1 1 3 5 9 1 2 8 2 1 2 1 1 2 3 3 2 3 2 2 3 3 3 6 1 6 0 11 1 3 1 9 6 4 4 3 5 1 7 2 2 1 1 1 1 1 5 0 8 2 6 8 1 3 2 6 1 2 2 3 1 3 1 8 0 7 3 7 3 9 6 1 7 2 1 2 3 3 2 3 3 5 2 5 5 5 3 3 4 1 5 0 8 1 2 1 1 8 4 2 4 1 1 3 2 3 1 5 0 6 1 1 3 3 2 6 3 1 2 3 3 1 6 0 11 1 6 3 3 5 3 1 8 1 9 1 3 2 2 1 3 1 5 5 2 1 3 5 1 7 0 8 7 4 9 3 9 5 1 1 3 1 1 3 1 1 3 1 8 0 7 6 5 7 1 4 2 1 1 2 2 2 2 3 1 1 1 8 0 10 1 3 3 1 8 3 9 6 6 9 1 1 1 1 2 3 1 1 3 3 5 1 5 4 1 3 1 6 5 5 3 4 1 5 0 6 8 2 1 4 9 3 1 2 1 2 2 1 9 0 10 4 2 7 7 7 1 1 2 3 4 3 2 1 2 1 2 1 3 3 1 7 0 11 5 1 4 4 1 8 2 9 4 9 5 3 3 3 2 1 2 1 2 1 2 1 3 6 1 6 0 9 8 2 2 1 2 1 3 6 2 2 2 1 1 2 1 1 7 0 10 6 7 8 8 2 1 2 1 4 7 1 1 2 1 2 2 3 1 7 0 11 7 4 8 1 9 8 1 7 9 5 1 1 2 1 3 3 2 3 2 2 5 3 5 4 3 5 1 5 0 7 3 7 1 1 3 7 7 1 1 1 1 3 1 6 0 10 2 4 5 8 3 1 4 8 1 5 1 2 1 1 2 2 1 6 0 10 9 6 1 1 8 4 4 1 9 6 3 3 1 2 1 2 1 4 3 2 2 3 4 1 7 0 6 8 2 9 9 4 1 2 1 1 2 3 3 2 1 6 0 9 1 9 6 2 2 4 8 1 4 1 2 1 1 3 1 1 9 0 8 7 8 1 1 3 3 4 7 3 1 1 3 3 2 1 2 2 1 5 3 1 3 4 1 9 0 6 4 4 6 1 1 9 3 3 2 3 3 1 2 1 2 1 5 0 6 8 3 1 9 9 8 2 3 1 1 1 1 8 0 6 5 1 8 2 1 8 3 1 1 3 2 3 1 1 2 3 4 5 1 2 3 7 1 5 4 3 6 1 8 0 8 5 8 6 9 5 6 1 4 2 2 1 2 1 3 3 2 1 6 0 9 7 7 3 1 3 3 1 6 7 3 1 1 3 3 2 1 5 0 7 4 4 1 2 2 7 2 1 2 1 3 2 4 3 1 2 1 4 3 7 1 5 0 8 4 5 2 2 3 1 7 8 1 1 3 3 3 1 5 0 10 1 8 3 5 5 7 9 9 1 2 1 2 3 1 2 1 6 0 11 1 1 6 4 1 9 9 7 1 4 1 1 3 2 2 2 1 3 4 4 5 3 1 5 3 4 1 5 0 7 3 1 7 5 5 3 5 2 1 3 1 2 1 9 0 11 8 9 1 8 3 8 6 4 4 5 3 1 1 1 3 1 3 2 2 3 1 5 0 10 3 5 3 1 4 8 7 2 2 9 1 3 2 1 1 2 2 4 4 3 7 1 5 0 8 2 5 9 7 7 1 5 6 2 1 3 1 1 1 9 0 6 1 4 7 6 4 9 1 2 1 1 1 1 2 3 3 1 8 0 11 9 6 3 9 1 5 1 1 7 2 4 1 3 2 2 2 3 2 3 3 2 4 1 4 1 1 3 5 1 9 0 9 9 1 2 7 5 2 9 8 8 1 3 3 2 1 1 3 2 1 1 7 0 8 4 9 1 4 5 8 6 2 1 1 2 2 3 3 1 1 7 0 11 1 5 4 2 9 2 3 7 1 2 4 1 2 2 3 1 3 3 5 3 2 1 5 2 3 2 2 4 5 3 5 1 9 0 6 5 1 2 3 6 2 1 1 3 1 1 2 3 3 1 1 7 0 9 6 4 6 2 3 8 3 1 8 1 2 1 1 1 1 1 1 7 0 9 6 3 5 5 1 6 2 1 2 3 3 2 3 3 1 1 4 4 2 3 1 3 7 1 7 0 10 2 8 1 5 6 2 7 7 6 8 3 3 3 2 1 3 3 1 8 0 6 3 5 6 1 3 1 1 2 1 3 1 3 1 1 1 8 0 9 1 5 7 9 3 9 7 8 1 2 3 2 1 2 2 2 2 2 1 4 2 4 2 5 3 5 1 6 0 10 2 2 5 4 5 8 1 9 9 1 2 1 3 1 1 3 1 9 0 7 9 1 2 3 2 8 3 3 3 1 2 1 1 3 2 1 1 8 0 7 3 7 6 1 6 5 6 2 1 2 1 2 3 2 1 5 3 2 2 1 3 5 1 9 0 7 9 3 5 1 1 9 4 1 3 1 3 1 3 1 3 3 1 5 0 10 6 1 3 8 3 1 5 8 9 4 2 1 2 2 2 1 8 0 8 9 5 8 5 5 7 4 1 3 3 1 1 3 2 1 3 2 4 4 3 4 1 1 3 4 1 5 4 3 7 1 9 0 11 5 7 9 9 9 7 4 7 2 1 6 1 1 3 2 2 3 1 2 2 1 5 0 6 2 2 6 1 9 4 2 3 3 1 2 1 7 0 6 4 1 5 1 2 5 2 3 1 3 1 1 2 1 5 5 1 2 1 4 3 5 1 9 0 7 7 6 7 1 4 3 1 3 1 3 1 3 3 1 1 2 1 7 0 9 1 2 8 8 2 1 5 9 8 3 2 2 2 3 1 1 1 9 0 6 7 1 1 4 4 4 2 2 2 1 1 2 1 1 3 5 5 5 2 2 3 7 1 5 0 7 1 1 5 1 9 1 4 1 3 2 1 1 1 8 0 11 5 1 8 3 6 8 6 3 2 4 4 3 3 3 1 1 2 2 1 1 7 0 10 8 1 3 1 6 8 1 3 1 1 3 3 2 1 1 2 1 1 2 2 2 1 2 3 3 4 1 8 0 7 9 9 5 1 6 1 2 2 2 2 2 2 1 3 1 1 6 0 9 1 4 2 5 9 7 8 7 6 3 1 3 1 3 1 1 6 0 6 8 2 1 7 9 1 1 2 1 3 1 1 1 5 3 3 3 5 1 8 0 9 5 3 6 3 1 3 1 7 8 1 1 3 1 1 1 1 2 1 5 0 7 2 3 3 4 8 1 7 2 1 1 3 1 1 8 0 7 3 8 3 8 2 1 3 1 2 1 1 1 2 2 1 4 3 1 5 3 2 1 5 6 2 6 4 5 7 9 3 8 1 8 8 4 6 1
diff --git a/src/8/solve.py b/src/8/solve.py deleted file mode 100644 index 9efff4f..0000000 --- a/src/8/solve.py +++ /dev/null @@ -1,52 +0,0 @@ -from sys import argv as args
-
-file = open("input.txt")
-data = [int(x) for x in file.read().strip().split(" ")]
-file.close()
-
-#data = [int(x) for x in "2 3 0 3 10 11 12 1 1 0 1 99 2 1 1 2".split(" ")]
-
-def getNodes(nsize, index):
- nodes = list()
- for i in range(nsize):
- cnsize = data[index + 0]
- mdsize = data[index + 1]
- cnodes, index = getNodes(cnsize, index + 2)
- metadata = data[index:index + mdsize]
- nodes.append([cnodes, metadata])
- index = index + mdsize
- return nodes, index
-
-def nodeSum(nodes):
- metadata = 0
- for n in nodes:
- metadata += sum(n[1]) + nodeSum(n[0])
- return metadata
-
-def nodeValue(n):
- if len(n[0]) == 0:
- return sum(n[1])
- else:
- value = 0
- for i in range(len(n[1])):
- ni = n[1][i]-1
- if ni < len(n[0]):
- value += nodeValue(n[0][ni])
- return value
-
-def solve1():
- nodes,index = getNodes(1, 0)
- print(nodeSum(nodes))
-
-def solve2():
- nodes,index = getNodes(1, 0)
- print(nodeValue(nodes[0]))
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
diff --git a/src/9/input.txt b/src/9/input.txt deleted file mode 100644 index 29b93ef..0000000 --- a/src/9/input.txt +++ /dev/null @@ -1 +0,0 @@ -418 players; last marble is worth 71339 points diff --git a/src/9/solve.py b/src/9/solve.py deleted file mode 100644 index 99a84f0..0000000 --- a/src/9/solve.py +++ /dev/null @@ -1,48 +0,0 @@ -from collections import deque
-from sys import argv as args
-
-words = open("input.txt").read().split(" ")
-playercount = int(words[0])
-lastworth = int(words[6])
-
-def getHighScore(playercount, lastworth): #optimized with deque
- lastworth = lastworth - lastworth % 23
-
- players = [0 for x in range(playercount)]
- marbles = deque([0])
- pos = 0
- for i in range(1, lastworth+1):
- if i % 23 == 0:
- cp = (i-1) % playercount
- players[cp] += i + marbles[(len(marbles) + pos - 7) % len(marbles)]
- marbles.rotate((len(marbles) - 1 - pos) + 7)
- marbles.pop()
- pos = 0
- else:
- if i < 3:
- pos = 1
- marbles.rotate(1)
- marbles.append(i)
- else:
- marbles.rotate((len(marbles)- 1 -pos) - 1)
- marbles.append(i)
- pos = len(marbles)-1
- #print(pos,marbles)
-
- print(max(players))
-
-
-def solve1():
- getHighScore(playercount, lastworth)
-
-def solve2():
- getHighScore(playercount, lastworth * 100)
-
-def main():
- if len(args) > 1:
- if args[1] == "1":
- solve1()
- elif args[1] == "2":
- solve2()
-
-main()
|
