Day 12 13
This commit is contained in:
25
2021/12.input
Normal file
25
2021/12.input
Normal file
@@ -0,0 +1,25 @@
|
||||
qi-UD
|
||||
jt-br
|
||||
wb-TF
|
||||
VO-aa
|
||||
UD-aa
|
||||
br-end
|
||||
end-HA
|
||||
qi-br
|
||||
br-HA
|
||||
UD-start
|
||||
TF-qi
|
||||
br-hf
|
||||
VO-hf
|
||||
start-qi
|
||||
end-aa
|
||||
hf-HA
|
||||
hf-UD
|
||||
aa-hf
|
||||
TF-hf
|
||||
VO-start
|
||||
wb-aa
|
||||
UD-wb
|
||||
KX-wb
|
||||
qi-VO
|
||||
br-TF
|
||||
17
2021/12.py
Normal file
17
2021/12.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from collections import defaultdict
|
||||
|
||||
paths = defaultdict(list)
|
||||
for a,b in [line.split('-') for line in open("./2021/12.input").read().splitlines()]:
|
||||
paths[a].append(b)
|
||||
paths[b].append(a)
|
||||
|
||||
def dfs(cave, visited, one_off):
|
||||
if (cave == "end"): return 1
|
||||
if (cave.islower()): visited.add(cave)
|
||||
total = sum([dfs(i, visited, one_off) for i in paths[cave] if not i in visited])
|
||||
total += sum([dfs(i, visited, i) for i in paths[cave] if i in visited and i != 'start']) if one_off == ' ' else 0
|
||||
if (cave != one_off): visited.discard(cave)
|
||||
return total;
|
||||
|
||||
print ('Part 1:', dfs("start", set(), ''))
|
||||
print ('Part 2:', dfs("start", set(), ' '))
|
||||
836
2021/13.input
Normal file
836
2021/13.input
Normal file
@@ -0,0 +1,836 @@
|
||||
1257,728
|
||||
889,756
|
||||
601,166
|
||||
124,284
|
||||
120,806
|
||||
850,827
|
||||
488,572
|
||||
584,250
|
||||
109,877
|
||||
726,868
|
||||
522,515
|
||||
542,51
|
||||
520,830
|
||||
323,865
|
||||
132,379
|
||||
700,579
|
||||
45,584
|
||||
1265,472
|
||||
298,385
|
||||
656,746
|
||||
206,141
|
||||
803,171
|
||||
1102,355
|
||||
661,653
|
||||
937,794
|
||||
421,532
|
||||
284,305
|
||||
527,697
|
||||
825,229
|
||||
649,618
|
||||
577,707
|
||||
1151,421
|
||||
261,331
|
||||
667,294
|
||||
1268,200
|
||||
1173,542
|
||||
1011,166
|
||||
174,780
|
||||
325,675
|
||||
1129,586
|
||||
519,280
|
||||
202,60
|
||||
139,575
|
||||
619,869
|
||||
346,634
|
||||
191,616
|
||||
1108,364
|
||||
822,460
|
||||
700,217
|
||||
644,444
|
||||
323,477
|
||||
455,417
|
||||
803,422
|
||||
534,274
|
||||
485,450
|
||||
1022,99
|
||||
446,579
|
||||
77,735
|
||||
1009,128
|
||||
609,870
|
||||
350,539
|
||||
739,812
|
||||
1064,96
|
||||
467,101
|
||||
353,240
|
||||
281,100
|
||||
589,492
|
||||
139,240
|
||||
295,287
|
||||
1007,654
|
||||
540,481
|
||||
1039,729
|
||||
179,395
|
||||
212,887
|
||||
774,245
|
||||
900,114
|
||||
45,136
|
||||
433,339
|
||||
925,462
|
||||
913,446
|
||||
584,868
|
||||
1001,439
|
||||
261,219
|
||||
527,473
|
||||
912,756
|
||||
135,278
|
||||
338,396
|
||||
1192,691
|
||||
932,381
|
||||
438,821
|
||||
118,649
|
||||
134,46
|
||||
490,394
|
||||
1225,576
|
||||
77,159
|
||||
912,203
|
||||
233,712
|
||||
194,379
|
||||
1138,817
|
||||
709,728
|
||||
191,462
|
||||
505,218
|
||||
932,513
|
||||
365,243
|
||||
23,592
|
||||
1263,63
|
||||
177,65
|
||||
999,442
|
||||
808,61
|
||||
338,91
|
||||
954,45
|
||||
1151,473
|
||||
316,50
|
||||
1174,532
|
||||
320,285
|
||||
105,885
|
||||
214,291
|
||||
888,474
|
||||
850,666
|
||||
301,206
|
||||
179,353
|
||||
843,767
|
||||
1011,572
|
||||
202,364
|
||||
1266,117
|
||||
609,758
|
||||
545,465
|
||||
769,635
|
||||
135,166
|
||||
191,278
|
||||
805,829
|
||||
495,421
|
||||
1205,213
|
||||
574,497
|
||||
1202,700
|
||||
671,499
|
||||
808,844
|
||||
507,50
|
||||
375,383
|
||||
396,240
|
||||
206,722
|
||||
835,274
|
||||
984,635
|
||||
45,24
|
||||
534,536
|
||||
609,521
|
||||
1048,439
|
||||
534,866
|
||||
492,276
|
||||
262,439
|
||||
378,381
|
||||
25,667
|
||||
492,449
|
||||
408,798
|
||||
1173,352
|
||||
864,427
|
||||
925,95
|
||||
517,352
|
||||
1118,400
|
||||
686,155
|
||||
480,172
|
||||
1041,95
|
||||
269,95
|
||||
557,219
|
||||
1021,847
|
||||
736,497
|
||||
1141,668
|
||||
448,22
|
||||
967,442
|
||||
232,868
|
||||
149,666
|
||||
467,302
|
||||
303,206
|
||||
508,441
|
||||
624,291
|
||||
850,507
|
||||
1001,231
|
||||
791,749
|
||||
547,290
|
||||
833,289
|
||||
25,318
|
||||
908,635
|
||||
298,396
|
||||
480,562
|
||||
542,280
|
||||
656,807
|
||||
85,766
|
||||
103,733
|
||||
977,892
|
||||
487,291
|
||||
251,729
|
||||
415,532
|
||||
421,794
|
||||
1041,799
|
||||
885,689
|
||||
770,7
|
||||
783,381
|
||||
490,423
|
||||
425,339
|
||||
830,722
|
||||
980,12
|
||||
1163,498
|
||||
147,317
|
||||
557,3
|
||||
823,682
|
||||
44,217
|
||||
345,313
|
||||
351,542
|
||||
749,838
|
||||
256,205
|
||||
1200,373
|
||||
246,826
|
||||
166,465
|
||||
1007,78
|
||||
817,667
|
||||
147,93
|
||||
187,575
|
||||
428,148
|
||||
345,551
|
||||
754,607
|
||||
276,840
|
||||
465,333
|
||||
452,555
|
||||
291,108
|
||||
599,604
|
||||
1049,331
|
||||
1285,318
|
||||
194,47
|
||||
873,614
|
||||
30,784
|
||||
120,648
|
||||
902,96
|
||||
1280,122
|
||||
311,695
|
||||
507,422
|
||||
1230,397
|
||||
475,51
|
||||
1293,567
|
||||
393,443
|
||||
1241,672
|
||||
1123,712
|
||||
505,666
|
||||
530,787
|
||||
145,7
|
||||
589,675
|
||||
652,434
|
||||
422,852
|
||||
85,128
|
||||
858,555
|
||||
913,70
|
||||
743,444
|
||||
666,93
|
||||
301,354
|
||||
823,417
|
||||
1161,228
|
||||
721,23
|
||||
1116,676
|
||||
557,115
|
||||
923,721
|
||||
1001,455
|
||||
82,114
|
||||
956,810
|
||||
1078,868
|
||||
1039,156
|
||||
30,110
|
||||
345,567
|
||||
846,532
|
||||
353,766
|
||||
452,239
|
||||
298,585
|
||||
599,738
|
||||
467,630
|
||||
87,84
|
||||
585,894
|
||||
661,317
|
||||
885,835
|
||||
127,348
|
||||
390,596
|
||||
92,239
|
||||
907,837
|
||||
639,116
|
||||
282,565
|
||||
1121,109
|
||||
1108,60
|
||||
713,213
|
||||
847,54
|
||||
803,844
|
||||
905,483
|
||||
684,45
|
||||
1305,617
|
||||
301,766
|
||||
467,549
|
||||
1108,82
|
||||
803,498
|
||||
303,549
|
||||
1285,227
|
||||
452,754
|
||||
1282,45
|
||||
502,844
|
||||
477,289
|
||||
1280,784
|
||||
5,276
|
||||
530,554
|
||||
517,542
|
||||
803,50
|
||||
462,46
|
||||
857,355
|
||||
1108,107
|
||||
1144,572
|
||||
1240,579
|
||||
894,369
|
||||
554,536
|
||||
858,844
|
||||
1014,336
|
||||
780,610
|
||||
517,876
|
||||
507,723
|
||||
42,200
|
||||
649,317
|
||||
157,777
|
||||
855,477
|
||||
986,438
|
||||
1119,616
|
||||
425,689
|
||||
1178,67
|
||||
206,305
|
||||
624,30
|
||||
1282,849
|
||||
192,400
|
||||
1098,7
|
||||
776,872
|
||||
604,502
|
||||
463,14
|
||||
987,417
|
||||
1053,448
|
||||
1059,613
|
||||
710,455
|
||||
152,376
|
||||
1193,536
|
||||
296,336
|
||||
487,682
|
||||
1171,575
|
||||
415,586
|
||||
1178,172
|
||||
864,693
|
||||
482,817
|
||||
405,187
|
||||
422,42
|
||||
1208,690
|
||||
199,869
|
||||
70,579
|
||||
174,172
|
||||
795,144
|
||||
1183,546
|
||||
913,150
|
||||
485,229
|
||||
1136,722
|
||||
985,3
|
||||
1212,287
|
||||
900,477
|
||||
681,576
|
||||
1123,182
|
||||
559,53
|
||||
793,311
|
||||
1178,379
|
||||
324,886
|
||||
1012,585
|
||||
147,619
|
||||
1300,444
|
||||
925,799
|
||||
1205,885
|
||||
1255,837
|
||||
412,429
|
||||
343,645
|
||||
1223,84
|
||||
1247,616
|
||||
847,145
|
||||
1280,110
|
||||
995,705
|
||||
21,285
|
||||
626,289
|
||||
542,715
|
||||
559,725
|
||||
1153,674
|
||||
349,61
|
||||
862,722
|
||||
560,26
|
||||
682,362
|
||||
356,25
|
||||
1046,746
|
||||
162,108
|
||||
1,219
|
||||
69,222
|
||||
303,654
|
||||
527,197
|
||||
1278,889
|
||||
585,448
|
||||
428,134
|
||||
960,784
|
||||
372,329
|
||||
453,539
|
||||
304,259
|
||||
773,122
|
||||
373,100
|
||||
905,851
|
||||
913,824
|
||||
358,30
|
||||
1151,753
|
||||
258,206
|
||||
124,675
|
||||
421,756
|
||||
711,604
|
||||
1268,194
|
||||
644,801
|
||||
23,750
|
||||
363,701
|
||||
463,278
|
||||
298,274
|
||||
753,675
|
||||
545,429
|
||||
686,772
|
||||
567,444
|
||||
162,276
|
||||
864,425
|
||||
164,165
|
||||
475,577
|
||||
612,332
|
||||
852,567
|
||||
55,837
|
||||
945,243
|
||||
980,241
|
||||
505,513
|
||||
45,373
|
||||
599,57
|
||||
1076,375
|
||||
684,509
|
||||
965,581
|
||||
271,738
|
||||
1164,180
|
||||
637,343
|
||||
1009,766
|
||||
359,159
|
||||
965,327
|
||||
720,628
|
||||
242,64
|
||||
761,213
|
||||
1093,504
|
||||
301,227
|
||||
221,339
|
||||
446,693
|
||||
1241,296
|
||||
1021,651
|
||||
561,488
|
||||
522,507
|
||||
802,5
|
||||
666,801
|
||||
805,381
|
||||
1198,627
|
||||
251,57
|
||||
45,794
|
||||
673,537
|
||||
1300,562
|
||||
1225,318
|
||||
975,453
|
||||
709,166
|
||||
44,91
|
||||
164,729
|
||||
319,159
|
||||
191,14
|
||||
938,329
|
||||
1287,302
|
||||
713,208
|
||||
515,575
|
||||
802,441
|
||||
534,358
|
||||
628,362
|
||||
980,774
|
||||
1217,586
|
||||
70,203
|
||||
1183,197
|
||||
226,627
|
||||
147,422
|
||||
822,236
|
||||
262,455
|
||||
82,266
|
||||
232,490
|
||||
452,50
|
||||
964,634
|
||||
343,442
|
||||
1092,754
|
||||
537,358
|
||||
1305,170
|
||||
1101,270
|
||||
888,42
|
||||
329,3
|
||||
579,813
|
||||
843,661
|
||||
1029,198
|
||||
135,616
|
||||
284,589
|
||||
1282,421
|
||||
658,434
|
||||
686,30
|
||||
621,427
|
||||
1183,348
|
||||
187,712
|
||||
631,38
|
||||
44,75
|
||||
701,521
|
||||
288,99
|
||||
686,291
|
||||
57,54
|
||||
114,861
|
||||
129,203
|
||||
957,206
|
||||
1198,715
|
||||
206,172
|
||||
520,64
|
||||
684,737
|
||||
87,892
|
||||
112,614
|
||||
497,220
|
||||
98,63
|
||||
818,449
|
||||
835,577
|
||||
135,749
|
||||
1108,463
|
||||
216,373
|
||||
773,358
|
||||
467,661
|
||||
684,605
|
||||
345,259
|
||||
137,352
|
||||
882,298
|
||||
421,346
|
||||
994,803
|
||||
1136,114
|
||||
721,44
|
||||
120,620
|
||||
753,891
|
||||
1309,219
|
||||
1010,810
|
||||
536,747
|
||||
32,889
|
||||
808,786
|
||||
610,873
|
||||
281,806
|
||||
1007,712
|
||||
118,147
|
||||
365,691
|
||||
100,312
|
||||
972,91
|
||||
1265,198
|
||||
821,227
|
||||
492,445
|
||||
105,319
|
||||
335,453
|
||||
658,877
|
||||
1272,99
|
||||
1251,497
|
||||
467,793
|
||||
626,509
|
||||
330,882
|
||||
1046,596
|
||||
932,499
|
||||
1119,880
|
||||
774,649
|
||||
1240,651
|
||||
373,646
|
||||
226,596
|
||||
488,322
|
||||
485,444
|
||||
1012,396
|
||||
1193,134
|
||||
546,700
|
||||
1163,317
|
||||
1001,887
|
||||
595,621
|
||||
624,603
|
||||
1190,806
|
||||
315,705
|
||||
365,47
|
||||
1246,180
|
||||
26,532
|
||||
1181,203
|
||||
1305,276
|
||||
166,429
|
||||
405,491
|
||||
806,509
|
||||
187,319
|
||||
843,345
|
||||
954,493
|
||||
460,59
|
||||
373,794
|
||||
577,43
|
||||
1299,189
|
||||
791,525
|
||||
10,450
|
||||
233,346
|
||||
65,23
|
||||
488,17
|
||||
1061,851
|
||||
351,240
|
||||
952,478
|
||||
464,532
|
||||
569,100
|
||||
1165,635
|
||||
1007,549
|
||||
915,625
|
||||
505,829
|
||||
638,789
|
||||
610,21
|
||||
194,676
|
||||
769,259
|
||||
725,744
|
||||
463,432
|
||||
726,250
|
||||
1116,379
|
||||
298,620
|
||||
271,290
|
||||
999,731
|
||||
489,227
|
||||
709,768
|
||||
965,887
|
||||
1176,709
|
||||
1009,675
|
||||
15,697
|
||||
813,220
|
||||
542,504
|
||||
536,691
|
||||
1265,548
|
||||
1123,302
|
||||
291,210
|
||||
847,168
|
||||
45,346
|
||||
519,861
|
||||
1000,217
|
||||
776,866
|
||||
1280,772
|
||||
93,40
|
||||
610,131
|
||||
672,789
|
||||
885,205
|
||||
421,854
|
||||
1207,733
|
||||
1103,427
|
||||
1010,362
|
||||
726,644
|
||||
397,70
|
||||
45,821
|
||||
1000,371
|
||||
497,553
|
||||
309,455
|
||||
701,381
|
||||
1297,452
|
||||
1309,675
|
||||
28,473
|
||||
954,512
|
||||
440,614
|
||||
1217,838
|
||||
960,91
|
||||
751,841
|
||||
519,77
|
||||
1052,206
|
||||
1108,844
|
||||
378,499
|
||||
706,403
|
||||
1,675
|
||||
249,43
|
||||
888,420
|
||||
803,387
|
||||
169,668
|
||||
497,674
|
||||
190,362
|
||||
1212,215
|
||||
132,442
|
||||
681,802
|
||||
780,844
|
||||
520,512
|
||||
599,505
|
||||
610,469
|
||||
397,150
|
||||
609,373
|
||||
858,386
|
||||
127,513
|
||||
151,614
|
||||
1310,820
|
||||
1218,743
|
||||
795,319
|
||||
323,29
|
||||
375,63
|
||||
818,108
|
||||
202,787
|
||||
736,49
|
||||
741,100
|
||||
497,226
|
||||
1215,501
|
||||
863,427
|
||||
1136,509
|
||||
1288,336
|
||||
23,464
|
||||
1310,535
|
||||
626,605
|
||||
753,779
|
||||
1205,681
|
||||
437,614
|
||||
63,616
|
||||
64,61
|
||||
1136,562
|
||||
0,820
|
||||
520,400
|
||||
145,635
|
||||
314,161
|
||||
343,757
|
||||
647,453
|
||||
470,876
|
||||
70,644
|
||||
569,576
|
||||
1305,618
|
||||
1282,473
|
||||
858,787
|
||||
1300,93
|
||||
788,67
|
||||
868,861
|
||||
783,473
|
||||
85,576
|
||||
239,532
|
||||
412,877
|
||||
788,172
|
||||
224,204
|
||||
855,645
|
||||
965,215
|
||||
180,714
|
||||
412,465
|
||||
274,161
|
||||
840,18
|
||||
309,439
|
||||
1198,155
|
||||
1033,523
|
||||
975,441
|
||||
310,217
|
||||
679,182
|
||||
788,890
|
||||
208,355
|
||||
726,691
|
||||
378,513
|
||||
969,676
|
||||
408,96
|
||||
1193,760
|
||||
1071,532
|
||||
1010,532
|
||||
134,64
|
||||
217,728
|
||||
547,184
|
||||
146,180
|
||||
1268,562
|
||||
1173,856
|
||||
403,837
|
||||
991,159
|
||||
671,163
|
||||
30,122
|
||||
609,513
|
||||
1203,290
|
||||
1102,539
|
||||
610,579
|
||||
557,779
|
||||
442,861
|
||||
291,701
|
||||
192,848
|
||||
710,439
|
||||
157,117
|
||||
107,604
|
||||
1059,690
|
||||
246,49
|
||||
1116,182
|
||||
600,7
|
||||
546,476
|
||||
865,718
|
||||
447,427
|
||||
448,589
|
||||
1289,285
|
||||
1240,203
|
||||
673,343
|
||||
146,714
|
||||
515,144
|
||||
1039,290
|
||||
136,362
|
||||
1190,620
|
||||
758,690
|
||||
609,808
|
||||
0,535
|
||||
16,789
|
||||
976,161
|
||||
793,542
|
||||
1175,278
|
||||
848,633
|
||||
754,887
|
||||
1299,600
|
||||
840,876
|
||||
201,91
|
||||
763,184
|
||||
951,159
|
||||
547,738
|
||||
199,477
|
||||
1108,787
|
||||
1131,353
|
||||
813,329
|
||||
899,600
|
||||
1001,215
|
||||
629,354
|
||||
679,38
|
||||
768,51
|
||||
888,852
|
||||
174,509
|
||||
314,285
|
||||
612,700
|
||||
264,746
|
||||
519,525
|
||||
537,122
|
||||
1175,166
|
||||
1146,332
|
||||
80,845
|
||||
1061,491
|
||||
|
||||
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
|
||||
72
2021/13.py
Normal file
72
2021/13.py
Normal file
@@ -0,0 +1,72 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass(frozen=True, eq=True)
|
||||
class Point:
|
||||
x: int
|
||||
y: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class Fold:
|
||||
axis: str
|
||||
val: int
|
||||
|
||||
|
||||
def fold_grid(points: list[Point], fold: Fold) -> list[Point]:
|
||||
"""Apply fold transformation to points on the grid"""
|
||||
points = points.copy()
|
||||
for i, point in enumerate(points):
|
||||
if fold.axis == "x" and point.x > fold.val:
|
||||
points[i] = Point(x=2 * fold.val - point.x, y=point.y)
|
||||
elif fold.axis == "y" and point.y > fold.val:
|
||||
points[i] = Point(x=point.x, y=2 * fold.val - point.y)
|
||||
return points
|
||||
|
||||
|
||||
def find_max_xy(points: list[Point]) -> tuple[int, int]:
|
||||
"""Find the maximum values for x and y on the current grid"""
|
||||
return max(point.x for point in points), max(point.y for point in points)
|
||||
|
||||
|
||||
def print_grid(points: list[Point]) -> None:
|
||||
"""Print the current state of the grid"""
|
||||
# get boundary coordinates for current grid
|
||||
max_x, max_y = find_max_xy(points)
|
||||
print(
|
||||
"\n".join(
|
||||
"".join("#" if Point(x, y) in points else "." for x in range(max_x + 1))
|
||||
for y in range(max_y + 1)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def part_1(points: list[Point], fold: Fold) -> int:
|
||||
"""calc number of visible dots after first fold"""
|
||||
points = fold_grid(points, fold)
|
||||
return len(set(points))
|
||||
|
||||
|
||||
def part_2(points: list[Point], folds: list[Fold]) -> None:
|
||||
"""print the final code"""
|
||||
for fold in folds:
|
||||
points = fold_grid(points, fold)
|
||||
print_grid(points)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
with open("./2021/13.input", "r") as input:
|
||||
points, folds = input.read().split("\n\n")
|
||||
points = [
|
||||
Point(*tuple(map(int, point.split(",")))) for point in points.splitlines()
|
||||
]
|
||||
folds = [
|
||||
Fold(*(axis[-1], int(val)))
|
||||
for fold in folds.splitlines()
|
||||
for axis, val in [fold.split("=")]
|
||||
]
|
||||
|
||||
part_1_ans = part_1(points, folds[0])
|
||||
print(part_1_ans)
|
||||
|
||||
part_2(points, folds)
|
||||
21
2021/13.test
Normal file
21
2021/13.test
Normal file
@@ -0,0 +1,21 @@
|
||||
6,10
|
||||
0,14
|
||||
9,10
|
||||
0,3
|
||||
10,4
|
||||
4,11
|
||||
6,0
|
||||
6,12
|
||||
4,1
|
||||
0,13
|
||||
10,12
|
||||
3,4
|
||||
3,0
|
||||
8,4
|
||||
1,10
|
||||
2,14
|
||||
8,10
|
||||
9,0
|
||||
|
||||
fold along y=7
|
||||
fold along x=5
|
||||
Reference in New Issue
Block a user