Tasks 01-14

This commit is contained in:
2021-12-14 21:06:45 +03:00
parent d8eee6a69d
commit 1c9a6c0a96
29 changed files with 7033 additions and 0 deletions
+7
View File
@@ -0,0 +1,7 @@
with open("input") as f:
data = f.read().strip().split('\n')
data = [int(x) for x in data]
print(sum([1 for x,y in zip(data, data[1:]) if y-x>0]))
d2 = [a+b+c for a,b,c in zip(data, data[1:], data[2:])]
print(sum([1 for x,y in zip(d2, d2[1:]) if y-x>0]))
+2000
View File
File diff suppressed because it is too large Load Diff
+30
View File
@@ -0,0 +1,30 @@
with open("input") as f:
data = f.read().strip().split('\n')
data = [x.split() for x in data]
d = 0
x = 0
for com, i in data:
i = int(i)
if com=='forward':
x += i
elif com=='up':
d -= i
elif com=='down':
d += i
print(d*x)
d = 0
x = 0
aim = 0
for com, i in data:
i = int(i)
if com=='forward':
x += i
d += aim*i
elif com=='up':
aim -= i
elif com=='down':
aim += i
print(d*x)
+1000
View File
File diff suppressed because it is too large Load Diff
+25
View File
@@ -0,0 +1,25 @@
with open("input") as f:
data = f.read().strip().split('\n')
l = len(data)
gamma = [round(sum(map(int, x))/l) for x in zip(*data)]
epsilon = [0 if x==1 else 1 for x in gamma]
_gamma = int(''.join(map(str, gamma)), base=2)
_epsilon = int(''.join(map(str, epsilon)), base=2)
print(_gamma*_epsilon)
def f(g):
i = 0
x = data
while len(x)>1:
a = list(zip(*x))[i]
b = a.count("1") >= a.count("0")
x = [z for z in x if z[i]==g(b)]
i += 1
return int(x[0], base=2)
o2 = f(lambda b: "1" if b else "0")
co2 = f(lambda b: "0" if b else "1")
print(o2*co2)
+1000
View File
File diff suppressed because it is too large Load Diff
+66
View File
@@ -0,0 +1,66 @@
from itertools import compress, chain
from collections import defaultdict
data = '''
7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
22 13 17 11 0
8 2 23 4 24
21 9 14 16 7
6 10 3 18 5
1 12 20 15 19
3 15 0 2 22
9 18 13 17 5
19 8 7 25 23
20 11 10 24 4
14 21 16 12 6
14 21 17 24 4
10 16 15 9 19
18 8 23 26 20
22 11 13 6 5
2 0 12 3 7
'''.strip().split('\n', 1)
with open("input") as f:
data = f.read().strip().split('\n', 1)
numbers = list(map(int, data[0].split(',')))
tables = data[1].strip().split('\n\n')
tables = [[list(map(int, x.split())) for x in t.split('\n')] for t in tables]
table_hits = [0]*len(tables)
index = defaultdict(list)
for i, table in enumerate(tables):
for y, row in enumerate(table):
for x, number in enumerate(row):
index[number].append((i,x,y))
def find_sum(winner):
t = tables[winner]
w = bin(table_hits[winner])[2:][::-1]
w = w + '0'*(25-len(w))
w = list(map(lambda x: 1 if x=='0' else 0, w))
return sum(compress(chain(*t), w))
row = 0b11111
column = 0b0000100001000010000100001
def win(i):
for shift in range(5):
if table_hits[i] & (row << shift*5)== row << shift*5:
return True
for shift in range(5):
if table_hits[i] & (column << shift)== column << shift:
return True
return False
winners = []
w = set()
for number in numbers:
for i, x, y in index[number]:
table_hits[i] |= 1 << (y*5+x)
if win(i) and i not in w:
winners.append(number*find_sum(i))
w.add(i)
print(winners[0])
print(winners[-1])
+601
View File
@@ -0,0 +1,601 @@
63,23,2,65,55,94,38,20,22,39,5,98,9,60,80,45,99,68,12,3,6,34,64,10,70,69,95,96,83,81,32,30,42,73,52,48,92,28,37,35,54,7,50,21,74,36,91,97,13,71,86,53,46,58,76,77,14,88,78,1,33,51,89,26,27,31,82,44,61,62,75,66,11,93,49,43,85,0,87,40,24,29,15,59,16,67,19,72,57,41,8,79,56,4,18,17,84,90,47,25
25 29 78 57 69
47 51 7 21 82
61 81 99 53 30
50 80 41 94 46
9 37 48 71 91
26 10 29 27 90
21 65 44 5 1
42 51 35 11 98
72 23 41 95 48
40 97 99 92 2
20 70 21 58 5
63 29 16 71 45
43 7 26 0 62
24 75 9 87 55
88 10 11 47 4
5 31 99 96 16
61 37 91 92 23
46 8 36 9 42
3 32 49 64 48
15 2 47 53 55
28 40 96 38 9
33 11 65 76 13
24 35 20 3 99
95 78 51 74 4
80 14 44 98 58
24 55 8 59 65
96 11 15 12 99
21 75 35 85 34
20 53 72 50 70
61 48 74 41 36
61 32 13 42 90
81 22 66 75 51
46 1 41 9 34
86 50 48 64 74
72 85 97 11 71
16 32 41 37 61
14 31 29 6 79
28 97 11 15 9
13 72 3 85 64
81 95 20 77 69
42 76 14 78 35
49 89 7 81 90
13 18 32 24 9
10 98 12 2 65
82 21 67 70 84
89 38 21 83 5
7 87 37 14 98
55 81 13 56 39
42 19 51 36 30
76 15 57 94 20
29 18 49 10 67
91 93 37 45 34
60 8 56 86 32
95 89 71 51 59
87 3 27 44 41
9 71 95 12 42
83 90 98 79 49
72 1 53 80 33
29 82 65 4 25
92 5 76 54 66
72 85 4 39 29
86 0 95 30 21
11 51 2 99 38
58 52 25 59 77
69 74 37 87 32
99 16 9 63 55
79 50 48 96 92
47 35 15 93 76
19 70 25 49 38
80 60 43 69 81
50 19 10 7 83
79 52 14 51 55
68 65 54 21 62
71 25 34 70 92
44 26 61 4 46
75 26 15 76 61
42 0 51 29 81
82 57 16 91 4
12 19 30 10 24
78 58 55 74 53
36 80 46 9 85
34 17 43 96 57
37 6 33 88 28
59 48 18 22 79
55 52 20 2 61
3 99 46 7 31
61 43 17 78 4
59 45 47 52 10
55 95 33 9 35
13 8 89 73 12
19 58 46 56 62
11 72 82 0 12
92 9 70 18 65
35 61 79 87 36
1 27 22 8 74
60 92 94 2 84
73 69 72 29 37
50 74 56 58 6
51 80 86 33 4
32 24 20 7 78
47 25 76 89 61
86 77 71 43 22
42 18 70 24 98
31 68 62 79 9
17 10 78 16 84
90 41 71 1 58
88 91 86 4 34
48 31 3 74 21
85 5 37 36 28
18 46 17 49 69
41 55 52 58 44
4 75 81 12 48
72 93 8 86 10
66 29 94 85 69
74 36 50 9 19
80 76 36 21 57
58 8 27 18 86
79 5 48 82 64
0 93 30 1 4
78 40 52 50 62
58 60 77 25 22
93 97 49 2 41
59 38 95 36 44
30 79 69 54 86
23 4 80 85 27
27 67 68 46 41
93 4 96 49 23
11 54 80 88 75
69 34 44 12 37
39 78 66 5 43
20 32 71 99 19
42 96 58 47 65
72 31 70 59 26
46 17 38 11 23
18 85 52 77 67
38 98 42 31 40
76 2 77 82 34
92 73 55 93 19
25 58 90 10 68
6 56 85 43 95
16 71 12 76 86
78 26 15 34 45
17 22 20 8 1
51 52 24 90 79
53 40 14 69 21
77 75 68 32 69
61 9 74 58 44
21 39 94 84 46
14 29 93 31 63
12 72 2 98 40
68 32 38 58 24
61 11 76 55 39
6 21 31 93 99
64 75 15 62 56
34 12 14 73 77
50 24 71 22 67
18 80 89 51 90
54 64 31 19 44
61 88 85 25 98
73 69 37 72 39
79 2 62 91 97
36 41 72 28 42
26 89 98 86 10
35 16 85 63 64
43 51 39 60 55
47 86 44 56 74
0 96 39 84 54
38 45 68 88 21
11 33 17 52 97
83 58 42 65 81
16 1 22 8 24
7 3 12 30 59
79 91 53 69 68
20 88 14 81 51
89 71 54 56 52
25 12 32 53 3
63 29 92 70 97
54 6 21 4 86
76 39 84 49 96
68 0 15 72 28
56 20 35 71 23
51 21 96 42 64
83 1 8 94 55
44 73 76 24 67
81 70 6 61 46
85 37 30 39 97
36 14 71 59 15
46 26 27 25 9
6 56 79 52 67
72 54 58 74 76
90 24 86 43 1
18 70 89 20 9
44 4 52 65 66
56 17 96 78 67
53 80 32 42 63
35 50 95 53 16
75 1 85 31 81
99 22 27 84 38
98 8 19 25 92
56 59 62 48 54
8 22 67 70 91
73 51 96 49 37
31 4 99 52 27
13 50 39 1 85
19 9 40 55 47
59 35 52 60 91
75 86 13 39 21
33 99 11 64 50
37 58 71 22 54
6 72 88 3 85
85 63 5 48 20
96 55 53 35 60
0 17 26 22 13
25 45 62 4 41
78 40 46 95 33
23 53 82 22 74
5 45 15 44 65
62 84 68 83 88
52 46 61 77 59
56 60 71 2 43
27 77 28 8 84
33 0 22 62 40
3 44 19 53 91
60 83 75 48 94
29 93 23 82 65
77 34 72 62 4
9 8 76 52 60
37 54 98 20 22
11 13 86 48 57
10 63 41 23 61
58 57 47 55 3
38 11 39 15 9
5 65 92 98 41
72 45 6 16 83
74 40 99 50 30
72 46 35 9 53
70 67 74 93 55
24 4 30 38 47
29 96 51 17 71
90 5 69 54 61
90 59 93 99 34
85 39 52 16 20
32 66 75 35 17
38 33 84 40 89
91 77 26 86 54
2 87 96 34 28
98 74 56 17 37
10 62 71 89 95
6 90 5 99 92
39 73 55 18 8
87 44 72 2 45
82 78 32 64 37
46 75 95 67 80
8 60 57 97 56
22 43 92 26 96
98 1 21 17 14
85 6 33 69 16
53 82 0 41 73
46 72 2 35 23
89 94 80 76 42
27 94 98 5 95
64 19 77 15 92
11 52 41 50 51
4 57 99 21 29
20 35 78 34 87
52 83 84 21 59
30 64 85 90 91
24 32 57 0 81
17 47 1 25 27
10 51 65 79 34
83 9 94 14 85
65 51 28 32 48
81 71 8 12 31
38 50 92 57 47
34 49 56 73 27
54 8 72 38 29
34 78 69 16 30
82 24 9 0 13
90 41 60 28 12
71 22 70 80 66
71 50 24 86 21
14 92 45 30 95
57 60 0 88 91
87 97 6 7 26
61 98 25 5 84
1 63 45 36 67
27 16 54 72 41
32 74 53 9 35
95 29 90 19 26
82 97 11 42 28
2 93 86 28 43
90 12 21 56 76
98 30 25 9 75
11 20 45 95 50
22 31 39 49 6
2 53 74 9 64
24 8 85 86 59
41 38 57 63 32
88 93 14 11 55
69 31 25 66 52
10 60 42 16 95
8 14 81 84 5
98 32 68 12 6
83 66 90 69 46
54 40 59 73 91
24 66 62 30 83
72 80 54 25 17
3 77 60 68 36
26 22 8 74 95
63 39 4 53 87
49 96 48 2 78
14 21 38 98 45
30 34 54 16 92
0 89 70 68 57
7 74 10 86 97
25 91 46 84 66
44 50 40 10 67
62 77 5 6 43
63 29 79 51 53
70 69 61 80 54
19 11 24 9 93
21 53 81 2 61
69 83 33 23 68
73 22 77 71 52
92 76 94 86 1
51 31 27 28 95
16 50 36 13 57
1 11 79 45 90
41 77 3 78 42
56 74 85 44 52
58 0 63 88 30
35 18 48 49 80
36 11 46 13 76
37 19 9 93 87
68 15 17 8 82
96 20 7 81 11
42 17 14 44 36
99 98 68 58 56
15 57 80 3 67
61 66 38 83 59
3 60 25 55 17
42 45 66 24 14
13 16 41 11 88
89 96 97 35 1
83 5 52 69 28
99 11 53 82 3
88 74 42 38 13
94 80 27 92 34
29 56 8 14 76
85 65 66 79 59
80 82 43 87 70
85 22 53 10 1
30 78 39 26 77
7 92 20 21 93
75 36 61 13 90
53 41 29 77 58
98 83 86 14 94
10 99 24 17 32
3 87 42 19 61
57 89 36 13 9
30 45 53 99 41
80 85 25 18 10
47 98 64 78 11
58 94 9 91 87
35 97 43 0 32
70 1 80 98 85
73 69 90 63 20
53 77 39 49 64
28 7 78 84 57
56 86 23 88 97
18 53 73 49 40
36 95 46 42 94
97 19 23 72 84
21 47 91 8 17
99 90 68 30 25
26 9 84 35 59
44 47 66 8 48
0 82 68 54 58
65 7 28 62 61
55 37 21 72 86
47 55 12 75 61
99 74 9 10 67
2 57 25 20 46
83 97 43 49 59
3 79 94 69 70
12 2 41 69 24
93 95 43 52 66
71 92 57 14 58
30 25 81 62 79
7 96 70 22 42
92 83 35 65 8
63 71 43 33 19
95 24 51 85 41
66 13 68 12 20
7 1 22 40 75
30 56 10 85 72
83 52 51 80 14
32 29 67 41 74
96 62 16 15 98
73 45 99 48 79
24 9 5 38 52
32 57 87 30 90
7 54 39 43 14
31 76 96 65 0
51 99 20 61 92
19 37 39 15 86
53 32 42 57 70
9 26 84 93 10
33 25 61 21 0
34 60 30 99 7
62 50 33 29 54
92 12 81 0 87
60 2 27 7 9
28 18 31 35 59
20 63 38 72 14
96 89 34 56 63
61 8 25 90 78
94 26 10 47 84
1 32 7 83 73
16 65 69 23 97
44 59 87 16 18
31 50 27 9 38
49 10 56 69 35
13 24 91 46 70
22 37 6 43 25
87 79 59 26 35
81 73 36 66 51
97 11 43 17 7
24 94 71 91 48
12 77 93 55 34
91 93 56 55 58
24 11 82 35 86
68 81 50 34 23
59 73 1 8 37
18 83 80 53 85
40 30 7 72 22
68 94 95 89 42
91 84 11 49 36
64 29 26 73 76
37 1 51 9 25
32 48 47 36 88
54 91 59 72 50
31 83 19 20 0
24 67 61 46 99
52 53 11 16 69
86 52 95 73 6
56 45 8 13 80
28 77 19 59 48
99 33 47 10 85
35 81 27 46 76
41 45 1 12 49
32 16 21 85 27
50 80 66 64 10
76 11 9 59 52
71 37 34 2 43
43 19 88 81 12
4 48 9 91 31
1 46 10 6 56
72 41 30 36 94
61 83 86 28 79
39 10 40 25 52
29 60 38 18 31
65 46 11 0 94
68 12 42 4 84
55 20 86 77 26
12 65 79 59 43
93 6 68 1 29
17 48 45 26 80
37 22 5 66 47
71 11 41 18 64
5 45 54 82 64
90 89 22 17 71
81 60 65 32 34
41 86 35 30 48
67 47 23 51 6
19 65 11 58 49
97 68 56 10 39
87 29 43 40 83
9 41 26 79 77
63 72 93 4 51
82 50 90 45 4
53 96 93 30 19
8 95 73 74 98
35 20 32 7 36
56 52 59 26 16
94 67 97 34 75
23 80 68 24 47
56 8 21 66 36
69 5 3 95 17
29 38 44 42 28
84 35 72 8 38
94 30 48 24 27
81 61 18 87 90
65 17 85 22 45
32 15 74 52 68
9 69 63 68 36
44 31 35 12 39
57 83 6 49 23
64 0 10 85 81
82 40 34 91 24
+35
View File
@@ -0,0 +1,35 @@
from collections import defaultdict
with open("input") as f:
data = f.read().strip().split('\n')
data = [tuple(tuple(map(int, point.split(','))) for point in line.split(' -> ')) for line in data]
data1 = list(filter(lambda x: x[0][0]==x[1][0] or x[0][1]==x[1][1], data))
d = defaultdict(int)
for (x1,y1), (x2,y2) in data1:
if x1==x2:
for y in range(min(y1,y2), max(y1,y2)+1):
d[(x1, y)] += 1
else:
for x in range(min(x1,x2), max(x1,x2)+1):
d[(x, y1)] += 1
k = sum(1 for (x, y), c in d.items() if c>1)
print(k)
d = defaultdict(int)
for (x1,y1), (x2,y2) in data:
if x1==x2:
for y in range(min(y1,y2), max(y1,y2)+1):
d[(x1, y)] += 1
elif y1==y2:
for x in range(min(x1,x2), max(x1,x2)+1):
d[(x, y1)] += 1
else:
if x1>x2:
x1,x2 = x2,x1
y1,y2 = y2,y1
y = 1 if y1<y2 else -1
for x in range(x1, x2+1):
d[(x, y1+(x-x1)*y)] += 1
k = sum(1 for (x, y), c in d.items() if c>1)
print(k)
+500
View File
@@ -0,0 +1,500 @@
955,125 -> 151,929
830,251 -> 526,555
182,185 -> 13,16
73,871 -> 73,951
169,968 -> 626,968
471,180 -> 471,746
725,478 -> 791,544
577,413 -> 577,753
636,937 -> 181,937
46,601 -> 714,601
400,905 -> 400,972
911,773 -> 883,801
818,684 -> 818,705
71,846 -> 151,846
737,489 -> 626,378
634,800 -> 634,482
401,209 -> 401,469
676,688 -> 384,396
247,819 -> 680,819
944,343 -> 196,343
57,689 -> 586,160
13,54 -> 918,959
736,490 -> 520,706
331,20 -> 208,20
639,865 -> 322,548
914,227 -> 914,980
163,411 -> 163,825
344,58 -> 344,199
274,153 -> 989,153
15,14 -> 983,982
784,269 -> 332,721
206,921 -> 206,331
219,944 -> 260,903
81,92 -> 976,987
325,633 -> 502,810
887,850 -> 887,83
203,756 -> 203,627
447,33 -> 748,33
87,245 -> 87,932
817,324 -> 881,324
922,227 -> 167,982
626,867 -> 155,396
743,689 -> 743,779
516,433 -> 133,433
444,407 -> 614,407
42,140 -> 475,140
311,422 -> 311,514
526,59 -> 643,59
709,69 -> 455,69
136,46 -> 159,46
300,113 -> 763,576
979,977 -> 18,16
380,490 -> 380,556
134,726 -> 134,287
317,717 -> 383,717
726,712 -> 211,197
703,952 -> 165,952
806,575 -> 122,575
589,691 -> 589,716
965,337 -> 879,337
938,23 -> 57,904
186,141 -> 385,141
864,744 -> 959,744
276,957 -> 636,957
98,846 -> 98,349
559,261 -> 559,63
564,808 -> 564,429
491,362 -> 491,746
513,250 -> 897,250
939,442 -> 249,442
366,678 -> 916,678
325,79 -> 604,358
513,890 -> 133,890
360,88 -> 427,88
777,266 -> 522,266
371,859 -> 776,859
111,600 -> 111,980
366,471 -> 646,191
849,407 -> 933,407
867,681 -> 570,384
467,707 -> 797,377
624,304 -> 852,76
341,149 -> 575,383
34,499 -> 736,499
13,312 -> 927,312
897,188 -> 897,639
372,665 -> 372,501
651,22 -> 173,22
450,394 -> 450,798
140,584 -> 140,960
223,919 -> 980,919
893,645 -> 429,181
284,488 -> 207,411
823,868 -> 622,667
426,881 -> 868,881
49,63 -> 974,988
921,475 -> 81,475
166,653 -> 166,913
40,191 -> 767,918
911,499 -> 911,363
966,960 -> 84,78
193,522 -> 193,379
208,255 -> 673,255
684,837 -> 684,192
921,758 -> 921,841
756,244 -> 756,277
866,533 -> 866,186
97,747 -> 798,46
415,287 -> 415,759
570,824 -> 902,824
341,792 -> 44,792
849,787 -> 161,99
501,621 -> 565,685
409,62 -> 215,256
591,780 -> 855,780
901,67 -> 901,223
662,212 -> 578,212
196,924 -> 196,94
404,492 -> 300,492
10,984 -> 984,10
722,739 -> 722,775
805,637 -> 805,299
848,722 -> 707,722
444,597 -> 158,597
402,57 -> 509,57
490,353 -> 273,353
868,208 -> 421,655
102,930 -> 903,129
557,877 -> 557,529
27,69 -> 843,885
549,695 -> 468,695
767,701 -> 104,701
415,141 -> 415,809
205,767 -> 205,427
264,723 -> 952,35
357,279 -> 390,279
529,436 -> 250,715
390,472 -> 889,971
983,11 -> 21,973
732,307 -> 112,927
412,801 -> 252,801
738,338 -> 738,94
80,135 -> 952,135
623,269 -> 870,516
216,507 -> 32,507
927,10 -> 927,946
389,955 -> 389,399
683,825 -> 629,879
163,450 -> 208,495
303,217 -> 831,217
827,632 -> 827,736
629,880 -> 629,533
368,67 -> 111,67
625,268 -> 397,268
737,335 -> 299,773
666,767 -> 494,939
144,238 -> 757,238
511,211 -> 270,211
312,901 -> 548,665
550,763 -> 47,763
942,403 -> 464,881
969,18 -> 15,972
963,831 -> 187,55
933,831 -> 933,408
733,658 -> 876,658
599,392 -> 980,11
44,406 -> 900,406
645,169 -> 577,237
731,41 -> 731,265
574,397 -> 574,249
316,279 -> 316,657
826,116 -> 18,924
611,892 -> 824,892
607,168 -> 607,85
371,914 -> 113,656
145,201 -> 458,514
813,952 -> 189,328
633,15 -> 239,409
832,278 -> 202,908
234,698 -> 509,423
635,27 -> 635,18
701,147 -> 701,577
777,722 -> 777,835
519,298 -> 497,298
80,71 -> 875,866
872,350 -> 58,350
128,711 -> 131,711
591,709 -> 362,480
129,647 -> 54,572
980,731 -> 282,33
245,813 -> 682,813
867,238 -> 463,642
511,888 -> 511,391
727,38 -> 289,38
311,888 -> 311,801
261,915 -> 926,250
855,835 -> 145,125
78,688 -> 826,688
989,40 -> 66,963
956,30 -> 101,885
665,826 -> 406,826
97,981 -> 985,93
971,847 -> 357,233
725,531 -> 725,556
63,570 -> 403,570
41,430 -> 577,430
40,54 -> 796,810
417,232 -> 417,392
214,800 -> 936,78
542,955 -> 146,955
76,263 -> 471,263
784,507 -> 784,858
443,222 -> 443,881
317,157 -> 317,956
245,599 -> 166,520
307,649 -> 307,313
399,782 -> 538,782
483,731 -> 294,731
950,903 -> 281,234
283,522 -> 866,522
472,505 -> 278,505
435,693 -> 845,283
881,751 -> 294,164
40,840 -> 179,979
481,398 -> 481,661
509,687 -> 509,875
976,866 -> 684,574
133,130 -> 158,130
268,81 -> 641,454
613,754 -> 393,974
980,984 -> 14,18
55,909 -> 952,12
865,132 -> 986,132
147,773 -> 147,414
135,62 -> 934,861
298,293 -> 298,978
583,990 -> 424,990
760,189 -> 516,189
286,292 -> 286,648
60,352 -> 60,830
335,241 -> 420,156
360,571 -> 360,354
361,233 -> 714,233
21,78 -> 922,979
35,748 -> 449,748
859,26 -> 73,812
277,827 -> 277,708
160,633 -> 515,278
673,422 -> 568,317
620,235 -> 620,645
538,698 -> 156,698
47,543 -> 439,543
65,975 -> 945,95
259,644 -> 242,644
777,216 -> 794,216
100,191 -> 835,926
450,581 -> 450,433
475,784 -> 475,118
840,584 -> 580,844
191,283 -> 191,58
170,650 -> 130,690
478,269 -> 478,781
44,981 -> 839,186
270,744 -> 270,902
941,960 -> 102,121
303,690 -> 303,467
150,18 -> 150,601
470,523 -> 240,523
166,575 -> 621,575
197,765 -> 691,271
164,798 -> 369,798
544,319 -> 677,319
31,212 -> 777,958
894,774 -> 894,752
567,225 -> 67,225
884,201 -> 184,201
675,961 -> 187,473
203,78 -> 203,690
52,945 -> 957,40
987,214 -> 987,762
792,975 -> 792,673
358,782 -> 598,542
105,716 -> 777,44
736,643 -> 245,643
507,940 -> 275,940
231,936 -> 231,209
204,545 -> 186,563
881,426 -> 881,460
315,867 -> 96,867
793,324 -> 642,324
276,709 -> 540,973
834,401 -> 834,701
616,874 -> 616,606
892,596 -> 892,570
255,919 -> 850,324
764,62 -> 82,744
682,374 -> 978,374
218,353 -> 218,787
140,289 -> 720,869
811,20 -> 811,203
165,291 -> 284,291
137,382 -> 137,767
15,14 -> 989,988
947,682 -> 499,234
751,356 -> 862,356
398,362 -> 398,494
260,32 -> 780,552
839,484 -> 584,484
198,865 -> 198,327
600,461 -> 418,279
346,439 -> 495,588
854,661 -> 775,661
119,575 -> 119,415
349,849 -> 349,421
13,401 -> 21,393
169,511 -> 169,61
848,678 -> 213,678
42,25 -> 729,712
903,740 -> 816,740
398,862 -> 398,116
443,624 -> 101,624
135,158 -> 223,158
440,742 -> 388,742
903,963 -> 49,109
131,198 -> 208,198
147,289 -> 147,663
684,307 -> 684,299
453,864 -> 453,404
361,982 -> 978,365
840,64 -> 563,64
377,301 -> 613,301
32,366 -> 609,366
867,240 -> 867,188
798,714 -> 956,714
617,792 -> 617,354
309,357 -> 309,797
824,888 -> 824,598
947,958 -> 305,316
505,934 -> 461,890
45,685 -> 597,133
875,170 -> 66,979
239,959 -> 985,213
769,423 -> 769,39
62,750 -> 764,48
749,798 -> 749,307
110,646 -> 241,777
93,804 -> 867,30
361,663 -> 856,663
494,788 -> 187,788
696,379 -> 696,823
664,935 -> 146,417
895,804 -> 895,144
200,240 -> 805,240
347,794 -> 487,934
978,920 -> 978,408
730,480 -> 390,140
933,810 -> 933,513
429,864 -> 134,864
476,339 -> 183,632
677,878 -> 677,417
980,261 -> 757,261
452,569 -> 452,280
535,223 -> 867,223
159,466 -> 983,466
332,155 -> 334,153
887,478 -> 887,179
173,245 -> 773,845
441,274 -> 632,465
987,389 -> 987,440
830,806 -> 747,806
103,82 -> 796,775
945,14 -> 129,14
110,873 -> 520,873
393,391 -> 291,391
598,125 -> 129,594
378,546 -> 175,546
302,558 -> 617,243
943,752 -> 244,53
972,943 -> 41,12
16,164 -> 124,164
270,815 -> 27,815
146,729 -> 146,317
153,255 -> 166,255
511,505 -> 270,505
404,568 -> 388,568
485,751 -> 485,785
752,686 -> 160,686
523,676 -> 385,676
854,437 -> 618,437
578,212 -> 875,509
800,115 -> 815,130
439,554 -> 868,983
225,803 -> 244,822
494,735 -> 655,574
932,191 -> 932,41
842,325 -> 630,325
201,288 -> 518,288
255,332 -> 53,332
385,959 -> 329,903
757,447 -> 276,447
884,957 -> 884,449
686,354 -> 195,354
384,677 -> 951,110
173,77 -> 164,77
767,840 -> 248,321
81,180 -> 81,371
517,838 -> 517,461
950,559 -> 221,559
934,826 -> 329,221
311,329 -> 311,146
140,459 -> 280,459
200,195 -> 24,19
517,270 -> 865,618
43,54 -> 939,950
853,339 -> 853,388
297,795 -> 240,795
358,890 -> 275,973
26,70 -> 931,975
781,141 -> 318,604
17,794 -> 204,794
87,534 -> 763,534
590,968 -> 590,613
358,836 -> 758,836
598,635 -> 764,635
313,670 -> 313,478
832,330 -> 832,629
973,36 -> 21,988
131,814 -> 709,236
261,163 -> 261,906
720,48 -> 659,48
988,152 -> 326,814
937,761 -> 690,761
988,784 -> 988,879
807,445 -> 336,916
933,978 -> 51,96
305,966 -> 305,402
184,687 -> 437,687
256,172 -> 186,172
508,162 -> 421,162
689,52 -> 740,52
545,807 -> 545,630
676,924 -> 620,924
976,68 -> 139,905
322,96 -> 45,96
663,407 -> 199,871
562,636 -> 224,974
172,439 -> 126,439
740,628 -> 852,628
252,28 -> 596,372
129,850 -> 571,408
75,446 -> 399,446
67,460 -> 704,460
932,531 -> 932,60
520,229 -> 255,494
462,756 -> 462,614
158,117 -> 592,551
203,722 -> 203,892
93,822 -> 207,822
634,172 -> 634,457
272,365 -> 272,377
989,23 -> 25,987
739,776 -> 40,776
843,708 -> 24,708
665,10 -> 665,728
271,858 -> 11,598
947,642 -> 629,960
230,760 -> 938,52
291,552 -> 291,388
689,400 -> 260,829
610,194 -> 470,194
628,824 -> 45,241
935,940 -> 51,56
90,871 -> 90,933
973,934 -> 104,65
435,245 -> 768,245
43,666 -> 625,666
770,563 -> 724,563
363,816 -> 363,889
25,725 -> 701,49
784,846 -> 484,846
989,293 -> 989,502
572,135 -> 485,135
683,807 -> 370,494
982,182 -> 225,939
838,522 -> 520,522
253,942 -> 970,225
442,963 -> 577,963
867,193 -> 307,753
269,204 -> 771,204
941,925 -> 136,120
329,488 -> 728,89
37,424 -> 254,424
179,864 -> 895,148
359,473 -> 359,675
976,933 -> 129,86
220,101 -> 376,101
988,667 -> 946,667
667,22 -> 308,22
831,782 -> 245,196
759,813 -> 225,279
+29
View File
@@ -0,0 +1,29 @@
from collections import Counter
with open("input") as f:
data = f.read().strip().split(',')
data = list(map(int, data))
_data = data
for _ in range(80):
if _%80==0:
print(_)
new_data = []
new_fish = []
for x in _data:
if x==0:
new_fish.append(8)
new_data.append(6)
else:
new_data.append(x-1)
_data = new_data + new_fish
print(len(_data))
_data = [0]+[y for x, y in sorted(Counter(data).items(), key=lambda x: x[0])]+[0,0,0]
for _ in range(256):
x = _data[0]
_data = _data[1:] + [_data[0]]
_data[6] += x
print(sum(_data))
+1
View File
@@ -0,0 +1 @@
1,2,1,1,1,1,1,1,2,1,3,1,1,1,1,3,1,1,1,5,1,1,1,4,5,1,1,1,3,4,1,1,1,1,1,1,1,5,1,4,1,1,1,1,1,1,1,5,1,3,1,3,1,1,1,5,1,1,1,1,1,5,4,1,2,4,4,1,1,1,1,1,5,1,1,1,1,1,5,4,3,1,1,1,1,1,1,1,5,1,3,1,4,1,1,3,1,1,1,1,1,1,2,1,4,1,3,1,1,1,1,1,5,1,1,1,2,1,1,1,1,2,1,1,1,1,4,1,3,1,1,1,1,1,1,1,1,5,1,1,4,1,1,1,1,1,3,1,3,3,1,1,1,2,1,1,1,1,1,1,1,1,1,5,1,1,1,1,5,1,1,1,1,2,1,1,1,4,1,1,1,2,3,1,1,1,1,1,1,1,1,2,1,1,1,2,3,1,2,1,1,5,4,1,1,2,1,1,1,3,1,4,1,1,1,1,3,1,2,5,1,1,1,5,1,1,1,1,1,4,1,1,4,1,1,1,2,2,2,2,4,3,1,1,3,1,1,1,1,1,1,2,2,1,1,4,2,1,4,1,1,1,1,1,5,1,1,4,2,1,1,2,5,4,2,1,1,1,1,4,2,3,5,2,1,5,1,3,1,1,5,1,1,4,5,1,1,1,1,4
+8
View File
@@ -0,0 +1,8 @@
with open("input") as f:
data = list(map(int, f.read().strip().split(',')))
print(min(sum(abs(y-x) for y in data) for x in range(min(data), max(data)+1)))
print(min(sum(abs(y-x)*(abs(y-x)+1)//2 for y in data) for x in range(min(data), max(data)+1)))
+1
View File
@@ -0,0 +1 @@
1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,867,253,111,269,117,150,421,508,1073,136,247,10,1427,802,2,492,1302,228,2,48,113,0,741,34,107,559,514,283,372,78,423,405,1303,360,281,1850,367,892,1021,930,318,80,709,349,32,203,94,1359,456,783,62,34,1487,245,294,749,250,1441,8,1388,604,324,483,696,119,294,1478,529,189,454,785,703,13,1099,790,402,251,919,116,318,201,893,571,3,45,756,41,65,92,21,1903,219,32,191,1037,177,480,232,389,1342,1178,1320,955,1020,655,276,203,221,316,689,621,270,911,537,230,327,662,552,410,1608,385,7,26,227,71,1646,257,725,531,413,8,19,1029,182,1518,270,124,113,569,468,126,505,376,367,113,425,4,80,1883,433,1167,768,231,393,528,69,422,17,350,858,1028,659,972,108,542,602,1577,11,1481,127,466,415,567,1178,38,137,777,446,965,832,1347,642,716,176,264,487,32,425,354,104,230,756,310,711,228,580,520,677,781,45,926,1063,126,235,262,199,330,874,1570,221,107,803,810,1723,266,99,940,21,38,1680,44,32,17,907,403,413,628,968,138,12,24,483,114,658,206,24,61,561,882,532,1280,255,805,75,237,321,310,1022,545,1515,609,65,791,933,233,846,506,704,628,516,868,726,134,6,243,1048,227,259,1599,117,114,461,365,63,1559,62,98,884,11,426,915,192,901,4,1481,122,424,307,250,256,693,162,1217,834,516,644,898,396,1073,642,480,361,1434,607,23,818,515,6,288,443,324,4,1559,659,409,415,82,41,1233,657,93,1405,17,94,18,379,32,8,419,1511,766,234,818,916,775,4,1009,282,372,317,371,945,1314,261,485,529,1076,298,223,40,434,401,117,1030,153,2,19,27,41,544,477,1117,588,206,155,12,1197,1518,305,51,921,775,296,1187,57,517,2,36,145,92,67,68,559,771,1,69,250,612,94,1638,1327,501,434,114,6,1468,429,28,1163,207,576,50,1759,216,9,50,432,598,664,1087,409,828,1115,169,120,318,21,1245,314,338,47,469,231,236,892,671,373,991,1136,488,341,168,143,850,1135,42,449,666,814,16,232,505,122,1316,803,1093,977,79,5,936,512,217,942,1333,13,13,1861,2,267,74,1096,1058,107,461,78,418,861,547,25,1398,255,562,344,820,1171,1376,494,17,116,1333,256,20,1425,1668,79,604,1614,223,45,18,917,30,965,866,1331,91,141,1120,829,3,0,498,57,78,1579,467,185,1399,683,590,11,913,33,540,536,459,367,175,176,946,130,324,634,671,554,277,570,968,409,468,419,1249,1039,45,238,4,808,1022,10,151,1158,32,38,1054,969,90,70,1194,1582,512,876,289,1042,91,1872,305,996,349,17,517,968,1493,637,142,141,226,590,181,811,608,4,135,97,389,385,929,1143,1319,684,509,437,133,843,101,118,71,120,80,25,33,259,894,1050,1450,583,1665,372,128,586,282,1147,1160,1643,1488,339,445,268,1577,101,8,308,719,210,288,332,1034,47,1303,31,59,16,270,104,68,1107,736,420,108,367,461,791,279,863,645,2,999,453,682,21,764,244,435,1238,36,1193,37,346,35,70,114,78,67,1245,15,1002,83,450,353,50,396,1068,26,21,429,551,13,498,117,731,601,23,1218,271,26,958,852,139,331,92,560,218,1243,410,109,296,35,588,6,645,87,64,188,497,28,693,18,88,196,62,7,33,311,1102,187,829,664,630,331,304,1249,21,309,1238,64,155,38,134,291,77,90,32,765,332,87,257,755,93,181,174,118,584,98,825,292,428,187,731,813,784,1222,117,345,1380,31,1447,269,672,747,1112,147,32,690,1258,253,763,92,1427,503,4,40,289,41,733,240,884,201,136,594,560,3,1083,1282,686,918,667,1535,702,158,65,1055,100,481,457,1565,1067,641,289,18,1537,62,545,401,1238,528,713,1042,430,144,390,220,953,42,817,18,26,137,1870,999,557,234,586,1316,87,104,369,39,215,595,922,1194,187,1056,382,397,387,872,191,464,1841,883,162,119,38,916,2,676,1524,315,1217,63,382,328,591,372,138,883,733,910,635,1059,87,773,630,1179,169,947,401,20,820,119,575,1117,48,268,45,896,772,293,217,73,732,26,528,1121,382,813,419,424,221,107,145,264,526,589,482,51,1399,954,292,276,248,1276,218,1005,296,360,60,5,499,661,192,199,250,1001,496,281,361,664,248,1090,86,203,241,61,329,1551,182,790,787,408,442,603,681,522,478,1072,527,1094,104,1267,418,730,217,1198,859
+34
View File
@@ -0,0 +1,34 @@
from itertools import combinations
with open("input") as f:
data = f.read().strip().split('\n')
data = [[s.split() for s in d.split('|')] for d in data]
print(sum(sum(1 if len(y) in {2,3,4,7} else 0 for y in x) for _, x in data))
known = {
2: 1,
3: 7,
4: 4,
7: 8,
}
s = 0
for digits, number in data:
real = {}
for digit in digits:
if len(digit) in known:
real[known[len(digit)]] = set(digit)
for x in combinations(digits, 9):
base = set('abcdefg')
for d in x:
base = base.intersection(set(d))
if len(base)==1:
f = next(iter(base))
real[2] = [d for digit in digits if len(d := set(digit))==5 and f not in d][0]
real[3] = [d for digit in digits if len(d := set(digit))==5 and len(real[2]-d)==1 and len(d-real[2])==1][0]
real[5] = [d for digit in digits if len(d := set(digit))==5 and d!=real[2] and d!=real[3]][0]
real[9] = [d for digit in digits if len(d := set(digit))==6 and d==real[3] | real[4]][0]
real[0] = [d for digit in digits if len(d := set(digit))==6 and len(d - real[5])==2][0]
real[6] = [d for digit in digits if len(d := set(digit))==6 and d!=real[0] and d!=real[9]][0]
real = {frozenset(v): k for k, v in real.items()}
s += int(''.join(str(real[frozenset(n)]) for n in number))
print(s)
+200
View File
@@ -0,0 +1,200 @@
fgcae ebafc cabdef eg abecfg abgfed feg gafdc bceg ebgcadf | defagbc faecg cfdag gecb
eagd cad fgadbc aefdcg dcebfg fcegd cbeaf ad dbgfeca defca | cfdeg gdcabf fcgde afgced
gfdeca aeb eb fbdag eafdc adfbe cefdab bdaegcf efbc ecadgb | eb dbafe eab faecd
facbdge efdg gcafd daegc caegb aecfdb ade ed gafbdc dgfeac | de abcdef faedcg dfgca
dcaegbf bc dcgeab cbgad cebg cdfaeb fbadg acdge cefdga cdb | gdcfae gbec gdace cgadfe
ceagfbd fbaeg fadge fbegad abgecf dafcg ed edab ged dfcbeg | gebfa de gbafec ed
acedbf adfbg cgafedb geac cgb befcgd bcgaf bfgace cg bfeac | bcdfeg fecba cafgeb bgdfa
egadc cea ac agbcedf cgab bgcade fbcaed eadfbg fegdc ebdag | fdecabg fcged cdbage efgdab
cbfge gdc cdea efdag dc cdfeg gfbcad gcdeaf cdeagbf egfadb | dfcge egcfd fcdbag dc
gaedb fbced gcdbef cge gc decgb dcbgfea cgfb cgdfea fbcade | fdegbac fecbd ecg degba
geaf bcfedg agbcd bfeagd dgfbe cbdaef beacdfg abe agebd ea | fbecdg geaf gebfad adgbc
bed afgebd adecf bafgedc dbca cfegb becdf fabdce bd gcfdea | gfdaeb ebfgad dbefc cbda
gacfebd ag bedfca agbfde egfcab dfga degab fbade bag bdecg | dgaf abcfed agb bfecag
afebg afdeg gcbe acebdf cfbage cafeb gab decgabf bg gcfdba | gb caebf abgef acfebd
efdab fabdgce gcbfa eg gacbfe beg ecag beafg dfabcg bgecfd | bge fgdcbe gcfdba ebdaf
aecbd bdagef gd bfega aefgcbd gfde gfdcab dbg edgba febagc | dg dagfbc dgfe eabdgf
gdfba egfacbd gdcefa baf gcba fdagcb dgfac ab dcfeba ebgdf | dcfag bfa gafcd cbag
afbe bdagc cedfb defcab ebfdgac gfedbc cbfad af adgcfe adf | dafbc dfbac fdcegb gadcb
fcgedb ca fdcage cagdbef ceab acedfb fdbce cafdb cda afgbd | ac dcafb efgdac ebcfda
fbad gbcda dcefgb cfeadg dgbcaf bcafdeg ad gcabe adc dfbcg | gbcdef bcfdg cgbfd bfadgc
afcgeb bedag bdecafg agb bedfga fdagce bg bgfd dfgea cdabe | badge cagdfe efdag afegbd
gfed dcaef ge bafdce daceg acebfg cefadg egc ecdabfg gacdb | bcgad bcegaf agecd degcafb
deacb adcge ab acb fbdce faedbgc fgadec gabd deabgc ecbfag | dfbec ab cbagfe bcfgae
gcabfde ecf cbdeg bacgf fedg ecfgb gfedcb fcaedb cebdag fe | dbcegf bcgdfe gfde defg
daefb bfg gedafb fabge dbafec cfega bdga cgbdfe gb gbacedf | aecfg bcedaf begdcf dgba
bagce bf bdacfeg efbg fcb cefab gbfadc cafebg ecdfa bacdge | fegb cegba bagce efbg
becag cfeg cefgbad fbace gfeacb acdegb bef ef adbcf fdabge | ef bdfac cbegad gbeac
egb afcbe fbaeg eabgfdc gcab gb gfdea fgbecd bcdafe gafbec | fcdgeb edcgbfa gbe fgeba
dga caebd ecdag cegfd abdfce dafbge ecbgda bcdgefa ga agbc | afdbec ecfdab gdaec gad
fc gbdefc cfe ebdaf fcbeda gbafde edacg bfcdgae dacef cabf | decgfba cdbefg cf ecdabf
febgd dafgbc caed cgd ceadgf fbecga dcgfe aegfc gbedfca cd | dgfeb fgced dcafebg agdfce
ecdafgb bgade bgd fabd gbaef bd egadbf ceadg cfbgea dgbfec | edagc bdage bfda dbgae
cgeba aefgcd dfceagb dc ced facbed cdfb dbaec adfeb fgedba | fbdea bgcae efbda fcdeag
caegbf dcfga afcedgb afgdcb fcedag ab edbcg dbfa gdcab abg | bag cbdag agb ab
gadfecb befc fgdbea cf fedagc fac bcgfa agbfe adgcb feagcb | gbcda cgbad bcgfa cf
dae aefcb dgabec dacfg afebdc ebfd afecgb aedcf fbcagde ed | ecabfgd bedf bcadef egdacfb
abcf fcega fdgce fegbda eafdcgb ac gabecd gbfae beagfc eca | edbgca edbfga cae gface
bgedcf afcdbg ag gcbaef fcedgab afgdb cfgbd befda acdg agf | fdbga ceadbfg egfbac fag
bad edafc bdeg abcgde ecafgbd gfadcb bgaec db edcba geafcb | cdafe fdcabg cdfageb dbge
geb bgcf agfcde gb befag gfbcae defab gabdec eacfg gabecfd | afbedgc gceabf abgef egacf
fdeac acg cfegda cbeadf fegdbca ag acefg adge bfdgca gbcfe | gecdaf efgca cgbafd cfgeb
begdf bdfgc ebcf adfcg cdegbf dgeafb cbg cb bfeagdc gbdcea | acgedb fagdbe bgfde dfgac
afcgdb aedc bedgf egafcd afdge gecaf fcgebda gda da ceabfg | gedbf gacfe adg agdef
bdeafg acgebdf dgcfa fa cafe dgfbc gaf edagfc cgabde agedc | fadbge bdgfcea dgcefa cgeda
gacfbde defag cbgef gbca efadcb afcbeg cgbdfe ba eba gefab | fegab abe ebfcgd fbgae
gfbdec fbcade cabdegf ebdg bfd dcfgb cadgf gebcf db fcabge | eacdgfb bdge ebdg ecafdb
egcfba fdcae fcdaeb gcfdae fabd ba cdeab fcdbaeg eba decbg | cabed facbed cbade dfcea
agdfe acfdeg fcdbeg dgf gdaec df cadf ceagbfd abgfe gbdaec | bgcdef abfge gbefcd df
dgebf afgdb bfa fcbade af dcafgb agcf gcbda dabgecf gadecb | dbcga abcdge fadgbce eagcbd
dbcga bea egacdf dageb be efbd abgfce gadfe fcbegad aebfdg | eba be bdage bedga
gcbd egbdafc fgc fbgedc gc aedbfg cefgb fedbg cfaegd efabc | bface egfbc bgdacfe gc
fdgae dc ced gbcd gbcefd decfba becfg ecfabg cgfde gbcadfe | edbcfg cd cafgbe cdegbf
geadcf efg gadef fg fecad acbgfe dagecbf dcgf gadbe afbdce | edafcg bgcfade gfdc abedg
edcba ecgdb aedbcf aebf dabfc fdacge badgfc ae ead gfcbade | gcebdaf degbc ebfadc efdcba
caedbg dbgec dcbf ecgdbf cgdef dgf bgaedcf egacf afebgd fd | cdfbeg ecfbgda gcbfed cbgedf
bdag acdeb ecgdb egbcfa fcdbega gb dbecag cbdafe ebg gdcef | bedgc abdfcge efagcb cdgef
bfade bfdga dfbgec cagbfd dfgacbe gba gacf ag gdcbf abgedc | cfag abdcge ebafd abefd
agcdef bcfda bdgca aebdfcg eagdc gb dbg gbea cedagb bfgdec | dfabgec eafdgc acdge gdecab
ebacdfg cgbfad egdbc bdgfa daef bae gabed febadg ae gacbef | fagdb daebgf fgdab bea
dcgbf cbedf degc bgc fcgdbea fbadg cfdgbe gc efacgb fdbace | edfcb cfeabg cg edbacf
bcdagfe dfacb cbfdge bgcdf fdgeac acd agbd acbef da dcgfba | cbgdf dgab ad gbdcaf
edgfbca gbe be ceba bdaecg gefcd dbagc egbadf dcegb dfgabc | gcfde gfceabd gfbcad eagfdb
dfcbg fcdga efgb gecbfd gecbda dfbgaec bedfc dgb bfadce bg | dbcgf bfge dacgf dfgcbe
cga ebdgaf bfdag cbgfe bfadgc gbfeadc ac cagfb cdba cgadef | bfdag agedcf aegcbfd gcfab
gcead gfdbec cbdge gabfce eb dfgcba ecfdgab befd dgcbf ebg | cdgae fbdegc bcdge gcdfb
da ebgfda fcdeagb acgbfe gedba dbegc agdecf dae bafeg bfda | gdafec fegba edfbga aed
fbagec gdfba bcg gebcfd cbafg bcdfgea ebac cefag faedcg bc | gfbac baegcfd fabegc dgeacbf
dfbeag fabdg fdbe abdeg eb dcega gcefba cfdbag dgcfbae geb | cgbafd bdef dcage eb
abdcfe gba dagf cagbefd fdbea bfega ag dafbge dcbeag gfceb | afbcde ecgfb dfbega bdgeca
dg dge gdbc cfdae bcgae cbdage abgfde cfedagb cdgae eacgbf | eabgc bgeac bcdg cagbe
bfd dgaeb gcabde fd bfgce dgfa dbefg gadbfce dbafge fabcde | edfcba efbcg df bdf
gcbfd agbecd fedc edcbfg fdb eadfbg bcfag fd gedcb gbacdef | fgbac bdagfec gfbdaec aegbdc
cgbdfe ce acedg adcfeg bcfegad fcea ceg abdeg afbdcg fcgda | ecg aefdcg dacge ec
egbdfca efacb agcdbe cbaed bdafgc dfaecg debg bd bda agced | geadbc efbca gabfdc bd
edcfb bfgecd ecabfd eca abcd fgeab fedcag abfedgc ac bfeca | bgfae eca cdgfeb bfaec
cadef cebdga ebd bacdfe dagfec dbfa fcebg ecbgfad db fdecb | befcd acgdeb abdf dbfa
gbfecda bfd cdagb fbdacg fgdbec gbaf cbadf aefdc eadcgb bf | adcgb dfbca agbf dafcb
abedg acbgf fd gaefcb cagbdef cdaf dcbfeg bdagf dgcbfa bfd | gbadcef df fadgb gabcdf
fbgadc dbcfg dcega cgdfe cfedbg caefgb ef gef gfaebcd fedb | fcedg febd gbcdfa cdgfab
bg adgb fcaedbg cgfda fcbae bcg dfacge fgcdba decgfb bcagf | cgafb dbfcage bdgcfe dbga
ed afbdg acefb aecbfg cfdabeg gedfcb fcdabe ecda def ebdfa | gbafd gedfcb dfegcb dfgba
gcdfae efgdb abdfcg fde gdabf dbcegfa fedgab efab ef ebdcg | eafb gbfda gacedf cbdge
edagfc gfaecbd bgced cbegfd cb gefdc badgfc bdc efbc adegb | dgbec cegafd dcbgef dgecb
gedcab beg eg cafgb fbegc gdfe bdgfec gabcedf bdafce bcdfe | gcefb afcbed ge gdfe
fdbagc cdgefab edacf ceba ea cfbaed ecfdg abfegd adfbc eda | ea beadfc abcgdef ecdgf
fbc gfbacd fecda cbdfa dbgf dceabg gbcdfea efbgac cdabg bf | gbdf agbced gaedbc gfdb
aegcb bfgecd fbegad fcagdbe dfgce fcbd gdeacf fb bgf bgfce | bgafedc gcdaef dgfcbe eadgcf
def dbce agdfeb ed fdgbcea dgcfb aegfc dfgbac gecfd cdfgbe | cdfegb ed cdgfaeb ebdc
ecbfad afdb eagbfc caebgdf edfcb dgfec cgdbae bd bcafe bdc | bfacegd fbdcae dbc bgfdcea
dfgba eg cfbead gde bfedgc dceab cabfdge gdbae aecg aedgcb | egd adebg gde debcfa
cadfb egfb afgbc adbegc ecgadf ecagb fga ecfgab bgacfde fg | afcbg cgfba gf dacbge
cegbf dec efcdg facdge dfae dcbafge ed adgfc fdbagc cgaebd | dce gbcfe afcdgbe dcgabf
cfabe fa eabgfc cgaf fba gfbce dcfbge edbgcfa efbadg acebd | cfebga bfa fedcagb abfce
acdfb dbagf afcebgd beag afgedb gfdea gbd fgdcbe gb cdeagf | dafge gafed gfacde gb
gdfeac dfgce ebfadcg edagc dacf baegdc fd gdf egcfb dabgef | degfbac cfdeg daebgf cdeagb
fcgabe ebcd ecfdg dabcgf gfecabd cfd ebcfg dc bcfegd adefg | agedf cd bcefg dc
cbaeg bcfea fb feb gfaceb gdfbec dagbec gfab deacf bgcaedf | acbfge bf afgb efb
egdba cadgfbe efadbg cg begc bfgdca caegd abcegd dcg acdfe | fbegcad bceg gcd cdgebaf
agbcd dafcgb cfdg ceadb fdgeba eafbcg gfdab gbc bgdcafe cg | gfadcbe fbagd decba gc
gfbec adgc dge egdcfa abgfde abgdfce dg eacfdb fdaec gdfce | fecgd gd fgcbe acdef
fdbceg bfedc af fegcad cbdag daf efab dabcef fbeadgc cbfad | fcabd cbfad gcfdbe gadbc
ebgac fabdeg bedca cg aegdcfb geacbf ceg efgba facg fbedcg | gecdfb aebfg fagc ceg
eagb dcgeb ba abd cbeagd cdgafb fecbdga fgedcb dacfe dacbe | bdfeacg cadgbf bgedfc fcdae
dbac cfgae cbfgde ba bga gcfbad dcfebga gcdbf feagbd cgbaf | cgafb fagbdc dcfbg afgebd
adbgfe fgb egdafc cbafd dfegbc edgafbc egfcd cegb gfcdb gb | bg fdacge efcadg egdfba
agfbe cgaefdb gbdf edagb afg cdgafe gfedab fg egcdba fabec | fcbdega fag agf agf
cae edabfc cdfega ca cfba gadeb fdecb ecagfbd cbgdef acdeb | facdeb fgecad bfadce efcgbad
facb dbfec dceabf efgcd cb aecfbgd dgfbae eafdb ebdagc bcd | bfedc cdegab cbdfe adefb
fecbga badgc dga bfgadec dg geacb cgedba dfebag gcde fcabd | decg gda baceg gd
gecbd gcbdfea cbfg bg bge egbcdf dcbef beafdc cdeag bfgeda | agcde dceag gfabde beg
gefba gacfbe facdeg cg cgab gfc efbdcag cfgeb cefbd afegbd | gfc afbge dafegb aebcgf
egd aebfgd gefc ge gedbfca bdcfe dfcegb gecdb edbacf cdbag | dacbg edcfbg bcdfe ge
df ebdga gcdefa cfbd bgdfa afgcb dfeagbc bfacgd fgd facebg | gaebd gecbaf fdcb dfbag
fag cegfdab cadebg dabcgf abefg eafc ecafgb ebacg fbdge fa | ebfag dbcgfae gbecad fdbgac
gecbd gefa gfc fabdcg bfaecd ecgafbd fg befgc efabc gecbfa | gfae gcf egbdafc edgbc
bfgae fcebag fdbe fd fedag adgfbc fdbgea ecagd agcbfed fad | fgabe dfeb ebfd gefba
ecdgfb afge bdage ebcda eg abdgef fgadb gabcfd dge bcdagef | gdebfa eg agfbdec afeg
dbc acefd cegadbf fbcde afcb fdcaeg bc acdbge febdac debfg | ceafd caefd gfbaced dcb
fecgb fgacd gdcefba de gbafce febd gecfd edc fecdbg ecbgda | becdfg ed becgad gcdeba
agfdbe fbac bcd edacfb bgecfd cb cdeba cfgdeab acged edfab | cb dbc adbce bdfae
dgacef bdfa ecgbf ab fegba dgafe efdbgca abg acebdg afbdge | gefda ecgafd ecfbg begcad
gbfcea bgfa afdebc aegdcb af bgcdfea bgeac gecdf afc fgace | bfgecad fca afc abfg
cfe dgcfe fdagcb gebdc egfa gbcdefa dcebfa fe agdfc fgaedc | dfgac fe fce fcdbega
fecgab gcbdef cbaefgd dfgbe dgcfe eb bfe dbfga edbc acfegd | fbdeg fdgeca agefbc egcfd
aecd bac dfacbe cafdb ac gefcab gfcdbe fcbde gbdaf cbdegaf | gcdbefa fbgcae ecad fagecb
eagbf cagedf geafdbc fdgbce adefb aecfd adcb deb faecbd bd | ebd deabf fadcge cdagfe
gadefcb bfcga eadcgb egdbfc deag ecg edabc acedbf eg abgce | gdea bagce gce gce
agcfe bec gecab gbeda facb dbfgec fcegab gfacde gfdaceb cb | cb cefdgb cadefgb bc
fdgb df egabcf fegda cedga fegab efdbac def cgdefba gafedb | facdbe bafceg agedf fdebga
fdaecg dbcafg abfgec dc caefg cedg aecfd abdgfce eadbf fcd | cgefab gbfacd fbegac fabecg
dfecabg bcfeag gdafce dagbfc cdefb dca gafbc dbag da bcadf | dca bagfce cbfda cdagbf
dabfgec febadg gbcdae gfbe adebf ef cabdf edfgca ebgda eaf | gfacbed abgced egdfca egfb
cfdea dc fdagebc fegcbd agdc gcfade fcabe cfd efdgba gfead | bdfcge agdc dgefa cfd
gbfca febadcg bc bdegcf beca begaf gabedf cgfbae cgfad cbg | bcg dcaefgb dfgceb afebdg
cg cgbf bedcg fcagde adefbcg efdgcb ebacd cgd edbfg egdafb | cfgedb bgcf acegdf cfgb
bfad adcgbe faceg fagbdc df afdgc efcbdag dfbegc gfd badcg | gfd abgcd fgd abfd
bcadgf cgdfb adgcb gf gafc dcfeabg bdagce dgf dfbega cebdf | adcbfg gfca fdcbe gfac
daebf fcabgde bgdcef gab ga edbcga afcg ebfga aefbgc egbcf | ebcfg ebcgfa fcgebd agcf
gedab fg afgecb cfgd feg cfabed befdc fgdcbe gdceafb befgd | ecafbg ecfbd febdc gf
gcbadf ce gfcdb fec feabd gbecdf dbcfage febdc agcdfe egbc | bafed gcbe gefcbd egcb
cbdfg gbcafd feb gaecf gcbfe gfbdae be fcgabde bdgcef becd | abgedf gdfebc aedgfb fbe
edacgbf fbdae edgac bg gab bagdec dagfce fadbgc cebg bgdea | aedgb bg cebg adcge
bda gbfea gedcab gfbceda bgdfa bfcdg febcdg bagcfd cfad da | dbecag bgfdc gdbfa facd
ceabd dabfe acgde bc fbca cgbfde febgda dfecagb ebafdc bdc | cbdae dbfea fgdceb gbfedc
acg fadbgce cfgdeb dbgce efdca ag dbga cagbef egacd cdgbea | gdecabf gcbfea ecbdg gac
dfgacb ged egfdab efcgbda gcefbd debga ebadc ge aegf gfdab | cdfgab cdafgb bfcgda ge
gdbeca bcfde eafg cefbgad dgafcb ge degfb adefbg dgfba bge | bdfeg begdf ebfadg eabdfgc
cfbdgae gbaec bagfcd gfcba dcaeg bacfeg dbeacf bec efgb eb | ceb egcab cagfb dgcae
fdcagb gdaecb fcadg bcdgaef gd dfcea gbcaf aecgfb cgd dgbf | gfadc gfdb badgfc gbfca
bcafed defgcab fgcb cfbae cagde agebfc gbcae gbe gadefb gb | bg gfcaeb bg aedgc
bcfadeg gbfd eacfbd gdafe afebg bafegd geafcd gebca fb bfa | agdefc eafbdg fgead gedaf
fcgeabd dgeaf ebgfad gceafb geadc ac aec ebcdg cafd adgefc | gbfadec egcbd acfd dgabef
eac fbdgec ea eadb cbaeg agfdecb eafdgc dcgbe bcfga adcbeg | aec abde eac ea
cedb gcadbe ed edgfbac fbega abdge gacdb fdacgb dcefag aed | cdagb gbcafd gdefac gedafc
cae agfbec ae begcd feab fadgbc ecfadg ecabg cdgbefa cabfg | ecgba afcgb efba dgeafc
fecgabd badf efadg abedfg fea fdgceb fedgb aebfgc af gdcae | ebfgca fae fea af
bgedac gbfae dcbefg acbf fb gaedf cagedbf aebgc gebfca fgb | aedgf fdgea bgfae bfdgeac
bagcfe eadcb gb facegdb bgc fdcag efbcad beadgc bgadc ebgd | gbc fbcage becad gbfcae
cagde gbca dcgbea gc efcad dbgfea dfgecb caedbfg adgbe cdg | gc egdfbc bcga cg
efgcbd aebgcd dfe eadfb abged abdcefg bacfd ef bdfaeg faeg | fgae cgdaeb adefb afcbd
cgbfea gcbda gefdcb eadf febag bdf fd febgad fadbegc bgadf | gebcfd fgdbea dfb dbf
dg cdgfe gecfad dfbce bgefda fgd eafcg efcbag dgac bcdagfe | afdebg gfd aecgf gfcea
edfga cgefda gcdbe fbae ab egdabf cfgbda deabg bad adefcgb | ebadg agdeb fbae gbdae
gbdcfa gbade ebgac ecbfa adfgbec badecf bgc gcef fbgace gc | gc fcge gacefdb ebgca
acefgd ebgaf egfda egcd bgfaecd dgcfa ed abcefd efd abdgcf | def ebgaf fed befcda
fecag cag cfagbd agfcbde fabec eabg fdcge cgbfea fadebc ag | cfgbda dfgbeca efdcg dfgcaeb
bgecfda ecdag dgfcbe bdgac adbgf afgdbe bfac gdcabf cbd bc | bc acbgefd fagcdb fcba
ba efacg cfbgde cfdbg bacgf bgfdea abf bcad cfbeadg bgcfad | bcdgef fdgaeb ab cagfe
cbdaf bafdgc eacbd fd dcf fcabg bcdfeg bedgcfa dgfa agbecf | dfga bgfac df agdf
edcabf cadbf bgfdcea bgcfad bgcde dfg fg bdfgc cgadfe abfg | adfecg gfbcd acgdfeb cbgdaf
badgfc dg bagcde bceda dbcfea beafg debag adg fcbadeg edgc | gebda dcagbf dceba egfab
edcf dacfbg dbcefag fbd df bdegfc ebdagc bgfea begcd bfedg | dgebc cbgde dgfbac bdf
bdcfg acegfb acebfd fdcag egadcf da daf cgeaf edag bafcegd | gdcaf fgaec bafdec fdaecb
cagefd fde gdfba fcgaedb abefd ef dafbeg ebfg afcbgd ebdca | egdbfa bceda dfabg bdace
fcgb gcdae bg gfadeb cbfegd fcabed bdg gcdbe fdcbe adbefcg | dgb gfbdec befdc gfbc
fabde bgfde bgecda cedgb gf cabfdeg ebfdgc fgbeac fcdg gfb | fgbde efdgb edgbc afedb
ebacf cedfab fde eabfd fd baecgf bagde agdebfc dfcb egfadc | ebfdgac acdegf abdefc ebfad
gdcb cd cfgae cgbedf fbegd efgdc fadcbe gfeacdb dce dfagbe | gbcd cde gacfe gefdbc
geb afedgb bfegca bgade eg dgef gadbc eafdb afebdcg fcbead | cagbd defcba dbafec geafcb
fgbdc gbfade gba gefa dbafg cbadge bfgecda ga edbafc dfabe | afbdeg dgfba bgdfa dcfgb
agef badce ef febad cabfdg gdfab cbgeafd egfbdc defgba fbe | abefd geaf gafdbe ebcad
gd gad bfdg gecba fedabcg fcgeda aedfbc adebf agbdfe dgeab | ebcdaf agd gcfbdae egacb
cedbfa ba cgbfa abf dfegac cafeg gabe befgca ebdfcag cbfdg | fab aegcf faecbd fdcebga
daefg febdga aegfdbc efgdca eafb bge eb agbdec febgd gbdfc | gbcfd edbfg egb bacegd
fbdecg bdafec cfaeb gedac def dceaf abfd fd gfecba gfdaecb | ebfac bdfa gbcdef fd
fcbga cbdfeag bafgce fdacg dc fcd fcgbad fadge efcdgb cdab | gaefcb bafegcd acdb abcgf
ecgabd acgdf abge ae bcfead fgdaceb ead daegc bcdefg gcbed | egba gaecd cgadbe gdbce
aegfbc gf afebdc agebdfc ebcdf feg dcefg bdfg dcgea bgedcf | edbfcg fdgb bdgafce febgcd
dcg bcdefa dbfceg fdeacg acbeg bfeagcd cfdae dg dfag agdec | dfcgea dg egdca edagc
agcfeb fagbed fdbceg bag gebfd afgd agbfcde acbed ag badeg | cbdea fcedgb gfebac abcegf
adbegfc fgdace cadge afcg ebdfca ebgad eac bfgdce cgefd ca | acged fcedg ebagd dgacefb
gfeadb gfeab bcfa agebcfd aebgfc fecgbd efc fc gadec egcfa | fgbace fc debgcf afgceb
bacg ab cfgbd bfadge acfed fgdecb agedcbf fcabgd bfa dbafc | gfdcb cbga abcg afecbdg
ge beagc cfgabd bgaced bgcda fbadgec age ecdagf egbd fcbae | aeg gedbac cadfeg fbgcda
dgbafe abfdgec gdf fd agebcf gadec dfcgba befd edfga aebfg | abcgefd dagec dfg df
edfcga bcegd baeg cbgdae agdbc gce acgdebf eg gfadbc cefbd | dcbeg bgedc cedbg edcbg
adfbe dg cagef dfgb gdbeca aefdg gda edcbaf fdgeba gdecbfa | cdabef eafbd bafcegd dg
cd edcbfg dbage fcaebdg facd bgcfea afbedc afbec dbc adecb | adegb bcefag abegd cbgedf
gdcbf da ecgbfda adc adgb bagcfd dfbcea egfac dfbceg gdacf | gdba cfdbg adbfec fcaeg
bcg bc gdcbae dbca abfgde gdeba ebfacdg egcba faceg dgfbce | geadb badecg ecbfgd baecg
+28
View File
@@ -0,0 +1,28 @@
from math import prod
with open("input") as f:
data = [[int(x) for x in line] for line in f.read().strip().split('\n')]
data = [[9]*len(data[0])] + data + [[9]*len(data[0])]
data = [[9]+line+[9] for line in data]
print(sum(1+data[i][j] for i in range(1, len(data)-1) for j in range(1, len(data[0])-1) if all(data[i][j]<data[i+di][j+dj] for di, dj in [(1,0), (0, 1), (-1, 0), (0, -1)])))
low = [(i,j) for i in range(1, len(data)-1) for j in range(1, len(data[0])-1) if all(data[i][j]<data[i+di][j+dj] for di, dj in [(1,0), (0, 1), (-1, 0), (0, -1)])]
directions = [(1,0), (0, 1), (-1, 0), (0, -1)]
def basin_area(i, j):
s = 0
visited = set()
def find_basin(i, j):
nonlocal s
if (i, j) in visited or data[i][j]==9:
return
visited.add((i,j))
s += 1
for di, dj in directions:
find_basin(i+di, j+dj)
find_basin(i, j)
return s
print(prod(sorted([basin_area(*l) for l in low], reverse=True)[:3]))
+100
View File
@@ -0,0 +1,100 @@
9987532143456789996545678998976545699965434567899998795698764323456789543457899986533467894569896501
9876321012367899989434567987997956989896546789998998634569843214567898732326789765422589923456789413
8765432123478999878923459876789899878789987899987889545698755323678987651015697996201289312347994324
9876553266599998967894569985895699768677898998765678956799898745689998542123456789412378925456795435
7987654345678987656789698743434987654556789987654789897987987656789899653435667894323459434687896745
6598766566789886545678987652329876543345898976543456789876599887999789876545678965436568945799998767
5459887677899765434567998761012986532234567897856789899965410998998674987679789876547878957897659878
6668998889998774323478965432123499540167898929878995999854329109989543598989899987898989878989543989
7978989999987653212589896743334598751358969212989997898765498999878932429694998798989799989878932598
8989678998798743203456789654545679862349654101599998959876987886767891019543234679878678999967893457
9294569876569764212567898767957989983458943213459859345989876745456789998956745998764567898656989598
2123458965459876327678959879898994594567894324599743232399765432347997897897859876543458987549878989
2012567894346987434799543998789543987678965436987654101999876921259876786789967987656789898798765879
3488998965457898567898932198698932498789876945698543219899987810398765665689989998767896789997654567
4567899876567987678997899989587894979999989896987654598789998323997654344578999899878945699876543238
5678921988678998789986798975456789865678998789998765999678989439876543213567898789989434989999654123
8789992399789559999875987654345679764589897678999879876569876545987432103459987698996599879898763245
9899889965992346789663976543256789543456789567899989986432987699876543212349896577898989768799854345
2998769894321245696542987654368995432367893458789999994321298789997654323656789456999876645679865456
1987656789540787789531098765459996545698912345678929865410129891398865434567892349898765432459876567
0299545678921656897642129876799987656789101476789019865321234990239976545689921298769879821266997678
9987834567892345698743458988998798789893213567899198986492949989945987656789652397654998732345698799
8756423478943466789964567899543679899954324678998987597989898979896799768996543987642349643456899899
9543212367894578999987679910964567998765435699987895439876787656789899879898659876521298759567899998
8732101456896689789998799929878678999896846989876986589965982545678999989789798765434999898978998867
7653312345789795678999989894988789898987959878984987679854671234567898795679899876549899987899987757
8764453468998964569989878793299898787899998769213498798743210125698989654367999987698769876789986545
9875654567897653498876465689999987656967899658926599987655321238789478965456789798789659765678997756
7986785678999542987675334567898976543456998767899989999867545678892367896567896569998769874789349897
6097896799998943976543123589967896552347899978998778999878756789943456999678912478999879875697657998
5298987893987899987655437678956794321456789989876567889999897897654567898989323489989989986789867899
4349898932345678998786545889545989432345678998767455878999998998765698967999934569878798897894978932
5656789931234568999897656795439878943456789999654344568989879999876789456798795998765656798923989921
6787899890347679999998768976598767896567894987543123679878767899987892345997679899654345679212997890
7898998789498998989999879987987854589678965987651012598765456789998943459876598789541245695499896889
8969989688989987678989989499896743478989876798766323459854347878999656789985432678932359796989765678
9659876567878998545678992398765432367893989899875454598743234767898787899987654569543498989879834569
8798965456567987434567941299976543456932398999996765797643123456969898978998765678956697878965423498
9987654367459876323458932989988658567891987998987976899854234569654929467899898789997976567893210987
0199876212398765466567899878999867678999865467898987999976545678943212349953999899989895456965429876
1399854323469896568789999657967978989098764379989698989987656789659333678932399999876789578977998765
2989765459589987678892398743458989192129863238976569678998987899798944599953989998765678989989897654
9979876567690198989991987652347891093998754347895454567899998998987895989899879987654567899998789543
8765989678789389999989876541466789989899867656789363456789879997676789876798767898543478998767678932
7654695989895478989878998732345678978789978969896212345698867896545898765987654987654567897656569893
6543434597996569976768996543489789265679989899954343656987656789234987654394323498765678978543456789
5432125456789698765459889676578990123498998789765654578996545892134998995999212349876789765412367895
8742012347898798654348678987689321234987899678996767889987656943547899989898923556987899854303458954
7632123456799987663234579998789495349876787466789878999999767898756789878767894567898998963212367893
6545234767899876542127678929899989498765456365678989989879878999987899965456989878949987654325459921
7656346978932976543549789212989678999874343234569999876765989987899969875345678989234598765456567910
8967897989431097656656792109878569876543210145778999765434599876789656994234899892101469976567878921
9878998999549198767767893298766456987654321246789998856323767965696547987345998766412359899878989432
2989349478998999878898999349754357898975492997896987543212359876789439876567899654323498789999197545
1293296569987989989929998998921238569987989879965987654323567987892123987689998765434987676789098856
2394989678996577995439876587890123456798977768954398965454698998943239899799019879579896555678998767
3989978989765456889549765456789234567899866657895239798767989989894598769898923998998765444599899878
9876569899974345678998654345678945698921954346789123679899878679799987654967894997789974323486789989
8765456789985239789886765234569756789939893235694234567987664545678976543456789875698763212345694395
7654345678999398998765432125678969899898789126895645979876543234569876542367899764987654743656789234
6543234789898987987654321036789998998798678937896799899987754345679965431478987653498987654577892101
8752145898767656798765432123698987987657567898997898789998876789898765432789998542129498765788989212
9643276987656345799876543234567896798543458939789989679979987892999896545699984321012349877999878923
8754387896543235689998756345678935989432569023679875458965498921279987756789876434123899998989567894
9965498987684034678959767896989129876521678954589965347894329440567998768899987546238789349765456989
6798569998755126789549878987895436987833489765699987266789494321459439879999899677545690298765345678
5987678987643234899434989699976545698954599896989998345899989432398921999998798798776789349979236899
4598789299754345678949896545988656898765678999976899456999878949987890989865679899887899959898945678
5979890156965676789898765432199767899876899998765978987898767898765999876754567999999999898787896789
9867921239876989898789876545234978921987932987754567898987654679874789765532345689990198765676789897
7657894345989991997678989658365989210198999876543456929999743599765678974321234567989297654545678976
8546789956799910984569898767878996321459789997432347910998632989896789999210356779878987743634567895
3237897897899899873497679878989985432345679876521257899876549876987899878931767898765696532124568934
4348986789999789762398789989999876543959798765432456789987997654698978767899878997654597543035699323
5467965623987689943479899997897998759898999896545598999999876543789765458998989998965698654145789212
6569894219876567896567999876546789898767899987956679998978997954569654345987898769996798765345899901
7698789398767466789778989965437897998545789998967899987969999895678965239876789654987909878656999893
8997678987654345678989579876546986987656789899998998785459898789789654398985678943498912999767898789
9986578998743234569995455987657895498767896789879987654398767678999965987674567892359533459898997678
9875467895432101678994323498878954349878945678965698765987654578989899999543567891239644567929986567
9954345976543212349989212569999761256999234589654579896796543439878788998674578932398755678919873459
8765496989655458498978994569878972349754345678943989989987652129765677999895699899498766789998762688
9876789898966567987867989698768993598965676789769899878999421019654376899976989798999877890987653567
9987898787898679896955678969656789987896789899898789767989432198743265689999877567899988921998768778
9998987676789798765634569654345679896789896923987679659876543989432134567898765456789999439879989989
8939876545699987654323478967236598785678975439886568943987659876543245778969981345899876598765494597
7921987436789498765654567892103497654567896798765458952199767987655356889654930234589987679896323456
6899898526789219879765678954212985423456789999876567921019878998766867998969821345678998799999212345
5498765434569423989979799765679876538967899899989878932123989349878978987898765456789999989898909499
6309876565678934799998989878989989547898998789899989543234593234999989466799876578999899878787898987
5214997878989545679887678989891097656789897656778997664567989945987894345698987679565698765656897876
4323698989997656798776567898779198797898767545567998975979878899876743235567898996423987654345986765
5434569997899987999534345696568999898999656333456789989897563789765432123468999543212399983239765634
6545678986798998984321245689457899999989543212445693299765432678976321034567897432109999874129874323
7656899345987899876510157893346899989878954301234892129898541567895434128978996543998898765034965210
8767901239876567987823267892234998678967965412345691034987540458789545367899987659887789978239876391
9898992398765459865439878921019876563556799563456789145996532345678955456987699798765678989347997989
9979989987654346976545989765323985472345678974567897659876543456799766567898543987654567965456999878
9765678987543257987858999875439876321234569985678998789997655687899889678976542398765679876597899954
9876789997678349998967899986598765410123679876789219891298766799921998789987843459976789987698998765
+48
View File
@@ -0,0 +1,48 @@
with open("input") as f:
data = f.read().strip().split('\n')
scores = {
')': 3,
']': 57,
'}': 1197,
'>': 25137,
}
opens = {
')': '(',
']': '[',
'}': '{',
'>': '<',
}
closings = {v: k for k, v in opens.items()}
second_scores = {
')': 1,
']': 2,
'}': 3,
'>': 4,
}
s = 0
ss = []
for line in data:
parens = []
for c in line:
if c in scores:
if opens[c] != parens[-1]:
s += scores[c]
break
else:
parens.pop()
else:
parens.append(c)
else:
if parens:
x = 0
for p in reversed(parens):
x = x*5 + second_scores[closings[p]]
ss.append(x)
print(s)
print(sorted(ss)[len(ss)//2])
+94
View File
@@ -0,0 +1,94 @@
{[<([<[[(<[({<<><>><()[]>}<(()())(())>)<(([]())){<()()><{}<>)}>][(((()<>)[{}{}]){<[]<>>({}{})})]>)[(({([{}[]]
{{[[(<[[[<[<<{()()}(<>{})>[<<><>>[[]]]>[{{[]<>}[[]]}<<[]{}>[<>[]]>]]([[[{}<>]]<<()[]>{()<>}>]([<<
([<{[[{{((([(<[]<>>{[]<>})<([]){<>{}}>][([<>[]][[]{}])])[[{{()[]}<()[]>}<{(){}}>]]]<{(<[{}<
(({(<{(([<[({([]())(<>())}{([]{})[{}{}]})]{(({{}()}{<>()}](<[]<>>(()[])))({[[]{}]<[]<>>})}>[[[{<<>[]>(()
[([<([{({{[{[([]{})[{}[]]][[{}{})]}<([<>{}]<<>()>)>]}([<{[()<>]{()<>}}[[{}{}]<(){}>]><{{{}[]}[()<>]}[{{
<(([<{{<(<[(<{()()}>(({}()){()[]}))<[<[]()>[[]()]]<{[]()}<<>{}>>>](<[([]())]>(([()()][()<>])({()<>}<[]<>>))
[{({<(<[{({{{[()[]](<>[])}{([]{})<<>{}>}}}{{<<{}[]>(<>)><(<><>)([]())>}<{({}<>)(<><>)}{[{}{}
([(<{<[<{[({[<[]{}><<><>>]<({}[])({}<>)>}([{{}<>}<[]()>]<<<><>>>)){({<<><>>[[]{}]}(<()<>>{()}))<{<[
({{([(<{{{{{{([]{}){<>{}}}}{<<()>{{}{}}>[({}())(()<>)]}}[[[[{}{}](<><>)]{<()[]><[][]>}](([[]](()()))<[[]
(<<[<{{{({{<{{(){}}{<>()}}<({}{}){[][]}>>[{<[]{}>{<>()}}<{[]<>}[()<>]>]}}({([({}[])(<>{})][{<>}])[{[()<>]<{}
{[(<<((<[[<{<{<>()}[{}[]]>}{{((){})[()<>]}<{(){})[{}{}]>}>]({((<<>()>){[<>()]{{}()}}){{[()()][<><>]}
{(((([[(<[({({{}()}[<>[]])<(<><>)([]())>}{<[[]<>]><<()<>><()<>>>})<[[<[]{}><<>{}>]]>]<<{{[
[{(<[[(<(<[{<({}[])<{}{}>>(<[]<>>)}]<{(<[]()>[()()])}>>{({<{{}()}[<>()]>})<[[(<>())(<>{})]{{{}[]}}][({{}[]}
{[[<([{[(<<[<<()()>[[]]>[{()()}]](<[()]<()[]>><<{}()>{()()}>)>><[[([{}<>]{{}()})<{{}[]}<()[]>>]]})[([{{{<>()}
((({[(<<{(((<<{}()>><{<><>}>)))[[{<({}[])[{}[]]>}(<[<><>][()()]><[[][]]<{}[]>>)]]}((({<(<>())>[({}{
{<{{[(<<{(<{[({}<>)<{}[]>]([(){}](<>[]))}<(({}()){[][]}}[<()[]><{}()>]>>)}<<{(<[{}()]{<>{}}>[[[]()](()
{(<<({{([<[<[<{}<>>{[][]}]<[<><>][()[]]>>{(({}{})){<()><()()>}}]>(<({{()()}({}<>)}<([]<>){[]{}}>){([[]<>
<(<({{{([({{<<{}<>><()[]>>[{()<>}[<>{}]]}})({([{()[]}{(){}}]<(()<>)<{}<>>>)}<{{<{}<>>[[][]]}}<[{<>}[<>
{({{(<<([({{[(()<>)[[]<>]][(<>{})({}())]}})]{(<[<(<>()){<><>}><<{}()>[[]]>][{{<>()}{[]()}}{[()<>]{<>()}}]>)
([<({{{([[<<[[()[]][<><>]]<<<>[]><()()>>>(<{()<>}<()[]>><{<>()}<[]{}>>)>({(<()[]]<()()>)<[<>()][{}]>
{[{<((<[<<({<{[]{}}[()()>>({[][]}[[]()])})(([{()}{{}()}]<<{}()>{{}{}}>)<([<>()])(<{}<>><{}[]>)>)>{[{
{{([([{(<[[{[{()<>}({}())][[[]<>]<{}{}>]}]<<[({}[])(()<>)]({(){}}[()()])>{{(())<(){}>}}>]{[<{[[]()]{<>[]}}
<(<({<{<<<([<([]<>)([]<>)>]<{{{}{}}<<>()>}>)<<{[[]()](<>{})}(([]())<[]()>)><[{<>{}}[(){}]]>>>>>(<{<[[[{
(([({<{(<{[<({<><>}){{[][]}}>{<([]()){{}{}}>[([][])<{}{}>]}]}[((<{()<>}>)[{{()<>}{[][]}}])]
(<<<(({{{([[<{(){}}>{(()())(()[])}]{({{}[]}<[][]>]<{{}<>}{()}>}])<(({[[][]]{{}{}}}(([][])<(){}>)
{<{{[[({<<{{({{}()}({}{})><[()<>][<>{}]>}([<()[]>({}())][{()<>}[()]])}{<[{(){}}<[]{}>][[[]<>][[][]]]>([[<>]
{{{[(<([[[[{[[(){}}<{}>]<{<>[]}{{}{}}>}]<[[(<>())((){})]((<>()))]{(<[]{}>([][])){<[]<>>(()[])}}>]
(<{[([[<(<[<{[<>{}]}(<[]<>>{{}<>})>[{(())}]]>){<{(<(<>())<{}()>>]}({<<[]<>>[[]<>]>((()<>)[<><>])}
[<{[[(({([((({[]{}}[()()])))]>[((<<[<><>][[]()]>{[()<>][()()]}>({{<>[]}({}<>)})))]})){((<[<[<[<>()]>
<({[{{{<{[<[({[]{}}<[]>)(({}[])({}<>))]><{((()()))[[()<>]{<>[]}]}(<((){})<{}{}>><({}[])>)]][([<{
<(<<<<<[(<<[{{[][]}{{}{}}}{{[][]}<()>}](<([]{})[()[]]>[[{}{}]{<>()}])>([{[[]()]<<>[]>}[<<>{}>{<>
<(<[[<[[[<<(<(()[])<{}()>><(<>{})>)[([{}{}]([]{}))]><<<[<>[]]{<>[]}>{(()<>)({}[])}>>><[[[{<
([[{[({<({(([<(){}><[]<>>]<{()<>}({})>))([([{}<>][{}[]]){[<>[]]({}<>)}][[({}[]){[]()}]])})>[({{(<(()[]){<>
<[<{<[{(<<[[{{(){}}({}<>)}<(()[])>]<<<()()>(()<>)>({{}})>]({[(<>{})<{}()>]{<{}<>><<><>>}}<<{()<>}
{[{({[[(({{{{<()()>{[]{}}}{[<>[]]<()<>>}}(<<<>()><{}<>>>({()<>}[()<>])}}{<{[()[]]{(){}}}>[<<[]{}>>[((){})<(
{{(<[<(<(<{{(<[]()><()<>>)}{((<><>))[<<>{}>{()[]}]}}>{{<({{}{}}[()<>])[<(){}>(<>[])]><<(<>{}}[{}
[{{{[[[[{(<{<[<>[]](()[])]{{<>{}}}}{[(()()){[][]}]{([][])}}><<{<<>()>([])}[[[]{}]<{}{}>]>(([{}<>]<[]()>)
{[[(<([[[[((({<>{}}(<>())){<{}[]>})[([<>[]](<>[])}[({}[])([]())]])([<{{}()}(<>())><[[][]][<>()]>][([()()]<<>[
<[{[{({(<(((<<<>{}><[]()>][{{}()}{[][]}])[(((){})([][]))[[()<>][[]{}]]])[[(((){})[()])[[(){}]<{}
[{[[<[<{{(({([(){}]<()()>](([]<>)[()[]])}<<{[][]}([][])>>)<[[([]())<{}[]>]]>){[[[{{}()}[<>[]]]{<[]{}>
[[<([([[<<<{{[{}[]][<><>]}}{{{{}{}}}}>>>[([[(<<>[]>({}<>))<([]())<<><>>>]{{<<>[]>{<>()}}}][<{{[
({[<<<((<<<<<<[]{}>[()()]>{[()[]]{()<>}}>[((<>()){()()}){<[][]]<{}{}>}]>{{[[{}{}]<{}[]>]([[]<>])}((
({<<[[{{<{[[{<()><<>>}<<()[]>([][])>]]([[({}<>)[()[]]](([]{})<<>[]])]<[([]<>){[]}]>)}(((<<{}[
<(<(<(([([[[{{[]()}{<>()}}{<{}[]>[{}()]}]{{[{}{}]<()[]>}({<>()}<(){}>)}][[{<{}()><[][]>}](<[
[[<{<[<[<({<<{[]}<()<>>>({<><>}{[]<>})><([<>()]([][]))>}[({[{}{}]<{}[]>})({[<><>]})])>]([[{<({
<([{[[<<[({<<[{}()]({}[])>{<[][]>{()()}}>{<(<>[])([]{})>([{}[]}[<>])}}{{[<<>[]>{[]<>}][([][]){{}{}}]
[([({((<[{{{[<{}><<>()>]<<()[]>>}<[{{}{}}([][])]{{()<>}<(){}>}>}<{<[[][]]>({{}<>}{()[]})}>
[[[{([({{{<{[[[][]]{()()}]}{{<<>[]>[{}[]]}[[[]()]<<>>]}>({{(<>[])[{}[]]}({<>()}[{}[]])}{{(()<
{<{{{<[{[<{(<{[]{}}{[][]}>{{[]<>}}}}[{((()[])<()()>)[<<>[]><{}()>]}<[{<>{}}[()<>]]<[<>[]][<>{}]>>]>[<[
<[<{[[<{<[([{({}[])(()<>)}[[<>()]{()[]}]])][[<{[<>[]][<>[]]}<{<>{}}{<>{}}>>{<<()()><()<>>>{([]()
<[{{({<[<([[[([]{})({}())]]<[{{}}[()<>]]<{<>{}}{()}>>])<[<[<<>()>]{<{}{}>[[]<>]}><({[]()}<<><>>)[(()<>)(<>())
{<[[[<(<[<{<({<>{}}[<><>])([{}<>]<[][]>)><<[(){}](<>[])>[({}[])<<>[]}]>}{{{(<>())(<>{})}}<((<>())
<{(<<[{[{<{<<((){})[[]{}]><([]<>)<{}[]>>>{[[[][]]<()()>]}}{({{<>()}<<>()>}{<{}<>><()[]>})}>}<[<([<()()>{()()
{{([<{[[((<<{<<>()><<>[]>}<(()<>)>>><<[<[][]><{}<>>]>{<([]()){[]<>}>}>))]<{(((<[[]<>]([]<>)>[{{}()}<<
([{{({{<[[(((<[][]>{<>{}}){<()[]>{[]()}})(<({}<>)([]<>)>(([])[()<>])))(([([][]){()<>}]{{[]<>}{[](
[{{<{({[<{<{((<>())({}[]))<{<>()}({}[])>}(<[{}()]<{}<>>>({[][]}{()<>}))}{([({}[]){{}[]}]<([][])>)}}{<{({{}(
[{(([[[([<<(<([]()){<>}>(({}<>)(()())))[((<>{})){[()<>]<<>{}>}]>>][<{{[<()<>>{{}[]}]<<{}[]><{}[]>]}[
{<<<(<[<[{<[<({}[])>(([])<[]<>>)]<<<{}{}>({}())>{[<>{}}<[][]>}>>[{[<<>()><()()>]{[<>[]]<[]>}}[<<<>[]>{[]()
([(((<<(<[[<[<{}<>>(<><>)]>([<{}[]>{<>{}}]({<>{}}[()()]))]](<({<<>[]>({}[])}<[[]<>]{<>[]}>)(<{
([{({{{[(((<<{[]()}<{}<>>>((<><>){[]()>)>({<{}()><(){}>}<[<>()]>))){((([[][]]{<>{}})[([]<>){<>[]}]
<(({{{[(([<[{<(){}>([]<>)}(<[]><()<>>)]><<([()[]]([]()))>{[(()<>}<{}>]}>]){{[{(({}{})<(){}>){[[]]{[]
[<{(<({<{((<<<[]<>>([]())>(((){})[[]()])>{[[<>]<{}<>>]}){[<[<>[]]({}())]{{()[]}<()>}]})<([[([]())<<
[[<<[<{{[{({<[()<>]{<>[]}>{([][]){<><>}}}<[[{}()]][<<><>>{{}[]}]>)}{<{{({}<>)(()())}[{{}{}}[{}()]]
({<({[{[{(([<<()()>{<>[]}>[([]<>)<()<>>]]{<{<>()}[{}{}]>((<>{}){<>{}})})([<([][])[[]{}]>(<[]()>{<>
{[[((<{[[<<({<[]<>>[()<>]}{[()]{<>}})>[<{<<>()><()[]>}{{()[]}<()<>>}>(([{}[]]))]>[[{({<><>})}
{{(<[{{[{<[({(()){{}<>}}(<{}[]>[[]()]))]>}({(<((()[])((){}))<{<><>}[<>()]>>)}(<<[(())<{}<>>]{[[]]<{}
<{{([<<<<[([<[<><>][[]]><<(){}>[()()]>]<{(<><>)<<><>>}([{}{}])>)][[([<()()><<>()>])(({[]<>}([]{}]){<[]><[]
{(<<[[<{{((([<[]<>>[{}<>]][([][]){{}{}}>)(<<<><>><[]{}>>{{(){}}[<>{}]}))({<(())[<>()]><{<>{}}(<>[])>}(({
[[[([({([<<[[[<>{}]{<>{}}]<[<><>]{{}<>}>]>[({[()()]<<>()>}{[()()][{}()]}){({{}()}[(){}))}]>[(<{[()<>
[{{(<<<[{(((<<()<>>([])>({<>{}}<()[]>)))[{(([]){()<>})(({}[])<{}})}<{([]{})({}())}<(<>[])<<>[]>>>
{<<<<[{[{({{[<<>()><{}[]>]<[[]{}][{}{}]>}(<({}{})<()<>>>{{()<>}})}{[[{{}{}}[{}{}]]<[<><>](<>{})>]})(([{[<>()
<(<[<{(<{[{<{[[]{}]{{}[]}}>[{[[]<>][{}{}]}(([]())(<>))]}<{{[{}{}]([]{})}[({}())]}{<<<>()>>([(
<{{[{[<{[[<[{<[]{}><<>{}>}]{({()<>}(<><>)){[<>[]]}}>{([[<>{}]({}{})](({}{})<[]{}>))<{[{}<>
{{<<{<<<[{[[([[]()][()()])(({}()))][[({}[])<()()>]]]{<[<{}[]>{{}{}}]>}}[[[[([]())]([<>[]][[]{}]>]]
[[<<[({{{(<[(<()<>>[<>])]([(()<>){<>())]([<>[]][[]<>]))>{{[[[]()]([]())]{<[]{}>{()<>}}}[<([]<>)<()>>({<>{}}[<
([[([<{<[<((<(<>[])(<>[])>(<<><>><{}[]>)){<<{}<>>>({{}{}}<()[]>)}>[{{(<><>)(()<>)}[<<>[]>]}]>]<{{
{{{((<<{[[{<([[]{}][{}<>])>}<[((()())<()<>>)[[[]{}]{[][]}]]<<<[]{}>{{}[]}>(<<>()><(){}>)>>](<
{(([[{{<[[<{(({}<>)[<>[]])}<{({}{}){{}}}[[()[]](()())]>>]([<[{()[]})({<>}[<>{}])>{[{{}{}}{(){}}]{<{}{}>}}])
{([(<{<<({[<[{()()}<[]<>>]{<[]{}>}><[[<>][()<>]]>]{<{{[]{}}<(){}>}[({})]>{{<{}{}><()<>>}([{}
{{[[({{({[(([{{}()}[{}]]({{}<>}([][]))){({{}<>}[[]{}])<<()<>>>})]{(<[<{}{}>{<>()}](({}())((){
{<({{<<{{([{{{[]<>}{<>{}}}((<><>)<()<>>)}[<[{}<>][()[]]><[<>()][<><>]>]]{{[[()<>]<<>[]>]<(<><>)
<(<[(<<[[<<<[({}())<[][]>](({}<>)[{}<>])>>[<{{{}}<()<>>}<(()<>){{}{}}>>]>({{<[<><>](<><>)>[(<>{}
[((<{[{{(<{[({{}[]}((){}))([[][]]{<>[]})]<{<{}[]>[{}<>]}[<{}()><{}<>>]>]>)}}]}{{{(<[(<{{()()}}>{[<{}<>><<>[]>
{([<<{(<([[({{{}<>}<(){}>}<<()[]>{<>{}}>)((<[][]>[<><>])<<[][]>{<>()}>)]((<{<>[]}{[][]}>[[<>()]{<>[]}]]{{[
[<{(<{([{{(([<<>()>]{<(){}><()<>>}){(([]{}>)<(<><>)>})}({({[<>]{<>[]}}[[{}<>]])}[{<[()[]]<{}<>
{[(<(<{(<<[{[<[]()>(<>[])][{{}}[()[]]]}{{[[]{}]{()()}}<<<>>[[]()]>}]>{{<[<{}()>([]())]({(){}}(()<>))>([(<>(
{{([[([[[<(({<{}<>>[<>[]]}{([]<>)<<>{}>})<{{[]<>}{{}<>}}([()()]<<>[]>>>){{[[()<>]]<((){})<[]{}>>}{<<[]<>><()
<({([[[[[({[[{{}<>}({}<>)]({<>[]}[<>{}])][([<>[]](<>()))<([]())[{}{}]>]}(((({}[])[()[]])[{{}{}}(<>)])(<<<>
[({{<{[([(((<{[]{}}{<>()}><[{}<>>{<>[]}>)){([<{}{}><()[]>]<([]{})[{}{}]>){{[[]]<[]{}>}((()[])[(
(({<[<<{{[[<{(<>{})([]())}([[]{}]{{}()})><[<{}()><{}{}>]<<<>()>[[]()]>>]<[<<()[]><<>()>>[{{}<>}[<>]]]>]
((<[[<{{{[({<(()[])<()<>>>})]{<(([()()][[]]))({[[]()]{[]<>}}{[<>()]})><<(({}[])[{}{}])>>}}}[[[{{{{[]{}}({}[
([<[<{{{{[<<{{<>[]}([]<>)}><{{()[]}[<><>]}{<[]>[()<>]}>><{[{[][]}<()[]>]({[][]}(()<>))}<{(<>())(
{((<(([[<[(<[{()[]}([]())>>[<[<>()]<[]{}>>(<()<>><[]>)])<(<{()}>(([]<>){<>{}}))<[[[]<>]{[]()}
[(<[([([{{{<([[]<>]<<>>)[{<>[]}{{}<>}]}({(())[{}()]}[<{}<>>{<>()}])}([<[(){}]([][])><(()())
+64
View File
@@ -0,0 +1,64 @@
from collections import defaultdict
data = '''
5483143223
2745854711
5264556173
6141336146
6357385478
4167524645
2176841721
6882881134
4846848554
5283751526
'''.strip().split('\n')
with open("input") as f:
data = f.read().strip().split('\n')
data = [list(map(int, line)) for line in data]
N = len(data)*len(data[0])
d = defaultdict(lambda: -100000)
d.update({(i,j): x for i, row in enumerate(data) for j, x in enumerate(row)})
directions = {(x,y) for x in [-1,0,1] for y in [-1,0,1]}-{(0,0)}
s = 0
for _ in range(100):
for c, x in d.items():
d[c] = x+1
ready = set()
flashed = {c for c, x in d.items() if x>9 and c not in ready}
while flashed:
s += len(flashed)
ready = ready | flashed
for i, j in flashed:
for di, dj in directions:
d[(i+di, j+dj)] += 1
flashed = {c for c, x in d.items() if x>9 and c not in ready}
for c in ready:
d[c] = 0
print(s)
step = 0
ready = set()
flashed = {c for c, x in d.items() if x>9 and c not in ready}
while flashed:
ready = ready | flashed
for i, j in flashed:
for di, dj in directions:
d[(i+di, j+dj)] += 1
flashed = {c for c, x in d.items() if x>9 and c not in ready}
while len(ready)!=N:
for c in ready:
d[c] = 0
step += 1
for c, x in d.items():
d[c] = x+1
ready = set()
flashed = {c for c, x in d.items() if x>9 and c not in ready}
while flashed:
ready = ready | flashed
for i, j in flashed:
for di, dj in directions:
d[(i+di, j+dj)] += 1
flashed = {c for c, x in d.items() if x>9 and c not in ready}
print(step+100)
+10
View File
@@ -0,0 +1,10 @@
8826876714
3127787238
8182852861
4655371483
3864551365
1878253581
8317422437
1517254266
2621124761
3473331514
+57
View File
@@ -0,0 +1,57 @@
from timeit import timeit
data = """
fs-end
he-DX
fs-he
start-DX
pj-DX
end-zg
zg-sl
zg-pj
pj-he
RW-he
fs-DX
pj-RW
zg-RW
start-pj
he-WI
zg-he
pj-fs
start-RW
""".strip().split('\n')
with open("input") as f:
data = f.read().strip().split('\n')
d = {tuple(line.split('-')) for line in data}
small = {x for pair in d for x in pair if x.islower()} - {'start', 'end'}
def make_paths(d, valid_path):
def f(v, path):
if path.count('start')>1:
return
if not valid_path(path):
return
if v=='end':
yield path
return
for next_v in {x for x, y in d if y==v}|{y for x, y in d if x==v}:
yield from f(next_v, path+[next_v])
yield from f('start', ['start'])
valid_path = lambda x: all(x.count(v)<=1 for v in small)
print(sum(1 for p in make_paths(d, valid_path)))
def valid_path(path):
if any(path.count(v)>2 for v in small):
return False
if sum(1 for v in small if path.count(v)==2)>1:
return False
return True
print(timeit('print(sum(1 for p in make_paths(d, valid_path)))', globals=globals(), number=1))
+26
View File
@@ -0,0 +1,26 @@
start-YY
av-rz
rz-VH
fh-av
end-fh
sk-gp
ae-av
YY-gp
end-VH
CF-qz
qz-end
qz-VG
start-gp
VG-sk
rz-YY
VH-sk
rz-gp
VH-av
VH-fh
sk-rz
YY-sk
av-gp
rz-qz
VG-start
sk-fh
VG-av
+38
View File
@@ -0,0 +1,38 @@
with open("input") as f:
data, folds = f.read().strip().split('\n\n')
data = {tuple(map(int, line.split(','))) for line in data.split('\n')}
folds = [(d[0], d[1]) for x in folds.split('\n') if (y := x.split('=')) and (d := (y[0][-1], int(y[1])))]
def print_data(data):
for y in range(max(a[1] for a in data)+1):
for x in range(max(a[0] for a in data), -1, -1):
if (x, y) in data:
print('#', end='')
else:
print('.', end='')
print()
def make_fold(data, fold):
d, n = fold
if d=='x':
first_pred = lambda x: x[0]<n
second_pred = lambda x: x[0]>n
else:
first_pred = lambda x: x[1]<n
second_pred = lambda x: x[1]>n
first = set(filter(first_pred, data))
second = set(filter(second_pred, data))
if d=='y':
second = {(x, n-(y-n)) for x, y in second}
else:
second = {(x-n-1, y) for x, y in second}
first = {(-x+n-1, y) for x, y in first}
return first | second
for fold in folds[:1]:
data = make_fold(data, fold)
print(len(data))
for fold in folds[1:]:
data = make_fold(data, fold)
print_data(data)
+876
View File
@@ -0,0 +1,876 @@
159,344
771,626
1140,868
790,25
607,254
375,140
924,198
293,548
1068,798
1140,26
890,750
960,506
510,886
592,87
72,627
1131,110
1173,760
249,690
291,841
1019,501
465,312
1062,84
1206,696
594,414
1191,651
5,33
557,16
388,480
246,862
1082,446
582,822
556,222
266,739
304,506
137,121
301,519
596,343
654,479
497,715
309,250
966,520
1176,119
587,728
239,767
1109,539
433,826
587,480
1169,383
49,257
1260,297
1280,44
141,455
671,112
835,784
1268,215
1092,266
1268,7
428,87
206,551
25,519
1252,775
771,275
393,654
1206,198
1034,530
826,387
274,719
335,605
1173,691
59,304
967,232
377,749
651,158
691,119
335,737
45,156
1280,492
6,868
813,795
512,869
1285,375
649,257
199,186
1091,121
1295,176
95,250
335,829
274,175
816,357
42,7
321,459
380,719
93,637
771,619
475,784
318,179
810,491
279,700
261,215
1121,536
137,760
1292,631
219,569
743,879
248,810
403,444
278,595
465,569
103,763
899,707
498,698
1297,555
1250,739
2,637
395,463
734,574
619,36
83,259
1221,625
909,196
1014,477
1248,680
759,266
30,641
417,868
1183,691
783,87
1195,306
1215,868
97,379
619,53
443,268
1228,648
1014,507
1114,371
544,206
564,374
890,872
509,532
483,737
465,536
1071,749
1144,537
58,306
144,886
1308,698
733,624
587,838
301,534
1121,858
611,243
867,268
13,555
703,640
992,267
753,515
527,190
413,568
421,77
1203,121
1236,507
652,644
497,534
642,873
797,159
20,892
431,439
248,285
1128,31
1129,33
1083,26
852,371
659,102
803,155
279,194
796,455
191,432
771,140
1009,88
883,26
1155,381
1144,357
1294,117
211,44
182,863
552,803
639,827
980,705
1063,126
763,708
905,288
445,704
1066,638
527,87
509,301
425,318
345,642
720,520
967,616
1078,518
1009,375
104,887
714,159
960,58
840,25
1250,155
276,536
170,868
602,427
0,52
915,463
853,375
473,369
837,369
1113,843
1038,516
1165,77
90,520
254,851
263,194
17,637
935,754
594,155
242,833
853,395
525,570
662,698
436,266
236,598
950,257
810,641
567,127
703,642
1221,420
753,16
889,77
514,252
472,456
249,204
845,536
827,737
754,222
790,473
38,245
874,182
1155,513
698,7
355,238
80,382
1099,460
838,8
1256,712
1004,826
233,33
1250,403
574,730
602,19
238,28
1064,557
1049,240
596,159
775,467
639,379
764,628
60,491
145,481
835,54
791,120
718,456
423,235
552,539
575,707
704,595
681,131
557,515
1213,291
189,858
291,393
406,810
594,29
525,324
306,739
1176,473
189,708
1305,637
1017,71
1213,379
1225,18
209,190
1027,651
818,703
1307,736
701,604
447,19
1096,862
1297,746
1230,382
877,826
708,427
720,117
311,830
1225,288
736,606
1093,264
30,44
1245,414
1173,614
574,288
1079,340
1165,810
300,303
251,179
124,679
845,235
361,647
1207,579
589,567
262,184
840,2
980,481
1196,497
1044,155
877,75
206,103
783,203
465,179
833,756
386,887
189,355
268,646
279,340
393,688
719,472
157,99
375,340
833,260
1087,192
271,260
840,886
527,651
104,63
232,518
980,413
888,376
223,254
574,836
403,226
448,551
602,175
1077,861
1082,894
473,749
902,414
55,708
1156,253
703,192
144,415
413,158
1036,467
589,327
1006,518
960,836
810,627
761,628
874,628
291,501
95,698
1295,782
333,540
330,705
668,873
1230,730
1176,7
88,70
35,393
594,739
194,877
955,238
0,842
977,540
977,316
935,642
581,196
862,791
783,691
147,840
698,315
803,739
189,325
649,705
393,575
1243,474
64,744
345,250
184,869
1121,708
196,371
304,56
55,186
1099,588
20,378
1307,774
1019,138
1072,866
393,206
716,739
274,467
393,319
17,257
965,250
453,539
1206,831
1063,544
723,166
182,438
1246,441
242,798
157,715
1221,269
805,756
1150,357
189,312
253,196
853,499
427,84
590,520
1111,691
793,121
1251,142
1161,298
967,448
304,836
244,638
775,691
848,327
229,196
686,641
349,467
1121,312
405,158
1227,187
500,253
796,642
137,582
1304,868
893,26
730,387
581,308
1263,700
52,467
812,698
35,858
472,723
743,767
465,599
1048,710
238,866
473,77
674,527
1001,705
383,634
1305,379
1071,145
659,288
1042,159
1087,254
1252,588
411,208
790,775
241,400
917,43
1280,726
1001,250
393,240
930,719
965,189
223,192
248,84
1267,467
43,243
436,488
1069,781
1129,525
682,292
1248,214
1099,306
457,395
867,476
800,232
1063,824
863,19
296,417
831,229
219,345
648,698
512,25
62,680
223,455
5,481
477,756
1256,630
1141,171
582,520
965,392
114,621
319,737
334,499
813,534
1078,600
228,446
577,288
60,539
1176,869
309,196
607,640
182,31
1217,145
330,180
360,257
95,144
407,483
517,569
999,830
1058,163
639,247
6,26
1141,771
1079,428
177,472
231,728
920,662
134,775
309,257
321,588
671,827
801,413
243,187
691,53
547,186
845,569
510,415
247,96
771,306
392,486
1017,619
607,702
899,208
656,842
1017,395
1205,68
484,26
375,442
145,616
1116,185
463,120
1203,773
714,735
425,739
651,102
838,662
672,117
1131,211
1128,367
691,36
662,868
281,19
127,651
219,840
309,54
845,325
408,836
517,728
388,414
1208,539
82,246
1289,254
1168,8
1289,640
396,40
882,807
281,106
228,894
283,243
321,435
897,494
547,392
1170,455
1096,166
1061,606
1223,463
182,456
874,404
648,26
908,731
671,624
720,632
406,161
349,875
98,5
1049,127
803,211
218,266
1212,889
704,635
345,257
1103,875
658,257
475,278
552,701
120,775
761,714
458,371
519,774
169,771
892,519
510,8
343,662
803,683
1091,569
1238,627
182,415
462,567
1285,728
897,158
639,647
422,376
2,196
1064,32
758,193
80,512
746,374
231,166
393,215
1252,119
1293,705
885,155
206,791
681,203
93,145
247,544
443,418
145,593
1119,432
917,319
652,250
1031,194
672,777
62,255
674,695
234,144
15,176
758,803
624,253
328,724
654,842
243,208
1215,280
1118,869
1017,548
304,376
907,715
170,26
514,439
299,120
159,792
559,78
371,651
1191,467
986,637
656,415
639,278
999,446
965,698
268,567
333,683
530,537
793,728
865,704
803,879
1079,302
513,327
95,78
350,616
436,628
84,833
1001,840
343,232
134,7
1091,345
1243,207
1047,472
1068,385
417,26
969,474
989,528
95,868
1228,246
668,469
5,637
1186,679
345,644
1066,256
629,71
281,754
103,315
724,182
228,453
1310,191
1153,795
770,273
1031,700
933,593
539,82
798,25
783,634
261,127
488,357
723,838
1200,878
497,179
780,357
837,749
49,301
898,294
596,306
1011,120
241,333
589,414
982,170
309,189
574,830
1001,196
1044,865
1304,698
977,77
417,756
1150,89
577,382
736,730
254,374
649,481
413,669
90,879
933,861
42,215
330,238
887,235
611,427
642,21
893,138
1104,103
612,579
754,0
472,8
386,24
433,490
1196,397
567,15
1062,138
231,302
115,12
960,616
345,189
805,876
303,847
89,420
1006,58
378,373
393,43
3,736
875,345
264,456
800,886
1252,63
535,203
875,54
1006,388
965,54
89,625
248,609
15,616
60,851
268,159
826,26
525,499
119,467
1103,691
879,192
246,32
266,865
934,819
254,491
830,694
505,18
671,247
559,302
582,72
246,557
611,651
1039,634
736,830
333,354
189,536
418,879
433,819
967,446
1285,519
692,467
965,257
739,259
492,703
54,404
845,179
462,697
661,257
1215,144
738,190
274,427
1285,166
95,18
1255,186
247,126
36,467
75,603
641,250
1154,238
1121,569
1063,70
1099,754
333,316
1074,598
418,519
710,264
1280,850
658,644
45,315
335,65
375,252
1036,175
634,135
89,474
607,666
651,606
840,869
1191,691
590,632
709,121
874,490
1262,595
991,289
728,72
1096,614
83,187
739,824
892,851
1016,819
1051,32
455,203
965,642
247,350
624,402
721,567
937,875
fold along x=655
fold along y=447
fold along x=327
fold along y=223
fold along x=163
fold along y=111
fold along x=81
fold along y=55
fold along x=40
fold along y=27
fold along y=13
fold along y=6
+53
View File
@@ -0,0 +1,53 @@
import csv
from collections import Counter, defaultdict
template, rules = """
NNCB
CH -> B
HH -> N
CB -> H
NH -> C
HB -> C
HC -> B
HN -> C
NN -> C
BH -> H
NC -> B
NB -> B
BN -> B
BB -> N
BC -> B
CC -> N
CN -> C
""".strip().split('\n\n')
with open("input") as f:
template, rules = f.read().strip().split('\n\n')
rules = {k: v for k, v in (line.split(' -> ') for line in rules.split('\n'))}
def f(template):
for _ in range(5):
new_template = []
for a, b in zip(template, template[1:]):
if a+b in rules:
new_template.append(a+rules[a+b])
else:
new_template.append(a)
new_template.append(template[-1])
new_template = ''.join(new_template)
template = new_template
return template
c = Counter(f(f(template)))
print(max(c.values()) - min(c.values()))
class MyCounter(Counter):
def __mul__(self, n):
return MyCounter({k: v*n for k, v in self.items()})
d = MyCounter(zip(template, template[1:]))
for _ in range(8):
d = sum((MyCounter(zip(l:=f(''.join(x)), l[1:]))*v for x, v in d.items()), start=MyCounter())
res = defaultdict(int)
for (a, b), v in d.items():
res[b] += v
print((max(res.values()) - min(res.values())))
+102
View File
@@ -0,0 +1,102 @@
VPPHOPVVSFSVFOCOSBKF
CO -> B
CV -> N
HV -> H
ON -> O
FS -> F
NS -> S
VK -> C
BV -> F
SC -> N
NV -> V
NC -> F
NH -> B
BO -> K
FC -> H
NB -> H
HO -> F
SB -> N
KP -> V
OS -> C
OB -> P
SH -> N
BC -> H
CK -> H
SO -> N
SP -> P
CF -> P
KV -> F
CS -> V
FF -> P
VS -> V
CP -> S
PH -> V
OP -> K
KH -> B
FB -> S
CN -> H
KS -> P
FN -> O
PV -> O
VC -> S
HF -> N
OC -> O
PK -> V
KC -> C
HK -> C
PO -> N
OO -> S
VH -> N
CC -> K
BP -> K
HC -> K
FV -> K
KF -> V
VF -> C
HN -> S
VP -> B
HH -> O
FO -> O
PC -> N
KK -> C
PN -> P
NN -> C
FH -> N
VV -> O
OK -> V
CB -> N
SN -> H
VO -> H
BB -> C
PB -> F
NF -> P
KO -> S
PP -> K
NO -> O
SF -> N
KN -> S
PS -> O
VN -> V
SS -> N
BF -> O
HP -> H
HS -> N
BS -> S
VB -> F
PF -> K
SV -> V
BH -> P
FP -> O
CH -> P
OH -> K
OF -> F
HB -> V
FK -> V
BN -> V
SK -> F
OV -> C
NP -> S
NK -> S
BK -> C
KB -> F
View File